From 7e7d8e68b4bada93af8a17c555be3f4c719b824a Mon Sep 17 00:00:00 2001 From: Matt Creaser Date: Thu, 5 Feb 2026 14:54:01 -0400 Subject: [PATCH 01/37] feat(foundation): Add foundation modules to feature branch (#3193) --- .../KotlinMultiplatformConventionPlugin.kt | 5 + build.gradle.kts | 4 + foundation-bridge/.gitignore | 1 + foundation-bridge/build.gradle.kts | 21 ++++ .../src/androidMain/AndroidManifest.xml | 2 + .../credentials/SmithyCredentials.kt | 47 +++++++++ .../credentials/SmithyCredentialsTest.kt | 96 +++++++++++++++++++ foundation/.gitignore | 1 + foundation/api/foundation.api | 55 +++++++++++ foundation/build.gradle.kts | 25 +++++ foundation/gradle.properties | 4 + .../src/androidMain/AndroidManifest.xml | 2 + .../foundation/credentials/AwsCredentials.kt | 58 +++++++++++ .../credentials/AwsCredentialsProvider.kt | 26 +++++ .../foundation/exceptions/AmplifyException.kt | 31 ++++++ .../amplifyframework/foundation/result/Get.kt | 39 ++++++++ .../amplifyframework/foundation/result/Map.kt | 54 +++++++++++ .../foundation/result/Result.kt | 31 ++++++ .../amplifyframework/foundation/result/Run.kt | 32 +++++++ .../foundation/result/ResultGetTest.kt | 50 ++++++++++ .../foundation/result/ResultMapTest.kt | 78 +++++++++++++++ .../foundation/result/ResultRunTest.kt | 42 ++++++++ gradle/libs.versions.toml | 5 +- settings.gradle.kts | 2 + testutils/build.gradle.kts | 2 + .../foundation/results/ResultAssertions.kt | 68 +++++++++++++ 26 files changed, 780 insertions(+), 1 deletion(-) create mode 100644 foundation-bridge/.gitignore create mode 100644 foundation-bridge/build.gradle.kts create mode 100644 foundation-bridge/src/androidMain/AndroidManifest.xml create mode 100644 foundation-bridge/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentials.kt create mode 100644 foundation-bridge/src/commonTest/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentialsTest.kt create mode 100644 foundation/.gitignore create mode 100644 foundation/api/foundation.api create mode 100644 foundation/build.gradle.kts create mode 100644 foundation/gradle.properties create mode 100644 foundation/src/androidMain/AndroidManifest.xml create mode 100644 foundation/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/AwsCredentials.kt create mode 100644 foundation/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/AwsCredentialsProvider.kt create mode 100644 foundation/src/commonMain/kotlin/com/amplifyframework/foundation/exceptions/AmplifyException.kt create mode 100644 foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Get.kt create mode 100644 foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Map.kt create mode 100644 foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Result.kt create mode 100644 foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Run.kt create mode 100644 foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultGetTest.kt create mode 100644 foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultMapTest.kt create mode 100644 foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultRunTest.kt create mode 100644 testutils/src/main/java/com/amplifyframework/testutils/foundation/results/ResultAssertions.kt diff --git a/build-logic/plugins/src/main/kotlin/KotlinMultiplatformConventionPlugin.kt b/build-logic/plugins/src/main/kotlin/KotlinMultiplatformConventionPlugin.kt index fc0ad07fae..be4b96ebbc 100644 --- a/build-logic/plugins/src/main/kotlin/KotlinMultiplatformConventionPlugin.kt +++ b/build-logic/plugins/src/main/kotlin/KotlinMultiplatformConventionPlugin.kt @@ -77,6 +77,11 @@ class KotlinMultiplatformConventionPlugin : Plugin { } } } + + compilerOptions { + freeCompilerArgs.addAll(amplifyInternalMarkers.map { "-opt-in=$it" }) + freeCompilerArgs.add("-Xconsistent-data-class-copy-visibility") + } } } } diff --git a/build.gradle.kts b/build.gradle.kts index 20b552b516..640b7f551b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -44,6 +44,10 @@ plugins { alias(libs.plugins.amplify.kover) apply false alias(libs.plugins.amplify.ktlint) apply false alias(libs.plugins.amplify.licenses) apply false + + alias(libs.plugins.kotlin.multiplatform) apply false + alias(libs.plugins.android.kotlin.multiplatform.library) apply false + alias(libs.plugins.android.lint) apply false } tasks.register("clean").configure { diff --git a/foundation-bridge/.gitignore b/foundation-bridge/.gitignore new file mode 100644 index 0000000000..42afabfd2a --- /dev/null +++ b/foundation-bridge/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/foundation-bridge/build.gradle.kts b/foundation-bridge/build.gradle.kts new file mode 100644 index 0000000000..1d3b323d49 --- /dev/null +++ b/foundation-bridge/build.gradle.kts @@ -0,0 +1,21 @@ +plugins { + alias(libs.plugins.amplify.kmp) +} + +kotlin { + sourceSets { + commonMain { + dependencies { + api(project(":foundation")) + api(libs.aws.credentials) + } + } + + commonTest { + dependencies { + implementation(libs.test.kotest.assertions) + implementation(libs.test.kotlin.coroutines) + } + } + } +} diff --git a/foundation-bridge/src/androidMain/AndroidManifest.xml b/foundation-bridge/src/androidMain/AndroidManifest.xml new file mode 100644 index 0000000000..568741e54f --- /dev/null +++ b/foundation-bridge/src/androidMain/AndroidManifest.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/foundation-bridge/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentials.kt b/foundation-bridge/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentials.kt new file mode 100644 index 0000000000..4760f7f67c --- /dev/null +++ b/foundation-bridge/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentials.kt @@ -0,0 +1,47 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.credentials + +import aws.smithy.kotlin.runtime.auth.awscredentials.Credentials +import aws.smithy.kotlin.runtime.auth.awscredentials.CredentialsProvider +import aws.smithy.kotlin.runtime.collections.Attributes +import aws.smithy.kotlin.runtime.time.Instant as SmithyInstant +import com.amplifyframework.annotations.InternalAmplifyApi +import kotlin.time.ExperimentalTime +import kotlin.time.Instant + +@InternalAmplifyApi +@OptIn(ExperimentalTime::class) +fun AwsCredentials.toSmithyCredentials(): Credentials = when (this) { + is AwsCredentials.Static -> Credentials( + accessKeyId = this.accessKeyId, + secretAccessKey = this.secretAccessKey + ) + is AwsCredentials.Temporary -> Credentials( + accessKeyId = this.accessKeyId, + secretAccessKey = this.secretAccessKey, + sessionToken = this.sessionToken, + expiration = this.expiration.toSmithyInstant() + ) +} + +@InternalAmplifyApi +fun AwsCredentialsProvider<*>.toSmithyProvider() = object : CredentialsProvider { + override suspend fun resolve(attributes: Attributes) = this@toSmithyProvider.resolve().toSmithyCredentials() +} + +@OptIn(ExperimentalTime::class) +private fun Instant.toSmithyInstant() = SmithyInstant.fromEpochSeconds(epochSeconds) diff --git a/foundation-bridge/src/commonTest/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentialsTest.kt b/foundation-bridge/src/commonTest/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentialsTest.kt new file mode 100644 index 0000000000..d2d67129b8 --- /dev/null +++ b/foundation-bridge/src/commonTest/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentialsTest.kt @@ -0,0 +1,96 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.credentials + +import aws.smithy.kotlin.runtime.auth.awscredentials.Credentials +import aws.smithy.kotlin.runtime.collections.emptyAttributes +import aws.smithy.kotlin.runtime.time.Instant as SmithyInstant +import io.kotest.matchers.nulls.shouldBeNull +import io.kotest.matchers.shouldBe +import kotlin.time.ExperimentalTime +import kotlin.time.Instant +import kotlinx.coroutines.test.runTest +import org.junit.Test + +@OptIn(ExperimentalTime::class) +class SmithyCredentialsTest { + private val expiration = Instant.fromEpochSeconds(1770130997) + + @Test + fun `maps static credentials`() { + val awsCredentials = AwsCredentials.Static( + accessKeyId = "access", + secretAccessKey = "secret" + ) + + val mapped: Credentials = awsCredentials.toSmithyCredentials() + + mapped.accessKeyId shouldBe "access" + mapped.secretAccessKey shouldBe "secret" + mapped.sessionToken.shouldBeNull() + mapped.expiration.shouldBeNull() + } + + @Test + fun `maps temporary credentials`() { + val awsCredentials = AwsCredentials.Temporary( + accessKeyId = "access", + secretAccessKey = "secret", + sessionToken = "session", + expiration = expiration + ) + + val mapped: Credentials = awsCredentials.toSmithyCredentials() + + mapped.accessKeyId shouldBe "access" + mapped.secretAccessKey shouldBe "secret" + mapped.sessionToken shouldBe "session" + mapped.expiration shouldBe SmithyInstant.fromEpochSeconds(expiration.epochSeconds) + } + + @Test + fun `provider maps static credentials`() = runTest { + val staticProvider = AwsCredentialsProvider { + AwsCredentials.Static(accessKeyId = "access", secretAccessKey = "secret") + } + val mappedProvider = staticProvider.toSmithyProvider() + val credentials: Credentials = mappedProvider.resolve(emptyAttributes()) + + credentials.accessKeyId shouldBe "access" + credentials.secretAccessKey shouldBe "secret" + credentials.sessionToken.shouldBeNull() + credentials.expiration.shouldBeNull() + } + + @Test + fun `provider maps temporary credentials`() = runTest { + val temporaryProvider = AwsCredentialsProvider { + AwsCredentials.Temporary( + accessKeyId = "access", + secretAccessKey = "secret", + sessionToken = "session", + expiration = expiration + ) + } + val mappedProvider = temporaryProvider.toSmithyProvider() + val credentials: Credentials = mappedProvider.resolve(emptyAttributes()) + + credentials.accessKeyId shouldBe "access" + credentials.secretAccessKey shouldBe "secret" + credentials.sessionToken shouldBe "session" + credentials.expiration shouldBe SmithyInstant.fromEpochSeconds(expiration.epochSeconds) + } +} diff --git a/foundation/.gitignore b/foundation/.gitignore new file mode 100644 index 0000000000..42afabfd2a --- /dev/null +++ b/foundation/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/foundation/api/foundation.api b/foundation/api/foundation.api new file mode 100644 index 0000000000..ae73d5b322 --- /dev/null +++ b/foundation/api/foundation.api @@ -0,0 +1,55 @@ +public abstract interface class com/amplifyframework/foundation/credentials/AwsCredentials { + public abstract fun getAccessKeyId ()Ljava/lang/String; + public abstract fun getSecretAccessKey ()Ljava/lang/String; +} + +public final class com/amplifyframework/foundation/credentials/AwsCredentials$Static : com/amplifyframework/foundation/credentials/AwsCredentials { + public fun (Ljava/lang/String;Ljava/lang/String;)V + public fun getAccessKeyId ()Ljava/lang/String; + public fun getSecretAccessKey ()Ljava/lang/String; +} + +public final class com/amplifyframework/foundation/credentials/AwsCredentials$Temporary : com/amplifyframework/foundation/credentials/AwsCredentials { + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/time/Instant;)V + public fun getAccessKeyId ()Ljava/lang/String; + public final fun getExpiration ()Lkotlin/time/Instant; + public fun getSecretAccessKey ()Ljava/lang/String; + public final fun getSessionToken ()Ljava/lang/String; +} + +public abstract interface class com/amplifyframework/foundation/credentials/AwsCredentialsProvider { + public abstract fun resolve (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +} + +public abstract class com/amplifyframework/foundation/exceptions/AmplifyException : java/lang/Exception { + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun getRecoverySuggestion ()Ljava/lang/String; + public fun toString ()Ljava/lang/String; +} + +public abstract interface class com/amplifyframework/foundation/result/Result { +} + +public final class com/amplifyframework/foundation/result/Result$Failure : com/amplifyframework/foundation/result/Result { + public fun (Ljava/lang/Object;)V + public final fun component1 ()Ljava/lang/Object; + public final fun copy (Ljava/lang/Object;)Lcom/amplifyframework/foundation/result/Result$Failure; + public static synthetic fun copy$default (Lcom/amplifyframework/foundation/result/Result$Failure;Ljava/lang/Object;ILjava/lang/Object;)Lcom/amplifyframework/foundation/result/Result$Failure; + public fun equals (Ljava/lang/Object;)Z + public final fun getError ()Ljava/lang/Object; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class com/amplifyframework/foundation/result/Result$Success : com/amplifyframework/foundation/result/Result { + public fun (Ljava/lang/Object;)V + public final fun component1 ()Ljava/lang/Object; + public final fun copy (Ljava/lang/Object;)Lcom/amplifyframework/foundation/result/Result$Success; + public static synthetic fun copy$default (Lcom/amplifyframework/foundation/result/Result$Success;Ljava/lang/Object;ILjava/lang/Object;)Lcom/amplifyframework/foundation/result/Result$Success; + public fun equals (Ljava/lang/Object;)Z + public final fun getData ()Ljava/lang/Object; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + diff --git a/foundation/build.gradle.kts b/foundation/build.gradle.kts new file mode 100644 index 0000000000..c65544fa0c --- /dev/null +++ b/foundation/build.gradle.kts @@ -0,0 +1,25 @@ +plugins { + alias(libs.plugins.amplify.kmp) + alias(libs.plugins.amplify.publishing) +} + +kotlin { + sourceSets { + commonMain { + dependencies { + api(project(":annotations")) + } + } + + commonTest { + dependencies { + implementation(libs.test.kotest.assertions) + implementation(project(":testutils")) + } + } + } + + compilerOptions { + optIn.add("kotlin.contracts.ExperimentalContracts") + } +} diff --git a/foundation/gradle.properties b/foundation/gradle.properties new file mode 100644 index 0000000000..736a0e023b --- /dev/null +++ b/foundation/gradle.properties @@ -0,0 +1,4 @@ +POM_ARTIFACT_ID=foundation +POM_NAME=Amplify Framework for Android - Foundation +POM_DESCRIPTION=Amplify Framework for Android - Foundational library +POM_PACKAGING=aar diff --git a/foundation/src/androidMain/AndroidManifest.xml b/foundation/src/androidMain/AndroidManifest.xml new file mode 100644 index 0000000000..568741e54f --- /dev/null +++ b/foundation/src/androidMain/AndroidManifest.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/AwsCredentials.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/AwsCredentials.kt new file mode 100644 index 0000000000..6b8f761f35 --- /dev/null +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/AwsCredentials.kt @@ -0,0 +1,58 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.credentials + +import kotlin.time.ExperimentalTime +import kotlin.time.Instant + +/** + * Provides access to the AWS credentials used for accessing AWS services: AWS + * access key ID and secret access key. These credentials are used to securely + * sign requests to AWS services. + * + * For more details on AWS access keys, + * [see](https://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html) + */ +sealed interface AwsCredentials { + /** + * The AWS access key ID for this credentials object. + */ + val accessKeyId: String + + /** + * The AWS secret access key for this credentials object. + */ + val secretAccessKey: String + + /** + * Long-term AWS credentials, such as those granted to Admin Users + */ + class Static( + override val accessKeyId: String, + override val secretAccessKey: String + ) : AwsCredentials + + /** + * Temporary credentials, such as those vended by STS + */ + @OptIn(ExperimentalTime::class) + class Temporary( + override val accessKeyId: String, + override val secretAccessKey: String, + val sessionToken: String, + val expiration: Instant + ) : AwsCredentials +} diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/AwsCredentialsProvider.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/AwsCredentialsProvider.kt new file mode 100644 index 0000000000..3b03168c68 --- /dev/null +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/AwsCredentialsProvider.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.credentials + +/** + * Interface for providers of AWS Credentials + */ +fun interface AwsCredentialsProvider { + /** + * Resolve and return the credentials + */ + suspend fun resolve(): T +} diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/exceptions/AmplifyException.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/exceptions/AmplifyException.kt new file mode 100644 index 0000000000..df5f5b9747 --- /dev/null +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/exceptions/AmplifyException.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.exceptions + +/** + * Top-level exception in the Amplify framework. All other Amplify exceptions should extend this. + * @param message An error message describing why this exception was thrown + * @param recoverySuggestion Text suggesting a way to recover from the error being described + * @param cause The underlying cause of this exception + */ +abstract class AmplifyException( + message: String, + val recoverySuggestion: String, + cause: Throwable? = null +) : Exception(message, cause) { + override fun toString() = + "${this::class.simpleName}(message=$message, cause=$cause, recoverySuggestion=$recoverySuggestion)" +} diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Get.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Get.kt new file mode 100644 index 0000000000..727dd468f5 --- /dev/null +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Get.kt @@ -0,0 +1,39 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.result + +import com.amplifyframework.annotations.InternalAmplifyApi +import kotlin.contracts.contract + +@InternalAmplifyApi +fun Result.getOrThrow(): T { + contract { + returns() implies (this@getOrThrow is Result.Success) + } + return when (this) { + is Result.Failure -> throw error + is Result.Success -> data + } +} + +@InternalAmplifyApi +fun Result.getOrNull(): T? { + contract { + returnsNotNull() implies (this@getOrNull is Result.Success) + returns(null) implies (this@getOrNull is Result.Failure) + } + return if (this is Result.Success) data else null +} diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Map.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Map.kt new file mode 100644 index 0000000000..ee8bd32bb3 --- /dev/null +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Map.kt @@ -0,0 +1,54 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.result + +import com.amplifyframework.annotations.InternalAmplifyApi +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +@InternalAmplifyApi +inline infix fun Result.mapFailure(mapper: (E) -> E2): Result { + contract { + callsInPlace(mapper, InvocationKind.AT_MOST_ONCE) + } + return when (this) { + is Result.Success -> this + is Result.Failure -> Result.Failure(mapper(this.error)) + } +} + +@InternalAmplifyApi +inline infix fun Result.mapSuccess(mapper: (T) -> T2): Result { + contract { + callsInPlace(mapper, InvocationKind.AT_MOST_ONCE) + } + return when (this) { + is Result.Failure -> this + is Result.Success -> Result.Success(mapper(this.data)) + } +} + +@InternalAmplifyApi +inline fun Result.mapBoth(mapSuccess: (T) -> T2, mapFailure: (E) -> E2): Result { + contract { + callsInPlace(mapSuccess, InvocationKind.AT_MOST_ONCE) + callsInPlace(mapFailure, InvocationKind.AT_MOST_ONCE) + } + return when (this) { + is Result.Failure -> Result.Failure(mapFailure(this.error)) + is Result.Success -> Result.Success(mapSuccess(this.data)) + } +} diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Result.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Result.kt new file mode 100644 index 0000000000..462589d11c --- /dev/null +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Result.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.result + +/** + * The result of a single operation. + */ +sealed interface Result { + /** + * Result type that indicates the operation was successful + */ + data class Success(val data: T) : Result + + /** + * Result type that indicates the operation was not successful + */ + data class Failure(val error: E) : Result +} diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Run.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Run.kt new file mode 100644 index 0000000000..22c8c00499 --- /dev/null +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Run.kt @@ -0,0 +1,32 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.result + +import com.amplifyframework.annotations.InternalAmplifyApi +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +@InternalAmplifyApi +inline fun runCatching(block: () -> T): Result { + contract { + callsInPlace(block, InvocationKind.AT_MOST_ONCE) + } + return try { + Result.Success(block()) + } catch (e: Throwable) { + Result.Failure(e) + } +} diff --git a/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultGetTest.kt b/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultGetTest.kt new file mode 100644 index 0000000000..439cf09c77 --- /dev/null +++ b/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultGetTest.kt @@ -0,0 +1,50 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.result + +import io.kotest.assertions.throwables.shouldThrow +import io.kotest.matchers.nulls.shouldBeNull +import io.kotest.matchers.shouldBe +import java.io.IOException +import org.junit.Test + +class ResultGetTest { + @Test + fun `getOrNull returns data for success`() { + val success: Result = Result.Success(15) + success.getOrNull() shouldBe 15 + } + + @Test + fun `getOrNull returns null for failure`() { + val failure: Result = Result.Failure("failed") + failure.getOrNull().shouldBeNull() + } + + @Test + fun `getOrThrow returns data for success`() { + val success = Result.Success("yay") + success.getOrThrow() shouldBe "yay" + } + + @Test + fun `getOrThrow throws exception for failure`() { + shouldThrow { + val failure = Result.Failure(IOException("failed")) + failure.getOrThrow() + } + } +} diff --git a/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultMapTest.kt b/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultMapTest.kt new file mode 100644 index 0000000000..a4019ad614 --- /dev/null +++ b/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultMapTest.kt @@ -0,0 +1,78 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.result + +import com.amplifyframework.testutils.foundation.results.shouldBeFailure +import com.amplifyframework.testutils.foundation.results.shouldBeSuccess +import org.junit.Test + +class ResultMapTest { + + enum class OriginalFailure { + BadNetwork, + DnsIssue, + InvalidInput, + InputTooLong + } + + enum class MappedFailure { + NetworkProblem, + InputProblem + } + + @Test + fun `mapFailure maps failure`() { + val mapped = Result.Failure(OriginalFailure.BadNetwork).mapFailure(::failureMapper) + mapped shouldBeFailure MappedFailure.NetworkProblem + } + + @Test + fun `mapFailure does not map success as failure`() { + val mapped = Result.Success(5).mapFailure(::failureMapper) + mapped shouldBeSuccess 5 + } + + @Test + fun `mapSuccess maps success`() { + val mapped = Result.Success(3).mapSuccess(::successMapper) + mapped shouldBeSuccess 30 + } + + @Test + fun `mapSuccess does not map failure as success`() { + val mapped = Result.Failure(OriginalFailure.DnsIssue).mapSuccess(::successMapper) + mapped shouldBeFailure OriginalFailure.DnsIssue + } + + @Test + fun `mapBoth maps failure`() { + val mapped = Result.Failure(OriginalFailure.InputTooLong).mapBoth(::successMapper, ::failureMapper) + mapped shouldBeFailure MappedFailure.InputProblem + } + + @Test + fun `mapBoth maps success`() { + val mapped = Result.Success(4).mapBoth(::successMapper, ::failureMapper) + mapped shouldBeSuccess 40 + } + + private fun failureMapper(original: OriginalFailure) = when (original) { + OriginalFailure.InvalidInput, OriginalFailure.InputTooLong -> MappedFailure.InputProblem + else -> MappedFailure.NetworkProblem + } + + private fun successMapper(original: Int) = original * 10 +} diff --git a/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultRunTest.kt b/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultRunTest.kt new file mode 100644 index 0000000000..9422e8eb43 --- /dev/null +++ b/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultRunTest.kt @@ -0,0 +1,42 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.result + +import com.amplifyframework.foundation.result.runCatching as localRunCatching +import com.amplifyframework.testutils.foundation.results.shouldBeFailure +import com.amplifyframework.testutils.foundation.results.shouldBeSuccess +import org.junit.Test + +class ResultRunTest { + @Test + fun `runCatching returns success result`() { + val result = localRunCatching { + 10 + } + result shouldBeSuccess 10 + } + + @Test + fun `runCatching returns failure result for thrown exception`() { + val exception = RuntimeException("failed") + + val result = localRunCatching { + throw exception + } + + result shouldBeFailure exception + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3981b4c5ed..51d0db0f2c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -154,11 +154,14 @@ plugin-ktlint = { module = "org.jlleitschuh.gradle:ktlint-gradle", version.ref = plugin-licensee = { module = "app.cash.licensee:app.cash.licensee.gradle.plugin", version.ref = "licensee" } [plugins] +android-kotlin-multiplatform-library = { id = "com.android.kotlin.multiplatform.library", version.ref = "agp" } android-library = { id = "com.android.library", version.ref = "agp" } +android-lint = { id = "com.android.lint", version.ref = "agp" } apollo = { id = "com.apollographql.apollo", version.ref = "apollo" } binary-compatibility-validator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "binary-compatibility-validator" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } +kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" } kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } kover = { id = "org.jetbrains.kotlinx.kover", version.ref = "kover" } @@ -167,8 +170,8 @@ licensee = { id = "app.cash.licensee", version.ref = "licensee" } # Internal convention plugins amplify-api = { id = "amplify.api" } -amplify-kotlin = { id = "amplify.kotlin" } amplify-kmp = { id = "amplify.kotlin.multiplatform" } +amplify-kotlin = { id = "amplify.kotlin" } amplify-kover = { id = "amplify.kover" } amplify-ktlint = { id = "amplify.ktlint" } amplify-android-library = { id = "amplify.android.library" } diff --git a/settings.gradle.kts b/settings.gradle.kts index 2417850b90..4b842ea1e6 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -77,3 +77,5 @@ include(":apollo-appsync") include(":apollo-appsync-amplify") project(":apollo-appsync").projectDir = file("apollo/apollo-appsync") project(":apollo-appsync-amplify").projectDir = file("apollo/apollo-appsync-amplify") +include(":foundation") +include(":foundation-bridge") diff --git a/testutils/build.gradle.kts b/testutils/build.gradle.kts index 1cdcd61b66..528e48fe92 100644 --- a/testutils/build.gradle.kts +++ b/testutils/build.gradle.kts @@ -24,6 +24,8 @@ android { dependencies { implementation(project(":core")) + implementation(project(":foundation")) + implementation(libs.test.junit) implementation(libs.test.mockito.core) implementation(libs.test.androidx.core) diff --git a/testutils/src/main/java/com/amplifyframework/testutils/foundation/results/ResultAssertions.kt b/testutils/src/main/java/com/amplifyframework/testutils/foundation/results/ResultAssertions.kt new file mode 100644 index 0000000000..e3a197ad9a --- /dev/null +++ b/testutils/src/main/java/com/amplifyframework/testutils/foundation/results/ResultAssertions.kt @@ -0,0 +1,68 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +@file:OptIn(ExperimentalContracts::class) + +package com.amplifyframework.testutils.foundation.results + +import com.amplifyframework.foundation.result.Result +import io.kotest.matchers.Matcher +import io.kotest.matchers.MatcherResult +import io.kotest.matchers.should +import io.kotest.matchers.shouldBe +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.contract + +private fun beFailure() = Matcher> { value -> + MatcherResult( + value is Result.Failure, + { "result expected to be failure but was success" }, + { "result expected to not be failure but was failure" } + ) +} + +private fun beSuccess() = Matcher> { value -> + MatcherResult( + value is Result.Success, + { "result expected to be success but was failure" }, + { "result expected to not be success but was success" } + ) +} + +fun Result.shouldBeFailure(): Result.Failure { + contract { + returns() implies (this@shouldBeFailure is Result.Failure) + } + this should beFailure() + return this as Result.Failure +} + +fun Result.shouldBeSuccess(): Result.Success { + contract { + returns() implies (this@shouldBeSuccess is Result.Success) + } + this should beSuccess() + return this as Result.Success +} + +infix fun Result.shouldBeFailure(expected: E): Result.Failure { + this.shouldBeFailure().error shouldBe expected + return this +} + +infix fun Result.shouldBeSuccess(expected: T): Result.Success { + this.shouldBeSuccess().data shouldBe expected + return this +} From 3a6a06997be9eca195783cb3dd047a66546d1b91 Mon Sep 17 00:00:00 2001 From: Jan Vincent Hoffbauer Date: Wed, 18 Feb 2026 15:53:17 +0100 Subject: [PATCH 02/37] Improve error handling, client configuration, and flush concurrency - Add sealed KinesisException hierarchy (Storage, Network, LimitExceeded) with typed mapping from RecordCacheException subtypes - Add KinesisClientConfigurationProvider SAM interface for custom KinesisClient configuration via KinesisDataStreamsOptions - Move KinesisClient creation from KinesisRecordSender to KinesisDataStreams, exposing it as a public property for direct access - Add concurrent flush guard using AtomicBoolean in RecordClient, returning early with flushInProgress=true when a flush is already running - Add enable/disable toggle for record collection; disabled state silently drops incoming records while preserving already-cached data - Update record() return type from Result to Result --- .../KinesisClientConfigurationProvider.kt | 35 +++++++++++ .../kinesis/KinesisDataStreams.kt | 56 +++++++++++------ .../kinesis/KinesisDataStreamsOptions.kt | 9 ++- .../kinesis/KinesisException.kt | 62 +++++++++++++++++-- .../kinesis/KinesisRecordSender.kt | 12 +--- .../recordcache/RecordClient.kt | 54 +++++++++------- .../com/amplifyframework/recordcache/Types.kt | 10 ++- 7 files changed, 180 insertions(+), 58 deletions(-) create mode 100644 aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisClientConfigurationProvider.kt diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisClientConfigurationProvider.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisClientConfigurationProvider.kt new file mode 100644 index 0000000000..bd1e185625 --- /dev/null +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisClientConfigurationProvider.kt @@ -0,0 +1,35 @@ +package com.amplifyframework.kinesis + +import aws.sdk.kotlin.services.kinesis.KinesisClient + +/** + * Provides custom configuration for the underlying [KinesisClient]. + * + * Implement this interface to customize the [KinesisClient.Config.Builder] used + * by [KinesisDataStreams]. The builder passed to [applyConfiguration] will already + * have the default configurations (region, credentials) applied — your overrides + * are applied on top. + * + * This is a SAM interface, so it can be used as a lambda in Kotlin: + * ```kotlin + * KinesisDataStreams( + * context = context, + * region = "us-east-1", + * credentialsProvider = provider, + * clientConfigurationProvider = KinesisClientConfigurationProvider { builder -> + * builder.httpClient { /* custom http config */ } + * } + * ) + * ``` + */ +fun interface KinesisClientConfigurationProvider { + /** + * Applies custom configuration to the KinesisClient builder. + * + * The [builder] will already have default configurations (region, credentials) applied. + * Any values set here will override the defaults. + * + * @param builder A [KinesisClient.Config.Builder] instance with defaults pre-applied + */ + fun applyConfiguration(builder: KinesisClient.Config.Builder) +} diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreams.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreams.kt index 9c84515715..9676b74478 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreams.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreams.kt @@ -3,6 +3,7 @@ package com.amplifyframework.kinesis import android.content.Context import com.amplifyframework.auth.AWSCredentials import com.amplifyframework.auth.AWSCredentialsProvider +import com.amplifyframework.auth.convertToSdkCredentialsProvider import com.amplifyframework.recordcache.AutoFlushScheduler import com.amplifyframework.recordcache.ClearCacheResult import com.amplifyframework.recordcache.FlushResult @@ -15,20 +16,27 @@ import com.amplifyframework.recordcache.RecordClient import com.amplifyframework.recordcache.RecordInput import com.amplifyframework.recordcache.RecordResult import com.amplifyframework.recordcache.SQLiteRecordStorage +import aws.sdk.kotlin.services.kinesis.KinesisClient import kotlin.system.measureTimeMillis class KinesisDataStreams( val context: Context, val region: String, - val credentialsProvider: AWSCredentialsProvider, + val credentialsProvider: AWSCredentialsProvider, // TODO: Pending V3 types options: KinesisDataStreamsOptions = KinesisDataStreamsOptions.defaults() ) { private val logger: Logger = Amplify.Logging.logger(CategoryType.ANALYTICS, "KinesisDataStreams") - + + /** The underlying SDK [KinesisClient] for direct access. */ + val kinesisClient: KinesisClient = KinesisClient { + this.region = this@KinesisDataStreams.region + this.credentialsProvider = convertToSdkCredentialsProvider(this@KinesisDataStreams.credentialsProvider) + options.configureClient?.applyConfiguration(this) + } + private val recordClient: RecordClient = RecordClient( sender = KinesisRecordSender( - credentialsProvider = this@KinesisDataStreams.credentialsProvider, - region = this.region, + kinesisClient = kinesisClient, maxRetries = options.maxRetries ), storage = SQLiteRecordStorage( @@ -40,6 +48,7 @@ class KinesisDataStreams( exceptionMapper = { it.toKinesisException() } ) private val scheduler: AutoFlushScheduler + @Volatile private var isEnabled = false init { if (options.flushStrategy is FlushStrategy.Interval) { @@ -58,16 +67,20 @@ class KinesisDataStreams( * @param data The data to record as byte array * @param partitionKey The partition key for the record * @param streamName The name of the Kinesis stream - * @return Result.success(RecordData) on success, or Result.failure with: + * @return Result.success(Unit) on success, or Result.failure with: * - KinesisException wrapping RecordCacheLimitExceededException (cache full) * - KinesisException wrapping RecordCacheStorageException (database errors) */ - suspend fun record(data: ByteArray, partitionKey: String, streamName: String): RecordResult { - logger.verbose("Recording to stream: $streamName") + suspend fun record(data: ByteArray, partitionKey: String, streamName: String): Result { + if (!isEnabled) { + logger.debug("Record collection is disabled, dropping record") + return Result.success(Unit) + } + logger.verbose { "Recording to stream: $streamName" } return logOp( - operation = { recordClient.record(RecordInput(streamName, partitionKey, data)) }, - logSuccess = { _, timeMs -> logger.debug("Record completed successfully in ${timeMs}ms") }, - logFailure = { error, timeMs -> logger.warn("Record failed in ${timeMs}ms: ${error?.message}") } + operation = { recordClient.record(RecordInput(streamName, partitionKey, data)).map { } }, + logSuccess = { _, timeMs -> logger.debug("Record completed successfully in ${timeMs}ms") }, // TODO: Use lazy evaluation for log messages + logFailure = { error, timeMs -> logger.warn("Record failed in ${timeMs}ms: ${error?.message}") } // TODO: Use lazy evaluation for log messages ) } @@ -82,8 +95,8 @@ class KinesisDataStreams( logger.info("Starting flush") return logOp( operation = { recordClient.flush() }, - logSuccess = { data, timeMs -> logger.info("Flush completed successfully in ${timeMs}ms - ${data.recordsFlushed} records flushed") }, - logFailure = { error, timeMs -> logger.warn("Flush failed in ${timeMs}ms: ${error?.message}") } + logSuccess = { data, timeMs -> logger.info("Flush completed successfully in ${timeMs}ms - ${data.recordsFlushed} records flushed") }, // TODO: Use lazy evaluation for log messages + logFailure = { error, timeMs -> logger.warn("Flush failed in ${timeMs}ms: ${error?.message}") } // TODO: Use lazy evaluation for log messages ) } @@ -97,20 +110,27 @@ class KinesisDataStreams( logger.info("Clearing cache") return logOp( operation = { recordClient.clearCache() }, - logSuccess = { data, timeMs -> logger.info("Clear cache completed successfully in ${timeMs}ms - ${data.recordsCleared} records cleared") }, - logFailure = { error, timeMs -> logger.warn("Clear cache failed in ${timeMs}ms: ${error?.message}") } + logSuccess = { data, timeMs -> logger.info("Clear cache completed successfully in ${timeMs}ms - ${data.recordsCleared} records cleared") }, // TODO: Use lazy evaluation for log messages + logFailure = { error, timeMs -> logger.warn("Clear cache failed in ${timeMs}ms: ${error?.message}") } // TODO: Use lazy evaluation for log messages ) } /** - * Enables automatic flushing of cached records based on the configured interval. + * Enables record collection and automatic flushing of cached records. */ - fun enable() = scheduler.start() + fun enable() { + isEnabled = true + scheduler.start() + } /** - * Disables automatic flushing of cached records. + * Disables record collection and automatic flushing. Records submitted while + * disabled are silently dropped. Already-cached records remain in storage. */ - fun disable() = scheduler.disable() + fun disable() { + isEnabled = false + scheduler.disable() + } private suspend inline fun logOp( operation: suspend () -> Result, diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreamsOptions.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreamsOptions.kt index b89c879cbb..33e8a51619 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreamsOptions.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreamsOptions.kt @@ -9,7 +9,8 @@ data class KinesisDataStreamsOptions internal constructor( val cacheMaxBytes: Long, val maxRecords: Int, val maxRetries: Int, - val flushStrategy: FlushStrategy + val flushStrategy: FlushStrategy, + val configureClient: KinesisClientConfigurationProvider? = null ) { companion object { @JvmStatic @@ -35,11 +36,15 @@ data class KinesisDataStreamsOptions internal constructor( var flushStrategy: FlushStrategy = FlushStrategy.Interval(30.seconds) @JvmSynthetic set + var configureClient: KinesisClientConfigurationProvider? = null + @JvmSynthetic set + fun cacheMaxBytes(value: Long) = apply { cacheMaxBytes = value } fun maxRecords(value: Int) = apply { maxRecords = value } fun maxRetries(value: Int) = apply { maxRetries = value } fun flushStrategy(value: FlushStrategy) = apply { flushStrategy = value } + fun configureClient(value: KinesisClientConfigurationProvider?) = apply { configureClient = value } - fun build() = KinesisDataStreamsOptions(cacheMaxBytes, maxRecords, maxRetries, flushStrategy) + fun build() = KinesisDataStreamsOptions(cacheMaxBytes, maxRecords, maxRetries, flushStrategy, configureClient) } } diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisException.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisException.kt index b1bfc7c985..d68f4fb670 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisException.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisException.kt @@ -2,15 +2,65 @@ package com.amplifyframework.kinesis import com.amplifyframework.AmplifyException import com.amplifyframework.recordcache.RecordCacheException +import com.amplifyframework.recordcache.RecordCacheLimitExceededException +import com.amplifyframework.recordcache.RecordCacheNetworkException +import com.amplifyframework.recordcache.RecordCacheStorageException -class KinesisException( +/** + * Base exception for all Kinesis operations. + * + * This is a sealed hierarchy — callers can exhaustively match on the subtype + * to determine the category of failure: + * - [KinesisStorageException] — local cache / database errors + * - [KinesisNetworkException] — API / connectivity errors + * - [KinesisLimitExceededException] — local cache is full + */ +sealed class KinesisException( message: String, recoverySuggestion: String, cause: Throwable? = null ) : AmplifyException(message, cause, recoverySuggestion) -internal fun RecordCacheException.toKinesisException(): KinesisException = KinesisException( - message = this.message ?: "Kinesis operation failed", - recoverySuggestion = this.recoverySuggestion, - cause = this -) +/** Local storage / database error. */ +class KinesisStorageException( + message: String, + recoverySuggestion: String, + cause: Throwable? = null +) : KinesisException(message, recoverySuggestion, cause) + +/** Network or Kinesis API error. */ +class KinesisNetworkException( + message: String, + recoverySuggestion: String, + cause: Throwable? = null +) : KinesisException(message, recoverySuggestion, cause) + +/** Local cache size or record limit exceeded. */ +class KinesisLimitExceededException( + message: String, + recoverySuggestion: String, + cause: Throwable? = null +) : KinesisException(message, recoverySuggestion, cause) + +internal fun RecordCacheException.toKinesisException(): KinesisException = when (this) { + is RecordCacheStorageException -> KinesisStorageException( + message = this.message ?: "Kinesis storage operation failed", + recoverySuggestion = this.recoverySuggestion, + cause = this + ) + is RecordCacheNetworkException -> KinesisNetworkException( + message = this.message ?: "Kinesis network operation failed", + recoverySuggestion = this.recoverySuggestion, + cause = this + ) + is RecordCacheLimitExceededException -> KinesisLimitExceededException( + message = this.message ?: "Kinesis cache limit exceeded", + recoverySuggestion = this.recoverySuggestion, + cause = this + ) + else -> KinesisNetworkException( + message = this.message ?: "Kinesis operation failed", + recoverySuggestion = this.recoverySuggestion, + cause = this + ) +} diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisRecordSender.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisRecordSender.kt index 2c497bfc50..159610196e 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisRecordSender.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisRecordSender.kt @@ -4,9 +4,6 @@ import androidx.annotation.VisibleForTesting import aws.sdk.kotlin.services.kinesis.KinesisClient import aws.sdk.kotlin.services.kinesis.model.PutRecordsRequest import aws.sdk.kotlin.services.kinesis.model.PutRecordsRequestEntry -import com.amplifyframework.auth.AWSCredentials -import com.amplifyframework.auth.AWSCredentialsProvider -import com.amplifyframework.auth.convertToSdkCredentialsProvider import com.amplifyframework.recordcache.PutRecordsResponse import com.amplifyframework.recordcache.Record import com.amplifyframework.recordcache.RecordCacheNetworkException @@ -15,21 +12,16 @@ import com.amplifyframework.recordcache.RecordSender typealias PutRecordsResponseSdk = aws.sdk.kotlin.services.kinesis.model.PutRecordsResponse internal class KinesisRecordSender( - private val credentialsProvider: AWSCredentialsProvider, - private val region: String, + private val kinesisClient: KinesisClient, private val maxRetries: Int, ) : RecordSender { - private val kinesisSDKClient: KinesisClient = KinesisClient { - this.region = this@KinesisRecordSender.region - this.credentialsProvider = convertToSdkCredentialsProvider(this@KinesisRecordSender.credentialsProvider) - } override suspend fun putRecords(streamName: String, records: List): Result = runCatching { // Create request val request = createRequest(streamName, records) - val sdkResponse = kinesisSDKClient.putRecords(request) + val sdkResponse = kinesisClient.putRecords(request) val response = splitResponse(sdkResponse, records) return@runCatching response diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordClient.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordClient.kt index e03cf3a98d..dfdf1d542e 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordClient.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordClient.kt @@ -1,5 +1,6 @@ package com.amplifyframework.recordcache +import java.util.concurrent.atomic.AtomicBoolean import kotlin.mapCatching internal class RecordClient( @@ -7,33 +8,44 @@ internal class RecordClient( private val storage: RecordStorage, private val exceptionMapper: (RecordCacheException) -> E ) { + private val isFlushing = AtomicBoolean(false) suspend fun record(record: RecordInput): RecordResult = mapErrorResult( storage.addRecord(record).mapCatching { RecordData() } ) - suspend fun flush(): FlushResult = mapErrorResult( - runCatching { - val r = storage.getRecordsByStream() - .getOrThrow() - .map { records -> - val streamName = records.first().streamName - val result = sender.putRecords(streamName, records).getOrThrow() - - val deleteSuccessful = storage.deleteRecords(result.successfulIds) - val deleteFailed = storage.deleteRecords(result.failedIds) - val incrementRetry = storage.incrementRetryCount(result.retryableIds) - - // Ensure all updates are triggered before checking for exceptions - deleteSuccessful.getOrThrow() - deleteFailed.getOrThrow() - incrementRetry.getOrThrow() - - result.successfulIds + suspend fun flush(): FlushResult { + // Guard against concurrent flushes to return early + if (!isFlushing.compareAndSet(false, true)) { + return Result.success(FlushData(recordsFlushed = 0, flushInProgress = true)) + } + return try { + mapErrorResult( + runCatching { + val r = storage.getRecordsByStream() + .getOrThrow() + .map { records -> + val streamName = records.first().streamName + val result = sender.putRecords(streamName, records).getOrThrow() + + val deleteSuccessful = storage.deleteRecords(result.successfulIds) + val deleteFailed = storage.deleteRecords(result.failedIds) + val incrementRetry = storage.incrementRetryCount(result.retryableIds) + + // Ensure all updates are triggered before checking for exceptions + deleteSuccessful.getOrThrow() + deleteFailed.getOrThrow() + incrementRetry.getOrThrow() + + result.successfulIds + } + .map { it.size }.sum() + FlushData(r) } - .map { it.size }.sum() - FlushData(r) + ) + } finally { + isFlushing.set(false) } - ) + } suspend fun clearCache(): ClearCacheResult = mapErrorResult(storage.clearRecords()) diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/Types.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/Types.kt index 3a23d5831e..c3e10c7f89 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/Types.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/Types.kt @@ -1,7 +1,15 @@ package com.amplifyframework.recordcache data class RecordData(val success: Boolean = true) -data class FlushData(val recordsFlushed: Int = 0) +/** + * Result of flushing records. + * + * @property recordsFlushed The number of records successfully flushed to the remote service. + * @property flushInProgress `true` if this flush was skipped because another flush is already + * in progress. When `true`, [recordsFlushed] will always be `0`. The skipped records will + * be picked up by the next scheduled flush cycle. + */ +data class FlushData(val recordsFlushed: Int = 0, val flushInProgress: Boolean = false) data class ClearCacheData(val recordsCleared: Int = 0) typealias RecordResult = Result From bf236a75d9f981cf9c2bdbf848a99f16c59da12b Mon Sep 17 00:00:00 2001 From: Jan Vincent Hoffbauer Date: Wed, 18 Feb 2026 17:03:34 +0100 Subject: [PATCH 03/37] Further improve exception type hierarchy and handling --- .../kinesis/KinesisDataStreams.kt | 28 +++++--- .../kinesis/KinesisException.kt | 69 ++++++++++--------- .../kinesis/KinesisRecordSender.kt | 15 +--- .../recordcache/AutoFlushScheduler.kt | 2 +- .../recordcache/RecordCacheException.kt | 23 ++++--- .../recordcache/RecordClient.kt | 64 +++++++---------- .../recordcache/SQLiteRecordStorage.kt | 28 +++----- 7 files changed, 103 insertions(+), 126 deletions(-) diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreams.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreams.kt index 00730a8320..b2d3252647 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreams.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreams.kt @@ -64,7 +64,7 @@ class KinesisDataStreams( options.configureClient?.applyConfiguration(this) } - private val recordClient: RecordClient = RecordClient( + private val recordClient: RecordClient = RecordClient( sender = KinesisRecordSender( kinesisClient = kinesisClient, maxRetries = options.maxRetries @@ -74,8 +74,7 @@ class KinesisDataStreams( identifier = region, maxRecords = options.maxRecords, maxBytes = options.cacheMaxBytes - ), - exceptionMapper = { it.toKinesisException() } + ) ) private val scheduler: AutoFlushScheduler @Volatile private var isEnabled = false @@ -98,8 +97,8 @@ class KinesisDataStreams( * @param partitionKey The partition key for the record * @param streamName The name of the Kinesis stream * @return Result.success(Unit) on success, or Result.failure with: - * - KinesisException wrapping RecordCacheLimitExceededException (cache full) - * - KinesisException wrapping RecordCacheStorageException (database errors) + * - [KinesisLimitExceededException] (cache full) + * - [KinesisStorageException] (database errors) */ suspend fun record(data: ByteArray, partitionKey: String, streamName: String): Result { if (!isEnabled) { @@ -108,7 +107,7 @@ class KinesisDataStreams( } logger.verbose { "Recording to stream: $streamName" } return logOp( - operation = { recordClient.record(RecordInput(streamName, partitionKey, data)).map { } }, + operation = { recordClient.record(RecordInput(streamName, partitionKey, data)).map { }.wrapError() }, logSuccess = { _, timeMs -> logger.debug("Record completed successfully in ${timeMs}ms") }, // TODO: Use lazy evaluation for log messages logFailure = { error, timeMs -> logger.warn("Record failed in ${timeMs}ms: ${error?.message}") } // TODO: Use lazy evaluation for log messages ) @@ -118,13 +117,13 @@ class KinesisDataStreams( * Flushes all cached records to their respective Kinesis streams. * * @return Result.success(FlushData) on success, or Result.failure with: - * - KinesisException wrapping RecordCacheNetworkException (API/network failures) - * - KinesisException wrapping RecordCacheStorageException (database errors) + * - [KinesisServiceException] (API/network failures) + * - [KinesisStorageException] (database errors) */ suspend fun flush(): FlushResult { logger.info("Starting flush") return logOp( - operation = { recordClient.flush() }, + operation = { recordClient.flush().wrapError() }, logSuccess = { data, timeMs -> logger.info("Flush completed successfully in ${timeMs}ms - ${data.recordsFlushed} records flushed") }, // TODO: Use lazy evaluation for log messages logFailure = { error, timeMs -> logger.warn("Flush failed in ${timeMs}ms: ${error?.message}") } // TODO: Use lazy evaluation for log messages ) @@ -134,12 +133,12 @@ class KinesisDataStreams( * Clears all cached records from local storage. * * @return Result.success(ClearCacheData) on success, or Result.failure with: - * - KinesisException wrapping RecordCacheStorageException (database errors) + * - [KinesisStorageException] (database errors) */ suspend fun clearCache(): ClearCacheResult { logger.info("Clearing cache") return logOp( - operation = { recordClient.clearCache() }, + operation = { recordClient.clearCache().wrapError() }, logSuccess = { data, timeMs -> logger.info("Clear cache completed successfully in ${timeMs}ms - ${data.recordsCleared} records cleared") }, // TODO: Use lazy evaluation for log messages logFailure = { error, timeMs -> logger.warn("Clear cache failed in ${timeMs}ms: ${error?.message}") } // TODO: Use lazy evaluation for log messages ) @@ -162,6 +161,13 @@ class KinesisDataStreams( scheduler.disable() } + /** Maps any failure in the [Result] to a [KinesisException] via [KinesisException.from]. */ + private fun Result.wrapError(): Result { + if (isSuccess) return this + val error = exceptionOrNull() ?: return this + return Result.failure(KinesisException.from(error)) + } + private suspend inline fun logOp( operation: suspend () -> Result, logSuccess: (T, Long) -> Unit, diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisException.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisException.kt index e8b66d7a3b..b0ea4e5043 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisException.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisException.kt @@ -1,19 +1,19 @@ package com.amplifyframework.kinesis import com.amplifyframework.AmplifyException +import com.amplifyframework.recordcache.DEFAULT_RECOVERY_SUGGESTION +import com.amplifyframework.recordcache.RecordCacheDatabaseException import com.amplifyframework.recordcache.RecordCacheException import com.amplifyframework.recordcache.RecordCacheLimitExceededException -import com.amplifyframework.recordcache.RecordCacheNetworkException -import com.amplifyframework.recordcache.RecordCacheStorageException /** * Base exception for all Kinesis operations. * * This is a sealed hierarchy. Callers can exhaustively match on the subtype * to determine the category of failure: - * - [KinesisStorageException] - local cache / database errors - * - [KinesisNetworkException] - API / connectivity errors - * - [KinesisLimitExceededException] - local cache is full + * - [KinesisStorageException] — local cache / database errors + * - [KinesisLimitExceededException] — local cache is full + * - [KinesisServiceException] — Kinesis API / SDK errors * * @param message Error message describing what went wrong * @param recoverySuggestion Suggested action to resolve the error @@ -23,7 +23,37 @@ sealed class KinesisException( message: String, recoverySuggestion: String, cause: Throwable? = null -) : AmplifyException(message, cause, recoverySuggestion) +) : AmplifyException(message, cause, recoverySuggestion) { + companion object { + /** + * Maps a [Throwable] into the appropriate [KinesisException] subtype, + * handling [RecordCacheException], Kinesis SDK exceptions, and unknown errors. + */ + fun from(error: Throwable): KinesisException = when (error) { + is KinesisException -> error + is RecordCacheDatabaseException -> KinesisStorageException( + message = error.message ?: "A database error occurred", + recoverySuggestion = error.recoverySuggestion, + cause = error + ) + is RecordCacheLimitExceededException -> KinesisLimitExceededException( + message = error.message ?: "Cache limit exceeded", + recoverySuggestion = error.recoverySuggestion, + cause = error + ) + is RecordCacheException -> KinesisStorageException( + message = error.message ?: "A cache error occurred", + recoverySuggestion = error.recoverySuggestion, + cause = error + ) + else -> KinesisServiceException( + message = error.message ?: "A service error occurred", + recoverySuggestion = DEFAULT_RECOVERY_SUGGESTION, + cause = error + ) + } + } +} /** Local storage / database error. */ class KinesisStorageException( @@ -32,8 +62,8 @@ class KinesisStorageException( cause: Throwable? = null ) : KinesisException(message, recoverySuggestion, cause) -/** Network or Kinesis API error. */ -class KinesisNetworkException( +/** Kinesis API / SDK error. */ +class KinesisServiceException( message: String, recoverySuggestion: String, cause: Throwable? = null @@ -45,26 +75,3 @@ class KinesisLimitExceededException( recoverySuggestion: String, cause: Throwable? = null ) : KinesisException(message, recoverySuggestion, cause) - -internal fun RecordCacheException.toKinesisException(): KinesisException = when (this) { - is RecordCacheStorageException -> KinesisStorageException( - message = this.message ?: "Kinesis storage operation failed", - recoverySuggestion = this.recoverySuggestion, - cause = this - ) - is RecordCacheNetworkException -> KinesisNetworkException( - message = this.message ?: "Kinesis network operation failed", - recoverySuggestion = this.recoverySuggestion, - cause = this - ) - is RecordCacheLimitExceededException -> KinesisLimitExceededException( - message = this.message ?: "Kinesis cache limit exceeded", - recoverySuggestion = this.recoverySuggestion, - cause = this - ) - else -> KinesisNetworkException( - message = this.message ?: "Kinesis operation failed", - recoverySuggestion = this.recoverySuggestion, - cause = this - ) -} diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisRecordSender.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisRecordSender.kt index 159610196e..e94787910c 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisRecordSender.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisRecordSender.kt @@ -6,7 +6,6 @@ import aws.sdk.kotlin.services.kinesis.model.PutRecordsRequest import aws.sdk.kotlin.services.kinesis.model.PutRecordsRequestEntry import com.amplifyframework.recordcache.PutRecordsResponse import com.amplifyframework.recordcache.Record -import com.amplifyframework.recordcache.RecordCacheNetworkException import com.amplifyframework.recordcache.RecordSender typealias PutRecordsResponseSdk = aws.sdk.kotlin.services.kinesis.model.PutRecordsResponse @@ -18,20 +17,10 @@ internal class KinesisRecordSender( override suspend fun putRecords(streamName: String, records: List): Result = runCatching { - // Create request val request = createRequest(streamName, records) - val sdkResponse = kinesisClient.putRecords(request) - - val response = splitResponse(sdkResponse, records) - return@runCatching response - }.recoverCatching { cause -> - throw RecordCacheNetworkException( - "Failed to send records to Kinesis", - "Check network connectivity and AWS credentials", - cause - ) - } + splitResponse(sdkResponse, records) + }.recoverCatching { throw KinesisException.from(it) } @VisibleForTesting internal fun createRequest(streamName: String, records: List) = PutRecordsRequest { diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/AutoFlushScheduler.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/AutoFlushScheduler.kt index 3e48139fff..c9fec0afcf 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/AutoFlushScheduler.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/AutoFlushScheduler.kt @@ -10,7 +10,7 @@ import kotlinx.coroutines.launch internal class AutoFlushScheduler( val interval: FlushStrategy.Interval, - val client: RecordClient<*>, + val client: RecordClient, private val dispatcher: CoroutineDispatcher = Dispatchers.IO ) { private val scope = CoroutineScope(dispatcher + CoroutineName("AutoFlushScheduler")) diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordCacheException.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordCacheException.kt index 80a0d5b4a3..9703e714ef 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordCacheException.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordCacheException.kt @@ -1,27 +1,30 @@ package com.amplifyframework.recordcache -import com.amplifyframework.AmplifyException - -internal open class RecordCacheException( +/** + * Internal error type used by [RecordClient] / [RecordStorage]. + * Mapped to the public Kinesis exception type at the KinesisDataStreams boundary. + */ +internal sealed class RecordCacheException( message: String, recoverySuggestion: String, cause: Throwable? = null -) : AmplifyException(message, cause, recoverySuggestion) +) : Exception(message, cause) { + val recoverySuggestion: String = recoverySuggestion +} -internal class RecordCacheStorageException( +/** Database operation failed. */ +internal class RecordCacheDatabaseException( message: String, recoverySuggestion: String, cause: Throwable? = null ) : RecordCacheException(message, recoverySuggestion, cause) +/** Cache limit exceeded — no space for new records. */ internal class RecordCacheLimitExceededException( message: String, recoverySuggestion: String, cause: Throwable? = null ) : RecordCacheException(message, recoverySuggestion, cause) -internal class RecordCacheNetworkException( - message: String, - recoverySuggestion: String, - cause: Throwable? = null -) : RecordCacheException(message, recoverySuggestion, cause) +/** Default recovery suggestion for errors. */ +internal const val DEFAULT_RECOVERY_SUGGESTION = "Inspect the underlying error for more details." diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordClient.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordClient.kt index dfdf1d542e..a8882aecef 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordClient.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordClient.kt @@ -3,10 +3,9 @@ package com.amplifyframework.recordcache import java.util.concurrent.atomic.AtomicBoolean import kotlin.mapCatching -internal class RecordClient( +internal class RecordClient( private val sender: RecordSender, - private val storage: RecordStorage, - private val exceptionMapper: (RecordCacheException) -> E + private val storage: RecordStorage ) { private val isFlushing = AtomicBoolean(false) suspend fun record(record: RecordInput): RecordResult = mapErrorResult( @@ -19,46 +18,31 @@ internal class RecordClient( return Result.success(FlushData(recordsFlushed = 0, flushInProgress = true)) } return try { - mapErrorResult( - runCatching { - val r = storage.getRecordsByStream() - .getOrThrow() - .map { records -> - val streamName = records.first().streamName - val result = sender.putRecords(streamName, records).getOrThrow() - - val deleteSuccessful = storage.deleteRecords(result.successfulIds) - val deleteFailed = storage.deleteRecords(result.failedIds) - val incrementRetry = storage.incrementRetryCount(result.retryableIds) - - // Ensure all updates are triggered before checking for exceptions - deleteSuccessful.getOrThrow() - deleteFailed.getOrThrow() - incrementRetry.getOrThrow() - - result.successfulIds - } - .map { it.size }.sum() - FlushData(r) - } - ) + runCatching { + val r = storage.getRecordsByStream() + .getOrThrow() + .map { records -> + val streamName = records.first().streamName + val result = sender.putRecords(streamName, records).getOrThrow() + + val deleteSuccessful = storage.deleteRecords(result.successfulIds) + val deleteFailed = storage.deleteRecords(result.failedIds) + val incrementRetry = storage.incrementRetryCount(result.retryableIds) + + // Ensure all updates are triggered before checking for exceptions + deleteSuccessful.getOrThrow() + deleteFailed.getOrThrow() + incrementRetry.getOrThrow() + + result.successfulIds + } + .map { it.size }.sum() + FlushData(r) + } } finally { isFlushing.set(false) } } - suspend fun clearCache(): ClearCacheResult = mapErrorResult(storage.clearRecords()) - - fun mapErrorResult(result: Result): Result = if (result.isSuccess) { - result - } else { - val exc = result.exceptionOrNull() - Result.failure( - exceptionMapper( - exc as? RecordCacheException - ?: // TODO: What to pass here? - RecordCacheException("", "", exc) - ) - ) - } + suspend fun clearCache(): ClearCacheResult = storage.clearRecords() } diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt index 40b4e16494..f9b7a9e5dd 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt @@ -106,10 +106,7 @@ internal class SQLiteRecordStorage internal constructor( cachedSize.addAndGet(record.dataSize) return@wrapDispatchAndCatching - }.recoverAsRecordCacheException( - "Failed to add record to cache", - "Check database permissions and storage space" - ) + }.recoverAsRecordCacheException("Failed to add record to cache") override suspend fun getRecordsByStream(): Result>> = wrapDispatchAndTransactionAndCatching { connection.prepare( @@ -148,7 +145,7 @@ internal class SQLiteRecordStorage internal constructor( recordsByStream.values.toList() } - }.recoverAsRecordCacheException("Could not retrieve records from storage", "Try again at a later time") + }.recoverAsRecordCacheException("Could not retrieve records from storage") override suspend fun deleteRecords(ids: List): Result = wrapDispatchAndCatching { if (!ids.isEmpty()) { @@ -162,10 +159,7 @@ internal class SQLiteRecordStorage internal constructor( } resetCacheSizeFromDb() } - }.recoverAsRecordCacheException( - "Failed to delete records from cache", - "Try again at a later time" - ) + }.recoverAsRecordCacheException("Failed to delete records from cache") override suspend fun incrementRetryCount(ids: List): Result = wrapDispatchAndCatching { if (!ids.isEmpty()) { @@ -180,10 +174,7 @@ internal class SQLiteRecordStorage internal constructor( } return@wrapDispatchAndCatching } - }.recoverAsRecordCacheException( - "Failed to increment retry count", - "Try again at a later time" - ) + }.recoverAsRecordCacheException("Failed to increment retry count") /** * Resets the cached size by recalculating from the database. @@ -208,22 +199,19 @@ internal class SQLiteRecordStorage internal constructor( connection.execSQL("DELETE FROM records") cachedSize.set(0) return@wrapDispatchAndTransactionAndCatching ClearCacheData(count) - }.recoverAsRecordCacheException( - "Failed to clear cache", - "Try again at a later time" - ) + }.recoverAsRecordCacheException("Failed to clear cache") } -private fun Result.recoverAsRecordCacheException(message: String, recoverySuggestion: String): Result { +private fun Result.recoverAsRecordCacheException(message: String): Result { if (this.isSuccess) { return this } val transformedException = when (val exception = this.exceptionOrNull()) { is RecordCacheException -> exception - else -> RecordCacheStorageException( + else -> RecordCacheDatabaseException( message, - recoverySuggestion, + DEFAULT_RECOVERY_SUGGESTION, exception ) } From b5aedcd7abaf5557952c56d6fbfcacca89f15793 Mon Sep 17 00:00:00 2001 From: Jan Vincent Hoffbauer Date: Wed, 18 Feb 2026 17:56:58 +0100 Subject: [PATCH 04/37] Fix typos --- aws-kinesis/api/aws-kinesis.api | 15 +++++- .../kinesis/KinesisDataStreams.kt | 53 ++++++++++++++----- .../kinesis/KinesisDataStreamsOptions.kt | 24 ++++----- .../kinesis/KinesisException.kt | 26 ++++++--- .../kinesis/KinesisRecordSender.kt | 2 +- .../recordcache/RecordCacheException.kt | 2 +- .../recordcache/RecordClient.kt | 5 +- 7 files changed, 87 insertions(+), 40 deletions(-) diff --git a/aws-kinesis/api/aws-kinesis.api b/aws-kinesis/api/aws-kinesis.api index 5e6f36586a..e6997cdab9 100644 --- a/aws-kinesis/api/aws-kinesis.api +++ b/aws-kinesis/api/aws-kinesis.api @@ -69,21 +69,32 @@ public final class com/amplifyframework/kinesis/KinesisDataStreamsOptions$Compan } public abstract class com/amplifyframework/kinesis/KinesisException : com/amplifyframework/AmplifyException { + public static final field Companion Lcom/amplifyframework/kinesis/KinesisException$Companion; public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;Lkotlin/jvm/internal/DefaultConstructorMarker;)V } +public final class com/amplifyframework/kinesis/KinesisException$Companion { + public final fun from (Ljava/lang/Throwable;)Lcom/amplifyframework/kinesis/KinesisException; +} + public final class com/amplifyframework/kinesis/KinesisLimitExceededException : com/amplifyframework/kinesis/KinesisException { public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V } -public final class com/amplifyframework/kinesis/KinesisNetworkException : com/amplifyframework/kinesis/KinesisException { +public final class com/amplifyframework/kinesis/KinesisServiceException : com/amplifyframework/kinesis/KinesisException { + public fun (Ljava/lang/String;Ljava/lang/String;Laws/sdk/kotlin/services/kinesis/model/KinesisException;)V + public fun getCause ()Laws/sdk/kotlin/services/kinesis/model/KinesisException; + public synthetic fun getCause ()Ljava/lang/Throwable; +} + +public final class com/amplifyframework/kinesis/KinesisStorageException : com/amplifyframework/kinesis/KinesisException { public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V } -public final class com/amplifyframework/kinesis/KinesisStorageException : com/amplifyframework/kinesis/KinesisException { +public final class com/amplifyframework/kinesis/KinesisUnknownException : com/amplifyframework/kinesis/KinesisException { public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V } diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreams.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreams.kt index b2d3252647..a221550c78 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreams.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreams.kt @@ -1,22 +1,21 @@ package com.amplifyframework.kinesis import android.content.Context +import aws.sdk.kotlin.services.kinesis.KinesisClient import com.amplifyframework.auth.AWSCredentials import com.amplifyframework.auth.AWSCredentialsProvider import com.amplifyframework.auth.convertToSdkCredentialsProvider +import com.amplifyframework.core.Amplify +import com.amplifyframework.core.category.CategoryType +import com.amplifyframework.logging.Logger import com.amplifyframework.recordcache.AutoFlushScheduler import com.amplifyframework.recordcache.ClearCacheResult import com.amplifyframework.recordcache.FlushResult import com.amplifyframework.recordcache.FlushStrategy import com.amplifyframework.recordcache.FlushStrategy.Interval -import com.amplifyframework.core.Amplify -import com.amplifyframework.core.category.CategoryType -import com.amplifyframework.logging.Logger import com.amplifyframework.recordcache.RecordClient import com.amplifyframework.recordcache.RecordInput -import com.amplifyframework.recordcache.RecordResult import com.amplifyframework.recordcache.SQLiteRecordStorage -import aws.sdk.kotlin.services.kinesis.KinesisClient import kotlin.system.measureTimeMillis /** @@ -32,14 +31,14 @@ import kotlin.system.measureTimeMillis * region = "us-east-1", * credentialsProvider = credentialsProvider * ) - * + * * // Record data * kinesis.record( * data = "Hello Kinesis".toByteArray(), * streamName = "my-stream", * partitionKey = "partition-1" * ) - * + * * // Flush cached records * val result = kinesis.flush() * ``` @@ -77,6 +76,7 @@ class KinesisDataStreams( ) ) private val scheduler: AutoFlushScheduler + @Volatile private var isEnabled = false init { @@ -108,8 +108,14 @@ class KinesisDataStreams( logger.verbose { "Recording to stream: $streamName" } return logOp( operation = { recordClient.record(RecordInput(streamName, partitionKey, data)).map { }.wrapError() }, - logSuccess = { _, timeMs -> logger.debug("Record completed successfully in ${timeMs}ms") }, // TODO: Use lazy evaluation for log messages - logFailure = { error, timeMs -> logger.warn("Record failed in ${timeMs}ms: ${error?.message}") } // TODO: Use lazy evaluation for log messages + logSuccess = { _, timeMs -> + // TODO: Use lazy evaluation for log messages + logger.debug("Record completed successfully in ${timeMs}ms") + }, + logFailure = { error, timeMs -> + // TODO: Use lazy evaluation for log messages + logger.warn("Record failed in ${timeMs}ms: ${error?.message}") + } ) } @@ -117,15 +123,25 @@ class KinesisDataStreams( * Flushes all cached records to their respective Kinesis streams. * * @return Result.success(FlushData) on success, or Result.failure with: - * - [KinesisServiceException] (API/network failures) + * - [KinesisServiceException] (API failures) * - [KinesisStorageException] (database errors) + * - [KinesisUnknownException] (unexpected failures) */ suspend fun flush(): FlushResult { logger.info("Starting flush") return logOp( operation = { recordClient.flush().wrapError() }, - logSuccess = { data, timeMs -> logger.info("Flush completed successfully in ${timeMs}ms - ${data.recordsFlushed} records flushed") }, // TODO: Use lazy evaluation for log messages - logFailure = { error, timeMs -> logger.warn("Flush failed in ${timeMs}ms: ${error?.message}") } // TODO: Use lazy evaluation for log messages + logSuccess = { data, timeMs -> + // TODO: Use lazy evaluation for log messages + logger.info( + "Flush completed successfully in ${timeMs}ms" + + " - ${data.recordsFlushed} records flushed" + ) + }, + logFailure = { error, timeMs -> + // TODO: Use lazy evaluation for log messages + logger.warn("Flush failed in ${timeMs}ms: ${error?.message}") + } ) } @@ -139,8 +155,17 @@ class KinesisDataStreams( logger.info("Clearing cache") return logOp( operation = { recordClient.clearCache().wrapError() }, - logSuccess = { data, timeMs -> logger.info("Clear cache completed successfully in ${timeMs}ms - ${data.recordsCleared} records cleared") }, // TODO: Use lazy evaluation for log messages - logFailure = { error, timeMs -> logger.warn("Clear cache failed in ${timeMs}ms: ${error?.message}") } // TODO: Use lazy evaluation for log messages + logSuccess = { data, timeMs -> + // TODO: Use lazy evaluation for log messages + logger.info( + "Clear cache completed successfully in ${timeMs}ms" + + " - ${data.recordsCleared} records cleared" + ) + }, + logFailure = { error, timeMs -> + // TODO: Use lazy evaluation for log messages + logger.warn("Clear cache failed in ${timeMs}ms: ${error?.message}") + } ) } diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreamsOptions.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreamsOptions.kt index 6de925ed86..8ce6d65eae 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreamsOptions.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreamsOptions.kt @@ -28,10 +28,10 @@ data class KinesisDataStreamsOptions internal constructor( */ @JvmStatic fun builder() = Builder() - + @JvmSynthetic operator fun invoke(func: Builder.() -> Unit) = Builder().apply(func).build() - + /** * Creates [KinesisDataStreamsOptions] with default values. * @@ -40,26 +40,26 @@ data class KinesisDataStreamsOptions internal constructor( @JvmStatic fun defaults() = builder().build() } - + /** * Builder for [KinesisDataStreamsOptions]. */ class Builder internal constructor() { var cacheMaxBytes: Long = DEFAULT_CACHE_SIZE_LIMIT_IN_BYTES @JvmSynthetic set - + var maxRecords: Int = 500 @JvmSynthetic set - + var maxRetries: Int = 5 @JvmSynthetic set - + var flushStrategy: FlushStrategy = FlushStrategy.Interval(30.seconds) @JvmSynthetic set - + var configureClient: KinesisClientConfigurationProvider? = null @JvmSynthetic set - + /** * Sets the maximum cache size in bytes. * @@ -67,7 +67,7 @@ data class KinesisDataStreamsOptions internal constructor( * @return This builder instance */ fun cacheMaxBytes(value: Long) = apply { cacheMaxBytes = value } - + /** * Sets the maximum number of records to cache. * @@ -75,7 +75,7 @@ data class KinesisDataStreamsOptions internal constructor( * @return This builder instance */ fun maxRecords(value: Int) = apply { maxRecords = value } - + /** * Sets the maximum number of retry attempts. * @@ -83,7 +83,7 @@ data class KinesisDataStreamsOptions internal constructor( * @return This builder instance */ fun maxRetries(value: Int) = apply { maxRetries = value } - + /** * Sets the flush strategy for automatic record flushing. * @@ -92,7 +92,7 @@ data class KinesisDataStreamsOptions internal constructor( */ fun flushStrategy(value: FlushStrategy) = apply { flushStrategy = value } fun configureClient(value: KinesisClientConfigurationProvider?) = apply { configureClient = value } - + /** * Builds the [KinesisDataStreamsOptions] with configured values. * diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisException.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisException.kt index b0ea4e5043..01ab795ba2 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisException.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisException.kt @@ -1,5 +1,6 @@ package com.amplifyframework.kinesis +import aws.sdk.kotlin.services.kinesis.model.KinesisException as SdkKinesisException import com.amplifyframework.AmplifyException import com.amplifyframework.recordcache.DEFAULT_RECOVERY_SUGGESTION import com.amplifyframework.recordcache.RecordCacheDatabaseException @@ -14,6 +15,7 @@ import com.amplifyframework.recordcache.RecordCacheLimitExceededException * - [KinesisStorageException] — local cache / database errors * - [KinesisLimitExceededException] — local cache is full * - [KinesisServiceException] — Kinesis API / SDK errors + * - [KinesisUnknownException] — unexpected / uncategorized errors * * @param message Error message describing what went wrong * @param recoverySuggestion Suggested action to resolve the error @@ -32,22 +34,27 @@ sealed class KinesisException( fun from(error: Throwable): KinesisException = when (error) { is KinesisException -> error is RecordCacheDatabaseException -> KinesisStorageException( - message = error.message ?: "A database error occurred", + message = error.message, recoverySuggestion = error.recoverySuggestion, cause = error ) is RecordCacheLimitExceededException -> KinesisLimitExceededException( - message = error.message ?: "Cache limit exceeded", + message = error.message, recoverySuggestion = error.recoverySuggestion, cause = error ) is RecordCacheException -> KinesisStorageException( - message = error.message ?: "A cache error occurred", + message = error.message, recoverySuggestion = error.recoverySuggestion, cause = error ) - else -> KinesisServiceException( - message = error.message ?: "A service error occurred", + is SdkKinesisException -> KinesisServiceException( + message = "A service error occurred", + recoverySuggestion = DEFAULT_RECOVERY_SUGGESTION, + cause = error + ) + else -> KinesisUnknownException( + message = error.message ?: "An unknown error occurred", recoverySuggestion = DEFAULT_RECOVERY_SUGGESTION, cause = error ) @@ -66,7 +73,7 @@ class KinesisStorageException( class KinesisServiceException( message: String, recoverySuggestion: String, - cause: Throwable? = null + override val cause: SdkKinesisException ) : KinesisException(message, recoverySuggestion, cause) /** Local cache size or record limit exceeded. */ @@ -75,3 +82,10 @@ class KinesisLimitExceededException( recoverySuggestion: String, cause: Throwable? = null ) : KinesisException(message, recoverySuggestion, cause) + +/** Unexpected / uncategorized error. */ +class KinesisUnknownException( + message: String, + recoverySuggestion: String, + cause: Throwable? = null +) : KinesisException(message, recoverySuggestion, cause) diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisRecordSender.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisRecordSender.kt index e94787910c..26e3cb3972 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisRecordSender.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisRecordSender.kt @@ -12,7 +12,7 @@ typealias PutRecordsResponseSdk = aws.sdk.kotlin.services.kinesis.model.PutRecor internal class KinesisRecordSender( private val kinesisClient: KinesisClient, - private val maxRetries: Int, + private val maxRetries: Int ) : RecordSender { override suspend fun putRecords(streamName: String, records: List): Result = diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordCacheException.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordCacheException.kt index 9703e714ef..6f7de2c17a 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordCacheException.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordCacheException.kt @@ -5,7 +5,7 @@ package com.amplifyframework.recordcache * Mapped to the public Kinesis exception type at the KinesisDataStreams boundary. */ internal sealed class RecordCacheException( - message: String, + override val message: String, recoverySuggestion: String, cause: Throwable? = null ) : Exception(message, cause) { diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordClient.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordClient.kt index a8882aecef..c788a8f7fe 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordClient.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordClient.kt @@ -1,16 +1,13 @@ package com.amplifyframework.recordcache import java.util.concurrent.atomic.AtomicBoolean -import kotlin.mapCatching internal class RecordClient( private val sender: RecordSender, private val storage: RecordStorage ) { private val isFlushing = AtomicBoolean(false) - suspend fun record(record: RecordInput): RecordResult = mapErrorResult( - storage.addRecord(record).mapCatching { RecordData() } - ) + suspend fun record(record: RecordInput): RecordResult = storage.addRecord(record).mapCatching { RecordData() } suspend fun flush(): FlushResult { // Guard against concurrent flushes to return early From 6573c7487807be4e53926f616fadf900c22bc3e2 Mon Sep 17 00:00:00 2001 From: Jan Vincent Hoffbauer Date: Wed, 18 Feb 2026 17:57:39 +0100 Subject: [PATCH 05/37] Adapt tests --- .../kinesis/KinesisRecordSenderTest.kt | 18 ++++---------- .../recordcache/AutoFlushSchedulerTest.kt | 24 ++++++++++++++----- .../recordcache/RecordClientFlushTest.kt | 4 ++-- 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/aws-kinesis/src/test/java/com/amplifyframework/kinesis/KinesisRecordSenderTest.kt b/aws-kinesis/src/test/java/com/amplifyframework/kinesis/KinesisRecordSenderTest.kt index 39e487bfc6..1afd097726 100644 --- a/aws-kinesis/src/test/java/com/amplifyframework/kinesis/KinesisRecordSenderTest.kt +++ b/aws-kinesis/src/test/java/com/amplifyframework/kinesis/KinesisRecordSenderTest.kt @@ -1,12 +1,10 @@ package com.amplifyframework.kinesis +import aws.sdk.kotlin.services.kinesis.KinesisClient import aws.sdk.kotlin.services.kinesis.model.PutRecordsResultEntry -import com.amplifyframework.auth.AWSCredentials -import com.amplifyframework.auth.AWSCredentialsProvider -import com.amplifyframework.auth.AuthException -import com.amplifyframework.core.Consumer import com.amplifyframework.recordcache.Record import io.kotest.matchers.shouldBe +import io.mockk.mockk import kotlinx.coroutines.test.runTest import org.junit.Test import org.junit.runner.RunWith @@ -15,14 +13,14 @@ import org.robolectric.RobolectricTestRunner @RunWith(RobolectricTestRunner::class) class KinesisRecordSenderTest { - private val testRegion = "us-east-1" private val testStreamName = "test-stream" private val maxRetries = 3 + private val mockClient = mockk() @Test fun `createRequest should construct correct PutRecordsRequest`() = runTest { // Given - val recordSender = KinesisRecordSender(DummyCredentialsProvider(), testRegion, maxRetries) + val recordSender = KinesisRecordSender(mockClient, maxRetries) val records = listOf( createTestRecord(1L, "key1", byteArrayOf(1, 2, 3)), @@ -44,7 +42,7 @@ class KinesisRecordSenderTest { @Test fun `splitResponse should correctly categorize records`() = runTest { // Given - val recordSender = KinesisRecordSender(DummyCredentialsProvider(), testRegion, maxRetries) + val recordSender = KinesisRecordSender(mockClient, maxRetries) val records = listOf( createTestRecord(1L, "key1", byteArrayOf(1), retryCount = 0), // Success @@ -81,10 +79,4 @@ class KinesisRecordSenderTest { retryCount = retryCount, createdAt = System.currentTimeMillis() ) - - private class DummyCredentialsProvider : AWSCredentialsProvider { - override fun fetchAWSCredentials(onSuccess: Consumer, onError: Consumer) { - onSuccess.accept(AWSCredentials("dummy", "dummy")) - } - } } diff --git a/aws-kinesis/src/test/java/com/amplifyframework/recordcache/AutoFlushSchedulerTest.kt b/aws-kinesis/src/test/java/com/amplifyframework/recordcache/AutoFlushSchedulerTest.kt index b197e53baf..5522d7bc24 100644 --- a/aws-kinesis/src/test/java/com/amplifyframework/recordcache/AutoFlushSchedulerTest.kt +++ b/aws-kinesis/src/test/java/com/amplifyframework/recordcache/AutoFlushSchedulerTest.kt @@ -16,11 +16,15 @@ class AutoFlushSchedulerTest { @Test fun `start should begin periodic flushing`() = runTest { // Given - val mockClient = mockk>() + val mockClient = mockk() coEvery { mockClient.flush() } returns Result.success(FlushData(0)) val interval = FlushStrategy.Interval(1.seconds) - val scheduler = AutoFlushScheduler(interval, mockClient, StandardTestDispatcher(testScheduler)) + val scheduler = AutoFlushScheduler( + interval, + mockClient, + StandardTestDispatcher(testScheduler) + ) // When scheduler.start() @@ -34,11 +38,15 @@ class AutoFlushSchedulerTest { @Test fun `disable should stop periodic flushing`() = runTest { // Given - val mockClient = mockk>() + val mockClient = mockk() coEvery { mockClient.flush() } returns Result.success(FlushData(0)) val interval = FlushStrategy.Interval(1.seconds) - val scheduler = AutoFlushScheduler(interval, mockClient, StandardTestDispatcher(testScheduler)) + val scheduler = AutoFlushScheduler( + interval, + mockClient, + StandardTestDispatcher(testScheduler) + ) // When scheduler.start() @@ -53,11 +61,15 @@ class AutoFlushSchedulerTest { @Test fun `start should cancel previous job and restart`() = runTest { // Given - val mockClient = mockk>() + val mockClient = mockk() coEvery { mockClient.flush() } returns Result.success(FlushData(0)) val interval = FlushStrategy.Interval(1.seconds) - val scheduler = AutoFlushScheduler(interval, mockClient, StandardTestDispatcher(testScheduler)) + val scheduler = AutoFlushScheduler( + interval, + mockClient, + StandardTestDispatcher(testScheduler) + ) // When scheduler.start() diff --git a/aws-kinesis/src/test/java/com/amplifyframework/recordcache/RecordClientFlushTest.kt b/aws-kinesis/src/test/java/com/amplifyframework/recordcache/RecordClientFlushTest.kt index 197b3c1968..c9aa556bfe 100644 --- a/aws-kinesis/src/test/java/com/amplifyframework/recordcache/RecordClientFlushTest.kt +++ b/aws-kinesis/src/test/java/com/amplifyframework/recordcache/RecordClientFlushTest.kt @@ -18,7 +18,7 @@ class RecordClientFlushTest { private lateinit var storage: SQLiteRecordStorage private lateinit var mockSender: RecordSender - private lateinit var recordClient: RecordClient + private lateinit var recordClient: RecordClient @Before fun setup() { @@ -30,7 +30,7 @@ class RecordClientFlushTest { dispatcher = Dispatchers.IO ) mockSender = mockk() - recordClient = RecordClient(mockSender, storage) { it } + recordClient = RecordClient(mockSender, storage) } @After From d4c7da6340d564503bef795b421e58d6c293888c Mon Sep 17 00:00:00 2001 From: Matt Creaser Date: Thu, 5 Feb 2026 14:54:01 -0400 Subject: [PATCH 06/37] feat(foundation): Add foundation modules to feature branch (#3193) --- .../KotlinMultiplatformConventionPlugin.kt | 5 + build.gradle.kts | 4 + foundation-bridge/.gitignore | 1 + foundation-bridge/build.gradle.kts | 21 ++++ .../src/androidMain/AndroidManifest.xml | 2 + .../credentials/SmithyCredentials.kt | 47 +++++++++ .../credentials/SmithyCredentialsTest.kt | 96 +++++++++++++++++++ foundation/.gitignore | 1 + foundation/api/foundation.api | 55 +++++++++++ foundation/build.gradle.kts | 25 +++++ foundation/gradle.properties | 4 + .../src/androidMain/AndroidManifest.xml | 2 + .../foundation/credentials/AwsCredentials.kt | 58 +++++++++++ .../credentials/AwsCredentialsProvider.kt | 26 +++++ .../foundation/exceptions/AmplifyException.kt | 31 ++++++ .../amplifyframework/foundation/result/Get.kt | 39 ++++++++ .../amplifyframework/foundation/result/Map.kt | 54 +++++++++++ .../foundation/result/Result.kt | 31 ++++++ .../amplifyframework/foundation/result/Run.kt | 32 +++++++ .../foundation/result/ResultGetTest.kt | 50 ++++++++++ .../foundation/result/ResultMapTest.kt | 78 +++++++++++++++ .../foundation/result/ResultRunTest.kt | 42 ++++++++ gradle/libs.versions.toml | 5 +- settings.gradle.kts | 2 + testutils/build.gradle.kts | 2 + .../foundation/results/ResultAssertions.kt | 68 +++++++++++++ 26 files changed, 780 insertions(+), 1 deletion(-) create mode 100644 foundation-bridge/.gitignore create mode 100644 foundation-bridge/build.gradle.kts create mode 100644 foundation-bridge/src/androidMain/AndroidManifest.xml create mode 100644 foundation-bridge/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentials.kt create mode 100644 foundation-bridge/src/commonTest/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentialsTest.kt create mode 100644 foundation/.gitignore create mode 100644 foundation/api/foundation.api create mode 100644 foundation/build.gradle.kts create mode 100644 foundation/gradle.properties create mode 100644 foundation/src/androidMain/AndroidManifest.xml create mode 100644 foundation/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/AwsCredentials.kt create mode 100644 foundation/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/AwsCredentialsProvider.kt create mode 100644 foundation/src/commonMain/kotlin/com/amplifyframework/foundation/exceptions/AmplifyException.kt create mode 100644 foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Get.kt create mode 100644 foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Map.kt create mode 100644 foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Result.kt create mode 100644 foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Run.kt create mode 100644 foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultGetTest.kt create mode 100644 foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultMapTest.kt create mode 100644 foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultRunTest.kt create mode 100644 testutils/src/main/java/com/amplifyframework/testutils/foundation/results/ResultAssertions.kt diff --git a/build-logic/plugins/src/main/kotlin/KotlinMultiplatformConventionPlugin.kt b/build-logic/plugins/src/main/kotlin/KotlinMultiplatformConventionPlugin.kt index fc0ad07fae..be4b96ebbc 100644 --- a/build-logic/plugins/src/main/kotlin/KotlinMultiplatformConventionPlugin.kt +++ b/build-logic/plugins/src/main/kotlin/KotlinMultiplatformConventionPlugin.kt @@ -77,6 +77,11 @@ class KotlinMultiplatformConventionPlugin : Plugin { } } } + + compilerOptions { + freeCompilerArgs.addAll(amplifyInternalMarkers.map { "-opt-in=$it" }) + freeCompilerArgs.add("-Xconsistent-data-class-copy-visibility") + } } } } diff --git a/build.gradle.kts b/build.gradle.kts index 20b552b516..640b7f551b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -44,6 +44,10 @@ plugins { alias(libs.plugins.amplify.kover) apply false alias(libs.plugins.amplify.ktlint) apply false alias(libs.plugins.amplify.licenses) apply false + + alias(libs.plugins.kotlin.multiplatform) apply false + alias(libs.plugins.android.kotlin.multiplatform.library) apply false + alias(libs.plugins.android.lint) apply false } tasks.register("clean").configure { diff --git a/foundation-bridge/.gitignore b/foundation-bridge/.gitignore new file mode 100644 index 0000000000..42afabfd2a --- /dev/null +++ b/foundation-bridge/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/foundation-bridge/build.gradle.kts b/foundation-bridge/build.gradle.kts new file mode 100644 index 0000000000..1d3b323d49 --- /dev/null +++ b/foundation-bridge/build.gradle.kts @@ -0,0 +1,21 @@ +plugins { + alias(libs.plugins.amplify.kmp) +} + +kotlin { + sourceSets { + commonMain { + dependencies { + api(project(":foundation")) + api(libs.aws.credentials) + } + } + + commonTest { + dependencies { + implementation(libs.test.kotest.assertions) + implementation(libs.test.kotlin.coroutines) + } + } + } +} diff --git a/foundation-bridge/src/androidMain/AndroidManifest.xml b/foundation-bridge/src/androidMain/AndroidManifest.xml new file mode 100644 index 0000000000..568741e54f --- /dev/null +++ b/foundation-bridge/src/androidMain/AndroidManifest.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/foundation-bridge/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentials.kt b/foundation-bridge/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentials.kt new file mode 100644 index 0000000000..4760f7f67c --- /dev/null +++ b/foundation-bridge/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentials.kt @@ -0,0 +1,47 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.credentials + +import aws.smithy.kotlin.runtime.auth.awscredentials.Credentials +import aws.smithy.kotlin.runtime.auth.awscredentials.CredentialsProvider +import aws.smithy.kotlin.runtime.collections.Attributes +import aws.smithy.kotlin.runtime.time.Instant as SmithyInstant +import com.amplifyframework.annotations.InternalAmplifyApi +import kotlin.time.ExperimentalTime +import kotlin.time.Instant + +@InternalAmplifyApi +@OptIn(ExperimentalTime::class) +fun AwsCredentials.toSmithyCredentials(): Credentials = when (this) { + is AwsCredentials.Static -> Credentials( + accessKeyId = this.accessKeyId, + secretAccessKey = this.secretAccessKey + ) + is AwsCredentials.Temporary -> Credentials( + accessKeyId = this.accessKeyId, + secretAccessKey = this.secretAccessKey, + sessionToken = this.sessionToken, + expiration = this.expiration.toSmithyInstant() + ) +} + +@InternalAmplifyApi +fun AwsCredentialsProvider<*>.toSmithyProvider() = object : CredentialsProvider { + override suspend fun resolve(attributes: Attributes) = this@toSmithyProvider.resolve().toSmithyCredentials() +} + +@OptIn(ExperimentalTime::class) +private fun Instant.toSmithyInstant() = SmithyInstant.fromEpochSeconds(epochSeconds) diff --git a/foundation-bridge/src/commonTest/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentialsTest.kt b/foundation-bridge/src/commonTest/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentialsTest.kt new file mode 100644 index 0000000000..d2d67129b8 --- /dev/null +++ b/foundation-bridge/src/commonTest/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentialsTest.kt @@ -0,0 +1,96 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.credentials + +import aws.smithy.kotlin.runtime.auth.awscredentials.Credentials +import aws.smithy.kotlin.runtime.collections.emptyAttributes +import aws.smithy.kotlin.runtime.time.Instant as SmithyInstant +import io.kotest.matchers.nulls.shouldBeNull +import io.kotest.matchers.shouldBe +import kotlin.time.ExperimentalTime +import kotlin.time.Instant +import kotlinx.coroutines.test.runTest +import org.junit.Test + +@OptIn(ExperimentalTime::class) +class SmithyCredentialsTest { + private val expiration = Instant.fromEpochSeconds(1770130997) + + @Test + fun `maps static credentials`() { + val awsCredentials = AwsCredentials.Static( + accessKeyId = "access", + secretAccessKey = "secret" + ) + + val mapped: Credentials = awsCredentials.toSmithyCredentials() + + mapped.accessKeyId shouldBe "access" + mapped.secretAccessKey shouldBe "secret" + mapped.sessionToken.shouldBeNull() + mapped.expiration.shouldBeNull() + } + + @Test + fun `maps temporary credentials`() { + val awsCredentials = AwsCredentials.Temporary( + accessKeyId = "access", + secretAccessKey = "secret", + sessionToken = "session", + expiration = expiration + ) + + val mapped: Credentials = awsCredentials.toSmithyCredentials() + + mapped.accessKeyId shouldBe "access" + mapped.secretAccessKey shouldBe "secret" + mapped.sessionToken shouldBe "session" + mapped.expiration shouldBe SmithyInstant.fromEpochSeconds(expiration.epochSeconds) + } + + @Test + fun `provider maps static credentials`() = runTest { + val staticProvider = AwsCredentialsProvider { + AwsCredentials.Static(accessKeyId = "access", secretAccessKey = "secret") + } + val mappedProvider = staticProvider.toSmithyProvider() + val credentials: Credentials = mappedProvider.resolve(emptyAttributes()) + + credentials.accessKeyId shouldBe "access" + credentials.secretAccessKey shouldBe "secret" + credentials.sessionToken.shouldBeNull() + credentials.expiration.shouldBeNull() + } + + @Test + fun `provider maps temporary credentials`() = runTest { + val temporaryProvider = AwsCredentialsProvider { + AwsCredentials.Temporary( + accessKeyId = "access", + secretAccessKey = "secret", + sessionToken = "session", + expiration = expiration + ) + } + val mappedProvider = temporaryProvider.toSmithyProvider() + val credentials: Credentials = mappedProvider.resolve(emptyAttributes()) + + credentials.accessKeyId shouldBe "access" + credentials.secretAccessKey shouldBe "secret" + credentials.sessionToken shouldBe "session" + credentials.expiration shouldBe SmithyInstant.fromEpochSeconds(expiration.epochSeconds) + } +} diff --git a/foundation/.gitignore b/foundation/.gitignore new file mode 100644 index 0000000000..42afabfd2a --- /dev/null +++ b/foundation/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/foundation/api/foundation.api b/foundation/api/foundation.api new file mode 100644 index 0000000000..ae73d5b322 --- /dev/null +++ b/foundation/api/foundation.api @@ -0,0 +1,55 @@ +public abstract interface class com/amplifyframework/foundation/credentials/AwsCredentials { + public abstract fun getAccessKeyId ()Ljava/lang/String; + public abstract fun getSecretAccessKey ()Ljava/lang/String; +} + +public final class com/amplifyframework/foundation/credentials/AwsCredentials$Static : com/amplifyframework/foundation/credentials/AwsCredentials { + public fun (Ljava/lang/String;Ljava/lang/String;)V + public fun getAccessKeyId ()Ljava/lang/String; + public fun getSecretAccessKey ()Ljava/lang/String; +} + +public final class com/amplifyframework/foundation/credentials/AwsCredentials$Temporary : com/amplifyframework/foundation/credentials/AwsCredentials { + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/time/Instant;)V + public fun getAccessKeyId ()Ljava/lang/String; + public final fun getExpiration ()Lkotlin/time/Instant; + public fun getSecretAccessKey ()Ljava/lang/String; + public final fun getSessionToken ()Ljava/lang/String; +} + +public abstract interface class com/amplifyframework/foundation/credentials/AwsCredentialsProvider { + public abstract fun resolve (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +} + +public abstract class com/amplifyframework/foundation/exceptions/AmplifyException : java/lang/Exception { + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun getRecoverySuggestion ()Ljava/lang/String; + public fun toString ()Ljava/lang/String; +} + +public abstract interface class com/amplifyframework/foundation/result/Result { +} + +public final class com/amplifyframework/foundation/result/Result$Failure : com/amplifyframework/foundation/result/Result { + public fun (Ljava/lang/Object;)V + public final fun component1 ()Ljava/lang/Object; + public final fun copy (Ljava/lang/Object;)Lcom/amplifyframework/foundation/result/Result$Failure; + public static synthetic fun copy$default (Lcom/amplifyframework/foundation/result/Result$Failure;Ljava/lang/Object;ILjava/lang/Object;)Lcom/amplifyframework/foundation/result/Result$Failure; + public fun equals (Ljava/lang/Object;)Z + public final fun getError ()Ljava/lang/Object; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class com/amplifyframework/foundation/result/Result$Success : com/amplifyframework/foundation/result/Result { + public fun (Ljava/lang/Object;)V + public final fun component1 ()Ljava/lang/Object; + public final fun copy (Ljava/lang/Object;)Lcom/amplifyframework/foundation/result/Result$Success; + public static synthetic fun copy$default (Lcom/amplifyframework/foundation/result/Result$Success;Ljava/lang/Object;ILjava/lang/Object;)Lcom/amplifyframework/foundation/result/Result$Success; + public fun equals (Ljava/lang/Object;)Z + public final fun getData ()Ljava/lang/Object; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + diff --git a/foundation/build.gradle.kts b/foundation/build.gradle.kts new file mode 100644 index 0000000000..c65544fa0c --- /dev/null +++ b/foundation/build.gradle.kts @@ -0,0 +1,25 @@ +plugins { + alias(libs.plugins.amplify.kmp) + alias(libs.plugins.amplify.publishing) +} + +kotlin { + sourceSets { + commonMain { + dependencies { + api(project(":annotations")) + } + } + + commonTest { + dependencies { + implementation(libs.test.kotest.assertions) + implementation(project(":testutils")) + } + } + } + + compilerOptions { + optIn.add("kotlin.contracts.ExperimentalContracts") + } +} diff --git a/foundation/gradle.properties b/foundation/gradle.properties new file mode 100644 index 0000000000..736a0e023b --- /dev/null +++ b/foundation/gradle.properties @@ -0,0 +1,4 @@ +POM_ARTIFACT_ID=foundation +POM_NAME=Amplify Framework for Android - Foundation +POM_DESCRIPTION=Amplify Framework for Android - Foundational library +POM_PACKAGING=aar diff --git a/foundation/src/androidMain/AndroidManifest.xml b/foundation/src/androidMain/AndroidManifest.xml new file mode 100644 index 0000000000..568741e54f --- /dev/null +++ b/foundation/src/androidMain/AndroidManifest.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/AwsCredentials.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/AwsCredentials.kt new file mode 100644 index 0000000000..6b8f761f35 --- /dev/null +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/AwsCredentials.kt @@ -0,0 +1,58 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.credentials + +import kotlin.time.ExperimentalTime +import kotlin.time.Instant + +/** + * Provides access to the AWS credentials used for accessing AWS services: AWS + * access key ID and secret access key. These credentials are used to securely + * sign requests to AWS services. + * + * For more details on AWS access keys, + * [see](https://docs.aws.amazon.com/general/latest/gr/aws-security-credentials.html) + */ +sealed interface AwsCredentials { + /** + * The AWS access key ID for this credentials object. + */ + val accessKeyId: String + + /** + * The AWS secret access key for this credentials object. + */ + val secretAccessKey: String + + /** + * Long-term AWS credentials, such as those granted to Admin Users + */ + class Static( + override val accessKeyId: String, + override val secretAccessKey: String + ) : AwsCredentials + + /** + * Temporary credentials, such as those vended by STS + */ + @OptIn(ExperimentalTime::class) + class Temporary( + override val accessKeyId: String, + override val secretAccessKey: String, + val sessionToken: String, + val expiration: Instant + ) : AwsCredentials +} diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/AwsCredentialsProvider.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/AwsCredentialsProvider.kt new file mode 100644 index 0000000000..3b03168c68 --- /dev/null +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/AwsCredentialsProvider.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.credentials + +/** + * Interface for providers of AWS Credentials + */ +fun interface AwsCredentialsProvider { + /** + * Resolve and return the credentials + */ + suspend fun resolve(): T +} diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/exceptions/AmplifyException.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/exceptions/AmplifyException.kt new file mode 100644 index 0000000000..df5f5b9747 --- /dev/null +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/exceptions/AmplifyException.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.exceptions + +/** + * Top-level exception in the Amplify framework. All other Amplify exceptions should extend this. + * @param message An error message describing why this exception was thrown + * @param recoverySuggestion Text suggesting a way to recover from the error being described + * @param cause The underlying cause of this exception + */ +abstract class AmplifyException( + message: String, + val recoverySuggestion: String, + cause: Throwable? = null +) : Exception(message, cause) { + override fun toString() = + "${this::class.simpleName}(message=$message, cause=$cause, recoverySuggestion=$recoverySuggestion)" +} diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Get.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Get.kt new file mode 100644 index 0000000000..727dd468f5 --- /dev/null +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Get.kt @@ -0,0 +1,39 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.result + +import com.amplifyframework.annotations.InternalAmplifyApi +import kotlin.contracts.contract + +@InternalAmplifyApi +fun Result.getOrThrow(): T { + contract { + returns() implies (this@getOrThrow is Result.Success) + } + return when (this) { + is Result.Failure -> throw error + is Result.Success -> data + } +} + +@InternalAmplifyApi +fun Result.getOrNull(): T? { + contract { + returnsNotNull() implies (this@getOrNull is Result.Success) + returns(null) implies (this@getOrNull is Result.Failure) + } + return if (this is Result.Success) data else null +} diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Map.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Map.kt new file mode 100644 index 0000000000..ee8bd32bb3 --- /dev/null +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Map.kt @@ -0,0 +1,54 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.result + +import com.amplifyframework.annotations.InternalAmplifyApi +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +@InternalAmplifyApi +inline infix fun Result.mapFailure(mapper: (E) -> E2): Result { + contract { + callsInPlace(mapper, InvocationKind.AT_MOST_ONCE) + } + return when (this) { + is Result.Success -> this + is Result.Failure -> Result.Failure(mapper(this.error)) + } +} + +@InternalAmplifyApi +inline infix fun Result.mapSuccess(mapper: (T) -> T2): Result { + contract { + callsInPlace(mapper, InvocationKind.AT_MOST_ONCE) + } + return when (this) { + is Result.Failure -> this + is Result.Success -> Result.Success(mapper(this.data)) + } +} + +@InternalAmplifyApi +inline fun Result.mapBoth(mapSuccess: (T) -> T2, mapFailure: (E) -> E2): Result { + contract { + callsInPlace(mapSuccess, InvocationKind.AT_MOST_ONCE) + callsInPlace(mapFailure, InvocationKind.AT_MOST_ONCE) + } + return when (this) { + is Result.Failure -> Result.Failure(mapFailure(this.error)) + is Result.Success -> Result.Success(mapSuccess(this.data)) + } +} diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Result.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Result.kt new file mode 100644 index 0000000000..462589d11c --- /dev/null +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Result.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.result + +/** + * The result of a single operation. + */ +sealed interface Result { + /** + * Result type that indicates the operation was successful + */ + data class Success(val data: T) : Result + + /** + * Result type that indicates the operation was not successful + */ + data class Failure(val error: E) : Result +} diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Run.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Run.kt new file mode 100644 index 0000000000..22c8c00499 --- /dev/null +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Run.kt @@ -0,0 +1,32 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.result + +import com.amplifyframework.annotations.InternalAmplifyApi +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +@InternalAmplifyApi +inline fun runCatching(block: () -> T): Result { + contract { + callsInPlace(block, InvocationKind.AT_MOST_ONCE) + } + return try { + Result.Success(block()) + } catch (e: Throwable) { + Result.Failure(e) + } +} diff --git a/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultGetTest.kt b/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultGetTest.kt new file mode 100644 index 0000000000..439cf09c77 --- /dev/null +++ b/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultGetTest.kt @@ -0,0 +1,50 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.result + +import io.kotest.assertions.throwables.shouldThrow +import io.kotest.matchers.nulls.shouldBeNull +import io.kotest.matchers.shouldBe +import java.io.IOException +import org.junit.Test + +class ResultGetTest { + @Test + fun `getOrNull returns data for success`() { + val success: Result = Result.Success(15) + success.getOrNull() shouldBe 15 + } + + @Test + fun `getOrNull returns null for failure`() { + val failure: Result = Result.Failure("failed") + failure.getOrNull().shouldBeNull() + } + + @Test + fun `getOrThrow returns data for success`() { + val success = Result.Success("yay") + success.getOrThrow() shouldBe "yay" + } + + @Test + fun `getOrThrow throws exception for failure`() { + shouldThrow { + val failure = Result.Failure(IOException("failed")) + failure.getOrThrow() + } + } +} diff --git a/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultMapTest.kt b/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultMapTest.kt new file mode 100644 index 0000000000..a4019ad614 --- /dev/null +++ b/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultMapTest.kt @@ -0,0 +1,78 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.result + +import com.amplifyframework.testutils.foundation.results.shouldBeFailure +import com.amplifyframework.testutils.foundation.results.shouldBeSuccess +import org.junit.Test + +class ResultMapTest { + + enum class OriginalFailure { + BadNetwork, + DnsIssue, + InvalidInput, + InputTooLong + } + + enum class MappedFailure { + NetworkProblem, + InputProblem + } + + @Test + fun `mapFailure maps failure`() { + val mapped = Result.Failure(OriginalFailure.BadNetwork).mapFailure(::failureMapper) + mapped shouldBeFailure MappedFailure.NetworkProblem + } + + @Test + fun `mapFailure does not map success as failure`() { + val mapped = Result.Success(5).mapFailure(::failureMapper) + mapped shouldBeSuccess 5 + } + + @Test + fun `mapSuccess maps success`() { + val mapped = Result.Success(3).mapSuccess(::successMapper) + mapped shouldBeSuccess 30 + } + + @Test + fun `mapSuccess does not map failure as success`() { + val mapped = Result.Failure(OriginalFailure.DnsIssue).mapSuccess(::successMapper) + mapped shouldBeFailure OriginalFailure.DnsIssue + } + + @Test + fun `mapBoth maps failure`() { + val mapped = Result.Failure(OriginalFailure.InputTooLong).mapBoth(::successMapper, ::failureMapper) + mapped shouldBeFailure MappedFailure.InputProblem + } + + @Test + fun `mapBoth maps success`() { + val mapped = Result.Success(4).mapBoth(::successMapper, ::failureMapper) + mapped shouldBeSuccess 40 + } + + private fun failureMapper(original: OriginalFailure) = when (original) { + OriginalFailure.InvalidInput, OriginalFailure.InputTooLong -> MappedFailure.InputProblem + else -> MappedFailure.NetworkProblem + } + + private fun successMapper(original: Int) = original * 10 +} diff --git a/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultRunTest.kt b/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultRunTest.kt new file mode 100644 index 0000000000..9422e8eb43 --- /dev/null +++ b/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultRunTest.kt @@ -0,0 +1,42 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.result + +import com.amplifyframework.foundation.result.runCatching as localRunCatching +import com.amplifyframework.testutils.foundation.results.shouldBeFailure +import com.amplifyframework.testutils.foundation.results.shouldBeSuccess +import org.junit.Test + +class ResultRunTest { + @Test + fun `runCatching returns success result`() { + val result = localRunCatching { + 10 + } + result shouldBeSuccess 10 + } + + @Test + fun `runCatching returns failure result for thrown exception`() { + val exception = RuntimeException("failed") + + val result = localRunCatching { + throw exception + } + + result shouldBeFailure exception + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3981b4c5ed..51d0db0f2c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -154,11 +154,14 @@ plugin-ktlint = { module = "org.jlleitschuh.gradle:ktlint-gradle", version.ref = plugin-licensee = { module = "app.cash.licensee:app.cash.licensee.gradle.plugin", version.ref = "licensee" } [plugins] +android-kotlin-multiplatform-library = { id = "com.android.kotlin.multiplatform.library", version.ref = "agp" } android-library = { id = "com.android.library", version.ref = "agp" } +android-lint = { id = "com.android.lint", version.ref = "agp" } apollo = { id = "com.apollographql.apollo", version.ref = "apollo" } binary-compatibility-validator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "binary-compatibility-validator" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } +kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" } kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } kover = { id = "org.jetbrains.kotlinx.kover", version.ref = "kover" } @@ -167,8 +170,8 @@ licensee = { id = "app.cash.licensee", version.ref = "licensee" } # Internal convention plugins amplify-api = { id = "amplify.api" } -amplify-kotlin = { id = "amplify.kotlin" } amplify-kmp = { id = "amplify.kotlin.multiplatform" } +amplify-kotlin = { id = "amplify.kotlin" } amplify-kover = { id = "amplify.kover" } amplify-ktlint = { id = "amplify.ktlint" } amplify-android-library = { id = "amplify.android.library" } diff --git a/settings.gradle.kts b/settings.gradle.kts index 2417850b90..4b842ea1e6 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -77,3 +77,5 @@ include(":apollo-appsync") include(":apollo-appsync-amplify") project(":apollo-appsync").projectDir = file("apollo/apollo-appsync") project(":apollo-appsync-amplify").projectDir = file("apollo/apollo-appsync-amplify") +include(":foundation") +include(":foundation-bridge") diff --git a/testutils/build.gradle.kts b/testutils/build.gradle.kts index 1cdcd61b66..528e48fe92 100644 --- a/testutils/build.gradle.kts +++ b/testutils/build.gradle.kts @@ -24,6 +24,8 @@ android { dependencies { implementation(project(":core")) + implementation(project(":foundation")) + implementation(libs.test.junit) implementation(libs.test.mockito.core) implementation(libs.test.androidx.core) diff --git a/testutils/src/main/java/com/amplifyframework/testutils/foundation/results/ResultAssertions.kt b/testutils/src/main/java/com/amplifyframework/testutils/foundation/results/ResultAssertions.kt new file mode 100644 index 0000000000..e3a197ad9a --- /dev/null +++ b/testutils/src/main/java/com/amplifyframework/testutils/foundation/results/ResultAssertions.kt @@ -0,0 +1,68 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +@file:OptIn(ExperimentalContracts::class) + +package com.amplifyframework.testutils.foundation.results + +import com.amplifyframework.foundation.result.Result +import io.kotest.matchers.Matcher +import io.kotest.matchers.MatcherResult +import io.kotest.matchers.should +import io.kotest.matchers.shouldBe +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.contract + +private fun beFailure() = Matcher> { value -> + MatcherResult( + value is Result.Failure, + { "result expected to be failure but was success" }, + { "result expected to not be failure but was failure" } + ) +} + +private fun beSuccess() = Matcher> { value -> + MatcherResult( + value is Result.Success, + { "result expected to be success but was failure" }, + { "result expected to not be success but was success" } + ) +} + +fun Result.shouldBeFailure(): Result.Failure { + contract { + returns() implies (this@shouldBeFailure is Result.Failure) + } + this should beFailure() + return this as Result.Failure +} + +fun Result.shouldBeSuccess(): Result.Success { + contract { + returns() implies (this@shouldBeSuccess is Result.Success) + } + this should beSuccess() + return this as Result.Success +} + +infix fun Result.shouldBeFailure(expected: E): Result.Failure { + this.shouldBeFailure().error shouldBe expected + return this +} + +infix fun Result.shouldBeSuccess(expected: T): Result.Success { + this.shouldBeSuccess().data shouldBe expected + return this +} From b7abc8885cac2b4554493adef314483e15667cd1 Mon Sep 17 00:00:00 2001 From: Matt Creaser Date: Thu, 19 Feb 2026 09:15:49 -0400 Subject: [PATCH 07/37] feat(foundation): Add Debug Logging API (#3198) --- foundation/api/foundation.api | 47 ++++ foundation/build.gradle.kts | 6 + .../foundation/AndroidLogSinkTest.kt | 232 +++++++++++++++++ .../foundation/AndroidLogSink.kt | 45 ++++ .../foundation/logging/AmplifyLogging.kt | 70 ++++++ .../foundation/logging/LogLevel.kt | 69 +++++ .../foundation/logging/LogMessage.kt | 30 +++ .../foundation/logging/LogSink.kt | 35 +++ .../foundation/logging/Logger.kt | 115 +++++++++ .../foundation/logging/AmplifyLoggingTest.kt | 235 ++++++++++++++++++ 10 files changed, 884 insertions(+) create mode 100644 foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation/AndroidLogSinkTest.kt create mode 100644 foundation/src/androidMain/kotlin/com/amplifyframework/foundation/AndroidLogSink.kt create mode 100644 foundation/src/commonMain/kotlin/com/amplifyframework/foundation/logging/AmplifyLogging.kt create mode 100644 foundation/src/commonMain/kotlin/com/amplifyframework/foundation/logging/LogLevel.kt create mode 100644 foundation/src/commonMain/kotlin/com/amplifyframework/foundation/logging/LogMessage.kt create mode 100644 foundation/src/commonMain/kotlin/com/amplifyframework/foundation/logging/LogSink.kt create mode 100644 foundation/src/commonMain/kotlin/com/amplifyframework/foundation/logging/Logger.kt create mode 100644 foundation/src/commonTest/kotlin/com/amplifyframework/foundation/logging/AmplifyLoggingTest.kt diff --git a/foundation/api/foundation.api b/foundation/api/foundation.api index ae73d5b322..2ac8f1d963 100644 --- a/foundation/api/foundation.api +++ b/foundation/api/foundation.api @@ -1,3 +1,11 @@ +public final class com/amplifyframework/foundation/AndroidLogSink : com/amplifyframework/foundation/logging/LogSink { + public fun ()V + public fun (Lcom/amplifyframework/foundation/logging/LogLevel;)V + public synthetic fun (Lcom/amplifyframework/foundation/logging/LogLevel;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun emit (Lcom/amplifyframework/foundation/logging/LogMessage;)V + public fun isEnabledFor (Lcom/amplifyframework/foundation/logging/LogLevel;)Z +} + public abstract interface class com/amplifyframework/foundation/credentials/AwsCredentials { public abstract fun getAccessKeyId ()Ljava/lang/String; public abstract fun getSecretAccessKey ()Ljava/lang/String; @@ -28,6 +36,45 @@ public abstract class com/amplifyframework/foundation/exceptions/AmplifyExceptio public fun toString ()Ljava/lang/String; } +public final class com/amplifyframework/foundation/logging/AmplifyLogging { + public static final field INSTANCE Lcom/amplifyframework/foundation/logging/AmplifyLogging; + public static final fun addSink (Lcom/amplifyframework/foundation/logging/LogSink;)V +} + +public final class com/amplifyframework/foundation/logging/LogLevel : java/lang/Enum { + public static final field Debug Lcom/amplifyframework/foundation/logging/LogLevel; + public static final field Error Lcom/amplifyframework/foundation/logging/LogLevel; + public static final field Info Lcom/amplifyframework/foundation/logging/LogLevel; + public static final field None Lcom/amplifyframework/foundation/logging/LogLevel; + public static final field Verbose Lcom/amplifyframework/foundation/logging/LogLevel; + public static final field Warn Lcom/amplifyframework/foundation/logging/LogLevel; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public static fun valueOf (Ljava/lang/String;)Lcom/amplifyframework/foundation/logging/LogLevel; + public static fun values ()[Lcom/amplifyframework/foundation/logging/LogLevel; +} + +public final class com/amplifyframework/foundation/logging/LogMessage { + public fun (Lcom/amplifyframework/foundation/logging/LogLevel;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V + public final fun component1 ()Lcom/amplifyframework/foundation/logging/LogLevel; + public final fun component2 ()Ljava/lang/String; + public final fun component3 ()Ljava/lang/String; + public final fun component4 ()Ljava/lang/Throwable; + public final fun copy (Lcom/amplifyframework/foundation/logging/LogLevel;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)Lcom/amplifyframework/foundation/logging/LogMessage; + public static synthetic fun copy$default (Lcom/amplifyframework/foundation/logging/LogMessage;Lcom/amplifyframework/foundation/logging/LogLevel;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILjava/lang/Object;)Lcom/amplifyframework/foundation/logging/LogMessage; + public fun equals (Ljava/lang/Object;)Z + public final fun getCause ()Ljava/lang/Throwable; + public final fun getContent ()Ljava/lang/String; + public final fun getLevel ()Lcom/amplifyframework/foundation/logging/LogLevel; + public final fun getName ()Ljava/lang/String; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public abstract interface class com/amplifyframework/foundation/logging/LogSink { + public abstract fun emit (Lcom/amplifyframework/foundation/logging/LogMessage;)V + public abstract fun isEnabledFor (Lcom/amplifyframework/foundation/logging/LogLevel;)Z +} + public abstract interface class com/amplifyframework/foundation/result/Result { } diff --git a/foundation/build.gradle.kts b/foundation/build.gradle.kts index c65544fa0c..3893b79076 100644 --- a/foundation/build.gradle.kts +++ b/foundation/build.gradle.kts @@ -17,6 +17,12 @@ kotlin { implementation(project(":testutils")) } } + + getByName("androidHostTest") { + dependencies { + implementation(libs.test.mockk) + } + } } compilerOptions { diff --git a/foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation/AndroidLogSinkTest.kt b/foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation/AndroidLogSinkTest.kt new file mode 100644 index 0000000000..b0b0196665 --- /dev/null +++ b/foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation/AndroidLogSinkTest.kt @@ -0,0 +1,232 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation + +import android.util.Log +import com.amplifyframework.foundation.logging.LogLevel +import com.amplifyframework.foundation.logging.LogMessage +import io.kotest.matchers.booleans.shouldBeFalse +import io.kotest.matchers.booleans.shouldBeTrue +import io.mockk.every +import io.mockk.mockkStatic +import io.mockk.unmockkStatic +import io.mockk.verify +import io.mockk.verifySequence +import kotlin.test.AfterTest +import kotlin.test.BeforeTest +import org.junit.Test + +class AndroidLogSinkTest { + @BeforeTest + fun setup() { + mockkStatic(Log::class) + every { Log.v(any(), any(), any()) } returns 1 + every { Log.d(any(), any(), any()) } returns 1 + every { Log.i(any(), any(), any()) } returns 1 + every { Log.w(any(), any(), any()) } returns 1 + every { Log.e(any(), any(), any()) } returns 1 + } + + @AfterTest + fun teardown() { + unmockkStatic(Log::class) + } + + @Test + fun `verbose logs sent to logcat`() { + val sink = AndroidLogSink(LogLevel.Verbose) + + sink.emit( + LogMessage( + level = LogLevel.Verbose, + name = "testLogger", + content = "test message", + cause = null + ) + ) + + verify { + Log.v("testLogger", "test message", null) + } + } + + @Test + fun `debug logs sent to logcat`() { + val sink = AndroidLogSink(LogLevel.Verbose) + + sink.emit( + LogMessage( + level = LogLevel.Debug, + name = "testLogger", + content = "test message", + cause = null + ) + ) + + verify { + Log.d("testLogger", "test message", null) + } + } + + @Test + fun `info logs sent to logcat`() { + val sink = AndroidLogSink() + + sink.emit( + LogMessage( + level = LogLevel.Info, + name = "testLogger", + content = "test message", + cause = null + ) + ) + + verify { + Log.i("testLogger", "test message", null) + } + } + + @Test + fun `warn logs sent to logcat`() { + val sink = AndroidLogSink() + + sink.emit( + LogMessage( + level = LogLevel.Warn, + name = "testLogger", + content = "test message", + cause = null + ) + ) + + verify { + Log.w("testLogger", "test message", null) + } + } + + @Test + fun `error logs sent to logcat`() { + val sink = AndroidLogSink() + + sink.emit( + LogMessage( + level = LogLevel.Error, + name = "testLogger", + content = "test message", + cause = null + ) + ) + + verify { + Log.e("testLogger", "test message", null) + } + } + + @Test + fun `multiple logs are emitted`() { + val sink = AndroidLogSink() + + sink.emit( + LogMessage( + level = LogLevel.Info, + name = "infoLogger", + content = "info1", + cause = null + ) + ) + sink.emit( + LogMessage( + level = LogLevel.Info, + name = "infoLogger2", + content = "info2", + cause = null + ) + ) + sink.emit( + LogMessage( + level = LogLevel.Error, + name = "errorLogger", + content = "error", + cause = null + ) + ) + + verifySequence { + Log.i("infoLogger", "info1", null) + Log.i("infoLogger2", "info2", null) + Log.e("errorLogger", "error", null) + } + } + + @Test + fun `logs not emitted if below level`() { + val sink = AndroidLogSink(threshold = LogLevel.Warn) + + sink.emit( + LogMessage( + level = LogLevel.Error, + name = "testLogger", + content = "test message", + cause = null + ) + ) + sink.emit( + LogMessage( + level = LogLevel.Info, + name = "testLogger", + content = "test message", + cause = null + ) + ) + + verify { + Log.e("testLogger", "test message", null) + } + verify(exactly = 0) { + Log.i(any(), any(), any()) + } + } + + @Test + fun `throwables are passed to logcat`() { + val sink = AndroidLogSink() + val error = RuntimeException("error") + + sink.emit( + LogMessage( + level = LogLevel.Info, + name = "testLogger", + content = "test message", + cause = error + ) + ) + + verify { + Log.i("testLogger", "test message", error) + } + } + + @Test + fun `sink respects supplied threshold`() { + val sink = AndroidLogSink(threshold = LogLevel.Warn) + + sink.isEnabledFor(LogLevel.Verbose).shouldBeFalse() + sink.isEnabledFor(LogLevel.Debug).shouldBeFalse() + sink.isEnabledFor(LogLevel.Info).shouldBeFalse() + sink.isEnabledFor(LogLevel.Warn).shouldBeTrue() + sink.isEnabledFor(LogLevel.Error).shouldBeTrue() + } +} diff --git a/foundation/src/androidMain/kotlin/com/amplifyframework/foundation/AndroidLogSink.kt b/foundation/src/androidMain/kotlin/com/amplifyframework/foundation/AndroidLogSink.kt new file mode 100644 index 0000000000..a51dfcd339 --- /dev/null +++ b/foundation/src/androidMain/kotlin/com/amplifyframework/foundation/AndroidLogSink.kt @@ -0,0 +1,45 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation + +import android.util.Log +import com.amplifyframework.foundation.logging.LogLevel +import com.amplifyframework.foundation.logging.LogMessage +import com.amplifyframework.foundation.logging.LogSink +import com.amplifyframework.foundation.logging.allows + +/** + * A sink to use with AmplifyLogging that sends log messages to logcat. + * @param threshold The minimum level for emitted logs. Logs below this level will be ignored. + */ +class AndroidLogSink( + private val threshold: LogLevel = LogLevel.Info +) : LogSink { + override fun isEnabledFor(level: LogLevel) = threshold allows level + + override fun emit(message: LogMessage) { + if (threshold allows message.level) { + when (message.level) { + LogLevel.Verbose -> Log.v(message.name, message.content, message.cause) + LogLevel.Debug -> Log.d(message.name, message.content, message.cause) + LogLevel.Info -> Log.i(message.name, message.content, message.cause) + LogLevel.Warn -> Log.w(message.name, message.content, message.cause) + LogLevel.Error -> Log.e(message.name, message.content, message.cause) + LogLevel.None -> Unit // No-Op + } + } + } +} diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/logging/AmplifyLogging.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/logging/AmplifyLogging.kt new file mode 100644 index 0000000000..85c99c3587 --- /dev/null +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/logging/AmplifyLogging.kt @@ -0,0 +1,70 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.logging + +import com.amplifyframework.annotations.InternalAmplifyApi + +/** + * Entry point for debug logging + */ +object AmplifyLogging { + // Use copy-on-write to avoid concurrent modification + private var sinks = setOf() + + /** + * Add a sink for emitting logs. Sinks must be added before loggers are created. This should generally be called + * during your Application's initialization (for example, in Application.onCreate for Android). + * @param sink The [LogSink] to add. + */ + @JvmStatic + fun addSink(sink: LogSink) { + sinks += sink + } + + // Internal API for testing, not safe for production use + @JvmSynthetic + internal fun removeSink(sink: LogSink) { + sinks -= sink + } + + @InternalAmplifyApi + fun logger(name: String): Logger = LoggerImpl(name, sinks.toSet()) + + @InternalAmplifyApi + inline fun logger(): Logger = logger(T::class.simpleName ?: "unknown") +} + +private class LoggerImpl( + private val name: String, + private val sinks: Set +) : Logger { + + override fun log(level: LogLevel, message: String, cause: Throwable?) { + val logMessage = LogMessage(level, name, message, cause) + sinks.forEach { + if (it.isEnabledFor(level)) { + it.emit(logMessage) + } + } + } + + override fun log(level: LogLevel, cause: Throwable?, message: () -> String) { + // Only evaluate the message if at least one sink will emit it + if (sinks.any { it.isEnabledFor(level) }) { + log(level, message(), cause) + } + } +} diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/logging/LogLevel.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/logging/LogLevel.kt new file mode 100644 index 0000000000..65d7b34901 --- /dev/null +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/logging/LogLevel.kt @@ -0,0 +1,69 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.logging + +/** + * An enumeration of the different levels of logging. + * The levels are progressive, with lower-value items being lower priority + * than higher-value items. For example, INFO is lower priority than WARNING + * or ERROR. + */ +enum class LogLevel { + /** + * Verbose logs are used to study the behavior of particular components/flows + * within a system, by developers. Verbose logs are not suitable for emission + * in production, as they may contain sensitive information, and/or be emitted + * so frequently that performance is impacted. + */ + Verbose, + + /** + * Debug logs are useful during development to understand the behavior of the system. + * These logs may contain information that is inappropriate for emission in a production + * environment. + */ + Debug, + + /** + * Informational logs may be emitted in production code, and provide + * terse information about the general operation and flow of a piece of software. + */ + Info, + + /** + * Warning logs indicate potential issues while running a piece of software. + * For example, a network connection might retry, before succeeding with success - + * the system is functioning without error, but not optimally. + */ + Warn, + + /** + * Errors should be logged when the system is not operating as expected. + * For example, there might be no internet connection available to the system. + * The application probably shouldn't need to crash, but anything that needs the + * Internet will error out. Errors may logically be recoverable or fatal, but are + * not distinguished here, and are logged at this same error level. + */ + Error, + + /** + * A log level above all other log levels. This log level may be used as a threshold + * value, to prevent any logs from being emitted. + */ + None +} + +internal infix fun LogLevel.allows(level: LogLevel) = this <= level diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/logging/LogMessage.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/logging/LogMessage.kt new file mode 100644 index 0000000000..3040683d86 --- /dev/null +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/logging/LogMessage.kt @@ -0,0 +1,30 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.logging + +/** + * Data class that represents a single log message + * @param level The LogLevel for this message + * @param name The name of the logger that emitted the message + * @param content The content of the message + * @param cause The throwable that caused the message to be emitted, if any + */ +data class LogMessage( + val level: LogLevel, + val name: String, + val content: String, + val cause: Throwable? +) diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/logging/LogSink.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/logging/LogSink.kt new file mode 100644 index 0000000000..b04b35a53d --- /dev/null +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/logging/LogSink.kt @@ -0,0 +1,35 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.logging + +/** + * A log sink sends log messages to a specific destination, for example by outputting to a system-appropriate logging + * framework. + */ +interface LogSink { + /** + * Returns true if this sink will emit logs at the given level + * @param level The LogLevel to check + * @return True if a log at this level would be emitted, false otherwise + */ + fun isEnabledFor(level: LogLevel): Boolean + + /** + * Emit the given LogMessage + * @param message The log message + */ + fun emit(message: LogMessage) +} diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/logging/Logger.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/logging/Logger.kt new file mode 100644 index 0000000000..1bb3412e26 --- /dev/null +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/logging/Logger.kt @@ -0,0 +1,115 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.logging + +import com.amplifyframework.annotations.InternalAmplifyApi + +/** + * A component which can emit logs. + */ +@InternalAmplifyApi +interface Logger { + /** + * Logs a message and thrown error at [LogLevel.Error] level. + * @param message An error message + * @param cause A thrown error + */ + fun error(message: String, cause: Throwable? = null) = log(LogLevel.Error, message, cause) + + /** + * Logs a message and thrown error at [LogLevel.Error] level. The supplier is only invoked if the log level + * threshold is at ERROR or below. + * @param cause A thrown error + * @param message A function that returns an error message + */ + fun error(cause: Throwable? = null, message: () -> String) = log(LogLevel.Error, cause, message) + + /** + * Log a message and a throwable issue at the [LogLevel.Warn] level. + * @param message A warning message + * @param cause An issue that caused this warning + */ + fun warn(message: String, cause: Throwable? = null) = log(LogLevel.Warn, message, cause) + + /** + * Log a message and a throwable issue at the [LogLevel.Warn] level. The supplier is only invoked if the + * log level threshold is at WARN or below. + * @param cause An issue that caused this warning + * @param message A function that returns a warning message + */ + fun warn(cause: Throwable? = null, message: () -> String) = log(LogLevel.Warn, cause, message) + + /** + * Logs a message at [LogLevel.Info] level. + * @param message An informational message + * @param cause An issue that caused this log + */ + fun info(message: String, cause: Throwable? = null) = log(LogLevel.Info, message) + + /** + * Logs a message at [LogLevel.Info] level. The supplier is only invoked if the log level threshold + * is at INFO or below. + * @param cause An issue that caused this log + * @param message A function that returns an info message + */ + fun info(cause: Throwable? = null, message: () -> String) = log(LogLevel.Info, cause, message) + + /** + * Logs a message at the [LogLevel.Debug] level. + * @param message A debugging message. + * @param cause An issue that caused this log + */ + fun debug(message: String, cause: Throwable? = null) = log(LogLevel.Debug, message) + + /** + * Logs a message at the [LogLevel.Debug] level. The supplier is only invoked if the log level threshold + * is at DEBUG or below. + * @param cause An issue that caused this log + * @param message A function that returns a debugging message + */ + fun debug(cause: Throwable? = null, message: () -> String) = log(LogLevel.Debug, cause, message) + + /** + * Logs a message at the [LogLevel.Verbose] level. + * @param message A verbose message + * @param cause An issue that caused this log + */ + fun verbose(message: String, cause: Throwable? = null) = log(LogLevel.Verbose, message) + + /** + * Logs a message at the [LogLevel.Verbose] level. The supplier is only invoked if the log level threshold + * is at VERBOSE. + * @param cause An issue that caused this log + * @param message A function that returns a verbose message + */ + fun verbose(cause: Throwable? = null, message: () -> String) = log(LogLevel.Verbose, cause, message) + + /** + * Logs a message at the given [LogLevel]. + * @param level The level to log at + * @param cause The issue that caused this log + * @param message A function that returns the log message + */ + fun log(level: LogLevel, cause: Throwable? = null, message: () -> String) + + /** + * Logs a message at the given [LogLevel]. + * @param level The level to log at + * @param message The log message + * @param cause The issue that caused this log + */ + fun log(level: LogLevel, message: String, cause: Throwable? = null) +} diff --git a/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/logging/AmplifyLoggingTest.kt b/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/logging/AmplifyLoggingTest.kt new file mode 100644 index 0000000000..21263b2e8c --- /dev/null +++ b/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/logging/AmplifyLoggingTest.kt @@ -0,0 +1,235 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amplifyframework.foundation.logging + +import com.amplifyframework.foundation.logging.LogLevel.Debug +import com.amplifyframework.foundation.logging.LogLevel.Error +import com.amplifyframework.foundation.logging.LogLevel.Info +import com.amplifyframework.foundation.logging.LogLevel.Verbose +import com.amplifyframework.foundation.logging.LogLevel.Warn +import io.kotest.matchers.collections.shouldBeEmpty +import io.kotest.matchers.collections.shouldContainExactly +import io.kotest.matchers.collections.shouldHaveSingleElement +import io.kotest.matchers.collections.shouldHaveSize +import io.kotest.matchers.shouldBe +import kotlin.test.AfterTest +import kotlin.test.BeforeTest +import org.junit.Test + +class AmplifyLoggingTest { + + private val sink = TestSink() + + @BeforeTest + fun setup() { + AmplifyLogging.addSink(sink) + } + + @AfterTest + fun teardown() { + AmplifyLogging.removeSink(sink) + } + + @Test + fun `logs have appropriate name set`() { + val logger1 = AmplifyLogging.logger("nameTest") + val logger2 = AmplifyLogging.logger() + + logger1.verbose("message1") + logger2.verbose("message2") + + sink.logs shouldHaveSize 2 + sink.logs[0].name shouldBe "nameTest" + sink.logs[1].name shouldBe "AmplifyLoggingTest" + } + + @Test + fun `logs have appropriate level set`() { + val logger = AmplifyLogging.logger("test") + + logger.info("message1") + logger.debug("message2") + logger.error("message3") + logger.warn("message4") + logger.verbose("message5") + + sink.logs shouldHaveSize 5 + sink.logs[0].level shouldBe Info + sink.logs[1].level shouldBe Debug + sink.logs[2].level shouldBe Error + sink.logs[3].level shouldBe Warn + sink.logs[4].level shouldBe Verbose + } + + @Test + fun `logs below threshold are not emitted`() { + val logger = AmplifyLogging.logger("test") + sink.threshold = Warn + + logger.verbose("verbose") + logger.debug("debug") + logger.info("info") + logger.warn("warn") + logger.error("error") + + sink.logs shouldHaveSize 2 + sink.logs[0].level shouldBe Warn + sink.logs[1].level shouldBe Error + } + + @Test + fun `logs with message are captured`() { + val logger = AmplifyLogging.logger("loggerTest") + + logger.verbose("a log") + + sink.logs shouldHaveSingleElement LogMessage( + level = Verbose, + name = "loggerTest", + content = "a log", + cause = null + ) + } + + @Test + fun `logs with lazy logging are captured`() { + val logger = AmplifyLogging.logger("name") + + logger.verbose { "a lazy log" } + + sink.logs shouldHaveSingleElement LogMessage( + level = Verbose, + name = "name", + content = "a lazy log", + cause = null + ) + } + + @Test + fun `logs with throwable are captured`() { + val logger = AmplifyLogging.logger("test") + val error = Exception("Just a test") + + logger.error("An error occurred", error) + + sink.logs shouldHaveSingleElement LogMessage( + level = Error, + name = "test", + content = "An error occurred", + cause = error + ) + } + + @Test + fun `logs with lazy logging and throwable are captured`() { + val logger = AmplifyLogging.logger("name") + val error = Exception("Just a test") + + logger.verbose(error) { "a lazy log" } + + sink.logs shouldHaveSingleElement LogMessage( + level = Verbose, + name = "name", + content = "a lazy log", + cause = error + ) + } + + @Test + fun `lazy messages are only evaluated once for multiple sinks`() { + var invocations = 0 + + val otherSink = TestSink() + withAddedSink(otherSink) { + val logger = AmplifyLogging.logger("lazy") + logger.info { + invocations++ + "message" + } + val expected = LogMessage( + level = Info, + name = "lazy", + content = "message", + cause = null + ) + sink.logs shouldHaveSingleElement expected + otherSink.logs shouldHaveSingleElement expected + invocations shouldBe 1 + } + } + + @Test + fun `lazy messages are not invoked when no sinks will emit them`() { + var invocations = 0 + val otherSink = TestSink(Error) + sink.threshold = Info + withAddedSink(otherSink) { + val logger = AmplifyLogging.logger("lazy") + logger.verbose { + invocations++ + "message" + } + sink.logs.shouldBeEmpty() + otherSink.logs.shouldBeEmpty() + invocations shouldBe 0 + } + } + + @Test + fun `multiple sinks all receive logs`() { + val anotherSink = TestSink() + + withAddedSink(anotherSink) { + val logger = AmplifyLogging.logger("test") + logger.warn("A warning") + logger.info("Another") + logger.verbose { "One more" } + sink.logs shouldHaveSize 3 + sink.logs shouldContainExactly anotherSink.logs + } + } + + @Test + fun `sinks added after logger is created do not receive logs`() { + val anotherSink = TestSink() + val logger = AmplifyLogging.logger("test") + + withAddedSink(anotherSink) { + logger.warn("A warning") + sink.logs shouldHaveSize 1 + anotherSink.logs.shouldBeEmpty() + } + } + + private fun withAddedSink(sink: LogSink, func: () -> Unit) { + try { + AmplifyLogging.addSink(sink) + func() + } finally { + AmplifyLogging.removeSink(sink) + } + } + + // LogSink that just records messages in a list + private class TestSink(var threshold: LogLevel = Verbose) : LogSink { + val logs = mutableListOf() + + override fun isEnabledFor(level: LogLevel) = threshold allows level + override fun emit(message: LogMessage) { + logs += message + } + } +} From ff21ed45a8dbbd6605389fbbf0e37383f4c2a50d Mon Sep 17 00:00:00 2001 From: Matt Creaser Date: Thu, 19 Feb 2026 15:17:27 -0400 Subject: [PATCH 08/37] feat(foundation): Convert from Smithy credentials to AwsCredentials (#3199) --- foundation-bridge/api/foundation-bridge.api | 7 ++ foundation-bridge/build.gradle.kts | 1 + foundation-bridge/gradle.properties | 4 ++ .../credentials/SmithyCredentials.kt | 43 ++++++++++- .../credentials/SmithyCredentialsTest.kt | 71 +++++++++++++++++++ 5 files changed, 123 insertions(+), 3 deletions(-) create mode 100644 foundation-bridge/api/foundation-bridge.api create mode 100644 foundation-bridge/gradle.properties diff --git a/foundation-bridge/api/foundation-bridge.api b/foundation-bridge/api/foundation-bridge.api new file mode 100644 index 0000000000..4e8c34fb2f --- /dev/null +++ b/foundation-bridge/api/foundation-bridge.api @@ -0,0 +1,7 @@ +public final class com/amplifyframework/foundation/credentials/SmithyCredentials { + public static final fun toAwsCredentials (Laws/smithy/kotlin/runtime/auth/awscredentials/Credentials;)Lcom/amplifyframework/foundation/credentials/AwsCredentials; + public static final fun toAwsCredentialsProvider (Laws/smithy/kotlin/runtime/auth/awscredentials/CredentialsProvider;)Lcom/amplifyframework/foundation/credentials/AwsCredentialsProvider; + public static final fun toSmithyCredentials (Lcom/amplifyframework/foundation/credentials/AwsCredentials;)Laws/smithy/kotlin/runtime/auth/awscredentials/Credentials; + public static final fun toSmithyProvider (Lcom/amplifyframework/foundation/credentials/AwsCredentialsProvider;)Laws/smithy/kotlin/runtime/auth/awscredentials/CredentialsProvider; +} + diff --git a/foundation-bridge/build.gradle.kts b/foundation-bridge/build.gradle.kts index 1d3b323d49..ce08f034e6 100644 --- a/foundation-bridge/build.gradle.kts +++ b/foundation-bridge/build.gradle.kts @@ -1,5 +1,6 @@ plugins { alias(libs.plugins.amplify.kmp) + alias(libs.plugins.amplify.publishing) } kotlin { diff --git a/foundation-bridge/gradle.properties b/foundation-bridge/gradle.properties new file mode 100644 index 0000000000..a16706bc6e --- /dev/null +++ b/foundation-bridge/gradle.properties @@ -0,0 +1,4 @@ +POM_ARTIFACT_ID=foundation-bridge +POM_NAME=Amplify Framework for Android - Foundation Bridge +POM_DESCRIPTION=Amplify Framework for Android - Foundational Bridge library +POM_PACKAGING=aar diff --git a/foundation-bridge/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentials.kt b/foundation-bridge/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentials.kt index 4760f7f67c..e21e210bb6 100644 --- a/foundation-bridge/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentials.kt +++ b/foundation-bridge/src/commonMain/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentials.kt @@ -13,17 +13,21 @@ * permissions and limitations under the License. */ +@file:JvmName("SmithyCredentials") + package com.amplifyframework.foundation.credentials import aws.smithy.kotlin.runtime.auth.awscredentials.Credentials import aws.smithy.kotlin.runtime.auth.awscredentials.CredentialsProvider import aws.smithy.kotlin.runtime.collections.Attributes +import aws.smithy.kotlin.runtime.collections.emptyAttributes import aws.smithy.kotlin.runtime.time.Instant as SmithyInstant -import com.amplifyframework.annotations.InternalAmplifyApi import kotlin.time.ExperimentalTime import kotlin.time.Instant -@InternalAmplifyApi +/** + * Converts Amplify Credentials to Smithy Credentials + */ @OptIn(ExperimentalTime::class) fun AwsCredentials.toSmithyCredentials(): Credentials = when (this) { is AwsCredentials.Static -> Credentials( @@ -38,10 +42,43 @@ fun AwsCredentials.toSmithyCredentials(): Credentials = when (this) { ) } -@InternalAmplifyApi +/** + * Converts Smithy Credentials to Amplify Credentials + */ +@OptIn(ExperimentalTime::class) +fun Credentials.toAwsCredentials(): AwsCredentials { + val sessionToken = this.sessionToken + val expiration = this.expiration + return when { + sessionToken != null && expiration != null -> AwsCredentials.Temporary( + accessKeyId = this.accessKeyId, + secretAccessKey = this.secretAccessKey, + sessionToken = sessionToken, + expiration = expiration.toKotlinInstant() + ) + else -> AwsCredentials.Static( + accessKeyId = this.accessKeyId, + secretAccessKey = this.secretAccessKey + ) + } +} + +/** + * Converts an Amplify CredentialsProvider to a Smithy CredentialsProvider + */ fun AwsCredentialsProvider<*>.toSmithyProvider() = object : CredentialsProvider { override suspend fun resolve(attributes: Attributes) = this@toSmithyProvider.resolve().toSmithyCredentials() } +/** + * Converts a Smithy CredentialsProvider to an Amplify CredentialsProvider + */ +fun CredentialsProvider.toAwsCredentialsProvider() = AwsCredentialsProvider { + resolve(emptyAttributes()).toAwsCredentials() +} + @OptIn(ExperimentalTime::class) private fun Instant.toSmithyInstant() = SmithyInstant.fromEpochSeconds(epochSeconds) + +@OptIn(ExperimentalTime::class) +private fun SmithyInstant.toKotlinInstant() = Instant.fromEpochSeconds(epochSeconds) diff --git a/foundation-bridge/src/commonTest/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentialsTest.kt b/foundation-bridge/src/commonTest/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentialsTest.kt index d2d67129b8..2001a1e390 100644 --- a/foundation-bridge/src/commonTest/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentialsTest.kt +++ b/foundation-bridge/src/commonTest/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentialsTest.kt @@ -16,10 +16,13 @@ package com.amplifyframework.foundation.credentials import aws.smithy.kotlin.runtime.auth.awscredentials.Credentials +import aws.smithy.kotlin.runtime.auth.awscredentials.CredentialsProvider +import aws.smithy.kotlin.runtime.collections.Attributes import aws.smithy.kotlin.runtime.collections.emptyAttributes import aws.smithy.kotlin.runtime.time.Instant as SmithyInstant import io.kotest.matchers.nulls.shouldBeNull import io.kotest.matchers.shouldBe +import io.kotest.matchers.types.shouldBeInstanceOf import kotlin.time.ExperimentalTime import kotlin.time.Instant import kotlinx.coroutines.test.runTest @@ -61,6 +64,38 @@ class SmithyCredentialsTest { mapped.expiration shouldBe SmithyInstant.fromEpochSeconds(expiration.epochSeconds) } + @Test + fun `maps smithy credentials to static credentials`() { + val smithyCredentials = Credentials( + accessKeyId = "access", + secretAccessKey = "secret" + ) + + val mapped = smithyCredentials.toAwsCredentials() + + mapped.shouldBeInstanceOf() + mapped.accessKeyId shouldBe "access" + mapped.secretAccessKey shouldBe "secret" + } + + @Test + fun `maps smithy credentials to temporary credentials`() { + val smithyCredentials = Credentials( + accessKeyId = "access", + secretAccessKey = "secret", + sessionToken = "session", + expiration = SmithyInstant.fromEpochSeconds(expiration.epochSeconds) + ) + + val mapped = smithyCredentials.toAwsCredentials() + + mapped.shouldBeInstanceOf() + mapped.accessKeyId shouldBe "access" + mapped.secretAccessKey shouldBe "secret" + mapped.sessionToken shouldBe "session" + mapped.expiration shouldBe expiration + } + @Test fun `provider maps static credentials`() = runTest { val staticProvider = AwsCredentialsProvider { @@ -93,4 +128,40 @@ class SmithyCredentialsTest { credentials.sessionToken shouldBe "session" credentials.expiration shouldBe SmithyInstant.fromEpochSeconds(expiration.epochSeconds) } + + @Test + fun `smithy provider maps static credentials`() = runTest { + val smithyProvider = object : CredentialsProvider { + override suspend fun resolve(attributes: Attributes) = Credentials( + accessKeyId = "access", + secretAccessKey = "secret" + ) + } + + val mapped = smithyProvider.toAwsCredentialsProvider().resolve() + + mapped.shouldBeInstanceOf() + mapped.accessKeyId shouldBe "access" + mapped.secretAccessKey shouldBe "secret" + } + + @Test + fun `smithy provider maps temporary credentials`() = runTest { + val smithyProvider = object : CredentialsProvider { + override suspend fun resolve(attributes: Attributes) = Credentials( + accessKeyId = "access", + secretAccessKey = "secret", + sessionToken = "session", + expiration = SmithyInstant.fromEpochSeconds(expiration.epochSeconds) + ) + } + + val mapped = smithyProvider.toAwsCredentialsProvider().resolve() + + mapped.shouldBeInstanceOf() + mapped.accessKeyId shouldBe "access" + mapped.secretAccessKey shouldBe "secret" + mapped.sessionToken shouldBe "session" + mapped.expiration shouldBe expiration + } } From e0cb07a37eb12928ad6b4f087da8748f4f692263 Mon Sep 17 00:00:00 2001 From: Matt Creaser Date: Thu, 19 Feb 2026 16:03:31 -0400 Subject: [PATCH 09/37] Fix publishing of KMP modules --- .../src/main/kotlin/KotlinConventionPlugin.kt | 19 +++++++------- .../main/kotlin/PublishingConventionPlugin.kt | 26 +++++-------------- foundation-bridge/gradle.properties | 2 -- foundation/gradle.properties | 2 -- 4 files changed, 16 insertions(+), 33 deletions(-) diff --git a/build-logic/plugins/src/main/kotlin/KotlinConventionPlugin.kt b/build-logic/plugins/src/main/kotlin/KotlinConventionPlugin.kt index af70532aee..a175f011a8 100644 --- a/build-logic/plugins/src/main/kotlin/KotlinConventionPlugin.kt +++ b/build-logic/plugins/src/main/kotlin/KotlinConventionPlugin.kt @@ -1,13 +1,3 @@ - -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.api.tasks.compile.JavaCompile -import org.gradle.api.tasks.testing.Test -import org.gradle.kotlin.dsl.configure -import org.gradle.kotlin.dsl.withType -import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile - /* * Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. * @@ -23,6 +13,15 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile * permissions and limitations under the License. */ +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.tasks.compile.JavaCompile +import org.gradle.api.tasks.testing.Test +import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.withType +import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + class KotlinConventionPlugin : Plugin { override fun apply(target: Project) { with(target.pluginManager) { diff --git a/build-logic/plugins/src/main/kotlin/PublishingConventionPlugin.kt b/build-logic/plugins/src/main/kotlin/PublishingConventionPlugin.kt index c60f88a756..aaf329ced3 100644 --- a/build-logic/plugins/src/main/kotlin/PublishingConventionPlugin.kt +++ b/build-logic/plugins/src/main/kotlin/PublishingConventionPlugin.kt @@ -70,29 +70,23 @@ class PublishingConventionPlugin : Plugin { withJavadocJar() } } - - // KMP projects handle sources/javadoc jars automatically - pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform") { - // No additional configuration needed - KMP plugin handles this - } } // Configure the publishing extension in the project @Suppress("LocalVariableName", "ktlint:standard:property-naming") private fun Project.configureMavenPublishing() { + val POM_GROUP: String by project + val POM_ARTIFACT_ID: String by project + val VERSION_NAME: String by project + + group = POM_GROUP + version = VERSION_NAME + configure { // For KMP projects, publications are created automatically by the KMP plugin pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform") { // Configure all KMP publications publications.withType().configureEach { - val POM_GROUP: String by project - val POM_ARTIFACT_ID: String by project - val VERSION_NAME: String by project - - groupId = POM_GROUP - artifactId = POM_ARTIFACT_ID - version = VERSION_NAME - configurePom(this@configureMavenPublishing) } } @@ -101,13 +95,7 @@ class PublishingConventionPlugin : Plugin { if (!isKotlinMultiplatform) { publications { create("maven", MavenPublication::class.java) { - val POM_GROUP: String by project - val POM_ARTIFACT_ID: String by project - val VERSION_NAME: String by project - - groupId = POM_GROUP artifactId = POM_ARTIFACT_ID - version = VERSION_NAME pluginManager.withPlugin("com.android.library") { from(components["release"]) diff --git a/foundation-bridge/gradle.properties b/foundation-bridge/gradle.properties index a16706bc6e..6c6a5cab1e 100644 --- a/foundation-bridge/gradle.properties +++ b/foundation-bridge/gradle.properties @@ -1,4 +1,2 @@ -POM_ARTIFACT_ID=foundation-bridge POM_NAME=Amplify Framework for Android - Foundation Bridge POM_DESCRIPTION=Amplify Framework for Android - Foundational Bridge library -POM_PACKAGING=aar diff --git a/foundation/gradle.properties b/foundation/gradle.properties index 736a0e023b..702f5ded79 100644 --- a/foundation/gradle.properties +++ b/foundation/gradle.properties @@ -1,4 +1,2 @@ -POM_ARTIFACT_ID=foundation POM_NAME=Amplify Framework for Android - Foundation POM_DESCRIPTION=Amplify Framework for Android - Foundational library -POM_PACKAGING=aar From 16c96db2ef5ff12f61a0e83797130cbd0843e671 Mon Sep 17 00:00:00 2001 From: Jan Vincent Hoffbauer Date: Fri, 20 Feb 2026 13:38:57 +0100 Subject: [PATCH 10/37] Add kinesis e2e test --- .../KinesisDataStreamsInstrumentationTest.kt | 461 ++++++++++++++++++ 1 file changed, 461 insertions(+) create mode 100644 aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt diff --git a/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt b/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt new file mode 100644 index 0000000000..f1c3415fb8 --- /dev/null +++ b/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt @@ -0,0 +1,461 @@ +/* + * Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amplifyframework.kinesis + +import android.content.Context +import androidx.test.core.app.ApplicationProvider +import com.amplifyframework.auth.AWSCredentials +import com.amplifyframework.auth.AWSCredentialsProvider +import com.amplifyframework.auth.AuthException +import com.amplifyframework.auth.cognito.AWSCognitoAuthPlugin +import com.amplifyframework.core.Amplify +import com.amplifyframework.core.Consumer +import com.amplifyframework.recordcache.FlushStrategy +import com.amplifyframework.testutils.Sleep +import com.amplifyframework.testutils.sync.SynchronousAuth +import io.kotest.assertions.throwables.shouldNotThrowAny +import io.kotest.matchers.booleans.shouldBeFalse +import io.kotest.matchers.booleans.shouldBeTrue +import io.kotest.matchers.ints.shouldBeGreaterThan +import io.kotest.matchers.nulls.shouldNotBeNull +import io.kotest.matchers.shouldBe +import io.kotest.matchers.types.shouldBeInstanceOf +import kotlin.time.Duration.Companion.seconds +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.delay +import kotlinx.coroutines.runBlocking +import org.junit.After +import org.junit.Before +import org.junit.BeforeClass +import org.junit.Test + +/** + * Instrumented tests for [KinesisDataStreams]. + * + * These tests run against a real Kinesis stream and require: + * - A provisioned Kinesis Data Stream (stream name configured below) + * - Valid AWS credentials via Amplify Auth (Cognito) + * - An `amplifyconfiguration` raw resource with auth config + * - A `credentials` raw resource with test user credentials + */ +class KinesisDataStreamsInstrumentationTest { + + companion object { + private const val STREAM_NAME = "amplify-kinesis-test-stream" + private const val CREDENTIALS_RESOURCE_NAME = "credentials" + private const val CONFIGURATION_NAME = "amplifyconfiguration" + private const val COGNITO_CONFIGURATION_TIMEOUT = 5_000L + private const val REGION = "us-east-1" + + private lateinit var synchronousAuth: SynchronousAuth + private lateinit var credentialsProvider: AWSCredentialsProvider + + @BeforeClass + @JvmStatic + fun setupBefore() { + val context = ApplicationProvider.getApplicationContext() + Amplify.Auth.addPlugin(AWSCognitoAuthPlugin()) + Amplify.configure(context) + Sleep.milliseconds(COGNITO_CONFIGURATION_TIMEOUT) + synchronousAuth = SynchronousAuth.delegatingTo(Amplify.Auth) + + // Sign in with test credentials + @androidx.annotation.RawRes val resourceId = com.amplifyframework.testutils.Resources.getRawResourceId(context, CREDENTIALS_RESOURCE_NAME) + val userAndPasswordPair = readCredentialsFromResource(context, resourceId) + synchronousAuth.signOut() + synchronousAuth.signIn( + userAndPasswordPair!!.first, + userAndPasswordPair.second + ) + + credentialsProvider = object : AWSCredentialsProvider { + override fun fetchAWSCredentials( + onSuccess: Consumer, + onError: Consumer + ) { + Amplify.Auth.fetchAuthSession( + { session -> + val awsSession = + session as com.amplifyframework.auth.AWSAuthSessionBehavior<*> + val credentials = awsSession.awsCredentialsResult.value + if (credentials != null) { + onSuccess.accept(credentials) + } else { + onError.accept( + AuthException( + "No AWS credentials available", + "Check auth configuration" + ) + ) + } + }, + { error -> + onError.accept( + AuthException( + "Failed to fetch auth session", + error.toString() + ) + ) + } + ) + } + } + } + + private fun readCredentialsFromResource(context: Context, @androidx.annotation.RawRes resourceId: Int): android.util.Pair? { + val resource = com.amplifyframework.testutils.Resources.readAsJson(context, resourceId) + var userCredentials: android.util.Pair? = null + return try { + val credentials = resource.getJSONArray("credentials") + for (index in 0 until credentials.length()) { + val credential = credentials.getJSONObject(index) + val username = credential.getString("username") + val password = credential.getString("password") + userCredentials = android.util.Pair(username, password) + } + userCredentials + } catch (jsonReadingFailure: org.json.JSONException) { + throw RuntimeException(jsonReadingFailure) + } + } + } + + private lateinit var kinesis: KinesisDataStreams + + @Before + fun setUp() { + val context = ApplicationProvider.getApplicationContext() + kinesis = KinesisDataStreams( + context = context, + region = REGION, + credentialsProvider = credentialsProvider + ) + // Clear any leftover records from previous test runs + runBlocking { kinesis.clearCache() } + kinesis.enable() + } + + @After + fun tearDown() { + kinesis.disable() + runBlocking { kinesis.clearCache() } + } + + // --------------------------------------------------------------- + // Core happy path + // --------------------------------------------------------------- + + /** Record data and flush — verify records were actually flushed. */ + @Test + fun testRecordAndFlush(): Unit = runBlocking { + val result = kinesis.record( + data = "test-record".toByteArray(), + partitionKey = "partition-1", + streamName = STREAM_NAME + ) + result.isSuccess.shouldBeTrue() + + val flushResult = kinesis.flush() + flushResult.isSuccess.shouldBeTrue() + flushResult.getOrThrow().recordsFlushed shouldBeGreaterThan 0 + } + + /** Flush with no cached records returns zero flushed. */ + @Test + fun testFlushWhenEmpty(): Unit = runBlocking { + val flushResult = kinesis.flush() + flushResult.isSuccess.shouldBeTrue() + + val data = flushResult.getOrThrow() + data.recordsFlushed shouldBe 0 + data.flushInProgress.shouldBeFalse() + } + + /** Records submitted while disabled are silently dropped. */ + @Test + fun testRecordWhileDisabledDropsRecords(): Unit = runBlocking { + kinesis.disable() + + val result = kinesis.record( + data = "dropped-record".toByteArray(), + partitionKey = "partition-1", + streamName = STREAM_NAME + ) + // record() returns success even when disabled (silently dropped) + result.isSuccess.shouldBeTrue() + + kinesis.enable() + val flushResult = kinesis.flush() + flushResult.isSuccess.shouldBeTrue() + flushResult.getOrThrow().recordsFlushed shouldBe 0 + } + + /** Enable → record → disable → enable → flush verifies only pre-disable records flush. */ + @Test + fun testEnableDisableLifecycle(): Unit = runBlocking { + // Record while enabled + kinesis.record( + data = "before-disable".toByteArray(), + partitionKey = "partition-1", + streamName = STREAM_NAME + ) + + kinesis.disable() + + // Record while disabled — should be dropped + kinesis.record( + data = "while-disabled".toByteArray(), + partitionKey = "partition-1", + streamName = STREAM_NAME + ) + + kinesis.enable() + + val flushResult = kinesis.flush() + flushResult.isSuccess.shouldBeTrue() + // Only the pre-disable record should be flushed + flushResult.getOrThrow().recordsFlushed shouldBe 1 + } + + /** Two concurrent flushes — one should return flushInProgress = true. */ + @Test + fun testConcurrentFlushReturnsInProgress(): Unit = runBlocking { + // Seed some records so the flush has work to do + repeat(10) { i -> + kinesis.record( + data = "record-$i".toByteArray(), + partitionKey = "partition-1", + streamName = STREAM_NAME + ) + } + + val results = listOf( + async { kinesis.flush() }, + async { kinesis.flush() } + ).awaitAll() + + val successResults = results.filter { it.isSuccess } + successResults.size shouldBe 2 + + val flushDatas = successResults.map { it.getOrThrow() } + // At least one should have done actual work, and one may report flushInProgress + val anyFlushed = flushDatas.any { it.recordsFlushed > 0 } + val anyInProgress = flushDatas.any { it.flushInProgress } + // Either both flushed (if first completed before second started) or one was skipped + (anyFlushed || anyInProgress).shouldBeTrue() + } + + // --------------------------------------------------------------- + // Cache behavior + // --------------------------------------------------------------- + + /** Fill cache to limit, then verify the next record fails with KinesisLimitExceededException. */ + @Test + fun testCacheLimitExceeded(): Unit = runBlocking { + val context = ApplicationProvider.getApplicationContext() + // Create a client with a tiny cache + val smallCacheKinesis = KinesisDataStreams( + context = context, + region = REGION, + credentialsProvider = credentialsProvider, + options = KinesisDataStreamsOptions { + cacheMaxBytes = 100L // 100 bytes + maxRecords = 500 + } + ) + smallCacheKinesis.enable() + + try { + // Fill the cache + val bigData = ByteArray(60) { 0x41 } // 60 bytes + smallCacheKinesis.record( + data = bigData, + partitionKey = "partition-1", + streamName = STREAM_NAME + ) + + // This should exceed the 100-byte limit + val result = smallCacheKinesis.record( + data = bigData, + partitionKey = "partition-1", + streamName = STREAM_NAME + ) + + result.isFailure.shouldBeTrue() + result.exceptionOrNull().shouldBeInstanceOf() + } finally { + smallCacheKinesis.disable() + smallCacheKinesis.clearCache() + } + } + + /** Record data, clear cache, then flush — nothing should be flushed. */ + @Test + fun testClearCache(): Unit = runBlocking { + kinesis.record( + data = "to-be-cleared".toByteArray(), + partitionKey = "partition-1", + streamName = STREAM_NAME + ) + + val clearResult = kinesis.clearCache() + clearResult.isSuccess.shouldBeTrue() + clearResult.getOrThrow().recordsCleared shouldBeGreaterThan 0 + + val flushResult = kinesis.flush() + flushResult.isSuccess.shouldBeTrue() + flushResult.getOrThrow().recordsFlushed shouldBe 0 + } + + // --------------------------------------------------------------- + // Error paths + // --------------------------------------------------------------- + + /** Flush with invalid credentials should fail with KinesisServiceException. */ + @Test + fun testFlushWithInvalidCredentials(): Unit = runBlocking { + val context = ApplicationProvider.getApplicationContext() + val badCredentials = object : AWSCredentialsProvider { + override fun fetchAWSCredentials( + onSuccess: Consumer, + onError: Consumer + ) { + onSuccess.accept( + AWSCredentials( + accessKeyId = "INVALID_ACCESS_KEY", + secretAccessKey = "INVALID_SECRET_KEY" + ) + ) + } + } + + val badKinesis = KinesisDataStreams( + context = context, + region = REGION, + credentialsProvider = badCredentials + ) + badKinesis.enable() + + try { + badKinesis.record( + data = "bad-creds-record".toByteArray(), + partitionKey = "partition-1", + streamName = STREAM_NAME + ) + + val flushResult = badKinesis.flush() + flushResult.isFailure.shouldBeTrue() + flushResult.exceptionOrNull().shouldBeInstanceOf() + } finally { + badKinesis.disable() + badKinesis.clearCache() + } + } + + // --------------------------------------------------------------- + // Stress tests + // --------------------------------------------------------------- + + /** Record many events and flush — verify all are flushed. */ + @Test + fun testHighVolumeRecordAndFlush(): Unit = runBlocking { + val count = 50 + repeat(count) { i -> + val result = kinesis.record( + data = "stress-record-$i".toByteArray(), + partitionKey = "partition-${i % 5}", + streamName = STREAM_NAME + ) + result.isSuccess.shouldBeTrue() + } + + val flushResult = kinesis.flush() + flushResult.isSuccess.shouldBeTrue() + flushResult.getOrThrow().recordsFlushed shouldBe count + } + + /** Record + flush in a loop — verify consistency across cycles. */ + @Test + fun testRepeatedFlushCycles(): Unit = runBlocking { + val cycles = 10 + val recordsPerCycle = 5 + var totalFlushed = 0 + + repeat(cycles) { cycle -> + repeat(recordsPerCycle) { i -> + kinesis.record( + data = "cycle-$cycle-record-$i".toByteArray(), + partitionKey = "partition-1", + streamName = STREAM_NAME + ) + } + val flushResult = kinesis.flush() + flushResult.isSuccess.shouldBeTrue() + totalFlushed += flushResult.getOrThrow().recordsFlushed + } + + totalFlushed shouldBe (cycles * recordsPerCycle) + } + + // --------------------------------------------------------------- + // Auto-flush + // --------------------------------------------------------------- + + /** Record data and wait for auto-flush to trigger. */ + @Test + fun testAutoFlush(): Unit = runBlocking { + val context = ApplicationProvider.getApplicationContext() + // Create client with short flush interval + val autoFlushKinesis = KinesisDataStreams( + context = context, + region = REGION, + credentialsProvider = credentialsProvider, + options = KinesisDataStreamsOptions { + flushStrategy = FlushStrategy.Interval(5.seconds) + } + ) + autoFlushKinesis.enable() + + try { + autoFlushKinesis.record( + data = "auto-flush-record".toByteArray(), + partitionKey = "partition-1", + streamName = STREAM_NAME + ) + + // Wait for auto-flush to trigger (5s interval + buffer) + delay(8_000) + + // After auto-flush, a manual flush should find nothing left + val flushResult = autoFlushKinesis.flush() + flushResult.isSuccess.shouldBeTrue() + flushResult.getOrThrow().recordsFlushed shouldBe 0 + } finally { + autoFlushKinesis.disable() + autoFlushKinesis.clearCache() + } + } + + // --------------------------------------------------------------- + // Escape hatch + // --------------------------------------------------------------- + + /** Verify the underlying SDK client is accessible. */ + @Test + fun testGetKinesisClient() { + kinesis.kinesisClient.shouldNotBeNull() + } +} From dddca3c9d89167c4e04b2da4736799939e8077ba Mon Sep 17 00:00:00 2001 From: Matt Creaser Date: Fri, 20 Feb 2026 09:45:30 -0400 Subject: [PATCH 11/37] fix(foundation): Fix publishing of KMP modules (#3200) --- .../src/main/kotlin/KotlinConventionPlugin.kt | 19 +++++++------- .../main/kotlin/PublishingConventionPlugin.kt | 26 +++++-------------- foundation-bridge/gradle.properties | 2 -- foundation/gradle.properties | 2 -- 4 files changed, 16 insertions(+), 33 deletions(-) diff --git a/build-logic/plugins/src/main/kotlin/KotlinConventionPlugin.kt b/build-logic/plugins/src/main/kotlin/KotlinConventionPlugin.kt index af70532aee..a175f011a8 100644 --- a/build-logic/plugins/src/main/kotlin/KotlinConventionPlugin.kt +++ b/build-logic/plugins/src/main/kotlin/KotlinConventionPlugin.kt @@ -1,13 +1,3 @@ - -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.api.tasks.compile.JavaCompile -import org.gradle.api.tasks.testing.Test -import org.gradle.kotlin.dsl.configure -import org.gradle.kotlin.dsl.withType -import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile - /* * Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved. * @@ -23,6 +13,15 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile * permissions and limitations under the License. */ +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.tasks.compile.JavaCompile +import org.gradle.api.tasks.testing.Test +import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.withType +import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + class KotlinConventionPlugin : Plugin { override fun apply(target: Project) { with(target.pluginManager) { diff --git a/build-logic/plugins/src/main/kotlin/PublishingConventionPlugin.kt b/build-logic/plugins/src/main/kotlin/PublishingConventionPlugin.kt index c60f88a756..aaf329ced3 100644 --- a/build-logic/plugins/src/main/kotlin/PublishingConventionPlugin.kt +++ b/build-logic/plugins/src/main/kotlin/PublishingConventionPlugin.kt @@ -70,29 +70,23 @@ class PublishingConventionPlugin : Plugin { withJavadocJar() } } - - // KMP projects handle sources/javadoc jars automatically - pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform") { - // No additional configuration needed - KMP plugin handles this - } } // Configure the publishing extension in the project @Suppress("LocalVariableName", "ktlint:standard:property-naming") private fun Project.configureMavenPublishing() { + val POM_GROUP: String by project + val POM_ARTIFACT_ID: String by project + val VERSION_NAME: String by project + + group = POM_GROUP + version = VERSION_NAME + configure { // For KMP projects, publications are created automatically by the KMP plugin pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform") { // Configure all KMP publications publications.withType().configureEach { - val POM_GROUP: String by project - val POM_ARTIFACT_ID: String by project - val VERSION_NAME: String by project - - groupId = POM_GROUP - artifactId = POM_ARTIFACT_ID - version = VERSION_NAME - configurePom(this@configureMavenPublishing) } } @@ -101,13 +95,7 @@ class PublishingConventionPlugin : Plugin { if (!isKotlinMultiplatform) { publications { create("maven", MavenPublication::class.java) { - val POM_GROUP: String by project - val POM_ARTIFACT_ID: String by project - val VERSION_NAME: String by project - - groupId = POM_GROUP artifactId = POM_ARTIFACT_ID - version = VERSION_NAME pluginManager.withPlugin("com.android.library") { from(components["release"]) diff --git a/foundation-bridge/gradle.properties b/foundation-bridge/gradle.properties index a16706bc6e..6c6a5cab1e 100644 --- a/foundation-bridge/gradle.properties +++ b/foundation-bridge/gradle.properties @@ -1,4 +1,2 @@ -POM_ARTIFACT_ID=foundation-bridge POM_NAME=Amplify Framework for Android - Foundation Bridge POM_DESCRIPTION=Amplify Framework for Android - Foundational Bridge library -POM_PACKAGING=aar diff --git a/foundation/gradle.properties b/foundation/gradle.properties index 736a0e023b..702f5ded79 100644 --- a/foundation/gradle.properties +++ b/foundation/gradle.properties @@ -1,4 +1,2 @@ -POM_ARTIFACT_ID=foundation POM_NAME=Amplify Framework for Android - Foundation POM_DESCRIPTION=Amplify Framework for Android - Foundational library -POM_PACKAGING=aar From 8e1fee239476a38070d70717d510d5a0311c70b1 Mon Sep 17 00:00:00 2001 From: Jan Vincent Hoffbauer Date: Fri, 20 Feb 2026 15:43:07 +0100 Subject: [PATCH 12/37] Rename client to AmplifyKinesisClient, bring in foundation logger and credentials provider types, autoflushscheduler error logging --- aws-kinesis/api/aws-kinesis.api | 86 +++++++------- aws-kinesis/build.gradle.kts | 2 + .../KinesisDataStreamsInstrumentationTest.kt | 97 ++++++---------- ...DataStreams.kt => AmplifyKinesisClient.kt} | 105 +++++++++--------- ...t => AmplifyKinesisClientConfiguration.kt} | 26 +++-- ...lifyKinesisClientConfigurationProvider.kt} | 12 +- ...xception.kt => AmplifyKinesisException.kt} | 42 +++---- .../kinesis/KinesisRecordSender.kt | 2 +- .../recordcache/AutoFlushScheduler.kt | 15 ++- .../recordcache/RecordCacheException.kt | 2 +- .../recordcache/RecordClient.kt | 22 +++- .../recordcache/SQLiteRecordStorage.kt | 7 +- 12 files changed, 212 insertions(+), 206 deletions(-) rename aws-kinesis/src/main/java/com/amplifyframework/kinesis/{KinesisDataStreams.kt => AmplifyKinesisClient.kt} (62%) rename aws-kinesis/src/main/java/com/amplifyframework/kinesis/{KinesisDataStreamsOptions.kt => AmplifyKinesisClientConfiguration.kt} (74%) rename aws-kinesis/src/main/java/com/amplifyframework/kinesis/{KinesisClientConfigurationProvider.kt => AmplifyKinesisClientConfigurationProvider.kt} (71%) rename aws-kinesis/src/main/java/com/amplifyframework/kinesis/{KinesisException.kt => AmplifyKinesisException.kt} (64%) diff --git a/aws-kinesis/api/aws-kinesis.api b/aws-kinesis/api/aws-kinesis.api index e6997cdab9..2b58ba7ef9 100644 --- a/aws-kinesis/api/aws-kinesis.api +++ b/aws-kinesis/api/aws-kinesis.api @@ -1,41 +1,29 @@ -public final class com/amplifyframework/kinesis/BuildConfig { - public static final field BUILD_TYPE Ljava/lang/String; - public static final field DEBUG Z - public static final field LIBRARY_PACKAGE_NAME Ljava/lang/String; - public static final field VERSION_NAME Ljava/lang/String; - public fun ()V -} - -public abstract interface class com/amplifyframework/kinesis/KinesisClientConfigurationProvider { - public abstract fun applyConfiguration (Laws/sdk/kotlin/services/kinesis/KinesisClient$Config$Builder;)V -} - -public final class com/amplifyframework/kinesis/KinesisDataStreams { - public fun (Landroid/content/Context;Ljava/lang/String;Lcom/amplifyframework/auth/AWSCredentialsProvider;Lcom/amplifyframework/kinesis/KinesisDataStreamsOptions;)V - public synthetic fun (Landroid/content/Context;Ljava/lang/String;Lcom/amplifyframework/auth/AWSCredentialsProvider;Lcom/amplifyframework/kinesis/KinesisDataStreamsOptions;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +public final class com/amplifyframework/kinesis/AmplifyKinesisClient { + public fun (Landroid/content/Context;Ljava/lang/String;Lcom/amplifyframework/foundation/credentials/AwsCredentialsProvider;Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration;)V + public synthetic fun (Landroid/content/Context;Ljava/lang/String;Lcom/amplifyframework/foundation/credentials/AwsCredentialsProvider;Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun clearCache-IoAF18A (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun disable ()V public final fun enable ()V public final fun flush-IoAF18A (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun getContext ()Landroid/content/Context; - public final fun getCredentialsProvider ()Lcom/amplifyframework/auth/AWSCredentialsProvider; + public final fun getCredentialsProvider ()Lcom/amplifyframework/foundation/credentials/AwsCredentialsProvider; public final fun getKinesisClient ()Laws/sdk/kotlin/services/kinesis/KinesisClient; public final fun getRegion ()Ljava/lang/String; public final fun record-BWLJW6A ([BLjava/lang/String;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; } -public final class com/amplifyframework/kinesis/KinesisDataStreamsOptions { - public static final field Companion Lcom/amplifyframework/kinesis/KinesisDataStreamsOptions$Companion; - public static final fun builder ()Lcom/amplifyframework/kinesis/KinesisDataStreamsOptions$Builder; +public final class com/amplifyframework/kinesis/AmplifyKinesisClientConfiguration { + public static final field Companion Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration$Companion; + public static final fun builder ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration$Builder; public final fun component1 ()J public final fun component2 ()I public final fun component3 ()I public final fun component4 ()Lcom/amplifyframework/recordcache/FlushStrategy; - public final fun component5 ()Lcom/amplifyframework/kinesis/KinesisClientConfigurationProvider; - public static final fun defaults ()Lcom/amplifyframework/kinesis/KinesisDataStreamsOptions; + public final fun component5 ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider; + public static final fun defaults ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration; public fun equals (Ljava/lang/Object;)Z public final fun getCacheMaxBytes ()J - public final fun getConfigureClient ()Lcom/amplifyframework/kinesis/KinesisClientConfigurationProvider; + public final fun getConfigureClient ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider; public final fun getFlushStrategy ()Lcom/amplifyframework/recordcache/FlushStrategy; public final fun getMaxRecords ()I public final fun getMaxRetries ()I @@ -43,62 +31,74 @@ public final class com/amplifyframework/kinesis/KinesisDataStreamsOptions { public fun toString ()Ljava/lang/String; } -public final class com/amplifyframework/kinesis/KinesisDataStreamsOptions$Builder { - public final fun build ()Lcom/amplifyframework/kinesis/KinesisDataStreamsOptions; - public final fun cacheMaxBytes (J)Lcom/amplifyframework/kinesis/KinesisDataStreamsOptions$Builder; - public final fun configureClient (Lcom/amplifyframework/kinesis/KinesisClientConfigurationProvider;)Lcom/amplifyframework/kinesis/KinesisDataStreamsOptions$Builder; - public final fun flushStrategy (Lcom/amplifyframework/recordcache/FlushStrategy;)Lcom/amplifyframework/kinesis/KinesisDataStreamsOptions$Builder; +public final class com/amplifyframework/kinesis/AmplifyKinesisClientConfiguration$Builder { + public final fun build ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration; + public final fun cacheMaxBytes (J)Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration$Builder; + public final fun configureClient (Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider;)Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration$Builder; + public final fun flushStrategy (Lcom/amplifyframework/recordcache/FlushStrategy;)Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration$Builder; public final fun getCacheMaxBytes ()J - public final fun getConfigureClient ()Lcom/amplifyframework/kinesis/KinesisClientConfigurationProvider; + public final fun getConfigureClient ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider; public final fun getFlushStrategy ()Lcom/amplifyframework/recordcache/FlushStrategy; public final fun getMaxRecords ()I public final fun getMaxRetries ()I - public final fun maxRecords (I)Lcom/amplifyframework/kinesis/KinesisDataStreamsOptions$Builder; - public final fun maxRetries (I)Lcom/amplifyframework/kinesis/KinesisDataStreamsOptions$Builder; + public final fun maxRecords (I)Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration$Builder; + public final fun maxRetries (I)Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration$Builder; public final synthetic fun setCacheMaxBytes (J)V - public final synthetic fun setConfigureClient (Lcom/amplifyframework/kinesis/KinesisClientConfigurationProvider;)V + public final synthetic fun setConfigureClient (Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider;)V public final synthetic fun setFlushStrategy (Lcom/amplifyframework/recordcache/FlushStrategy;)V public final synthetic fun setMaxRecords (I)V public final synthetic fun setMaxRetries (I)V } -public final class com/amplifyframework/kinesis/KinesisDataStreamsOptions$Companion { - public final fun builder ()Lcom/amplifyframework/kinesis/KinesisDataStreamsOptions$Builder; - public final fun defaults ()Lcom/amplifyframework/kinesis/KinesisDataStreamsOptions; - public final synthetic fun invoke (Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/kinesis/KinesisDataStreamsOptions; +public final class com/amplifyframework/kinesis/AmplifyKinesisClientConfiguration$Companion { + public final fun builder ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration$Builder; + public final fun defaults ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration; + public final synthetic fun invoke (Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration; } -public abstract class com/amplifyframework/kinesis/KinesisException : com/amplifyframework/AmplifyException { - public static final field Companion Lcom/amplifyframework/kinesis/KinesisException$Companion; +public abstract interface class com/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider { + public abstract fun applyConfiguration (Laws/sdk/kotlin/services/kinesis/KinesisClient$Config$Builder;)V +} + +public abstract class com/amplifyframework/kinesis/AmplifyKinesisException : com/amplifyframework/AmplifyException { + public static final field Companion Lcom/amplifyframework/kinesis/AmplifyKinesisException$Companion; public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;Lkotlin/jvm/internal/DefaultConstructorMarker;)V } -public final class com/amplifyframework/kinesis/KinesisException$Companion { - public final fun from (Ljava/lang/Throwable;)Lcom/amplifyframework/kinesis/KinesisException; +public final class com/amplifyframework/kinesis/AmplifyKinesisException$Companion { + public final fun from (Ljava/lang/Throwable;)Lcom/amplifyframework/kinesis/AmplifyKinesisException; } -public final class com/amplifyframework/kinesis/KinesisLimitExceededException : com/amplifyframework/kinesis/KinesisException { +public final class com/amplifyframework/kinesis/AmplifyKinesisLimitExceededException : com/amplifyframework/kinesis/AmplifyKinesisException { public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V } -public final class com/amplifyframework/kinesis/KinesisServiceException : com/amplifyframework/kinesis/KinesisException { +public final class com/amplifyframework/kinesis/AmplifyKinesisServiceException : com/amplifyframework/kinesis/AmplifyKinesisException { public fun (Ljava/lang/String;Ljava/lang/String;Laws/sdk/kotlin/services/kinesis/model/KinesisException;)V public fun getCause ()Laws/sdk/kotlin/services/kinesis/model/KinesisException; public synthetic fun getCause ()Ljava/lang/Throwable; } -public final class com/amplifyframework/kinesis/KinesisStorageException : com/amplifyframework/kinesis/KinesisException { +public final class com/amplifyframework/kinesis/AmplifyKinesisStorageException : com/amplifyframework/kinesis/AmplifyKinesisException { public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V } -public final class com/amplifyframework/kinesis/KinesisUnknownException : com/amplifyframework/kinesis/KinesisException { +public final class com/amplifyframework/kinesis/AmplifyKinesisUnknownException : com/amplifyframework/kinesis/AmplifyKinesisException { public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V } +public final class com/amplifyframework/kinesis/BuildConfig { + public static final field BUILD_TYPE Ljava/lang/String; + public static final field DEBUG Z + public static final field LIBRARY_PACKAGE_NAME Ljava/lang/String; + public static final field VERSION_NAME Ljava/lang/String; + public fun ()V +} + public final class com/amplifyframework/recordcache/ClearCacheData { public fun ()V public fun (I)V diff --git a/aws-kinesis/build.gradle.kts b/aws-kinesis/build.gradle.kts index 0138657723..b9d4d11a4a 100644 --- a/aws-kinesis/build.gradle.kts +++ b/aws-kinesis/build.gradle.kts @@ -28,6 +28,8 @@ android { dependencies { implementation(project(":core")) implementation(project(":aws-core")) + implementation(project(":foundation")) + implementation(project(":foundation-bridge")) implementation(libs.androidx.appcompat) implementation(libs.aws.kinesis) diff --git a/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt b/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt index f1c3415fb8..e6e525d956 100644 --- a/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt +++ b/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt @@ -16,16 +16,15 @@ package com.amplifyframework.kinesis import android.content.Context import androidx.test.core.app.ApplicationProvider -import com.amplifyframework.auth.AWSCredentials -import com.amplifyframework.auth.AWSCredentialsProvider -import com.amplifyframework.auth.AuthException +import com.amplifyframework.auth.CognitoCredentialsProvider import com.amplifyframework.auth.cognito.AWSCognitoAuthPlugin import com.amplifyframework.core.Amplify -import com.amplifyframework.core.Consumer +import com.amplifyframework.foundation.credentials.AwsCredentials +import com.amplifyframework.foundation.credentials.AwsCredentialsProvider +import com.amplifyframework.foundation.credentials.toAwsCredentialsProvider import com.amplifyframework.recordcache.FlushStrategy import com.amplifyframework.testutils.Sleep import com.amplifyframework.testutils.sync.SynchronousAuth -import io.kotest.assertions.throwables.shouldNotThrowAny import io.kotest.matchers.booleans.shouldBeFalse import io.kotest.matchers.booleans.shouldBeTrue import io.kotest.matchers.ints.shouldBeGreaterThan @@ -43,7 +42,7 @@ import org.junit.BeforeClass import org.junit.Test /** - * Instrumented tests for [KinesisDataStreams]. + * Instrumented tests for [AmplifyKinesisClient]. * * These tests run against a real Kinesis stream and require: * - A provisioned Kinesis Data Stream (stream name configured below) @@ -61,7 +60,7 @@ class KinesisDataStreamsInstrumentationTest { private const val REGION = "us-east-1" private lateinit var synchronousAuth: SynchronousAuth - private lateinit var credentialsProvider: AWSCredentialsProvider + private lateinit var credentialsProvider: AwsCredentialsProvider @BeforeClass @JvmStatic @@ -73,7 +72,11 @@ class KinesisDataStreamsInstrumentationTest { synchronousAuth = SynchronousAuth.delegatingTo(Amplify.Auth) // Sign in with test credentials - @androidx.annotation.RawRes val resourceId = com.amplifyframework.testutils.Resources.getRawResourceId(context, CREDENTIALS_RESOURCE_NAME) + @androidx.annotation.RawRes val resourceId = + com.amplifyframework.testutils.Resources.getRawResourceId( + context, + CREDENTIALS_RESOURCE_NAME + ) val userAndPasswordPair = readCredentialsFromResource(context, resourceId) synchronousAuth.signOut() synchronousAuth.signIn( @@ -81,41 +84,14 @@ class KinesisDataStreamsInstrumentationTest { userAndPasswordPair.second ) - credentialsProvider = object : AWSCredentialsProvider { - override fun fetchAWSCredentials( - onSuccess: Consumer, - onError: Consumer - ) { - Amplify.Auth.fetchAuthSession( - { session -> - val awsSession = - session as com.amplifyframework.auth.AWSAuthSessionBehavior<*> - val credentials = awsSession.awsCredentialsResult.value - if (credentials != null) { - onSuccess.accept(credentials) - } else { - onError.accept( - AuthException( - "No AWS credentials available", - "Check auth configuration" - ) - ) - } - }, - { error -> - onError.accept( - AuthException( - "Failed to fetch auth session", - error.toString() - ) - ) - } - ) - } - } + // Bridge V2 Auth to foundation credentials via Smithy types + credentialsProvider = CognitoCredentialsProvider().toAwsCredentialsProvider() } - private fun readCredentialsFromResource(context: Context, @androidx.annotation.RawRes resourceId: Int): android.util.Pair? { + private fun readCredentialsFromResource( + context: Context, + @androidx.annotation.RawRes resourceId: Int + ): android.util.Pair? { val resource = com.amplifyframework.testutils.Resources.readAsJson(context, resourceId) var userCredentials: android.util.Pair? = null return try { @@ -133,12 +109,12 @@ class KinesisDataStreamsInstrumentationTest { } } - private lateinit var kinesis: KinesisDataStreams + private lateinit var kinesis: AmplifyKinesisClient @Before fun setUp() { val context = ApplicationProvider.getApplicationContext() - kinesis = KinesisDataStreams( + kinesis = AmplifyKinesisClient( context = context, region = REGION, credentialsProvider = credentialsProvider @@ -262,16 +238,16 @@ class KinesisDataStreamsInstrumentationTest { // Cache behavior // --------------------------------------------------------------- - /** Fill cache to limit, then verify the next record fails with KinesisLimitExceededException. */ + /** Fill cache to limit, then verify the next record fails with AmplifyKinesisLimitExceededException. */ @Test fun testCacheLimitExceeded(): Unit = runBlocking { val context = ApplicationProvider.getApplicationContext() // Create a client with a tiny cache - val smallCacheKinesis = KinesisDataStreams( + val smallCacheKinesis = AmplifyKinesisClient( context = context, region = REGION, credentialsProvider = credentialsProvider, - options = KinesisDataStreamsOptions { + configuration = AmplifyKinesisClientConfiguration { cacheMaxBytes = 100L // 100 bytes maxRecords = 500 } @@ -295,7 +271,7 @@ class KinesisDataStreamsInstrumentationTest { ) result.isFailure.shouldBeTrue() - result.exceptionOrNull().shouldBeInstanceOf() + result.exceptionOrNull().shouldBeInstanceOf() } finally { smallCacheKinesis.disable() smallCacheKinesis.clearCache() @@ -324,25 +300,18 @@ class KinesisDataStreamsInstrumentationTest { // Error paths // --------------------------------------------------------------- - /** Flush with invalid credentials should fail with KinesisServiceException. */ + /** Flush with invalid credentials should fail with AmplifyKinesisServiceException. */ @Test fun testFlushWithInvalidCredentials(): Unit = runBlocking { val context = ApplicationProvider.getApplicationContext() - val badCredentials = object : AWSCredentialsProvider { - override fun fetchAWSCredentials( - onSuccess: Consumer, - onError: Consumer - ) { - onSuccess.accept( - AWSCredentials( - accessKeyId = "INVALID_ACCESS_KEY", - secretAccessKey = "INVALID_SECRET_KEY" - ) - ) - } + val badCredentials = AwsCredentialsProvider { + AwsCredentials.Static( + accessKeyId = "INVALID_ACCESS_KEY", + secretAccessKey = "INVALID_SECRET_KEY" + ) } - val badKinesis = KinesisDataStreams( + val badKinesis = AmplifyKinesisClient( context = context, region = REGION, credentialsProvider = badCredentials @@ -358,7 +327,7 @@ class KinesisDataStreamsInstrumentationTest { val flushResult = badKinesis.flush() flushResult.isFailure.shouldBeTrue() - flushResult.exceptionOrNull().shouldBeInstanceOf() + flushResult.exceptionOrNull().shouldBeInstanceOf() } finally { badKinesis.disable() badKinesis.clearCache() @@ -419,11 +388,11 @@ class KinesisDataStreamsInstrumentationTest { fun testAutoFlush(): Unit = runBlocking { val context = ApplicationProvider.getApplicationContext() // Create client with short flush interval - val autoFlushKinesis = KinesisDataStreams( + val autoFlushKinesis = AmplifyKinesisClient( context = context, region = REGION, credentialsProvider = credentialsProvider, - options = KinesisDataStreamsOptions { + configuration = AmplifyKinesisClientConfiguration { flushStrategy = FlushStrategy.Interval(5.seconds) } ) diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreams.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt similarity index 62% rename from aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreams.kt rename to aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt index a221550c78..f37e045612 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreams.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt @@ -2,19 +2,20 @@ package com.amplifyframework.kinesis import android.content.Context import aws.sdk.kotlin.services.kinesis.KinesisClient -import com.amplifyframework.auth.AWSCredentials -import com.amplifyframework.auth.AWSCredentialsProvider -import com.amplifyframework.auth.convertToSdkCredentialsProvider -import com.amplifyframework.core.Amplify -import com.amplifyframework.core.category.CategoryType -import com.amplifyframework.logging.Logger +import com.amplifyframework.foundation.credentials.AwsCredentials +import com.amplifyframework.foundation.credentials.AwsCredentialsProvider +import com.amplifyframework.foundation.credentials.toSmithyProvider +import com.amplifyframework.foundation.logging.AmplifyLogging +import com.amplifyframework.foundation.logging.Logger import com.amplifyframework.recordcache.AutoFlushScheduler import com.amplifyframework.recordcache.ClearCacheResult import com.amplifyframework.recordcache.FlushResult import com.amplifyframework.recordcache.FlushStrategy import com.amplifyframework.recordcache.FlushStrategy.Interval import com.amplifyframework.recordcache.RecordClient +import com.amplifyframework.recordcache.RecordData import com.amplifyframework.recordcache.RecordInput +import com.amplifyframework.recordcache.RecordResult import com.amplifyframework.recordcache.SQLiteRecordStorage import kotlin.system.measureTimeMillis @@ -26,7 +27,10 @@ import kotlin.system.measureTimeMillis * * Example usage: * ```kotlin - * val kinesis = KinesisDataStreams( + * // Bridge V2 Auth to foundation credentials via Smithy types + * val credentialsProvider = CognitoCredentialsProvider().toAwsCredentialsProvider() + * + * val kinesis = AmplifyKinesisClient( * context = applicationContext, * region = "us-east-1", * credentialsProvider = credentialsProvider @@ -45,34 +49,35 @@ import kotlin.system.measureTimeMillis * * @param context Android application context for database access * @param region AWS region where the Kinesis stream is located - * @param credentialsProvider AWS credentials for authentication - * @param options Configuration options with sensible defaults + * @param credentialsProvider AWS credentials for authentication. Use + * `CognitoCredentialsProvider().toAwsCredentialsProvider()` to bridge from V2 Auth. + * @param configuration Configuration options with sensible defaults */ -class KinesisDataStreams( +class AmplifyKinesisClient( val context: Context, val region: String, - val credentialsProvider: AWSCredentialsProvider, // TODO: Pending V3 types - options: KinesisDataStreamsOptions = KinesisDataStreamsOptions.defaults() + val credentialsProvider: AwsCredentialsProvider, + configuration: AmplifyKinesisClientConfiguration = AmplifyKinesisClientConfiguration.defaults() ) { - private val logger: Logger = Amplify.Logging.logger(CategoryType.ANALYTICS, "KinesisDataStreams") + private val logger: Logger = AmplifyLogging.logger() /** The underlying SDK [KinesisClient] for direct access. */ val kinesisClient: KinesisClient = KinesisClient { - this.region = this@KinesisDataStreams.region - this.credentialsProvider = convertToSdkCredentialsProvider(this@KinesisDataStreams.credentialsProvider) - options.configureClient?.applyConfiguration(this) + this.region = this@AmplifyKinesisClient.region + this.credentialsProvider = this@AmplifyKinesisClient.credentialsProvider.toSmithyProvider() + configuration.configureClient?.applyConfiguration(this) } private val recordClient: RecordClient = RecordClient( sender = KinesisRecordSender( kinesisClient = kinesisClient, - maxRetries = options.maxRetries + maxRetries = configuration.maxRetries ), storage = SQLiteRecordStorage( context = context, identifier = region, - maxRecords = options.maxRecords, - maxBytes = options.cacheMaxBytes + maxRecords = configuration.maxRecords, + maxBytes = configuration.cacheMaxBytes ) ) private val scheduler: AutoFlushScheduler @@ -80,9 +85,9 @@ class KinesisDataStreams( @Volatile private var isEnabled = false init { - if (options.flushStrategy is FlushStrategy.Interval) { + if (configuration.flushStrategy is FlushStrategy.Interval) { scheduler = AutoFlushScheduler( - options.flushStrategy, + configuration.flushStrategy, client = recordClient ) } else { @@ -96,25 +101,23 @@ class KinesisDataStreams( * @param data The data to record as byte array * @param partitionKey The partition key for the record * @param streamName The name of the Kinesis stream - * @return Result.success(Unit) on success, or Result.failure with: - * - [KinesisLimitExceededException] (cache full) - * - [KinesisStorageException] (database errors) + * @return Result.success(RecordData) on success, or Result.failure with: + * - [AmplifyKinesisLimitExceededException] (cache full) + * - [AmplifyKinesisStorageException] (database errors) */ - suspend fun record(data: ByteArray, partitionKey: String, streamName: String): Result { + suspend fun record(data: ByteArray, partitionKey: String, streamName: String): RecordResult { if (!isEnabled) { - logger.debug("Record collection is disabled, dropping record") - return Result.success(Unit) + logger.debug { "Record collection is disabled, dropping record" } + return Result.success(RecordData()) } logger.verbose { "Recording to stream: $streamName" } return logOp( - operation = { recordClient.record(RecordInput(streamName, partitionKey, data)).map { }.wrapError() }, + operation = { recordClient.record(RecordInput(streamName, partitionKey, data)).wrapError() }, logSuccess = { _, timeMs -> - // TODO: Use lazy evaluation for log messages - logger.debug("Record completed successfully in ${timeMs}ms") + logger.debug { "Record completed successfully in ${timeMs}ms" } }, logFailure = { error, timeMs -> - // TODO: Use lazy evaluation for log messages - logger.warn("Record failed in ${timeMs}ms: ${error?.message}") + logger.warn { "Record failed in ${timeMs}ms: ${error?.message}" } } ) } @@ -123,24 +126,21 @@ class KinesisDataStreams( * Flushes all cached records to their respective Kinesis streams. * * @return Result.success(FlushData) on success, or Result.failure with: - * - [KinesisServiceException] (API failures) - * - [KinesisStorageException] (database errors) - * - [KinesisUnknownException] (unexpected failures) + * - [AmplifyKinesisServiceException] (API failures) + * - [AmplifyKinesisStorageException] (database errors) + * - [AmplifyKinesisUnknownException] (unexpected failures) */ suspend fun flush(): FlushResult { - logger.info("Starting flush") + logger.info { "Starting flush" } return logOp( operation = { recordClient.flush().wrapError() }, logSuccess = { data, timeMs -> - // TODO: Use lazy evaluation for log messages - logger.info( - "Flush completed successfully in ${timeMs}ms" + - " - ${data.recordsFlushed} records flushed" - ) + logger.info { + "Flush completed successfully in ${timeMs}ms - ${data.recordsFlushed} records flushed" + } }, logFailure = { error, timeMs -> - // TODO: Use lazy evaluation for log messages - logger.warn("Flush failed in ${timeMs}ms: ${error?.message}") + logger.warn { "Flush failed in ${timeMs}ms: ${error?.message}" } } ) } @@ -149,22 +149,19 @@ class KinesisDataStreams( * Clears all cached records from local storage. * * @return Result.success(ClearCacheData) on success, or Result.failure with: - * - [KinesisStorageException] (database errors) + * - [AmplifyKinesisStorageException] (database errors) */ suspend fun clearCache(): ClearCacheResult { - logger.info("Clearing cache") + logger.info { "Clearing cache" } return logOp( operation = { recordClient.clearCache().wrapError() }, logSuccess = { data, timeMs -> - // TODO: Use lazy evaluation for log messages - logger.info( - "Clear cache completed successfully in ${timeMs}ms" + - " - ${data.recordsCleared} records cleared" - ) + logger.info { + "Clear cache completed successfully in ${timeMs}ms - ${data.recordsCleared} records cleared" + } }, logFailure = { error, timeMs -> - // TODO: Use lazy evaluation for log messages - logger.warn("Clear cache failed in ${timeMs}ms: ${error?.message}") + logger.warn { "Clear cache failed in ${timeMs}ms: ${error?.message}" } } ) } @@ -186,11 +183,11 @@ class KinesisDataStreams( scheduler.disable() } - /** Maps any failure in the [Result] to a [KinesisException] via [KinesisException.from]. */ + /** Maps any failure in the [Result] to a [AmplifyKinesisException] via [AmplifyKinesisException.from]. */ private fun Result.wrapError(): Result { if (isSuccess) return this val error = exceptionOrNull() ?: return this - return Result.failure(KinesisException.from(error)) + return Result.failure(AmplifyKinesisException.from(error)) } private suspend inline fun logOp( diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreamsOptions.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientConfiguration.kt similarity index 74% rename from aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreamsOptions.kt rename to aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientConfiguration.kt index 8ce6d65eae..bffdf607f0 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisDataStreamsOptions.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientConfiguration.kt @@ -6,23 +6,23 @@ import kotlin.time.Duration.Companion.seconds private const val DEFAULT_CACHE_SIZE_LIMIT_IN_BYTES = 500L * 1024 * 1024 /** - * Configuration options for [KinesisDataStreams]. + * Configuration options for [AmplifyKinesisClient]. * * @param cacheMaxBytes Maximum size of the local cache in bytes (default: 500MB) * @param maxRecords Maximum number of records to cache before forcing a flush (default: 500) * @param maxRetries Maximum number of retry attempts for failed records (default: 5) * @param flushStrategy Strategy for automatic flushing of cached records */ -data class KinesisDataStreamsOptions internal constructor( +data class AmplifyKinesisClientConfiguration internal constructor( val cacheMaxBytes: Long, val maxRecords: Int, val maxRetries: Int, val flushStrategy: FlushStrategy, - val configureClient: KinesisClientConfigurationProvider? = null + val configureClient: AmplifyKinesisClientConfigurationProvider? = null ) { companion object { /** - * Creates a new builder for configuring [KinesisDataStreamsOptions]. + * Creates a new builder for configuring [AmplifyKinesisClientConfiguration]. * * @return A new builder instance with default values */ @@ -33,7 +33,7 @@ data class KinesisDataStreamsOptions internal constructor( operator fun invoke(func: Builder.() -> Unit) = Builder().apply(func).build() /** - * Creates [KinesisDataStreamsOptions] with default values. + * Creates [AmplifyKinesisClientConfiguration] with default values. * * @return Options with default values */ @@ -42,7 +42,7 @@ data class KinesisDataStreamsOptions internal constructor( } /** - * Builder for [KinesisDataStreamsOptions]. + * Builder for [AmplifyKinesisClientConfiguration]. */ class Builder internal constructor() { var cacheMaxBytes: Long = DEFAULT_CACHE_SIZE_LIMIT_IN_BYTES @@ -57,7 +57,7 @@ data class KinesisDataStreamsOptions internal constructor( var flushStrategy: FlushStrategy = FlushStrategy.Interval(30.seconds) @JvmSynthetic set - var configureClient: KinesisClientConfigurationProvider? = null + var configureClient: AmplifyKinesisClientConfigurationProvider? = null @JvmSynthetic set /** @@ -91,13 +91,19 @@ data class KinesisDataStreamsOptions internal constructor( * @return This builder instance */ fun flushStrategy(value: FlushStrategy) = apply { flushStrategy = value } - fun configureClient(value: KinesisClientConfigurationProvider?) = apply { configureClient = value } + fun configureClient(value: AmplifyKinesisClientConfigurationProvider?) = apply { configureClient = value } /** - * Builds the [KinesisDataStreamsOptions] with configured values. + * Builds the [AmplifyKinesisClientConfiguration] with configured values. * * @return Configured options instance */ - fun build() = KinesisDataStreamsOptions(cacheMaxBytes, maxRecords, maxRetries, flushStrategy, configureClient) + fun build() = AmplifyKinesisClientConfiguration( + cacheMaxBytes, + maxRecords, + maxRetries, + flushStrategy, + configureClient + ) } } diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisClientConfigurationProvider.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider.kt similarity index 71% rename from aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisClientConfigurationProvider.kt rename to aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider.kt index bd1e185625..a31eb7f140 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisClientConfigurationProvider.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider.kt @@ -6,23 +6,25 @@ import aws.sdk.kotlin.services.kinesis.KinesisClient * Provides custom configuration for the underlying [KinesisClient]. * * Implement this interface to customize the [KinesisClient.Config.Builder] used - * by [KinesisDataStreams]. The builder passed to [applyConfiguration] will already + * by [AmplifyKinesisClient]. The builder passed to [applyConfiguration] will already * have the default configurations (region, credentials) applied — your overrides * are applied on top. * * This is a SAM interface, so it can be used as a lambda in Kotlin: * ```kotlin - * KinesisDataStreams( + * AmplifyKinesisClient( * context = context, * region = "us-east-1", * credentialsProvider = provider, - * clientConfigurationProvider = KinesisClientConfigurationProvider { builder -> - * builder.httpClient { /* custom http config */ } + * configuration = AmplifyKinesisClientConfiguration { + * configureClient = AmplifyKinesisClientConfigurationProvider { builder -> + * builder.httpClient { /* custom http config */ } + * } * } * ) * ``` */ -fun interface KinesisClientConfigurationProvider { +fun interface AmplifyKinesisClientConfigurationProvider { /** * Applies custom configuration to the KinesisClient builder. * diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisException.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisException.kt similarity index 64% rename from aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisException.kt rename to aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisException.kt index 01ab795ba2..b29ee79fe4 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisException.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisException.kt @@ -12,48 +12,48 @@ import com.amplifyframework.recordcache.RecordCacheLimitExceededException * * This is a sealed hierarchy. Callers can exhaustively match on the subtype * to determine the category of failure: - * - [KinesisStorageException] — local cache / database errors - * - [KinesisLimitExceededException] — local cache is full - * - [KinesisServiceException] — Kinesis API / SDK errors - * - [KinesisUnknownException] — unexpected / uncategorized errors + * - [AmplifyKinesisStorageException] — local cache / database errors + * - [AmplifyKinesisLimitExceededException] — local cache is full + * - [AmplifyKinesisServiceException] — Kinesis API / SDK errors + * - [AmplifyKinesisUnknownException] — unexpected / uncategorized errors * * @param message Error message describing what went wrong * @param recoverySuggestion Suggested action to resolve the error * @param cause Underlying cause of the exception */ -sealed class KinesisException( +sealed class AmplifyKinesisException( message: String, recoverySuggestion: String, cause: Throwable? = null ) : AmplifyException(message, cause, recoverySuggestion) { companion object { /** - * Maps a [Throwable] into the appropriate [KinesisException] subtype, + * Maps a [Throwable] into the appropriate [AmplifyKinesisException] subtype, * handling [RecordCacheException], Kinesis SDK exceptions, and unknown errors. */ - fun from(error: Throwable): KinesisException = when (error) { - is KinesisException -> error - is RecordCacheDatabaseException -> KinesisStorageException( + fun from(error: Throwable): AmplifyKinesisException = when (error) { + is AmplifyKinesisException -> error + is RecordCacheDatabaseException -> AmplifyKinesisStorageException( message = error.message, recoverySuggestion = error.recoverySuggestion, cause = error ) - is RecordCacheLimitExceededException -> KinesisLimitExceededException( + is RecordCacheLimitExceededException -> AmplifyKinesisLimitExceededException( message = error.message, recoverySuggestion = error.recoverySuggestion, cause = error ) - is RecordCacheException -> KinesisStorageException( + is RecordCacheException -> AmplifyKinesisStorageException( message = error.message, recoverySuggestion = error.recoverySuggestion, cause = error ) - is SdkKinesisException -> KinesisServiceException( + is SdkKinesisException -> AmplifyKinesisServiceException( message = "A service error occurred", recoverySuggestion = DEFAULT_RECOVERY_SUGGESTION, cause = error ) - else -> KinesisUnknownException( + else -> AmplifyKinesisUnknownException( message = error.message ?: "An unknown error occurred", recoverySuggestion = DEFAULT_RECOVERY_SUGGESTION, cause = error @@ -63,29 +63,29 @@ sealed class KinesisException( } /** Local storage / database error. */ -class KinesisStorageException( +class AmplifyKinesisStorageException( message: String, recoverySuggestion: String, cause: Throwable? = null -) : KinesisException(message, recoverySuggestion, cause) +) : AmplifyKinesisException(message, recoverySuggestion, cause) /** Kinesis API / SDK error. */ -class KinesisServiceException( +class AmplifyKinesisServiceException( message: String, recoverySuggestion: String, override val cause: SdkKinesisException -) : KinesisException(message, recoverySuggestion, cause) +) : AmplifyKinesisException(message, recoverySuggestion, cause) /** Local cache size or record limit exceeded. */ -class KinesisLimitExceededException( +class AmplifyKinesisLimitExceededException( message: String, recoverySuggestion: String, cause: Throwable? = null -) : KinesisException(message, recoverySuggestion, cause) +) : AmplifyKinesisException(message, recoverySuggestion, cause) /** Unexpected / uncategorized error. */ -class KinesisUnknownException( +class AmplifyKinesisUnknownException( message: String, recoverySuggestion: String, cause: Throwable? = null -) : KinesisException(message, recoverySuggestion, cause) +) : AmplifyKinesisException(message, recoverySuggestion, cause) diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisRecordSender.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisRecordSender.kt index 26e3cb3972..7d28bdb389 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisRecordSender.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisRecordSender.kt @@ -20,7 +20,7 @@ internal class KinesisRecordSender( val request = createRequest(streamName, records) val sdkResponse = kinesisClient.putRecords(request) splitResponse(sdkResponse, records) - }.recoverCatching { throw KinesisException.from(it) } + }.recoverCatching { throw AmplifyKinesisException.from(it) } @VisibleForTesting internal fun createRequest(streamName: String, records: List) = PutRecordsRequest { diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/AutoFlushScheduler.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/AutoFlushScheduler.kt index c9fec0afcf..e7095b56f9 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/AutoFlushScheduler.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/AutoFlushScheduler.kt @@ -1,5 +1,7 @@ package com.amplifyframework.recordcache +import com.amplifyframework.foundation.logging.AmplifyLogging +import com.amplifyframework.foundation.logging.Logger import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineName import kotlinx.coroutines.CoroutineScope @@ -13,6 +15,7 @@ internal class AutoFlushScheduler( val client: RecordClient, private val dispatcher: CoroutineDispatcher = Dispatchers.IO ) { + private val logger: Logger = AmplifyLogging.logger() private val scope = CoroutineScope(dispatcher + CoroutineName("AutoFlushScheduler")) private var flushJob: Job? = null @@ -32,9 +35,17 @@ internal class AutoFlushScheduler( while (true) { delay(interval.interval) try { - client.flush() + val result = client.flush() + if (result.isSuccess) { + val data = result.getOrThrow() + logger.debug { "Auto-flush completed: ${data.recordsFlushed} records flushed" } + } else { + // Expected failures (network, throttling, etc.) - will retry on next cycle + logger.warn(result.exceptionOrNull()) { "Auto-flush failed" } + } } catch (e: Exception) { - // TODO: Log + // Defensive catch for unexpected exceptions to prevent scheduler from crashing + logger.error(e) { "Unexpected error during auto-flush" } } } } diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordCacheException.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordCacheException.kt index 6f7de2c17a..31d257882c 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordCacheException.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordCacheException.kt @@ -2,7 +2,7 @@ package com.amplifyframework.recordcache /** * Internal error type used by [RecordClient] / [RecordStorage]. - * Mapped to the public Kinesis exception type at the KinesisDataStreams boundary. + * Mapped to the public Kinesis exception type at the AmplifyKinesisClient boundary. */ internal sealed class RecordCacheException( override val message: String, diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordClient.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordClient.kt index c788a8f7fe..5068fdf799 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordClient.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordClient.kt @@ -1,25 +1,35 @@ package com.amplifyframework.recordcache +import com.amplifyframework.foundation.logging.AmplifyLogging +import com.amplifyframework.foundation.logging.Logger import java.util.concurrent.atomic.AtomicBoolean internal class RecordClient( private val sender: RecordSender, private val storage: RecordStorage ) { + private val logger: Logger = AmplifyLogging.logger() private val isFlushing = AtomicBoolean(false) + suspend fun record(record: RecordInput): RecordResult = storage.addRecord(record).mapCatching { RecordData() } suspend fun flush(): FlushResult { // Guard against concurrent flushes to return early if (!isFlushing.compareAndSet(false, true)) { + logger.debug { "Flush already in progress, skipping" } return Result.success(FlushData(recordsFlushed = 0, flushInProgress = true)) } return try { runCatching { - val r = storage.getRecordsByStream() - .getOrThrow() + val recordsByStream = storage.getRecordsByStream().getOrThrow() + logger.debug { "Retrieved ${recordsByStream.size} stream(s) with records to flush" } + + val totalFlushed = recordsByStream .map { records -> val streamName = records.first().streamName + val recordCount = records.size + logger.verbose { "Flushing $recordCount records to stream: $streamName" } + val result = sender.putRecords(streamName, records).getOrThrow() val deleteSuccessful = storage.deleteRecords(result.successfulIds) @@ -31,10 +41,16 @@ internal class RecordClient( deleteFailed.getOrThrow() incrementRetry.getOrThrow() + logger.verbose { + "Stream $streamName: ${result.successfulIds.size} succeeded, " + + "${result.retryableIds.size} retryable, ${result.failedIds.size} failed" + } + result.successfulIds } .map { it.size }.sum() - FlushData(r) + + FlushData(totalFlushed) } } finally { isFlushing.set(false) diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt index f9b7a9e5dd..8347240536 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt @@ -5,6 +5,8 @@ import androidx.annotation.VisibleForTesting import androidx.sqlite.SQLiteConnection import androidx.sqlite.driver.bundled.BundledSQLiteDriver import androidx.sqlite.execSQL +import com.amplifyframework.foundation.logging.AmplifyLogging +import com.amplifyframework.foundation.logging.Logger import java.io.File import java.util.concurrent.atomic.AtomicInteger import kotlinx.coroutines.CoroutineDispatcher @@ -20,6 +22,7 @@ internal class SQLiteRecordStorage internal constructor( connectionFactory: () -> SQLiteConnection, private val dispatcher: CoroutineDispatcher = Dispatchers.IO ) : RecordStorage(maxRecords, maxBytes, identifier) { + private val logger: Logger = AmplifyLogging.logger() private val connection: SQLiteConnection = connectionFactory() private var cachedSize = AtomicInteger(0) private val dbMutex = Mutex() @@ -148,7 +151,7 @@ internal class SQLiteRecordStorage internal constructor( }.recoverAsRecordCacheException("Could not retrieve records from storage") override suspend fun deleteRecords(ids: List): Result = wrapDispatchAndCatching { - if (!ids.isEmpty()) { + if (ids.isNotEmpty()) { val placeholders = ids.joinToString(",") { "?" } connection.prepare("DELETE FROM records WHERE id IN ($placeholders)").use { stmt -> @@ -162,7 +165,7 @@ internal class SQLiteRecordStorage internal constructor( }.recoverAsRecordCacheException("Failed to delete records from cache") override suspend fun incrementRetryCount(ids: List): Result = wrapDispatchAndCatching { - if (!ids.isEmpty()) { + if (ids.isNotEmpty()) { val placeholders = ids.joinToString(",") { "?" } connection.prepare( "UPDATE records SET retry_count = retry_count + 1 WHERE id IN ($placeholders)" From f54e8ddeb7b5c5e5addff446b03652fc4cebcc20 Mon Sep 17 00:00:00 2001 From: Matt Creaser Date: Fri, 20 Feb 2026 11:33:33 -0400 Subject: [PATCH 13/37] fix(foundation): Fix CI checks on foundation branch (#3202) --- .../foundation/result/{Run.kt => Catch.kt} | 6 +++++- .../com/amplifyframework/foundation/result/Get.kt | 6 ++++++ .../com/amplifyframework/foundation/result/Map.kt | 9 +++++++++ .../{ResultRunTest.kt => ResultCatchingTest.kt} | 11 +++++------ gradle/libs.versions.toml | 2 +- 5 files changed, 26 insertions(+), 8 deletions(-) rename foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/{Run.kt => Catch.kt} (81%) rename foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/{ResultRunTest.kt => ResultCatchingTest.kt} (77%) diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Run.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Catch.kt similarity index 81% rename from foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Run.kt rename to foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Catch.kt index 22c8c00499..21e9aec1d5 100644 --- a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Run.kt +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Catch.kt @@ -19,8 +19,12 @@ import com.amplifyframework.annotations.InternalAmplifyApi import kotlin.contracts.InvocationKind import kotlin.contracts.contract +/** + * Runs the supplied block and returns the return value as a Result.Success. If an exception is thrown it returns + * it as a Result.Failure. + */ @InternalAmplifyApi -inline fun runCatching(block: () -> T): Result { +inline fun resultCatching(block: () -> T): Result { contract { callsInPlace(block, InvocationKind.AT_MOST_ONCE) } diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Get.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Get.kt index 727dd468f5..ab7c94cde9 100644 --- a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Get.kt +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Get.kt @@ -18,6 +18,9 @@ package com.amplifyframework.foundation.result import com.amplifyframework.annotations.InternalAmplifyApi import kotlin.contracts.contract +/** + * Returns the Success data or throws the Failure error + */ @InternalAmplifyApi fun Result.getOrThrow(): T { contract { @@ -29,6 +32,9 @@ fun Result.getOrThrow(): T { } } +/** + * Returns the Success data or null in the case of Failure + */ @InternalAmplifyApi fun Result.getOrNull(): T? { contract { diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Map.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Map.kt index ee8bd32bb3..51fcc83a64 100644 --- a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Map.kt +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Map.kt @@ -19,6 +19,9 @@ import com.amplifyframework.annotations.InternalAmplifyApi import kotlin.contracts.InvocationKind import kotlin.contracts.contract +/** + * Maps a Failure but returns a Success as-is + */ @InternalAmplifyApi inline infix fun Result.mapFailure(mapper: (E) -> E2): Result { contract { @@ -30,6 +33,9 @@ inline infix fun Result.mapFailure(mapper: (E) -> E2): Result Result.mapSuccess(mapper: (T) -> T2): Result { contract { @@ -41,6 +47,9 @@ inline infix fun Result.mapSuccess(mapper: (T) -> T2): Result Result.mapBoth(mapSuccess: (T) -> T2, mapFailure: (E) -> E2): Result { contract { diff --git a/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultRunTest.kt b/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultCatchingTest.kt similarity index 77% rename from foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultRunTest.kt rename to foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultCatchingTest.kt index 9422e8eb43..daf7ff83dc 100644 --- a/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultRunTest.kt +++ b/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultCatchingTest.kt @@ -15,25 +15,24 @@ package com.amplifyframework.foundation.result -import com.amplifyframework.foundation.result.runCatching as localRunCatching import com.amplifyframework.testutils.foundation.results.shouldBeFailure import com.amplifyframework.testutils.foundation.results.shouldBeSuccess import org.junit.Test -class ResultRunTest { +class ResultCatchingTest { @Test - fun `runCatching returns success result`() { - val result = localRunCatching { + fun `resultCatching returns success result`() { + val result = resultCatching { 10 } result shouldBeSuccess 10 } @Test - fun `runCatching returns failure result for thrown exception`() { + fun `resultCatching returns failure result for thrown exception`() { val exception = RuntimeException("failed") - val result = localRunCatching { + val result = resultCatching { throw exception } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 51d0db0f2c..75bf023788 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -37,7 +37,7 @@ junit-ktx = "1.2.0" kotest = "5.9.0" kotlin = "2.2.0" kotlin-serialization = "1.6.0" -kover = "0.9.1" +kover = "0.9.7" ktlint = "12.2.0" licensee = "1.7.0" litert = "1.4.0" From 09006947eb24400870b12bdfa3af4fc71bca3b5c Mon Sep 17 00:00:00 2001 From: Jan Vincent Hoffbauer Date: Fri, 20 Feb 2026 18:05:24 +0100 Subject: [PATCH 14/37] Use foundation result --- aws-kinesis/api/aws-kinesis.api | 6 +- aws-kinesis/infra/package-lock.json | 28869 ++++++++++++++++ aws-kinesis/infra/package.json | 20 + .../KinesisDataStreamsInstrumentationTest.kt | 5 +- .../kinesis/AmplifyKinesisClient.kt | 22 +- .../kinesis/KinesisRecordSender.kt | 9 +- .../recordcache/AutoFlushScheduler.kt | 5 +- .../recordcache/RecordClient.kt | 62 +- .../recordcache/RecordSender.kt | 4 +- .../recordcache/RecordStorage.kt | 14 +- .../recordcache/SQLiteRecordStorage.kt | 142 +- .../com/amplifyframework/recordcache/Types.kt | 9 +- .../recordcache/AutoFlushSchedulerTest.kt | 7 +- .../recordcache/RecordClientFlushTest.kt | 7 +- .../SQLiteRecordStorageCacheAccuracyTest.kt | 1 + .../amplifyframework/foundation/result/Get.kt | 12 + .../amplifyframework/foundation/result/Map.kt | 30 + .../foundation/result/Result.kt | 10 + .../amplifyframework/foundation/result/Run.kt | 2 +- .../foundation/result/ResultRunTest.kt | 4 +- 20 files changed, 29107 insertions(+), 133 deletions(-) create mode 100644 aws-kinesis/infra/package-lock.json create mode 100644 aws-kinesis/infra/package.json diff --git a/aws-kinesis/api/aws-kinesis.api b/aws-kinesis/api/aws-kinesis.api index 2b58ba7ef9..f720abb210 100644 --- a/aws-kinesis/api/aws-kinesis.api +++ b/aws-kinesis/api/aws-kinesis.api @@ -1,15 +1,15 @@ public final class com/amplifyframework/kinesis/AmplifyKinesisClient { public fun (Landroid/content/Context;Ljava/lang/String;Lcom/amplifyframework/foundation/credentials/AwsCredentialsProvider;Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration;)V public synthetic fun (Landroid/content/Context;Ljava/lang/String;Lcom/amplifyframework/foundation/credentials/AwsCredentialsProvider;Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public final fun clearCache-IoAF18A (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun clearCache (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun disable ()V public final fun enable ()V - public final fun flush-IoAF18A (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun flush (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun getContext ()Landroid/content/Context; public final fun getCredentialsProvider ()Lcom/amplifyframework/foundation/credentials/AwsCredentialsProvider; public final fun getKinesisClient ()Laws/sdk/kotlin/services/kinesis/KinesisClient; public final fun getRegion ()Ljava/lang/String; - public final fun record-BWLJW6A ([BLjava/lang/String;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; + public final fun record ([BLjava/lang/String;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; } public final class com/amplifyframework/kinesis/AmplifyKinesisClientConfiguration { diff --git a/aws-kinesis/infra/package-lock.json b/aws-kinesis/infra/package-lock.json new file mode 100644 index 0000000000..61004d78d7 --- /dev/null +++ b/aws-kinesis/infra/package-lock.json @@ -0,0 +1,28869 @@ +{ + "name": "kinesis-e2e-test-infra", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "kinesis-e2e-test-infra", + "version": "1.0.0", + "dependencies": { + "aws-amplify": "^6.16.2" + }, + "devDependencies": { + "@aws-amplify/backend": "^1.21.0", + "@aws-amplify/backend-cli": "^1.8.2", + "aws-cdk-lib": "^2.234.1", + "constructs": "^10.5.1", + "esbuild": "^0.27.3", + "tsx": "^4.21.0", + "typescript": "^5.9.3" + } + }, + "node_modules/@ardatan/aggregate-error": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@ardatan/aggregate-error/-/aggregate-error-0.0.6.tgz", + "integrity": "sha512-vyrkEHG1jrukmzTPtyWB4NLPauUw5bQeg4uhn8f+1SSynmrOcyvlb1GKQjjgoBzElLdfXCRYX8UnBlhklOHYRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "~2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@ardatan/aggregate-error/node_modules/tslib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@ardatan/relay-compiler": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@ardatan/relay-compiler/-/relay-compiler-12.0.0.tgz", + "integrity": "sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.14.0", + "@babel/generator": "^7.14.0", + "@babel/parser": "^7.14.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.0.0", + "babel-preset-fbjs": "^3.4.0", + "chalk": "^4.0.0", + "fb-watchman": "^2.0.0", + "fbjs": "^3.0.0", + "glob": "^7.1.1", + "immutable": "~3.7.6", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "relay-runtime": "12.0.0", + "signedsource": "^1.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "relay-compiler": "bin/relay-compiler" + }, + "peerDependencies": { + "graphql": "*" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@ardatan/relay-compiler/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@aws-amplify/analytics": { + "version": "7.0.93", + "resolved": "https://registry.npmjs.org/@aws-amplify/analytics/-/analytics-7.0.93.tgz", + "integrity": "sha512-3WoB0VzATJyupTNQ+ZnzE0pLYnpZPtqNN4deZ8gadG5uzGhhvkt9uZtgVnn/QFGb35DnP8qNDTRiM0rL3vjyZQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-firehose": "3.982.0", + "@aws-sdk/client-kinesis": "3.982.0", + "@aws-sdk/client-personalize-events": "3.982.0", + "@smithy/util-utf8": "2.0.0", + "tslib": "^2.5.0" + }, + "peerDependencies": { + "@aws-amplify/core": "^6.1.0" + } + }, + "node_modules/@aws-amplify/analytics/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-amplify/analytics/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-amplify/analytics/node_modules/@smithy/util-utf8": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", + "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-amplify/api": { + "version": "6.3.24", + "resolved": "https://registry.npmjs.org/@aws-amplify/api/-/api-6.3.24.tgz", + "integrity": "sha512-19CVHj+0J35aHMPNzy12nO1mJS4oP68yFUfiMnulSsiVGV5XhUDc/bkdcX0uI7U1SsUSs+9TOBwZg27bzYIGkg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/api-graphql": "4.8.5", + "@aws-amplify/api-rest": "4.6.3", + "@aws-amplify/data-schema": "^1.7.0", + "rxjs": "^7.8.1", + "tslib": "^2.5.0" + }, + "peerDependencies": { + "@aws-amplify/core": "^6.1.0" + } + }, + "node_modules/@aws-amplify/api-graphql": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/@aws-amplify/api-graphql/-/api-graphql-4.8.5.tgz", + "integrity": "sha512-Xu45+MizoethsRfCFIdN9RORenCu0e41tMkiTFVE5oKC76eoOlYHg2LlhG2Lmmasby/Ggi5bZouVxJIcP4IeIA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/api-rest": "4.6.3", + "@aws-amplify/core": "6.16.1", + "@aws-amplify/data-schema": "^1.7.0", + "@aws-sdk/types": "3.973.1", + "graphql": "15.8.0", + "rxjs": "^7.8.1", + "tslib": "^2.5.0", + "uuid": "^11.0.0" + } + }, + "node_modules/@aws-amplify/api-graphql/node_modules/graphql": { + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", + "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", + "license": "MIT", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/@aws-amplify/api-rest": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/@aws-amplify/api-rest/-/api-rest-4.6.3.tgz", + "integrity": "sha512-SPhttyB9SR2p5PkUPmUPfkXNqGrgvdqiNHNHhx7FjHnqFBXLDRtGhzqRbE7faDeAwrcWz1HCtcpk7MLHYt94yg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.5.0" + }, + "peerDependencies": { + "@aws-amplify/core": "^6.1.0" + } + }, + "node_modules/@aws-amplify/appsync-modelgen-plugin": { + "version": "2.15.2", + "resolved": "https://registry.npmjs.org/@aws-amplify/appsync-modelgen-plugin/-/appsync-modelgen-plugin-2.15.2.tgz", + "integrity": "sha512-ZUnp+g7a/RZJGRygquPhZWO4E9KjOPj5ARwhkiOHXp2XffYNy4VkjFYJjmufNnURp54awSYV09aHsjj2tW0Dhw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@graphql-codegen/plugin-helpers": "^3.1.1", + "@graphql-codegen/visitor-plugin-common": "^1.22.0", + "@graphql-tools/utils": "^6.0.18", + "chalk": "^3.0.0", + "change-case": "^4.1.1", + "graphql-transformer-common": "^4.25.1", + "lower-case-first": "^2.0.1", + "pluralize": "^8.0.0", + "strip-indent": "^3.0.0", + "ts-dedent": "^1.1.0" + }, + "peerDependencies": { + "graphql": "^15.5.0" + } + }, + "node_modules/@aws-amplify/auth": { + "version": "6.19.1", + "resolved": "https://registry.npmjs.org/@aws-amplify/auth/-/auth-6.19.1.tgz", + "integrity": "sha512-N6bqBUEly/xUiho0X5oGhLEDlQTWsj1i0FquDYsyuav5e9HHQBLNgG1zmpq28lyxtDaUREi/IDx+CD10EpcPcQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "5.2.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.5.0" + }, + "peerDependencies": { + "@aws-amplify/core": "^6.1.0", + "@aws-amplify/react-native": "^1.1.10" + }, + "peerDependenciesMeta": { + "@aws-amplify/react-native": { + "optional": true + } + } + }, + "node_modules/@aws-amplify/auth-construct": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@aws-amplify/auth-construct/-/auth-construct-1.11.1.tgz", + "integrity": "sha512-m7I4BENZ8rEdWyJkI2f39NF4Wm0n5kfhy5HHthDJnzoap+fLr4/WefwNqboHJW/jGoJpAsLZ5V71cDv6xZHIig==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/backend-output-schemas": "^1.8.0", + "@aws-amplify/backend-output-storage": "^1.3.3", + "@aws-amplify/platform-core": "^1.10.4", + "@aws-amplify/plugin-types": "^1.11.2", + "@aws-sdk/util-arn-parser": "^3.893.0" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.234.1", + "constructs": "^10.0.0" + } + }, + "node_modules/@aws-amplify/auth/node_modules/@smithy/types": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.2.tgz", + "integrity": "sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/backend": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@aws-amplify/backend/-/backend-1.21.0.tgz", + "integrity": "sha512-Q8y1Br4HP54q7lDZ4gFUAWcTS5DDk41mh59NYS7gMdo+edrDHrvomCapfE79n/EWJBB+KqYdK70n5AeU6EQSDQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/backend-auth": "^1.9.2", + "@aws-amplify/backend-data": "^1.6.4", + "@aws-amplify/backend-function": "^1.17.0", + "@aws-amplify/backend-output-schemas": "^1.8.0", + "@aws-amplify/backend-output-storage": "^1.3.3", + "@aws-amplify/backend-secret": "^1.4.2", + "@aws-amplify/backend-storage": "^1.4.3", + "@aws-amplify/client-config": "^1.10.0", + "@aws-amplify/data-schema": "^1.13.4", + "@aws-amplify/platform-core": "^1.10.4", + "@aws-amplify/plugin-types": "^1.11.2", + "@aws-sdk/client-amplify": "^3.936.0" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.234.1", + "constructs": "^10.0.0" + } + }, + "node_modules/@aws-amplify/backend-auth": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@aws-amplify/backend-auth/-/backend-auth-1.9.2.tgz", + "integrity": "sha512-vZKX3e8EzIE4AeCEM3BC17f2OvB4EosfN4jO//tvJ0cozOTDJyz4bGTTwzrJNLbroRdD6ZhSP76dve0sYuRjZg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/auth-construct": "^1.11.1", + "@aws-amplify/backend-output-schemas": "^1.8.0", + "@aws-amplify/backend-output-storage": "^1.3.3", + "@aws-amplify/plugin-types": "^1.11.2" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.234.1", + "constructs": "^10.0.0" + } + }, + "node_modules/@aws-amplify/backend-cli": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@aws-amplify/backend-cli/-/backend-cli-1.8.2.tgz", + "integrity": "sha512-3UweW5kXrpw66rICQAXvMJyoQGwWmwlc/i6691PG1Y9sTYpYn6TutoKzSsOmPlnoBVB0nErC/gcg6Tw1vJF7NQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/backend-deployer": "^2.1.5", + "@aws-amplify/backend-output-schemas": "^1.8.0", + "@aws-amplify/backend-secret": "^1.4.2", + "@aws-amplify/cli-core": "^2.2.3", + "@aws-amplify/client-config": "^1.10.0", + "@aws-amplify/deployed-backend-client": "^1.8.0", + "@aws-amplify/form-generator": "^1.2.6", + "@aws-amplify/model-generator": "^1.2.2", + "@aws-amplify/platform-core": "^1.10.4", + "@aws-amplify/plugin-types": "^1.11.2", + "@aws-amplify/sandbox": "^2.1.4", + "@aws-amplify/schema-generator": "^1.4.0", + "@aws-sdk/client-amplify": "^3.936.0", + "@aws-sdk/client-cloudformation": "^3.936.0", + "@aws-sdk/client-s3": "^3.936.0", + "@aws-sdk/client-sts": "^3.936.0", + "@aws-sdk/credential-provider-ini": "^3.936.0", + "@aws-sdk/credential-providers": "^3.936.0", + "@aws-sdk/region-config-resolver": "^3.936.0", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/context-async-hooks": "^2.0.0", + "@opentelemetry/sdk-trace-base": "^2.0.0", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "envinfo": "^7.11.0", + "execa": "^9.5.1", + "is-ci": "^4.1.0", + "open": "^10.1.0", + "semver": "^7.6.3", + "yargs": "^17.7.2", + "zod": "3.25.17" + }, + "bin": { + "amplify": "lib/ampx.js", + "ampx": "lib/ampx.js" + }, + "engines": { + "node": "^18.19.0 || ^20.6.0 || >=22" + }, + "peerDependencies": { + "@aws-sdk/types": "^3.734.0", + "aws-cdk-lib": "^2.234.1" + } + }, + "node_modules/@aws-amplify/backend-data": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@aws-amplify/backend-data/-/backend-data-1.6.4.tgz", + "integrity": "sha512-ALKHruKBseFcq+Hao1PqRgGRrKnSjqXIyangrIa9GBfc3hJlNkVFMs5CplEtqBzuJdqI6UHtk+kYRtCsdiSi6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/backend-output-schemas": "^1.8.0", + "@aws-amplify/backend-output-storage": "^1.3.3", + "@aws-amplify/data-construct": "^1.15.1", + "@aws-amplify/data-schema-types": "^1.2.0", + "@aws-amplify/graphql-generator": "^0.5.1", + "@aws-amplify/plugin-types": "^1.11.2", + "graphql": "^15.8.0" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.234.1", + "constructs": "^10.0.0" + } + }, + "node_modules/@aws-amplify/backend-deployer": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@aws-amplify/backend-deployer/-/backend-deployer-2.1.5.tgz", + "integrity": "sha512-oeOGbX1aSqZf60Xfhfk7uSUj0E6THn/5aZbtsBh4808SAq/0oQ9M/mEApkPcM0uAUvnLz08dY5jQMDw/yI5lSw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/platform-core": "^1.10.4", + "@aws-amplify/plugin-types": "^1.11.2", + "@aws-cdk/toolkit-lib": "1.6.1", + "execa": "^9.5.1", + "minimatch": "10.0.1", + "strip-ansi": "^7.1.0", + "tsx": "4.19.4" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.234.1", + "typescript": "^5.0.0" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/@aws-amplify/backend-deployer/node_modules/tsx": { + "version": "4.19.4", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz", + "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.25.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/@aws-amplify/backend-function": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@aws-amplify/backend-function/-/backend-function-1.17.0.tgz", + "integrity": "sha512-PLJHPY1126SysOR6rq6zz/gCguuVHg9bv07AxB8K446/h5n4PJgnTsmQYUdAhb+YfYMX7ueMsDDvlafYB9bwTQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/backend-output-schemas": "^1.8.0", + "@aws-amplify/backend-output-storage": "^1.3.3", + "@aws-amplify/plugin-types": "^1.11.2", + "@aws-sdk/client-s3": "^3.936.0", + "execa": "^9.5.1" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.234.1", + "constructs": "^10.0.0" + } + }, + "node_modules/@aws-amplify/backend-output-schemas": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@aws-amplify/backend-output-schemas/-/backend-output-schemas-1.8.0.tgz", + "integrity": "sha512-uaRxoXvvgfzpbEgdpzvId/u2HY/plABxQu7vQpP7pA6A+suso9eM6bSZAElCrI3iFfdffmSj5WfJs7d/l0dnqQ==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "zod": "3.25.17" + } + }, + "node_modules/@aws-amplify/backend-output-storage": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@aws-amplify/backend-output-storage/-/backend-output-storage-1.3.3.tgz", + "integrity": "sha512-jQuzBEcqHxRY3b2JaSTuZem3BMaWrvya6LTAj/6TKRXJJtw13imwNbhwAs2F4dIiJhhpAk2bFWmtVDrnlX4t0w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/backend-output-schemas": "^1.8.0", + "@aws-amplify/platform-core": "^1.10.4", + "@aws-amplify/plugin-types": "^1.11.2" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.234.1" + } + }, + "node_modules/@aws-amplify/backend-secret": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@aws-amplify/backend-secret/-/backend-secret-1.4.2.tgz", + "integrity": "sha512-naHeGL+4kuiYZI33lgKsb+uq/fJQsiwpsSCoCil7ixQ1HD/ANwRD06d6jrxV30i6ews5Yl5p5Hkt+T5DLOaHGA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/platform-core": "^1.10.3", + "@aws-amplify/plugin-types": "^1.11.1", + "@aws-sdk/client-ssm": "^3.936.0" + } + }, + "node_modules/@aws-amplify/backend-storage": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@aws-amplify/backend-storage/-/backend-storage-1.4.3.tgz", + "integrity": "sha512-H40a+2yunQRhD2pLcbSlUL5uc2hx9ouzs513XuCyxgXn8lFjEd6TOUCvy0iYBNsf529Xc/cqstSXKxMGKQ7qiQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/backend-output-schemas": "^1.8.0", + "@aws-amplify/backend-output-storage": "^1.3.3", + "@aws-amplify/plugin-types": "^1.11.2" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.234.1", + "constructs": "^10.0.0" + } + }, + "node_modules/@aws-amplify/cli-core": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@aws-amplify/cli-core/-/cli-core-2.2.3.tgz", + "integrity": "sha512-ZN4r74PR7TJqlBGG7oZbMGOXi003PInMjlnOPI1IF8kkQ0Kr3RP2VKDjHNgoaQH0TU0yy3oaD7ya7oSYQBfrKg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/platform-core": "^1.10.3", + "@aws-sdk/client-cloudformation": "^3.936.0", + "@inquirer/prompts": "^7.3.2", + "@opentelemetry/api": "^1.9.0", + "execa": "^9.5.1", + "kleur": "^4.1.5", + "ora": "8.2.0", + "semver": "^7.6.3", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0", + "zod": "3.25.17" + } + }, + "node_modules/@aws-amplify/client-config": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@aws-amplify/client-config/-/client-config-1.10.0.tgz", + "integrity": "sha512-UdWaqJk9vNDpJOI6GiXTUt9FVXS3jnWSf4RMkFCEgCvtRMXxBBM1uc8xBpfCE0BE9XqU14Q/SOGc+HNkMwBO3w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/backend-output-schemas": "^1.8.0", + "@aws-amplify/deployed-backend-client": "^1.8.1", + "@aws-amplify/model-generator": "^1.2.2", + "@aws-amplify/platform-core": "^1.10.4", + "@aws-amplify/plugin-types": "^1.11.2", + "zod": "3.25.17" + }, + "peerDependencies": { + "@aws-sdk/client-amplify": "^3.750.0", + "@aws-sdk/client-cloudformation": "^3.750.0", + "@aws-sdk/client-s3": "^3.750.0" + } + }, + "node_modules/@aws-amplify/codegen-ui": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/@aws-amplify/codegen-ui/-/codegen-ui-2.20.3.tgz", + "integrity": "sha512-B5Bl8fiNpLm9bWu9wmxm/A9qUA6R8HsFQC8bb0nyF9CHmGGYC5ANt1N3tovST4Ts2ToGTB6Uw/vwEv2obu/+UA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "change-case": "^4.1.2", + "yup": "^0.32.11" + } + }, + "node_modules/@aws-amplify/codegen-ui-react": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/@aws-amplify/codegen-ui-react/-/codegen-ui-react-2.20.3.tgz", + "integrity": "sha512-t7ssTwpKxaOJ3gg85YnXdcwr+PuXkrtwk4FOmmHgZ8z1up3A1HqLkjX63WIvNhZA4UU1h7L/SXg+MskXqaHUKA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/codegen-ui": "2.20.3", + "@typescript/vfs": "~1.3.5", + "pluralize": "^8.0.0", + "semver": "^7.5.4", + "typescript": "<=4.5.0" + }, + "optionalDependencies": { + "prettier": "2.3.2" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@aws-amplify/codegen-ui-react/node_modules/prettier": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", + "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@aws-amplify/codegen-ui-react/node_modules/typescript": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/@aws-amplify/core": { + "version": "6.16.1", + "resolved": "https://registry.npmjs.org/@aws-amplify/core/-/core-6.16.1.tgz", + "integrity": "sha512-WHO6yYegmnZ+K3vnYzVwy+wnxYqSkdFakBIlgm4922QXHOQYWdIl/rrTcaagrpJEGT6YlTnqx1ANIoPojNxWmw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/types": "3.973.1", + "@smithy/util-hex-encoding": "2.0.0", + "@types/uuid": "^9.0.0", + "js-cookie": "^3.0.5", + "rxjs": "^7.8.1", + "tslib": "^2.5.0", + "uuid": "^11.0.0" + } + }, + "node_modules/@aws-amplify/core/node_modules/@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-amplify/data-construct": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@aws-amplify/data-construct/-/data-construct-1.17.0.tgz", + "integrity": "sha512-hhV08oh5TWjgR1cluXgFJf+1ebRgB+MFwlccXZ+9WAmpj0IW3Pmafdud5iuvsjuzOBR3Ug+QGIbEQDI1M9308w==", + "bundleDependencies": [ + "@aws-amplify/ai-constructs", + "@aws-amplify/backend-output-schemas", + "@aws-amplify/backend-output-storage", + "@aws-amplify/graphql-auth-transformer", + "@aws-amplify/graphql-conversation-transformer", + "@aws-amplify/graphql-default-value-transformer", + "@aws-amplify/graphql-directives", + "@aws-amplify/graphql-function-transformer", + "@aws-amplify/graphql-generation-transformer", + "@aws-amplify/graphql-http-transformer", + "@aws-amplify/graphql-index-transformer", + "@aws-amplify/graphql-maps-to-transformer", + "@aws-amplify/graphql-model-transformer", + "@aws-amplify/graphql-predictions-transformer", + "@aws-amplify/graphql-relational-transformer", + "@aws-amplify/graphql-searchable-transformer", + "@aws-amplify/graphql-sql-transformer", + "@aws-amplify/graphql-transformer", + "@aws-amplify/graphql-transformer-core", + "@aws-amplify/graphql-transformer-interfaces", + "@aws-amplify/graphql-validate-transformer", + "@aws-amplify/platform-core", + "@aws-amplify/plugin-types", + "@aws-crypto/crc32", + "@aws-crypto/sha256-browser", + "@aws-crypto/sha256-js", + "@aws-crypto/supports-web-crypto", + "@aws-crypto/util", + "@aws-sdk/client-bedrock-runtime", + "@aws-sdk/client-sso", + "@aws-sdk/client-sso-oidc", + "@aws-sdk/client-sts", + "@aws-sdk/core", + "@aws-sdk/credential-provider-env", + "@aws-sdk/credential-provider-http", + "@aws-sdk/credential-provider-ini", + "@aws-sdk/credential-provider-node", + "@aws-sdk/credential-provider-process", + "@aws-sdk/credential-provider-sso", + "@aws-sdk/credential-provider-web-identity", + "@aws-sdk/middleware-host-header", + "@aws-sdk/middleware-logger", + "@aws-sdk/middleware-recursion-detection", + "@aws-sdk/middleware-user-agent", + "@aws-sdk/nested-clients", + "@aws-sdk/region-config-resolver", + "@aws-sdk/token-providers", + "@aws-sdk/types", + "@aws-sdk/util-endpoints", + "@aws-sdk/util-locate-window", + "@aws-sdk/util-user-agent-browser", + "@aws-sdk/util-user-agent-node", + "@smithy/abort-controller", + "@smithy/config-resolver", + "@smithy/core", + "@smithy/credential-provider-imds", + "@smithy/eventstream-codec", + "@smithy/eventstream-serde-browser", + "@smithy/eventstream-serde-config-resolver", + "@smithy/eventstream-serde-node", + "@smithy/eventstream-serde-universal", + "@smithy/fetch-http-handler", + "@smithy/hash-node", + "@smithy/invalid-dependency", + "@smithy/is-array-buffer", + "@smithy/middleware-content-length", + "@smithy/middleware-endpoint", + "@smithy/middleware-retry", + "@smithy/middleware-serde", + "@smithy/middleware-stack", + "@smithy/node-config-provider", + "@smithy/node-http-handler", + "@smithy/property-provider", + "@smithy/protocol-http", + "@smithy/querystring-builder", + "@smithy/querystring-parser", + "@smithy/service-error-classification", + "@smithy/shared-ini-file-loader", + "@smithy/signature-v4", + "@smithy/smithy-client", + "@smithy/types", + "@smithy/url-parser", + "@smithy/util-base64", + "@smithy/util-body-length-browser", + "@smithy/util-body-length-node", + "@smithy/util-buffer-from", + "@smithy/util-config-provider", + "@smithy/util-defaults-mode-browser", + "@smithy/util-defaults-mode-node", + "@smithy/util-endpoints", + "@smithy/util-hex-encoding", + "@smithy/util-middleware", + "@smithy/util-retry", + "@smithy/util-stream", + "@smithy/util-uri-escape", + "@smithy/util-utf8", + "@types/uuid", + "bowser", + "charenc", + "ci-info", + "crypt", + "fast-xml-parser", + "fs-extra", + "graceful-fs", + "graphql", + "graphql-mapping-template", + "graphql-transformer-common", + "hjson", + "immer", + "is-buffer", + "is-ci", + "jsonfile", + "libphonenumber-js", + "lodash", + "lodash.mergewith", + "lodash.snakecase", + "md5", + "object-hash", + "pluralize", + "semver", + "strnum", + "ts-dedent", + "tslib", + "universalify", + "uuid", + "zod" + ], + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/ai-constructs": "^1.5.3", + "@aws-amplify/backend-output-schemas": "^1.0.0", + "@aws-amplify/backend-output-storage": "^1.0.0", + "@aws-amplify/graphql-api-construct": "1.21.0", + "@aws-amplify/graphql-auth-transformer": "4.2.5", + "@aws-amplify/graphql-conversation-transformer": "1.1.13", + "@aws-amplify/graphql-default-value-transformer": "3.1.15", + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-function-transformer": "3.1.17", + "@aws-amplify/graphql-generation-transformer": "1.2.5", + "@aws-amplify/graphql-http-transformer": "3.0.20", + "@aws-amplify/graphql-index-transformer": "3.1.0", + "@aws-amplify/graphql-maps-to-transformer": "4.0.20", + "@aws-amplify/graphql-model-transformer": "3.4.0", + "@aws-amplify/graphql-predictions-transformer": "3.0.20", + "@aws-amplify/graphql-relational-transformer": "3.1.12", + "@aws-amplify/graphql-searchable-transformer": "3.1.0", + "@aws-amplify/graphql-sql-transformer": "0.4.20", + "@aws-amplify/graphql-transformer": "2.4.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "@aws-amplify/graphql-validate-transformer": "1.1.5", + "@aws-amplify/platform-core": "^1.0.0", + "@aws-amplify/plugin-types": "^1.0.0", + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/client-bedrock-runtime": "^3.622.0", + "@aws-sdk/client-sso": "3.637.0", + "@aws-sdk/client-sso-oidc": "3.637.0", + "@aws-sdk/client-sts": "^3.624.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-ini": "3.637.0", + "@aws-sdk/credential-provider-node": "3.637.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.637.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/nested-clients": "^3.777.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/token-providers": "3.614.0", + "@aws-sdk/types": "^3.734.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/abort-controller": "^3.1.1", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/eventstream-codec": "^3.1.2", + "@smithy/eventstream-serde-browser": "^3.0.6", + "@smithy/eventstream-serde-config-resolver": "^3.0.3", + "@smithy/eventstream-serde-node": "^3.0.5", + "@smithy/eventstream-serde-universal": "^3.0.5", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/querystring-parser": "^3.0.3", + "@smithy/service-error-classification": "^3.0.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-stream": "^3.1.3", + "@smithy/util-uri-escape": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "@types/uuid": "^9.0.8", + "bowser": "^2.11.0", + "charenc": "^0.0.2", + "ci-info": "^3.2.0", + "crypt": "^0.0.2", + "fast-xml-parser": "4.4.1", + "fs-extra": "^8.1.0", + "graceful-fs": "^4.2.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4", + "hjson": "^3.2.2", + "immer": "^9.0.12", + "is-buffer": "~1.1.6", + "is-ci": "^3.0.1", + "jsonfile": "^4.0.0", + "libphonenumber-js": "1.9.47", + "lodash": "^4.17.21", + "lodash.mergewith": "^4.6.2", + "lodash.snakecase": "^4.1.1", + "md5": "^2.2.1", + "object-hash": "^3.0.0", + "pluralize": "8.0.0", + "semver": "^7.6.3", + "strnum": "^1.0.5", + "ts-dedent": "^2.0.0", + "tslib": "^2.6.2", + "universalify": "^0.1.0", + "uuid": "^9.0.1", + "zod": "^3.22.2" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs": { + "version": "1.5.3", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/backend-output-schemas": "^1.6.0", + "@aws-amplify/plugin-types": "^1.10.1", + "@aws-sdk/client-bedrock-runtime": "3.622.0", + "@smithy/types": "^4.1.0", + "json-schema-to-ts": "^3.1.1" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.189.1", + "constructs": "^10.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas": { + "version": "1.6.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "peerDependencies": { + "zod": "^3.22.2" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types": { + "version": "1.10.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-cdk/toolkit-lib": "0.3.2" + }, + "peerDependencies": { + "@aws-sdk/types": "^3.734.0", + "aws-cdk-lib": "^2.189.1", + "constructs": "^10.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/node_modules/@aws-sdk/types": { + "version": "3.821.0", + "extraneous": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/client-bedrock-runtime": { + "version": "3.622.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.622.0", + "@aws-sdk/client-sts": "3.622.0", + "@aws-sdk/core": "3.622.0", + "@aws-sdk/credential-provider-node": "3.622.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.620.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.614.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.3.2", + "@smithy/eventstream-serde-browser": "^3.0.5", + "@smithy/eventstream-serde-config-resolver": "^3.0.3", + "@smithy/eventstream-serde-node": "^3.0.4", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.14", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.14", + "@smithy/util-defaults-mode-node": "^3.0.14", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-stream": "^3.1.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/client-sso": { + "version": "3.622.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.622.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.620.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.614.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.3.2", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.14", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.14", + "@smithy/util-defaults-mode-node": "^3.0.14", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.622.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.622.0", + "@aws-sdk/credential-provider-node": "3.622.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.620.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.614.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.3.2", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.14", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.14", + "@smithy/util-defaults-mode-node": "^3.0.14", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.622.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/client-sso/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/client-sts": { + "version": "3.622.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.622.0", + "@aws-sdk/core": "3.622.0", + "@aws-sdk/credential-provider-node": "3.622.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.620.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.614.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.3.2", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.14", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.14", + "@smithy/util-defaults-mode-node": "^3.0.14", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/client-sts/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/core": { + "version": "3.622.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^2.3.2", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", + "@smithy/types": "^3.3.0", + "@smithy/util-middleware": "^3.0.3", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/core/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.622.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.622.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.622.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.622.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.622.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.622.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.622.0", + "@aws-sdk/credential-provider-ini": "3.622.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.622.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.622.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.622.0", + "@aws-sdk/token-providers": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.620.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.614.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/types/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/util-endpoints": { + "version": "3.614.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "@smithy/util-endpoints": "^2.0.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@smithy/types": { + "version": "4.3.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/backend-output-schemas": { + "version": "1.4.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "peerDependencies": { + "zod": "^3.22.2" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/backend-output-storage": { + "version": "1.1.5", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/backend-output-schemas": "^1.4.1", + "@aws-amplify/platform-core": "^1.6.5", + "@aws-amplify/plugin-types": "^1.8.1" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.180.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/graphql-auth-transformer": { + "version": "4.2.5", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-model-transformer": "3.4.0", + "@aws-amplify/graphql-relational-transformer": "3.1.12", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4", + "lodash": "^4.17.21", + "md5": "^2.3.0" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/graphql-conversation-transformer": { + "version": "1.1.13", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/ai-constructs": "^1.5.3", + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-index-transformer": "3.1.0", + "@aws-amplify/graphql-model-transformer": "3.4.0", + "@aws-amplify/graphql-relational-transformer": "3.1.12", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "@aws-amplify/plugin-types": "^1.0.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4", + "immer": "^9.0.12", + "semver": "^7.6.3" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/graphql-default-value-transformer": { + "version": "3.1.15", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4", + "libphonenumber-js": "1.9.47" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/graphql-directives": { + "version": "2.8.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0" + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/graphql-function-transformer": { + "version": "3.1.17", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/graphql-generation-transformer": { + "version": "1.2.5", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4", + "immer": "^9.0.12" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/graphql-http-transformer": { + "version": "3.0.20", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/graphql-index-transformer": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-model-transformer": "3.4.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/graphql-maps-to-transformer": { + "version": "4.0.20", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/graphql-model-transformer": { + "version": "3.4.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/graphql-predictions-transformer": { + "version": "3.0.20", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/graphql-relational-transformer": { + "version": "3.1.12", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-index-transformer": "3.1.0", + "@aws-amplify/graphql-model-transformer": "3.4.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4", + "immer": "^9.0.12" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/graphql-searchable-transformer": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-model-transformer": "3.4.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/graphql-sql-transformer": { + "version": "0.4.20", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-model-transformer": "3.4.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/graphql-transformer": { + "version": "2.4.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-auth-transformer": "4.2.5", + "@aws-amplify/graphql-conversation-transformer": "1.1.13", + "@aws-amplify/graphql-default-value-transformer": "3.1.15", + "@aws-amplify/graphql-function-transformer": "3.1.17", + "@aws-amplify/graphql-generation-transformer": "1.2.5", + "@aws-amplify/graphql-http-transformer": "3.0.20", + "@aws-amplify/graphql-index-transformer": "3.1.0", + "@aws-amplify/graphql-maps-to-transformer": "4.0.20", + "@aws-amplify/graphql-model-transformer": "3.4.0", + "@aws-amplify/graphql-predictions-transformer": "3.0.20", + "@aws-amplify/graphql-relational-transformer": "3.1.12", + "@aws-amplify/graphql-searchable-transformer": "3.1.0", + "@aws-amplify/graphql-sql-transformer": "0.4.20", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "@aws-amplify/graphql-validate-transformer": "1.1.5", + "@aws-amplify/plugin-types": "^1.0.0" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/graphql-transformer-core": { + "version": "3.5.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "fs-extra": "^8.1.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4", + "hjson": "^3.2.2", + "lodash": "^4.17.21", + "md5": "^2.3.0", + "object-hash": "^3.0.0", + "ts-dedent": "^2.0.0" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/graphql-transformer-interfaces": { + "version": "4.3.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "graphql": "^15.5.0" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/graphql-validate-transformer": { + "version": "1.1.5", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/platform-core": { + "version": "1.6.5", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/plugin-types": "^1.8.1", + "@aws-sdk/client-sts": "^3.624.0", + "is-ci": "^4.1.0", + "lodash.mergewith": "^4.6.2", + "lodash.snakecase": "^4.1.1", + "semver": "^7.6.3", + "uuid": "^9.0.1", + "zod": "^3.22.2" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.180.0", + "constructs": "^10.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/platform-core/node_modules/ci-info": { + "version": "4.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/platform-core/node_modules/is-ci": { + "version": "4.1.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "inBundle": true, + "license": "MIT", + "dependencies": { + "ci-info": "^4.1.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-amplify/plugin-types": { + "version": "1.8.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "peerDependencies": { + "@aws-sdk/types": "^3.609.0", + "aws-cdk-lib": "^2.180.0", + "constructs": "^10.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-crypto/util": { + "version": "5.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime": { + "version": "3.828.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.826.0", + "@aws-sdk/credential-provider-node": "3.828.0", + "@aws-sdk/eventstream-handler-node": "3.821.0", + "@aws-sdk/middleware-eventstream": "3.821.0", + "@aws-sdk/middleware-host-header": "3.821.0", + "@aws-sdk/middleware-logger": "3.821.0", + "@aws-sdk/middleware-recursion-detection": "3.821.0", + "@aws-sdk/middleware-user-agent": "3.828.0", + "@aws-sdk/region-config-resolver": "3.821.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-endpoints": "3.828.0", + "@aws-sdk/util-user-agent-browser": "3.821.0", + "@aws-sdk/util-user-agent-node": "3.828.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.5.3", + "@smithy/eventstream-serde-browser": "^4.0.4", + "@smithy/eventstream-serde-config-resolver": "^4.1.2", + "@smithy/eventstream-serde-node": "^4.0.4", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/hash-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.11", + "@smithy/middleware-retry": "^4.1.12", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.19", + "@smithy/util-defaults-mode-node": "^4.0.19", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.5", + "@smithy/util-stream": "^4.2.2", + "@smithy/util-utf8": "^4.0.0", + "@types/uuid": "^9.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/client-sso": { + "version": "3.828.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.826.0", + "@aws-sdk/middleware-host-header": "3.821.0", + "@aws-sdk/middleware-logger": "3.821.0", + "@aws-sdk/middleware-recursion-detection": "3.821.0", + "@aws-sdk/middleware-user-agent": "3.828.0", + "@aws-sdk/region-config-resolver": "3.821.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-endpoints": "3.828.0", + "@aws-sdk/util-user-agent-browser": "3.821.0", + "@aws-sdk/util-user-agent-node": "3.828.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.5.3", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/hash-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.11", + "@smithy/middleware-retry": "^4.1.12", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.19", + "@smithy/util-defaults-mode-node": "^4.0.19", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.5", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/core": { + "version": "3.826.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@aws-sdk/xml-builder": "3.821.0", + "@smithy/core": "^3.5.3", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-utf8": "^4.0.0", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.826.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.826.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/types": "3.821.0", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/util-stream": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.828.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/credential-provider-env": "3.826.0", + "@aws-sdk/credential-provider-http": "3.826.0", + "@aws-sdk/credential-provider-process": "3.826.0", + "@aws-sdk/credential-provider-sso": "3.828.0", + "@aws-sdk/credential-provider-web-identity": "3.828.0", + "@aws-sdk/nested-clients": "3.828.0", + "@aws-sdk/types": "3.821.0", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.828.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.826.0", + "@aws-sdk/credential-provider-http": "3.826.0", + "@aws-sdk/credential-provider-ini": "3.828.0", + "@aws-sdk/credential-provider-process": "3.826.0", + "@aws-sdk/credential-provider-sso": "3.828.0", + "@aws-sdk/credential-provider-web-identity": "3.828.0", + "@aws-sdk/types": "3.821.0", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.826.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.828.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.828.0", + "@aws-sdk/core": "3.826.0", + "@aws-sdk/token-providers": "3.828.0", + "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.828.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/nested-clients": "3.828.0", + "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.821.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/middleware-logger": { + "version": "3.821.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.821.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.828.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-endpoints": "3.828.0", + "@smithy/core": "^3.5.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/nested-clients": { + "version": "3.828.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.826.0", + "@aws-sdk/middleware-host-header": "3.821.0", + "@aws-sdk/middleware-logger": "3.821.0", + "@aws-sdk/middleware-recursion-detection": "3.821.0", + "@aws-sdk/middleware-user-agent": "3.828.0", + "@aws-sdk/region-config-resolver": "3.821.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-endpoints": "3.828.0", + "@aws-sdk/util-user-agent-browser": "3.821.0", + "@aws-sdk/util-user-agent-node": "3.828.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.5.3", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/hash-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.11", + "@smithy/middleware-retry": "^4.1.12", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.19", + "@smithy/util-defaults-mode-node": "^4.0.19", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.5", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.821.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/token-providers": { + "version": "3.828.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/nested-clients": "3.828.0", + "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/util-endpoints": { + "version": "3.828.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/types": "^4.3.1", + "@smithy/util-endpoints": "^3.0.6", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.821.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/types": "^4.3.1", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.828.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.828.0", + "@aws-sdk/types": "3.821.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/abort-controller": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/config-resolver": { + "version": "4.1.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/core": { + "version": "3.5.3", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.0.8", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-stream": "^4.2.2", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/credential-provider-imds": { + "version": "4.0.6", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/eventstream-codec": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.3.1", + "@smithy/util-hex-encoding": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/eventstream-serde-browser": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "4.1.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/eventstream-serde-node": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/eventstream-serde-universal": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-codec": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/fetch-http-handler": { + "version": "5.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.2", + "@smithy/querystring-builder": "^4.0.4", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/hash-node": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/invalid-dependency": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/is-array-buffer": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/middleware-content-length": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/middleware-endpoint": { + "version": "4.1.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.5.3", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-middleware": "^4.0.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/middleware-retry": { + "version": "4.1.12", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/service-error-classification": "^4.0.5", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.5", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/middleware-serde": { + "version": "4.0.8", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/middleware-stack": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/node-config-provider": { + "version": "4.1.3", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/node-http-handler": { + "version": "4.0.6", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/querystring-builder": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/property-provider": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/protocol-http": { + "version": "5.1.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/querystring-builder": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "@smithy/util-uri-escape": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/querystring-parser": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/service-error-classification": { + "version": "4.0.5", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/shared-ini-file-loader": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/signature-v4": { + "version": "5.1.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-uri-escape": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/smithy-client": { + "version": "4.4.3", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.5.3", + "@smithy/middleware-endpoint": "^4.1.11", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-stream": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/types": { + "version": "4.3.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/url-parser": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-base64": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-body-length-browser": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-body-length-node": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-buffer-from": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-config-provider": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.0.19", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.0.4", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-defaults-mode-node": { + "version": "4.0.19", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^4.1.4", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-endpoints": { + "version": "3.0.6", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-hex-encoding": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-middleware": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-retry": { + "version": "4.0.5", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^4.0.5", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-stream": { + "version": "4.2.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-uri-escape": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-utf8": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sso": { + "version": "3.637.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.637.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-node": "3.637.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.637.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts": { + "version": "3.777.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.775.0", + "@aws-sdk/credential-provider-node": "3.777.0", + "@aws-sdk/middleware-host-header": "3.775.0", + "@aws-sdk/middleware-logger": "3.775.0", + "@aws-sdk/middleware-recursion-detection": "3.775.0", + "@aws-sdk/middleware-user-agent": "3.775.0", + "@aws-sdk/region-config-resolver": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@aws-sdk/util-endpoints": "3.775.0", + "@aws-sdk/util-user-agent-browser": "3.775.0", + "@aws-sdk/util-user-agent-node": "3.775.0", + "@smithy/config-resolver": "^4.1.0", + "@smithy/core": "^3.2.0", + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/hash-node": "^4.0.2", + "@smithy/invalid-dependency": "^4.0.2", + "@smithy/middleware-content-length": "^4.0.2", + "@smithy/middleware-endpoint": "^4.1.0", + "@smithy/middleware-retry": "^4.1.0", + "@smithy/middleware-serde": "^4.0.3", + "@smithy/middleware-stack": "^4.0.2", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/protocol-http": "^5.1.0", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.8", + "@smithy/util-defaults-mode-node": "^4.0.8", + "@smithy/util-endpoints": "^3.0.2", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-retry": "^4.0.2", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/client-sso": { + "version": "3.777.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.775.0", + "@aws-sdk/middleware-host-header": "3.775.0", + "@aws-sdk/middleware-logger": "3.775.0", + "@aws-sdk/middleware-recursion-detection": "3.775.0", + "@aws-sdk/middleware-user-agent": "3.775.0", + "@aws-sdk/region-config-resolver": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@aws-sdk/util-endpoints": "3.775.0", + "@aws-sdk/util-user-agent-browser": "3.775.0", + "@aws-sdk/util-user-agent-node": "3.775.0", + "@smithy/config-resolver": "^4.1.0", + "@smithy/core": "^3.2.0", + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/hash-node": "^4.0.2", + "@smithy/invalid-dependency": "^4.0.2", + "@smithy/middleware-content-length": "^4.0.2", + "@smithy/middleware-endpoint": "^4.1.0", + "@smithy/middleware-retry": "^4.1.0", + "@smithy/middleware-serde": "^4.0.3", + "@smithy/middleware-stack": "^4.0.2", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/protocol-http": "^5.1.0", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.8", + "@smithy/util-defaults-mode-node": "^4.0.8", + "@smithy/util-endpoints": "^3.0.2", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-retry": "^4.0.2", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/core": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/core": "^3.2.0", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/signature-v4": "^5.0.2", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "@smithy/util-middleware": "^4.0.2", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/property-provider": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "@smithy/util-stream": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.777.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.775.0", + "@aws-sdk/credential-provider-env": "3.775.0", + "@aws-sdk/credential-provider-http": "3.775.0", + "@aws-sdk/credential-provider-process": "3.775.0", + "@aws-sdk/credential-provider-sso": "3.777.0", + "@aws-sdk/credential-provider-web-identity": "3.777.0", + "@aws-sdk/nested-clients": "3.777.0", + "@aws-sdk/types": "3.775.0", + "@smithy/credential-provider-imds": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.777.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.775.0", + "@aws-sdk/credential-provider-http": "3.775.0", + "@aws-sdk/credential-provider-ini": "3.777.0", + "@aws-sdk/credential-provider-process": "3.775.0", + "@aws-sdk/credential-provider-sso": "3.777.0", + "@aws-sdk/credential-provider-web-identity": "3.777.0", + "@aws-sdk/types": "3.775.0", + "@smithy/credential-provider-imds": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.777.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.777.0", + "@aws-sdk/core": "3.775.0", + "@aws-sdk/token-providers": "3.777.0", + "@aws-sdk/types": "3.775.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.777.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.775.0", + "@aws-sdk/nested-clients": "3.777.0", + "@aws-sdk/types": "3.775.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-logger": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@aws-sdk/util-endpoints": "3.775.0", + "@smithy/core": "^3.2.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/token-providers": { + "version": "3.777.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/nested-clients": "3.777.0", + "@aws-sdk/types": "3.775.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/types": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-endpoints": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/types": "^4.2.0", + "@smithy/util-endpoints": "^3.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/types": "^4.2.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/abort-controller": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/config-resolver": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/core": { + "version": "3.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.0.3", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-stream": "^4.2.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/credential-provider-imds": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/fetch-http-handler": { + "version": "5.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.0", + "@smithy/querystring-builder": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/util-base64": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/hash-node": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/invalid-dependency": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/is-array-buffer": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-content-length": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-endpoint": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.2.0", + "@smithy/middleware-serde": "^4.0.3", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "@smithy/util-middleware": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-retry": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/service-error-classification": "^4.0.2", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-retry": "^4.0.2", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-serde": { + "version": "4.0.3", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-stack": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/node-config-provider": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/node-http-handler": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/querystring-builder": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/property-provider": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/protocol-http": { + "version": "5.1.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/querystring-builder": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "@smithy/util-uri-escape": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/querystring-parser": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/service-error-classification": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/shared-ini-file-loader": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/signature-v4": { + "version": "5.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-uri-escape": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/smithy-client": { + "version": "4.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.2.0", + "@smithy/middleware-endpoint": "^4.1.0", + "@smithy/middleware-stack": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "@smithy/util-stream": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/types": { + "version": "4.3.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/url-parser": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-base64": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-body-length-browser": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-body-length-node": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-buffer-from": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-config-provider": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.0.8", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.0.2", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-defaults-mode-node": { + "version": "4.0.8", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^4.1.0", + "@smithy/credential-provider-imds": "^4.0.2", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-endpoints": { + "version": "3.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-hex-encoding": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-middleware": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-retry": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-stream": { + "version": "4.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/types": "^4.2.0", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-uri-escape": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-utf8": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/core": { + "version": "3.635.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^2.4.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-middleware": "^3.0.3", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.620.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/credential-provider-env/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.635.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/credential-provider-http/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.637.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.637.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.637.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.637.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-ini": "3.637.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.637.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.620.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/credential-provider-process/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.637.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.637.0", + "@aws-sdk/token-providers": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.621.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.621.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.620.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/middleware-host-header/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/middleware-logger": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/middleware-logger/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.620.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.637.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients": { + "version": "3.777.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.775.0", + "@aws-sdk/middleware-host-header": "3.775.0", + "@aws-sdk/middleware-logger": "3.775.0", + "@aws-sdk/middleware-recursion-detection": "3.775.0", + "@aws-sdk/middleware-user-agent": "3.775.0", + "@aws-sdk/region-config-resolver": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@aws-sdk/util-endpoints": "3.775.0", + "@aws-sdk/util-user-agent-browser": "3.775.0", + "@aws-sdk/util-user-agent-node": "3.775.0", + "@smithy/config-resolver": "^4.1.0", + "@smithy/core": "^3.2.0", + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/hash-node": "^4.0.2", + "@smithy/invalid-dependency": "^4.0.2", + "@smithy/middleware-content-length": "^4.0.2", + "@smithy/middleware-endpoint": "^4.1.0", + "@smithy/middleware-retry": "^4.1.0", + "@smithy/middleware-serde": "^4.0.3", + "@smithy/middleware-stack": "^4.0.2", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/protocol-http": "^5.1.0", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.8", + "@smithy/util-defaults-mode-node": "^4.0.8", + "@smithy/util-endpoints": "^3.0.2", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-retry": "^4.0.2", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/core": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/core": "^3.2.0", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/signature-v4": "^5.0.2", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "@smithy/util-middleware": "^4.0.2", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/middleware-logger": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@aws-sdk/util-endpoints": "3.775.0", + "@smithy/core": "^3.2.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/types": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/util-endpoints": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/types": "^4.2.0", + "@smithy/util-endpoints": "^3.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/types": "^4.2.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/abort-controller": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/config-resolver": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/core": { + "version": "3.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.0.3", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-stream": "^4.2.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/credential-provider-imds": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/fetch-http-handler": { + "version": "5.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.0", + "@smithy/querystring-builder": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/util-base64": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/hash-node": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/invalid-dependency": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/is-array-buffer": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/middleware-content-length": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/middleware-endpoint": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.2.0", + "@smithy/middleware-serde": "^4.0.3", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "@smithy/util-middleware": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/middleware-retry": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/service-error-classification": "^4.0.2", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-retry": "^4.0.2", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/middleware-serde": { + "version": "4.0.3", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/middleware-stack": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-config-provider": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/querystring-builder": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/property-provider": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/protocol-http": { + "version": "5.1.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/querystring-builder": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "@smithy/util-uri-escape": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/querystring-parser": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/service-error-classification": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/shared-ini-file-loader": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/signature-v4": { + "version": "5.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-uri-escape": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/smithy-client": { + "version": "4.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.2.0", + "@smithy/middleware-endpoint": "^4.1.0", + "@smithy/middleware-stack": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "@smithy/util-stream": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/types": { + "version": "4.3.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/url-parser": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-base64": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-body-length-browser": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-body-length-node": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-buffer-from": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-config-provider": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.0.8", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.0.2", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-defaults-mode-node": { + "version": "4.0.8", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^4.1.0", + "@smithy/credential-provider-imds": "^4.0.2", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-endpoints": { + "version": "3.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-hex-encoding": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-middleware": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-retry": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-stream": { + "version": "4.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/types": "^4.2.0", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-uri-escape": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-utf8": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.614.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/region-config-resolver/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/token-providers": { + "version": "3.614.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.614.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/types": { + "version": "3.821.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/types/node_modules/@smithy/types": { + "version": "4.3.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/util-endpoints": { + "version": "3.637.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "@smithy/util-endpoints": "^2.0.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/util-endpoints/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/util-locate-window": { + "version": "3.804.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/util-user-agent-browser/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.614.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/util-user-agent-node/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/xml-builder": { + "version": "3.821.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@aws-sdk/xml-builder/node_modules/@smithy/types": { + "version": "4.3.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/abort-controller": { + "version": "3.1.9", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/config-resolver": { + "version": "3.0.13", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.12", + "@smithy/types": "^3.7.2", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.11", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/core": { + "version": "2.5.7", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^3.0.11", + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-middleware": "^3.0.11", + "@smithy/util-stream": "^3.3.4", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/credential-provider-imds": { + "version": "3.2.8", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.12", + "@smithy/property-provider": "^3.1.11", + "@smithy/types": "^3.7.2", + "@smithy/url-parser": "^3.0.11", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/eventstream-codec": { + "version": "3.1.10", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^3.7.2", + "@smithy/util-hex-encoding": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/eventstream-serde-browser": { + "version": "3.0.14", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^3.0.13", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "3.0.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/eventstream-serde-node": { + "version": "3.0.13", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^3.0.13", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/eventstream-serde-universal": { + "version": "3.0.13", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-codec": "^3.1.10", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/fetch-http-handler": { + "version": "3.2.9", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^4.1.4", + "@smithy/querystring-builder": "^3.0.7", + "@smithy/types": "^3.5.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/hash-node": { + "version": "3.0.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/invalid-dependency": { + "version": "3.0.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/middleware-content-length": { + "version": "3.0.13", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/middleware-endpoint": { + "version": "3.2.8", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^2.5.7", + "@smithy/middleware-serde": "^3.0.11", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/shared-ini-file-loader": "^3.1.12", + "@smithy/types": "^3.7.2", + "@smithy/url-parser": "^3.0.11", + "@smithy/util-middleware": "^3.0.11", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/middleware-retry": { + "version": "3.0.34", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.12", + "@smithy/protocol-http": "^4.1.8", + "@smithy/service-error-classification": "^3.0.11", + "@smithy/smithy-client": "^3.7.0", + "@smithy/types": "^3.7.2", + "@smithy/util-middleware": "^3.0.11", + "@smithy/util-retry": "^3.0.11", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/middleware-serde": { + "version": "3.0.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/middleware-stack": { + "version": "3.0.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/node-config-provider": { + "version": "3.1.12", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^3.1.11", + "@smithy/shared-ini-file-loader": "^3.1.12", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/node-http-handler": { + "version": "3.3.3", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^3.1.9", + "@smithy/protocol-http": "^4.1.8", + "@smithy/querystring-builder": "^3.0.11", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/property-provider": { + "version": "3.1.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/protocol-http": { + "version": "4.1.8", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/querystring-builder": { + "version": "3.0.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/querystring-parser": { + "version": "3.0.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/service-error-classification": { + "version": "3.0.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.12", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/signature-v4": { + "version": "4.2.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-middleware": "^3.0.11", + "@smithy/util-uri-escape": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/smithy-client": { + "version": "3.7.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^2.5.7", + "@smithy/middleware-endpoint": "^3.2.8", + "@smithy/middleware-stack": "^3.0.11", + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "@smithy/util-stream": "^3.3.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/url-parser": { + "version": "3.0.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^3.0.11", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/util-base64": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/util-body-length-browser": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/util-body-length-node": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/util-config-provider": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/util-defaults-mode-browser": { + "version": "3.0.34", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^3.1.11", + "@smithy/smithy-client": "^3.7.0", + "@smithy/types": "^3.7.2", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/util-defaults-mode-node": { + "version": "3.0.34", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^3.0.13", + "@smithy/credential-provider-imds": "^3.2.8", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/property-provider": "^3.1.11", + "@smithy/smithy-client": "^3.7.0", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/util-endpoints": { + "version": "2.1.7", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.12", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/util-middleware": { + "version": "3.0.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/util-retry": { + "version": "3.0.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^3.0.11", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/util-stream": { + "version": "3.3.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^4.1.3", + "@smithy/node-http-handler": "^3.3.3", + "@smithy/types": "^3.7.2", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/util-stream/node_modules/@smithy/fetch-http-handler": { + "version": "4.1.3", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^4.1.8", + "@smithy/querystring-builder": "^3.0.11", + "@smithy/types": "^3.7.2", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/util-uri-escape": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/@types/uuid": { + "version": "9.0.8", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/@aws-amplify/data-construct/node_modules/bowser": { + "version": "2.11.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/@aws-amplify/data-construct/node_modules/charenc": { + "version": "0.0.2", + "dev": true, + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/ci-info": { + "version": "3.9.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/crypt": { + "version": "0.0.2", + "dev": true, + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/fast-xml-parser": { + "version": "4.4.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "inBundle": true, + "license": "MIT", + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/fs-extra": { + "version": "8.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/graceful-fs": { + "version": "4.2.11", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/@aws-amplify/data-construct/node_modules/graphql": { + "version": "15.10.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/graphql-mapping-template": { + "version": "5.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0" + }, + "node_modules/@aws-amplify/data-construct/node_modules/graphql-transformer-common": { + "version": "5.1.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "md5": "^2.2.1", + "pluralize": "8.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/hjson": { + "version": "3.2.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "bin": { + "hjson": "bin/hjson" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/immer": { + "version": "9.0.21", + "dev": true, + "inBundle": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/is-buffer": { + "version": "1.1.6", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/@aws-amplify/data-construct/node_modules/is-ci": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/jsonfile": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/libphonenumber-js": { + "version": "1.9.47", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/@aws-amplify/data-construct/node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/@aws-amplify/data-construct/node_modules/lodash.mergewith": { + "version": "4.6.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/@aws-amplify/data-construct/node_modules/lodash.snakecase": { + "version": "4.1.1", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/@aws-amplify/data-construct/node_modules/md5": { + "version": "2.3.0", + "dev": true, + "inBundle": true, + "license": "BSD-3-Clause", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/object-hash": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/pluralize": { + "version": "8.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/semver": { + "version": "7.7.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/strnum": { + "version": "1.1.2", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/@aws-amplify/data-construct/node_modules/ts-dedent": { + "version": "2.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6.10" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/tslib": { + "version": "2.8.1", + "dev": true, + "inBundle": true, + "license": "0BSD" + }, + "node_modules/@aws-amplify/data-construct/node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/uuid": { + "version": "9.0.1", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "inBundle": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@aws-amplify/data-construct/node_modules/zod": { + "version": "3.24.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@aws-amplify/data-schema": { + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/@aws-amplify/data-schema/-/data-schema-1.25.0.tgz", + "integrity": "sha512-/e1LDrGXOOUXhVHsvxgF0/+R5ZNxfwJvZ21ihXHBWtRtkTTnlYJIsG0+SJ17L7NAfwxY1mHNnoomsvsmP8w/ow==", + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/data-schema-types": "*", + "@smithy/util-base64": "^3.0.0", + "@types/aws-lambda": "^8.10.134", + "@types/json-schema": "^7.0.15", + "rxjs": "^7.8.1" + } + }, + "node_modules/@aws-amplify/data-schema-types": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@aws-amplify/data-schema-types/-/data-schema-types-1.2.1.tgz", + "integrity": "sha512-SuYVcy9Hg8Ox9P0QCXEPwqHxX5zVPgVo2YvNBOm5TpkZr4UK6ir3USame7dELZsk5/9f6KoP70QAYhTvp/j1Og==", + "license": "Apache-2.0", + "dependencies": { + "graphql": "15.8.0", + "rxjs": "^7.8.1" + } + }, + "node_modules/@aws-amplify/data-schema-types/node_modules/graphql": { + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", + "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", + "license": "MIT", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/@aws-amplify/datastore": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@aws-amplify/datastore/-/datastore-5.1.5.tgz", + "integrity": "sha512-/9o4eYqWOlxVxe/riDd282FmUHHSiGUEAwle464T8wzNSqPTB7yTeQfzt2LFYTWsrYLCSR0OtOM1bY5VPSVmew==", + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/api": "6.3.24", + "@aws-amplify/api-graphql": "4.8.5", + "buffer": "4.9.2", + "idb": "5.0.6", + "immer": "9.0.6", + "rxjs": "^7.8.1", + "ulid": "^2.3.0" + }, + "peerDependencies": { + "@aws-amplify/core": "^6.1.0" + } + }, + "node_modules/@aws-amplify/datastore/node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "license": "MIT", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/@aws-amplify/datastore/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/@aws-amplify/deployed-backend-client": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@aws-amplify/deployed-backend-client/-/deployed-backend-client-1.8.1.tgz", + "integrity": "sha512-9jKrDcxrGTXZR4qNb6uH9ORiAGQDXr0Zy9vRZFOESC1All95UdaWUuPkfPCmLBKlmYgvQiI3KTqbm4fCjpRmOg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/backend-output-schemas": "^1.7.1", + "@aws-amplify/platform-core": "^1.10.1", + "@aws-amplify/plugin-types": "^1.11.1", + "zod": "3.25.17" + }, + "peerDependencies": { + "@aws-sdk/client-amplify": "^3.750.0", + "@aws-sdk/client-cloudformation": "^3.750.0", + "@aws-sdk/client-s3": "^3.750.0", + "@aws-sdk/types": "^3.734.0" + } + }, + "node_modules/@aws-amplify/form-generator": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aws-amplify/form-generator/-/form-generator-1.2.6.tgz", + "integrity": "sha512-QBkf8Vg4ILc1boZCS10QXuxqvLgoVwj9dkyefGu50mcBgQGVyTPawS5cYWFdSUMhxweSPO1mzjL2V/yBm4OE/A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/appsync-modelgen-plugin": "^2.11.0", + "@aws-amplify/codegen-ui": "^2.19.4", + "@aws-amplify/codegen-ui-react": "^2.19.4", + "@aws-amplify/graphql-directives": "^2.7.1", + "@aws-amplify/graphql-docs-generator": "^4.1.0", + "@aws-sdk/client-amplifyuibuilder": "^3.936.0", + "@aws-sdk/client-appsync": "^3.936.0", + "@aws-sdk/client-s3": "^3.936.0", + "@graphql-codegen/typescript": "^4.1.5", + "graphql": "^15.8.0", + "node-fetch": "^3.3.2", + "prettier": "^3.5.3" + } + }, + "node_modules/@aws-amplify/graphql-api-construct": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@aws-amplify/graphql-api-construct/-/graphql-api-construct-1.21.0.tgz", + "integrity": "sha512-jYUzcDCy1GmXwIEtjStKhC3N428WpfDPvMl1x8m2mnMPBoWOmATYwR6DsT9DSZU7MHQUXvJiNGmITuwmPmld9g==", + "bundleDependencies": [ + "@aws-amplify/ai-constructs", + "@aws-amplify/backend-output-schemas", + "@aws-amplify/backend-output-storage", + "@aws-amplify/graphql-auth-transformer", + "@aws-amplify/graphql-conversation-transformer", + "@aws-amplify/graphql-default-value-transformer", + "@aws-amplify/graphql-directives", + "@aws-amplify/graphql-function-transformer", + "@aws-amplify/graphql-generation-transformer", + "@aws-amplify/graphql-http-transformer", + "@aws-amplify/graphql-index-transformer", + "@aws-amplify/graphql-maps-to-transformer", + "@aws-amplify/graphql-model-transformer", + "@aws-amplify/graphql-predictions-transformer", + "@aws-amplify/graphql-relational-transformer", + "@aws-amplify/graphql-searchable-transformer", + "@aws-amplify/graphql-sql-transformer", + "@aws-amplify/graphql-transformer", + "@aws-amplify/graphql-transformer-core", + "@aws-amplify/graphql-transformer-interfaces", + "@aws-amplify/graphql-validate-transformer", + "@aws-amplify/platform-core", + "@aws-amplify/plugin-types", + "@aws-crypto/crc32", + "@aws-crypto/sha256-browser", + "@aws-crypto/sha256-js", + "@aws-crypto/supports-web-crypto", + "@aws-crypto/util", + "@aws-sdk/client-bedrock-runtime", + "@aws-sdk/client-sso", + "@aws-sdk/client-sso-oidc", + "@aws-sdk/client-sts", + "@aws-sdk/core", + "@aws-sdk/credential-provider-env", + "@aws-sdk/credential-provider-http", + "@aws-sdk/credential-provider-ini", + "@aws-sdk/credential-provider-node", + "@aws-sdk/credential-provider-process", + "@aws-sdk/credential-provider-sso", + "@aws-sdk/credential-provider-web-identity", + "@aws-sdk/middleware-host-header", + "@aws-sdk/middleware-logger", + "@aws-sdk/middleware-recursion-detection", + "@aws-sdk/middleware-user-agent", + "@aws-sdk/nested-clients", + "@aws-sdk/region-config-resolver", + "@aws-sdk/token-providers", + "@aws-sdk/types", + "@aws-sdk/util-endpoints", + "@aws-sdk/util-locate-window", + "@aws-sdk/util-user-agent-browser", + "@aws-sdk/util-user-agent-node", + "@smithy/abort-controller", + "@smithy/config-resolver", + "@smithy/core", + "@smithy/credential-provider-imds", + "@smithy/eventstream-codec", + "@smithy/eventstream-serde-browser", + "@smithy/eventstream-serde-config-resolver", + "@smithy/eventstream-serde-node", + "@smithy/eventstream-serde-universal", + "@smithy/fetch-http-handler", + "@smithy/hash-node", + "@smithy/invalid-dependency", + "@smithy/is-array-buffer", + "@smithy/middleware-content-length", + "@smithy/middleware-endpoint", + "@smithy/middleware-retry", + "@smithy/middleware-serde", + "@smithy/middleware-stack", + "@smithy/node-config-provider", + "@smithy/node-http-handler", + "@smithy/property-provider", + "@smithy/protocol-http", + "@smithy/querystring-builder", + "@smithy/querystring-parser", + "@smithy/service-error-classification", + "@smithy/shared-ini-file-loader", + "@smithy/signature-v4", + "@smithy/smithy-client", + "@smithy/types", + "@smithy/url-parser", + "@smithy/util-base64", + "@smithy/util-body-length-browser", + "@smithy/util-body-length-node", + "@smithy/util-buffer-from", + "@smithy/util-config-provider", + "@smithy/util-defaults-mode-browser", + "@smithy/util-defaults-mode-node", + "@smithy/util-endpoints", + "@smithy/util-hex-encoding", + "@smithy/util-middleware", + "@smithy/util-retry", + "@smithy/util-stream", + "@smithy/util-uri-escape", + "@smithy/util-utf8", + "@types/uuid", + "bowser", + "charenc", + "ci-info", + "crypt", + "fast-xml-parser", + "fs-extra", + "graceful-fs", + "graphql", + "graphql-mapping-template", + "graphql-transformer-common", + "hjson", + "immer", + "is-buffer", + "is-ci", + "jsonfile", + "libphonenumber-js", + "lodash", + "lodash.mergewith", + "lodash.snakecase", + "md5", + "object-hash", + "pluralize", + "semver", + "strnum", + "ts-dedent", + "tslib", + "universalify", + "uuid", + "zod" + ], + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/ai-constructs": "^1.5.3", + "@aws-amplify/backend-output-schemas": "^1.0.0", + "@aws-amplify/backend-output-storage": "^1.0.0", + "@aws-amplify/graphql-auth-transformer": "4.2.5", + "@aws-amplify/graphql-conversation-transformer": "1.1.13", + "@aws-amplify/graphql-default-value-transformer": "3.1.15", + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-function-transformer": "3.1.17", + "@aws-amplify/graphql-generation-transformer": "1.2.5", + "@aws-amplify/graphql-http-transformer": "3.0.20", + "@aws-amplify/graphql-index-transformer": "3.1.0", + "@aws-amplify/graphql-maps-to-transformer": "4.0.20", + "@aws-amplify/graphql-model-transformer": "3.4.0", + "@aws-amplify/graphql-predictions-transformer": "3.0.20", + "@aws-amplify/graphql-relational-transformer": "3.1.12", + "@aws-amplify/graphql-searchable-transformer": "3.1.0", + "@aws-amplify/graphql-sql-transformer": "0.4.20", + "@aws-amplify/graphql-transformer": "2.4.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "@aws-amplify/graphql-validate-transformer": "1.1.5", + "@aws-amplify/platform-core": "^1.0.0", + "@aws-amplify/plugin-types": "^1.0.0", + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/client-bedrock-runtime": "^3.622.0", + "@aws-sdk/client-sso": "3.637.0", + "@aws-sdk/client-sso-oidc": "3.637.0", + "@aws-sdk/client-sts": "^3.624.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-ini": "3.637.0", + "@aws-sdk/credential-provider-node": "3.637.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.637.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/nested-clients": "^3.777.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/token-providers": "3.614.0", + "@aws-sdk/types": "^3.734.0", + "@aws-sdk/util-endpoints": "3.734.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/abort-controller": "^3.1.1", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/eventstream-codec": "^3.1.2", + "@smithy/eventstream-serde-browser": "^3.0.6", + "@smithy/eventstream-serde-config-resolver": "^3.0.3", + "@smithy/eventstream-serde-node": "^3.0.5", + "@smithy/eventstream-serde-universal": "^3.0.5", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/querystring-parser": "^3.0.3", + "@smithy/service-error-classification": "^3.0.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-stream": "^3.1.3", + "@smithy/util-uri-escape": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "@types/uuid": "^9.0.8", + "bowser": "^2.11.0", + "charenc": "^0.0.2", + "ci-info": "^3.2.0", + "crypt": "^0.0.2", + "fast-xml-parser": "4.4.1", + "fs-extra": "^8.1.0", + "graceful-fs": "^4.2.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4", + "hjson": "^3.2.2", + "immer": "^9.0.12", + "is-buffer": "~1.1.6", + "is-ci": "^3.0.1", + "jsonfile": "^4.0.0", + "libphonenumber-js": "1.9.47", + "lodash": "^4.17.21", + "lodash.mergewith": "^4.6.2", + "lodash.snakecase": "^4.1.1", + "md5": "^2.2.1", + "object-hash": "^3.0.0", + "pluralize": "8.0.0", + "semver": "^7.6.3", + "strnum": "^1.0.5", + "ts-dedent": "^2.0.0", + "tslib": "^2.6.2", + "universalify": "^0.1.0", + "uuid": "^9.0.1", + "zod": "^3.22.2" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs": { + "version": "1.5.3", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/backend-output-schemas": "^1.6.0", + "@aws-amplify/plugin-types": "^1.10.1", + "@aws-sdk/client-bedrock-runtime": "3.622.0", + "@smithy/types": "^4.1.0", + "json-schema-to-ts": "^3.1.1" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.189.1", + "constructs": "^10.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/backend-output-schemas": { + "version": "1.6.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "peerDependencies": { + "zod": "^3.22.2" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types": { + "version": "1.10.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-cdk/toolkit-lib": "0.3.2" + }, + "peerDependencies": { + "@aws-sdk/types": "^3.734.0", + "aws-cdk-lib": "^2.189.1", + "constructs": "^10.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/node_modules/@aws-sdk/types": { + "version": "3.821.0", + "extraneous": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/client-bedrock-runtime": { + "version": "3.622.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.622.0", + "@aws-sdk/client-sts": "3.622.0", + "@aws-sdk/core": "3.622.0", + "@aws-sdk/credential-provider-node": "3.622.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.620.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.614.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.3.2", + "@smithy/eventstream-serde-browser": "^3.0.5", + "@smithy/eventstream-serde-config-resolver": "^3.0.3", + "@smithy/eventstream-serde-node": "^3.0.4", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.14", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.14", + "@smithy/util-defaults-mode-node": "^3.0.14", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-stream": "^3.1.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/client-sso": { + "version": "3.622.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.622.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.620.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.614.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.3.2", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.14", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.14", + "@smithy/util-defaults-mode-node": "^3.0.14", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.622.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.622.0", + "@aws-sdk/credential-provider-node": "3.622.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.620.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.614.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.3.2", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.14", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.14", + "@smithy/util-defaults-mode-node": "^3.0.14", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.622.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/client-sso/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/client-sts": { + "version": "3.622.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.622.0", + "@aws-sdk/core": "3.622.0", + "@aws-sdk/credential-provider-node": "3.622.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.620.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.614.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.3.2", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.14", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.14", + "@smithy/util-defaults-mode-node": "^3.0.14", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/client-sts/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/core": { + "version": "3.622.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^2.3.2", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", + "@smithy/types": "^3.3.0", + "@smithy/util-middleware": "^3.0.3", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/core/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.622.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.622.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.622.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.622.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.622.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.622.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.622.0", + "@aws-sdk/credential-provider-ini": "3.622.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.622.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.622.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.622.0", + "@aws-sdk/token-providers": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.620.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.614.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/types/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/util-endpoints": { + "version": "3.614.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "@smithy/util-endpoints": "^2.0.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/ai-constructs/node_modules/@smithy/types": { + "version": "4.3.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/backend-output-schemas": { + "version": "1.4.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "peerDependencies": { + "zod": "^3.22.2" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/backend-output-storage": { + "version": "1.1.5", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/backend-output-schemas": "^1.4.1", + "@aws-amplify/platform-core": "^1.6.5", + "@aws-amplify/plugin-types": "^1.8.1" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.180.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/graphql-auth-transformer": { + "version": "4.2.5", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-model-transformer": "3.4.0", + "@aws-amplify/graphql-relational-transformer": "3.1.12", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4", + "lodash": "^4.17.21", + "md5": "^2.3.0" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/graphql-conversation-transformer": { + "version": "1.1.13", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/ai-constructs": "^1.5.3", + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-index-transformer": "3.1.0", + "@aws-amplify/graphql-model-transformer": "3.4.0", + "@aws-amplify/graphql-relational-transformer": "3.1.12", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "@aws-amplify/plugin-types": "^1.0.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4", + "immer": "^9.0.12", + "semver": "^7.6.3" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/graphql-default-value-transformer": { + "version": "3.1.15", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4", + "libphonenumber-js": "1.9.47" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/graphql-directives": { + "version": "2.8.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0" + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/graphql-function-transformer": { + "version": "3.1.17", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/graphql-generation-transformer": { + "version": "1.2.5", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4", + "immer": "^9.0.12" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/graphql-http-transformer": { + "version": "3.0.20", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/graphql-index-transformer": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-model-transformer": "3.4.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/graphql-maps-to-transformer": { + "version": "4.0.20", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/graphql-model-transformer": { + "version": "3.4.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/graphql-predictions-transformer": { + "version": "3.0.20", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/graphql-relational-transformer": { + "version": "3.1.12", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-index-transformer": "3.1.0", + "@aws-amplify/graphql-model-transformer": "3.4.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4", + "immer": "^9.0.12" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/graphql-searchable-transformer": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-model-transformer": "3.4.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/graphql-sql-transformer": { + "version": "0.4.20", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-model-transformer": "3.4.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/graphql-transformer": { + "version": "2.4.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-auth-transformer": "4.2.5", + "@aws-amplify/graphql-conversation-transformer": "1.1.13", + "@aws-amplify/graphql-default-value-transformer": "3.1.15", + "@aws-amplify/graphql-function-transformer": "3.1.17", + "@aws-amplify/graphql-generation-transformer": "1.2.5", + "@aws-amplify/graphql-http-transformer": "3.0.20", + "@aws-amplify/graphql-index-transformer": "3.1.0", + "@aws-amplify/graphql-maps-to-transformer": "4.0.20", + "@aws-amplify/graphql-model-transformer": "3.4.0", + "@aws-amplify/graphql-predictions-transformer": "3.0.20", + "@aws-amplify/graphql-relational-transformer": "3.1.12", + "@aws-amplify/graphql-searchable-transformer": "3.1.0", + "@aws-amplify/graphql-sql-transformer": "0.4.20", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "@aws-amplify/graphql-validate-transformer": "1.1.5", + "@aws-amplify/plugin-types": "^1.0.0" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/graphql-transformer-core": { + "version": "3.5.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "fs-extra": "^8.1.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4", + "hjson": "^3.2.2", + "lodash": "^4.17.21", + "md5": "^2.3.0", + "object-hash": "^3.0.0", + "ts-dedent": "^2.0.0" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/graphql-transformer-interfaces": { + "version": "4.3.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "graphql": "^15.5.0" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/graphql-validate-transformer": { + "version": "1.1.5", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/platform-core": { + "version": "1.6.5", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/plugin-types": "^1.8.1", + "@aws-sdk/client-sts": "^3.624.0", + "is-ci": "^4.1.0", + "lodash.mergewith": "^4.6.2", + "lodash.snakecase": "^4.1.1", + "semver": "^7.6.3", + "uuid": "^9.0.1", + "zod": "^3.22.2" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.180.0", + "constructs": "^10.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/platform-core/node_modules/ci-info": { + "version": "4.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/platform-core/node_modules/is-ci": { + "version": "4.1.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "inBundle": true, + "license": "MIT", + "dependencies": { + "ci-info": "^4.1.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-amplify/plugin-types": { + "version": "1.8.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "peerDependencies": { + "@aws-sdk/types": "^3.609.0", + "aws-cdk-lib": "^2.180.0", + "constructs": "^10.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-crypto/util": { + "version": "5.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime": { + "version": "3.828.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.826.0", + "@aws-sdk/credential-provider-node": "3.828.0", + "@aws-sdk/eventstream-handler-node": "3.821.0", + "@aws-sdk/middleware-eventstream": "3.821.0", + "@aws-sdk/middleware-host-header": "3.821.0", + "@aws-sdk/middleware-logger": "3.821.0", + "@aws-sdk/middleware-recursion-detection": "3.821.0", + "@aws-sdk/middleware-user-agent": "3.828.0", + "@aws-sdk/region-config-resolver": "3.821.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-endpoints": "3.828.0", + "@aws-sdk/util-user-agent-browser": "3.821.0", + "@aws-sdk/util-user-agent-node": "3.828.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.5.3", + "@smithy/eventstream-serde-browser": "^4.0.4", + "@smithy/eventstream-serde-config-resolver": "^4.1.2", + "@smithy/eventstream-serde-node": "^4.0.4", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/hash-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.11", + "@smithy/middleware-retry": "^4.1.12", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.19", + "@smithy/util-defaults-mode-node": "^4.0.19", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.5", + "@smithy/util-stream": "^4.2.2", + "@smithy/util-utf8": "^4.0.0", + "@types/uuid": "^9.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/client-sso": { + "version": "3.828.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.826.0", + "@aws-sdk/middleware-host-header": "3.821.0", + "@aws-sdk/middleware-logger": "3.821.0", + "@aws-sdk/middleware-recursion-detection": "3.821.0", + "@aws-sdk/middleware-user-agent": "3.828.0", + "@aws-sdk/region-config-resolver": "3.821.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-endpoints": "3.828.0", + "@aws-sdk/util-user-agent-browser": "3.821.0", + "@aws-sdk/util-user-agent-node": "3.828.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.5.3", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/hash-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.11", + "@smithy/middleware-retry": "^4.1.12", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.19", + "@smithy/util-defaults-mode-node": "^4.0.19", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.5", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/core": { + "version": "3.826.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@aws-sdk/xml-builder": "3.821.0", + "@smithy/core": "^3.5.3", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-utf8": "^4.0.0", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.826.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.826.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/types": "3.821.0", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/util-stream": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.828.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/credential-provider-env": "3.826.0", + "@aws-sdk/credential-provider-http": "3.826.0", + "@aws-sdk/credential-provider-process": "3.826.0", + "@aws-sdk/credential-provider-sso": "3.828.0", + "@aws-sdk/credential-provider-web-identity": "3.828.0", + "@aws-sdk/nested-clients": "3.828.0", + "@aws-sdk/types": "3.821.0", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.828.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.826.0", + "@aws-sdk/credential-provider-http": "3.826.0", + "@aws-sdk/credential-provider-ini": "3.828.0", + "@aws-sdk/credential-provider-process": "3.826.0", + "@aws-sdk/credential-provider-sso": "3.828.0", + "@aws-sdk/credential-provider-web-identity": "3.828.0", + "@aws-sdk/types": "3.821.0", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.826.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.828.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.828.0", + "@aws-sdk/core": "3.826.0", + "@aws-sdk/token-providers": "3.828.0", + "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.828.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/nested-clients": "3.828.0", + "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.821.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/middleware-logger": { + "version": "3.821.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.821.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.828.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-endpoints": "3.828.0", + "@smithy/core": "^3.5.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/nested-clients": { + "version": "3.828.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.826.0", + "@aws-sdk/middleware-host-header": "3.821.0", + "@aws-sdk/middleware-logger": "3.821.0", + "@aws-sdk/middleware-recursion-detection": "3.821.0", + "@aws-sdk/middleware-user-agent": "3.828.0", + "@aws-sdk/region-config-resolver": "3.821.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-endpoints": "3.828.0", + "@aws-sdk/util-user-agent-browser": "3.821.0", + "@aws-sdk/util-user-agent-node": "3.828.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.5.3", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/hash-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.11", + "@smithy/middleware-retry": "^4.1.12", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.19", + "@smithy/util-defaults-mode-node": "^4.0.19", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.5", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.821.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/token-providers": { + "version": "3.828.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/nested-clients": "3.828.0", + "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/util-endpoints": { + "version": "3.828.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/types": "^4.3.1", + "@smithy/util-endpoints": "^3.0.6", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.821.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/types": "^4.3.1", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.828.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.828.0", + "@aws-sdk/types": "3.821.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/abort-controller": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/config-resolver": { + "version": "4.1.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/core": { + "version": "3.5.3", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.0.8", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-stream": "^4.2.2", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/credential-provider-imds": { + "version": "4.0.6", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/eventstream-codec": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.3.1", + "@smithy/util-hex-encoding": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/eventstream-serde-browser": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "4.1.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/eventstream-serde-node": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/eventstream-serde-universal": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-codec": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/fetch-http-handler": { + "version": "5.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.2", + "@smithy/querystring-builder": "^4.0.4", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/hash-node": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/invalid-dependency": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/is-array-buffer": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/middleware-content-length": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/middleware-endpoint": { + "version": "4.1.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.5.3", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-middleware": "^4.0.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/middleware-retry": { + "version": "4.1.12", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/service-error-classification": "^4.0.5", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.5", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/middleware-serde": { + "version": "4.0.8", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/middleware-stack": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/node-config-provider": { + "version": "4.1.3", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/node-http-handler": { + "version": "4.0.6", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/querystring-builder": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/property-provider": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/protocol-http": { + "version": "5.1.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/querystring-builder": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "@smithy/util-uri-escape": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/querystring-parser": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/service-error-classification": { + "version": "4.0.5", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/shared-ini-file-loader": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/signature-v4": { + "version": "5.1.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-uri-escape": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/smithy-client": { + "version": "4.4.3", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.5.3", + "@smithy/middleware-endpoint": "^4.1.11", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-stream": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/types": { + "version": "4.3.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/url-parser": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-base64": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-body-length-browser": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-body-length-node": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-buffer-from": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-config-provider": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.0.19", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.0.4", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-defaults-mode-node": { + "version": "4.0.19", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^4.1.4", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-endpoints": { + "version": "3.0.6", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-hex-encoding": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-middleware": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-retry": { + "version": "4.0.5", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^4.0.5", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-stream": { + "version": "4.2.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-uri-escape": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-utf8": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sso": { + "version": "3.637.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.637.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-node": "3.637.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.637.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/util-endpoints": { + "version": "3.637.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "@smithy/util-endpoints": "^2.0.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-endpoints": { + "version": "3.637.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "@smithy/util-endpoints": "^2.0.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts": { + "version": "3.777.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.775.0", + "@aws-sdk/credential-provider-node": "3.777.0", + "@aws-sdk/middleware-host-header": "3.775.0", + "@aws-sdk/middleware-logger": "3.775.0", + "@aws-sdk/middleware-recursion-detection": "3.775.0", + "@aws-sdk/middleware-user-agent": "3.775.0", + "@aws-sdk/region-config-resolver": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@aws-sdk/util-endpoints": "3.775.0", + "@aws-sdk/util-user-agent-browser": "3.775.0", + "@aws-sdk/util-user-agent-node": "3.775.0", + "@smithy/config-resolver": "^4.1.0", + "@smithy/core": "^3.2.0", + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/hash-node": "^4.0.2", + "@smithy/invalid-dependency": "^4.0.2", + "@smithy/middleware-content-length": "^4.0.2", + "@smithy/middleware-endpoint": "^4.1.0", + "@smithy/middleware-retry": "^4.1.0", + "@smithy/middleware-serde": "^4.0.3", + "@smithy/middleware-stack": "^4.0.2", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/protocol-http": "^5.1.0", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.8", + "@smithy/util-defaults-mode-node": "^4.0.8", + "@smithy/util-endpoints": "^3.0.2", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-retry": "^4.0.2", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/client-sso": { + "version": "3.777.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.775.0", + "@aws-sdk/middleware-host-header": "3.775.0", + "@aws-sdk/middleware-logger": "3.775.0", + "@aws-sdk/middleware-recursion-detection": "3.775.0", + "@aws-sdk/middleware-user-agent": "3.775.0", + "@aws-sdk/region-config-resolver": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@aws-sdk/util-endpoints": "3.775.0", + "@aws-sdk/util-user-agent-browser": "3.775.0", + "@aws-sdk/util-user-agent-node": "3.775.0", + "@smithy/config-resolver": "^4.1.0", + "@smithy/core": "^3.2.0", + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/hash-node": "^4.0.2", + "@smithy/invalid-dependency": "^4.0.2", + "@smithy/middleware-content-length": "^4.0.2", + "@smithy/middleware-endpoint": "^4.1.0", + "@smithy/middleware-retry": "^4.1.0", + "@smithy/middleware-serde": "^4.0.3", + "@smithy/middleware-stack": "^4.0.2", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/protocol-http": "^5.1.0", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.8", + "@smithy/util-defaults-mode-node": "^4.0.8", + "@smithy/util-endpoints": "^3.0.2", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-retry": "^4.0.2", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/core": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/core": "^3.2.0", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/signature-v4": "^5.0.2", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "@smithy/util-middleware": "^4.0.2", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/property-provider": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "@smithy/util-stream": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.777.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.775.0", + "@aws-sdk/credential-provider-env": "3.775.0", + "@aws-sdk/credential-provider-http": "3.775.0", + "@aws-sdk/credential-provider-process": "3.775.0", + "@aws-sdk/credential-provider-sso": "3.777.0", + "@aws-sdk/credential-provider-web-identity": "3.777.0", + "@aws-sdk/nested-clients": "3.777.0", + "@aws-sdk/types": "3.775.0", + "@smithy/credential-provider-imds": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.777.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.775.0", + "@aws-sdk/credential-provider-http": "3.775.0", + "@aws-sdk/credential-provider-ini": "3.777.0", + "@aws-sdk/credential-provider-process": "3.775.0", + "@aws-sdk/credential-provider-sso": "3.777.0", + "@aws-sdk/credential-provider-web-identity": "3.777.0", + "@aws-sdk/types": "3.775.0", + "@smithy/credential-provider-imds": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.777.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.777.0", + "@aws-sdk/core": "3.775.0", + "@aws-sdk/token-providers": "3.777.0", + "@aws-sdk/types": "3.775.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.777.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.775.0", + "@aws-sdk/nested-clients": "3.777.0", + "@aws-sdk/types": "3.775.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-logger": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@aws-sdk/util-endpoints": "3.775.0", + "@smithy/core": "^3.2.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/token-providers": { + "version": "3.777.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/nested-clients": "3.777.0", + "@aws-sdk/types": "3.775.0", + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/types": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-endpoints": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/types": "^4.2.0", + "@smithy/util-endpoints": "^3.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/types": "^4.2.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/abort-controller": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/config-resolver": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/core": { + "version": "3.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.0.3", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-stream": "^4.2.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/credential-provider-imds": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/fetch-http-handler": { + "version": "5.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.0", + "@smithy/querystring-builder": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/util-base64": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/hash-node": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/invalid-dependency": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/is-array-buffer": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-content-length": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-endpoint": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.2.0", + "@smithy/middleware-serde": "^4.0.3", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "@smithy/util-middleware": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-retry": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/service-error-classification": "^4.0.2", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-retry": "^4.0.2", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-serde": { + "version": "4.0.3", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-stack": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/node-config-provider": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/node-http-handler": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/querystring-builder": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/property-provider": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/protocol-http": { + "version": "5.1.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/querystring-builder": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "@smithy/util-uri-escape": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/querystring-parser": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/service-error-classification": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/shared-ini-file-loader": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/signature-v4": { + "version": "5.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-uri-escape": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/smithy-client": { + "version": "4.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.2.0", + "@smithy/middleware-endpoint": "^4.1.0", + "@smithy/middleware-stack": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "@smithy/util-stream": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/types": { + "version": "4.3.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/url-parser": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-base64": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-body-length-browser": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-body-length-node": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-buffer-from": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-config-provider": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.0.8", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.0.2", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-defaults-mode-node": { + "version": "4.0.8", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^4.1.0", + "@smithy/credential-provider-imds": "^4.0.2", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-endpoints": { + "version": "3.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-hex-encoding": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-middleware": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-retry": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-stream": { + "version": "4.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/types": "^4.2.0", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-uri-escape": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-utf8": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/core": { + "version": "3.635.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^2.4.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-middleware": "^3.0.3", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.620.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/credential-provider-env/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.635.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/credential-provider-http/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.637.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.637.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.637.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.637.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-ini": "3.637.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.637.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.620.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/credential-provider-process/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.637.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.637.0", + "@aws-sdk/token-providers": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.621.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.621.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.620.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/middleware-host-header/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/middleware-logger": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/middleware-logger/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.620.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.637.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/util-endpoints": { + "version": "3.637.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "@smithy/util-endpoints": "^2.0.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients": { + "version": "3.777.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.775.0", + "@aws-sdk/middleware-host-header": "3.775.0", + "@aws-sdk/middleware-logger": "3.775.0", + "@aws-sdk/middleware-recursion-detection": "3.775.0", + "@aws-sdk/middleware-user-agent": "3.775.0", + "@aws-sdk/region-config-resolver": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@aws-sdk/util-endpoints": "3.775.0", + "@aws-sdk/util-user-agent-browser": "3.775.0", + "@aws-sdk/util-user-agent-node": "3.775.0", + "@smithy/config-resolver": "^4.1.0", + "@smithy/core": "^3.2.0", + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/hash-node": "^4.0.2", + "@smithy/invalid-dependency": "^4.0.2", + "@smithy/middleware-content-length": "^4.0.2", + "@smithy/middleware-endpoint": "^4.1.0", + "@smithy/middleware-retry": "^4.1.0", + "@smithy/middleware-serde": "^4.0.3", + "@smithy/middleware-stack": "^4.0.2", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/protocol-http": "^5.1.0", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.8", + "@smithy/util-defaults-mode-node": "^4.0.8", + "@smithy/util-endpoints": "^3.0.2", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-retry": "^4.0.2", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/core": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/core": "^3.2.0", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/signature-v4": "^5.0.2", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "@smithy/util-middleware": "^4.0.2", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/middleware-logger": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@aws-sdk/util-endpoints": "3.775.0", + "@smithy/core": "^3.2.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/types": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/util-endpoints": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/types": "^4.2.0", + "@smithy/util-endpoints": "^3.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.775.0", + "@smithy/types": "^4.2.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.775.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.775.0", + "@aws-sdk/types": "3.775.0", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/abort-controller": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/config-resolver": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/core": { + "version": "3.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.0.3", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-stream": "^4.2.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/credential-provider-imds": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/fetch-http-handler": { + "version": "5.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.0", + "@smithy/querystring-builder": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/util-base64": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/hash-node": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/invalid-dependency": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/is-array-buffer": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/middleware-content-length": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/middleware-endpoint": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.2.0", + "@smithy/middleware-serde": "^4.0.3", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "@smithy/util-middleware": "^4.0.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/middleware-retry": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/service-error-classification": "^4.0.2", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-retry": "^4.0.2", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/middleware-serde": { + "version": "4.0.3", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/middleware-stack": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-config-provider": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.0.2", + "@smithy/shared-ini-file-loader": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/querystring-builder": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/property-provider": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/protocol-http": { + "version": "5.1.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/querystring-builder": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "@smithy/util-uri-escape": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/querystring-parser": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/service-error-classification": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/shared-ini-file-loader": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/signature-v4": { + "version": "5.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-uri-escape": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/smithy-client": { + "version": "4.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.2.0", + "@smithy/middleware-endpoint": "^4.1.0", + "@smithy/middleware-stack": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "@smithy/util-stream": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/types": { + "version": "4.3.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/url-parser": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-base64": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-body-length-browser": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-body-length-node": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-buffer-from": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-config-provider": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.0.8", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.0.2", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-defaults-mode-node": { + "version": "4.0.8", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^4.1.0", + "@smithy/credential-provider-imds": "^4.0.2", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/property-provider": "^4.0.2", + "@smithy/smithy-client": "^4.2.0", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-endpoints": { + "version": "3.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-hex-encoding": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-middleware": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-retry": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^4.0.2", + "@smithy/types": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-stream": { + "version": "4.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/types": "^4.2.0", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-uri-escape": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-utf8": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.614.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/region-config-resolver/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/token-providers": { + "version": "3.614.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.614.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/types": { + "version": "3.821.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/types/node_modules/@smithy/types": { + "version": "4.3.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/util-endpoints": { + "version": "3.734.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.734.0", + "@smithy/types": "^4.1.0", + "@smithy/util-endpoints": "^3.0.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/util-endpoints/node_modules/@aws-sdk/types": { + "version": "3.734.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/node-config-provider": { + "version": "4.1.3", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/property-provider": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/shared-ini-file-loader": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/types": { + "version": "4.3.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/util-endpoints": { + "version": "3.0.6", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/util-locate-window": { + "version": "3.804.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/util-user-agent-browser/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.614.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/util-user-agent-node/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/xml-builder": { + "version": "3.821.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@aws-sdk/xml-builder/node_modules/@smithy/types": { + "version": "4.3.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/abort-controller": { + "version": "3.1.9", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/config-resolver": { + "version": "3.0.13", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.12", + "@smithy/types": "^3.7.2", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.11", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/core": { + "version": "2.5.7", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^3.0.11", + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-middleware": "^3.0.11", + "@smithy/util-stream": "^3.3.4", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/credential-provider-imds": { + "version": "3.2.8", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.12", + "@smithy/property-provider": "^3.1.11", + "@smithy/types": "^3.7.2", + "@smithy/url-parser": "^3.0.11", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/eventstream-codec": { + "version": "3.1.10", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^3.7.2", + "@smithy/util-hex-encoding": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/eventstream-serde-browser": { + "version": "3.0.14", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^3.0.13", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "3.0.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/eventstream-serde-node": { + "version": "3.0.13", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^3.0.13", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/eventstream-serde-universal": { + "version": "3.0.13", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-codec": "^3.1.10", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/fetch-http-handler": { + "version": "3.2.9", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^4.1.4", + "@smithy/querystring-builder": "^3.0.7", + "@smithy/types": "^3.5.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/hash-node": { + "version": "3.0.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/invalid-dependency": { + "version": "3.0.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/middleware-content-length": { + "version": "3.0.13", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/middleware-endpoint": { + "version": "3.2.8", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^2.5.7", + "@smithy/middleware-serde": "^3.0.11", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/shared-ini-file-loader": "^3.1.12", + "@smithy/types": "^3.7.2", + "@smithy/url-parser": "^3.0.11", + "@smithy/util-middleware": "^3.0.11", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/middleware-retry": { + "version": "3.0.34", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.12", + "@smithy/protocol-http": "^4.1.8", + "@smithy/service-error-classification": "^3.0.11", + "@smithy/smithy-client": "^3.7.0", + "@smithy/types": "^3.7.2", + "@smithy/util-middleware": "^3.0.11", + "@smithy/util-retry": "^3.0.11", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/middleware-serde": { + "version": "3.0.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/middleware-stack": { + "version": "3.0.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/node-config-provider": { + "version": "3.1.12", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^3.1.11", + "@smithy/shared-ini-file-loader": "^3.1.12", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/node-http-handler": { + "version": "3.3.3", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^3.1.9", + "@smithy/protocol-http": "^4.1.8", + "@smithy/querystring-builder": "^3.0.11", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/property-provider": { + "version": "3.1.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/protocol-http": { + "version": "4.1.8", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/querystring-builder": { + "version": "3.0.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/querystring-parser": { + "version": "3.0.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/service-error-classification": { + "version": "3.0.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.12", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/signature-v4": { + "version": "4.2.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-middleware": "^3.0.11", + "@smithy/util-uri-escape": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/smithy-client": { + "version": "3.7.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^2.5.7", + "@smithy/middleware-endpoint": "^3.2.8", + "@smithy/middleware-stack": "^3.0.11", + "@smithy/protocol-http": "^4.1.8", + "@smithy/types": "^3.7.2", + "@smithy/util-stream": "^3.3.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/types": { + "version": "3.7.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/url-parser": { + "version": "3.0.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^3.0.11", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/util-base64": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/util-body-length-browser": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/util-body-length-node": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/util-config-provider": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/util-defaults-mode-browser": { + "version": "3.0.34", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^3.1.11", + "@smithy/smithy-client": "^3.7.0", + "@smithy/types": "^3.7.2", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/util-defaults-mode-node": { + "version": "3.0.34", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^3.0.13", + "@smithy/credential-provider-imds": "^3.2.8", + "@smithy/node-config-provider": "^3.1.12", + "@smithy/property-provider": "^3.1.11", + "@smithy/smithy-client": "^3.7.0", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/util-endpoints": { + "version": "2.1.7", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.12", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/util-middleware": { + "version": "3.0.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/util-retry": { + "version": "3.0.11", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^3.0.11", + "@smithy/types": "^3.7.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/util-stream": { + "version": "3.3.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^4.1.3", + "@smithy/node-http-handler": "^3.3.3", + "@smithy/types": "^3.7.2", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/util-stream/node_modules/@smithy/fetch-http-handler": { + "version": "4.1.3", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^4.1.8", + "@smithy/querystring-builder": "^3.0.11", + "@smithy/types": "^3.7.2", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/util-uri-escape": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/@types/uuid": { + "version": "9.0.8", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/bowser": { + "version": "2.11.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/charenc": { + "version": "0.0.2", + "dev": true, + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/ci-info": { + "version": "3.9.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/crypt": { + "version": "0.0.2", + "dev": true, + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/fast-xml-parser": { + "version": "4.4.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "inBundle": true, + "license": "MIT", + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/fs-extra": { + "version": "8.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/graceful-fs": { + "version": "4.2.11", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/graphql": { + "version": "15.10.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/graphql-mapping-template": { + "version": "5.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0" + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/graphql-transformer-common": { + "version": "5.1.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "md5": "^2.2.1", + "pluralize": "8.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/hjson": { + "version": "3.2.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "bin": { + "hjson": "bin/hjson" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/immer": { + "version": "9.0.21", + "dev": true, + "inBundle": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/is-buffer": { + "version": "1.1.6", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/is-ci": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/jsonfile": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/libphonenumber-js": { + "version": "1.9.47", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/lodash.mergewith": { + "version": "4.6.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/lodash.snakecase": { + "version": "4.1.1", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/md5": { + "version": "2.3.0", + "dev": true, + "inBundle": true, + "license": "BSD-3-Clause", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/object-hash": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/pluralize": { + "version": "8.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/semver": { + "version": "7.7.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/strnum": { + "version": "1.1.2", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/ts-dedent": { + "version": "2.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6.10" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/tslib": { + "version": "2.8.1", + "dev": true, + "inBundle": true, + "license": "0BSD" + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/uuid": { + "version": "9.0.1", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "inBundle": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@aws-amplify/graphql-api-construct/node_modules/zod": { + "version": "3.24.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@aws-amplify/graphql-directives": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@aws-amplify/graphql-directives/-/graphql-directives-2.8.0.tgz", + "integrity": "sha512-3JzswZQ0zpX0+ym9TJ+yCwYJyFEnIiD6IaMP1C/U3Mcwuik7LAGLNr/lry3kiQw3EbPNrCg7KJ+AF/yt/Q9CTw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@aws-amplify/graphql-docs-generator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@aws-amplify/graphql-docs-generator/-/graphql-docs-generator-4.2.1.tgz", + "integrity": "sha512-ReBlY5//mWOmO0FL2ndswB9ku+vpg/JTY9Wwemjm/ibyoLHU1ojtGkPBkKH0CzbpOkIuEkIBLIg9EZ2yca/6oA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "graphql": "^15.5.0", + "handlebars": "4.7.7", + "yargs": "^15.1.0" + }, + "bin": { + "graphql-docs-generator": "bin/cli" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@aws-amplify/graphql-docs-generator/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@aws-amplify/graphql-docs-generator/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/@aws-amplify/graphql-docs-generator/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@aws-amplify/graphql-docs-generator/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@aws-amplify/graphql-docs-generator/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@aws-amplify/graphql-docs-generator/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@aws-amplify/graphql-docs-generator/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@aws-amplify/graphql-generator": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@aws-amplify/graphql-generator/-/graphql-generator-0.5.3.tgz", + "integrity": "sha512-vU3sLcVi0rwu0k+jepKSRcyb9igKJx3VAmXy/aRd7ggXPiw3uu8pZOVFQqZxOV5Ro5awMGCdLR6gSrpX6+1ADQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/appsync-modelgen-plugin": "2.15.2", + "@aws-amplify/graphql-directives": "^1.0.1", + "@aws-amplify/graphql-docs-generator": "4.2.1", + "@aws-amplify/graphql-types-generator": "3.6.0", + "@graphql-codegen/core": "^2.6.6", + "@graphql-codegen/plugin-helpers": "^3.1.1", + "@graphql-tools/apollo-engine-loader": "^8.0.0", + "@graphql-tools/schema": "^9.0.0", + "@graphql-tools/utils": "^9.2.1", + "graphql": "^15.5.0", + "prettier": "^1.19.1" + } + }, + "node_modules/@aws-amplify/graphql-generator/node_modules/@aws-amplify/graphql-directives": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@aws-amplify/graphql-directives/-/graphql-directives-1.1.1.tgz", + "integrity": "sha512-CY+fd4HhXlUmKEfq4xcqqijxOeNwRY9D5Ia68wugqVawrCkeWyH+pECv+0bANwlxmqZoDRAcxJ7O/VHIEAOoog==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@aws-amplify/graphql-generator/node_modules/@graphql-tools/utils": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", + "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@aws-amplify/graphql-generator/node_modules/prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@aws-amplify/graphql-schema-generator": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@aws-amplify/graphql-schema-generator/-/graphql-schema-generator-0.11.13.tgz", + "integrity": "sha512-5LmeD530rp16Q7N5byRIltgV5c794J3O1L/sBnM3ePAuS+jeeeAK19lr+j/e2PPrIdAhKroU3E/Iy/O0fvnuhw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-transformer-core": "3.5.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "@aws-sdk/client-ec2": "^3.947.0", + "@aws-sdk/client-iam": "^3.947.0", + "@aws-sdk/client-lambda": "^3.947.0", + "@aws-sdk/client-rds": "^3.947.0", + "csv-parse": "^5.5.2", + "fs-extra": "11.1.1", + "graphql": "^15.5.0", + "graphql-transformer-common": "5.1.4", + "knex": "~2.4.0", + "mysql2": "~3.9.7", + "ora": "^4.0.3", + "pg": "~8.11.3", + "pluralize": "^8.0.0", + "typescript": "^5.9.3" + } + }, + "node_modules/@aws-amplify/graphql-schema-generator/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@aws-amplify/graphql-schema-generator/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@aws-amplify/graphql-schema-generator/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@aws-amplify/graphql-schema-generator/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@aws-amplify/graphql-schema-generator/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@aws-amplify/graphql-schema-generator/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@aws-amplify/graphql-schema-generator/node_modules/graphql-transformer-common": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/graphql-transformer-common/-/graphql-transformer-common-5.1.4.tgz", + "integrity": "sha512-E2M2jS/aO5BDNiJKM+5yQlQNhifVDMGUV6X4TWQRrlDPH7muzXlfCyRrxeSYiMuJephSQ9SKzZ6dJNOUuAqsqw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "md5": "^2.2.1", + "pluralize": "8.0.0" + } + }, + "node_modules/@aws-amplify/graphql-schema-generator/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@aws-amplify/graphql-schema-generator/node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@aws-amplify/graphql-schema-generator/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@aws-amplify/graphql-schema-generator/node_modules/log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@aws-amplify/graphql-schema-generator/node_modules/log-symbols/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@aws-amplify/graphql-schema-generator/node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true, + "license": "ISC" + }, + "node_modules/@aws-amplify/graphql-schema-generator/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@aws-amplify/graphql-schema-generator/node_modules/ora": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", + "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.2.0", + "is-interactive": "^1.0.0", + "log-symbols": "^3.0.0", + "mute-stream": "0.0.8", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@aws-amplify/graphql-schema-generator/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@aws-amplify/graphql-schema-generator/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@aws-amplify/graphql-schema-generator/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@aws-amplify/graphql-schema-generator/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@aws-amplify/graphql-schema-generator/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-amplify/graphql-transformer-core": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@aws-amplify/graphql-transformer-core/-/graphql-transformer-core-3.5.0.tgz", + "integrity": "sha512-L6kS6KBBNZHtkDOPk/DpxUfB61SBRl171Rm0Y+XDgURN6NeURRqbISGvRVFU+u1nuOs31OQrlvBoK7PhE3x1/A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-directives": "2.8.0", + "@aws-amplify/graphql-transformer-interfaces": "4.3.0", + "fs-extra": "^8.1.0", + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "graphql-transformer-common": "5.1.4", + "hjson": "^3.2.2", + "lodash": "^4.17.21", + "md5": "^2.3.0", + "object-hash": "^3.0.0", + "ts-dedent": "^2.0.0" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/graphql-transformer-core/node_modules/graphql-transformer-common": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/graphql-transformer-common/-/graphql-transformer-common-5.1.4.tgz", + "integrity": "sha512-E2M2jS/aO5BDNiJKM+5yQlQNhifVDMGUV6X4TWQRrlDPH7muzXlfCyRrxeSYiMuJephSQ9SKzZ6dJNOUuAqsqw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "graphql": "^15.5.0", + "graphql-mapping-template": "5.0.2", + "md5": "^2.2.1", + "pluralize": "8.0.0" + } + }, + "node_modules/@aws-amplify/graphql-transformer-core/node_modules/ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.10" + } + }, + "node_modules/@aws-amplify/graphql-transformer-interfaces": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@aws-amplify/graphql-transformer-interfaces/-/graphql-transformer-interfaces-4.3.0.tgz", + "integrity": "sha512-vAlJJd83H3oXZhk8B47WSHU5ZZwDhZyBbzExCoAe5Z1apc2MoPJBaMPZ3EId6OpeZEAvQZsbC2E0bmKKWUg6Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "graphql": "^15.5.0" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.224.0", + "constructs": "^10.3.0" + } + }, + "node_modules/@aws-amplify/graphql-types-generator": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@aws-amplify/graphql-types-generator/-/graphql-types-generator-3.6.0.tgz", + "integrity": "sha512-yjPXJ2dYZwtGvwwcEQ5RDNlwTsd/hUfD2Dgguo999Gu3mQjz7nV4l7CXD/Oxo/QzwtU/4rmTX69yadBpR+he3A==", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "@babel/generator": "7.0.0-beta.4", + "@babel/types": "7.0.0-beta.4", + "babel-generator": "^6.26.1", + "babel-types": "^6.26.0", + "change-case": "^4.1.1", + "common-tags": "^1.8.0", + "core-js": "^3.6.4", + "fs-extra": "^8.1.0", + "globby": "^11.1.0", + "graphql": "^15.5.0", + "inflected": "^2.0.4", + "prettier": "^1.19.1", + "rimraf": "^3.0.0", + "source-map-support": "^0.5.16", + "yargs": "^15.1.0" + }, + "bin": { + "graphql-types-generator": "lib/cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@aws-amplify/graphql-types-generator/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@aws-amplify/graphql-types-generator/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/@aws-amplify/graphql-types-generator/node_modules/prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@aws-amplify/graphql-types-generator/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@aws-amplify/graphql-types-generator/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@aws-amplify/graphql-types-generator/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@aws-amplify/graphql-types-generator/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@aws-amplify/graphql-types-generator/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@aws-amplify/model-generator": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@aws-amplify/model-generator/-/model-generator-1.2.2.tgz", + "integrity": "sha512-bLkipfviAv7POLg+t6Wu4KUc8CJUYzNakqlJNWwQwwfRYhaCEAKNSJzth+QaAocv8pGnpZrfyM8V3qO+2ji1KA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/backend-output-schemas": "^1.7.1", + "@aws-amplify/deployed-backend-client": "^1.8.1", + "@aws-amplify/graphql-generator": "^0.5.1", + "@aws-amplify/graphql-types-generator": "^3.6.0", + "@aws-amplify/platform-core": "^1.10.3", + "@aws-amplify/plugin-types": "^1.11.1", + "@aws-sdk/client-appsync": "^3.936.0", + "@aws-sdk/client-s3": "^3.937.0", + "@aws-sdk/credential-providers": "^3.936.0", + "@aws-sdk/types": "^3.936.0", + "graphql": "^15.8.0" + }, + "peerDependencies": { + "@aws-sdk/client-amplify": "^3.750.0", + "@aws-sdk/client-cloudformation": "^3.750.0" + } + }, + "node_modules/@aws-amplify/notifications": { + "version": "2.0.93", + "resolved": "https://registry.npmjs.org/@aws-amplify/notifications/-/notifications-2.0.93.tgz", + "integrity": "sha512-NtHKusaiWzkPXuaKsTyvKAWE8JnQcXmQoaidQ5/a9/nWWTzs983l5xgc4OPvfVR+3N63K+3iTmYHtKcEbhgS6w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.973.1", + "lodash": "^4.17.21", + "tslib": "^2.5.0" + }, + "peerDependencies": { + "@aws-amplify/core": "^6.1.0" + } + }, + "node_modules/@aws-amplify/platform-core": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@aws-amplify/platform-core/-/platform-core-1.10.4.tgz", + "integrity": "sha512-1aCeZdPxWP3r8weDY28N2r5gKF6He5zGdqzX5U3yyTsAKPNjMqdJsmbdPSQKyXu7tfdi+sDjMDGOYD9ZnSkhFw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/plugin-types": "^1.11.2", + "@aws-sdk/client-sts": "^3.936.0", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/sdk-trace-base": "^2.0.0", + "is-ci": "^4.1.0", + "lodash.mergewith": "^4.6.2", + "lodash.snakecase": "^4.1.1", + "semver": "^7.6.3", + "uuid": "^11.1.0", + "zod": "3.25.17" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.234.1", + "constructs": "^10.0.0" + } + }, + "node_modules/@aws-amplify/plugin-types": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@aws-amplify/plugin-types/-/plugin-types-1.11.2.tgz", + "integrity": "sha512-Vkff6BuKT0hZ5kdch8MRTP+OkZFW69v5Ghtp4XJb6If9cL/okVJ5QyFRcbY5J/vq5o7UTtYlWzfRKWF26+efLw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-cdk/toolkit-lib": "1.6.1" + }, + "peerDependencies": { + "@aws-sdk/types": "^3.734.0", + "aws-cdk-lib": "^2.234.1", + "constructs": "^10.0.0" + } + }, + "node_modules/@aws-amplify/sandbox": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@aws-amplify/sandbox/-/sandbox-2.2.0.tgz", + "integrity": "sha512-29PNiFsO/1kcyqmUmxAK1IAEmBrfAW9c7IJR0h9xcDFelzeQgox56A8CVJdXPiShlnzbvQDMrK/L2YXxctt+ig==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/backend-deployer": "^2.1.4", + "@aws-amplify/backend-secret": "^1.4.2", + "@aws-amplify/cli-core": "^2.2.3", + "@aws-amplify/client-config": "^1.9.1", + "@aws-amplify/deployed-backend-client": "^1.8.1", + "@aws-amplify/platform-core": "^1.10.3", + "@aws-amplify/plugin-types": "^1.11.1", + "@aws-sdk/client-cloudwatch-logs": "^3.936.0", + "@aws-sdk/client-lambda": "^3.936.0", + "@aws-sdk/client-ssm": "^3.936.0", + "@aws-sdk/credential-providers": "^3.936.0", + "@aws-sdk/types": "^3.936.0", + "@opentelemetry/api": "^1.9.0", + "@parcel/watcher": "^2.4.1", + "debounce-promise": "^3.1.2", + "glob": "^11.1.0", + "open": "^10.1.0", + "parse-gitignore": "^2.0.0" + } + }, + "node_modules/@aws-amplify/schema-generator": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@aws-amplify/schema-generator/-/schema-generator-1.4.1.tgz", + "integrity": "sha512-sRE1rQZYp6yn0GFgnr8eB5QOOVUu1yP5Lty7uEJPrVye/wSm7yEXAA9w+yQ3RzYa5W2NEj/XAP0oEd4K6tI9kQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/graphql-schema-generator": "^0.11.0", + "@aws-amplify/platform-core": "^1.10.1" + } + }, + "node_modules/@aws-amplify/storage": { + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@aws-amplify/storage/-/storage-6.13.1.tgz", + "integrity": "sha512-iNDUmdvevcujcW4PBY7IGBMeTm+nohsZgswH6k99tG0myVsZRg0lVC4l5lcwoXoyVLpQjOmfZ0JgwV0oQbZ6zg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.973.1", + "@smithy/md5-js": "2.0.7", + "buffer": "4.9.2", + "crc-32": "1.2.2", + "fast-xml-parser": "^5.3.4", + "tslib": "^2.5.0" + }, + "peerDependencies": { + "@aws-amplify/core": "^6.1.0" + } + }, + "node_modules/@aws-amplify/storage/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-amplify/storage/node_modules/@smithy/md5-js": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.7.tgz", + "integrity": "sha512-2i2BpXF9pI5D1xekqUsgQ/ohv5+H//G9FlawJrkOJskV18PgJ8LiNbLiskMeYt07yAsSTZR7qtlcAaa/GQLWww==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^2.3.1", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-amplify/storage/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-amplify/storage/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-amplify/storage/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-amplify/storage/node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "license": "MIT", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/@aws-amplify/storage/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/@aws-cdk/asset-awscli-v1": { + "version": "2.2.263", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.263.tgz", + "integrity": "sha512-X9JvcJhYcb7PHs8R7m4zMablO5C9PGb/hYfLnxds9h/rKJu6l7MiXE/SabCibuehxPnuO/vk+sVVJiUWrccarQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@aws-cdk/asset-node-proxy-agent-v6": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.1.0.tgz", + "integrity": "sha512-7bY3J8GCVxLupn/kNmpPc5VJz8grx+4RKfnnJiO1LG+uxkZfANZG3RMHhE+qQxxwkyQ9/MfPtTpf748UhR425A==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@aws-cdk/aws-service-spec": { + "version": "0.1.152", + "resolved": "https://registry.npmjs.org/@aws-cdk/aws-service-spec/-/aws-service-spec-0.1.152.tgz", + "integrity": "sha512-NcplhfPPClcWWR9cm/Ph85c/3Mh9GVRikbHt6ZJY1ocUHqQqruiSw5OYaTfgXl0X9YvHboJgw7NvneYN5NK9Lw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-cdk/service-spec-types": "^0.0.218", + "@cdklabs/tskb": "^0.0.4" + } + }, + "node_modules/@aws-cdk/aws-service-spec/node_modules/@aws-cdk/service-spec-types": { + "version": "0.0.218", + "resolved": "https://registry.npmjs.org/@aws-cdk/service-spec-types/-/service-spec-types-0.0.218.tgz", + "integrity": "sha512-ZsdQEUwDHc38tHD5mMJ2hDXnfP5HYeG+xj3VZESfGwbRZHHSUOIqNE0wRRnmD2MY0m9w6D6j/08M3ylB74Oh0w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@cdklabs/tskb": "^0.0.4" + } + }, + "node_modules/@aws-cdk/cdk-assets-lib": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@aws-cdk/cdk-assets-lib/-/cdk-assets-lib-1.2.3.tgz", + "integrity": "sha512-/GoY/ia/QwS5fah1rbRTeQ2PuOjLhR2+tmBP8EeRO1j8P20AylfE6tz/zJzjJVeS+0+diCDKJYyu6L9SYug+JQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-cdk/cloud-assembly-api": "2.1.1", + "@aws-cdk/cloud-assembly-schema": ">=52.1.0", + "@aws-cdk/cx-api": "^2", + "@aws-sdk/client-ecr": "^3", + "@aws-sdk/client-s3": "^3", + "@aws-sdk/client-secrets-manager": "^3", + "@aws-sdk/client-sts": "^3", + "@aws-sdk/credential-providers": "^3", + "@aws-sdk/lib-storage": "^3", + "@smithy/config-resolver": "^4", + "@smithy/node-config-provider": "^4", + "archiver": "^7.0.1", + "glob": "^11.1.0", + "mime": "^2", + "minimatch": "10.0.1" + }, + "engines": { + "node": ">= 18.0.0" + } + }, + "node_modules/@aws-cdk/cloud-assembly-api": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-api/-/cloud-assembly-api-2.1.1.tgz", + "integrity": "sha512-lIFgatwM/jmeKU629aaPv+VR+wYYIBXHmId+UBxR65JxhZ+TQD6QWDzkpjPRPKlGw7Rz8gNXs4eEYv98voxvAw==", + "bundleDependencies": [ + "jsonschema", + "semver" + ], + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jsonschema": "~1.4.1", + "semver": "^7.7.3" + }, + "engines": { + "node": ">= 18.0.0" + }, + "peerDependencies": { + "@aws-cdk/cloud-assembly-schema": ">=52.1.0" + } + }, + "node_modules/@aws-cdk/cloud-assembly-api/node_modules/jsonschema": { + "version": "1.4.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/@aws-cdk/cloud-assembly-api/node_modules/semver": { + "version": "7.7.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@aws-cdk/cloud-assembly-schema": { + "version": "52.1.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-52.1.0.tgz", + "integrity": "sha512-7jimewW4MpKHSE8EPY8Pg0fw6JiWR0I1rDMf2cHoALuLm4EY7vRbjGpaQ/VpxEgRf32wr9hr8nJDqZqnUvnBsg==", + "bundleDependencies": [ + "jsonschema", + "semver" + ], + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jsonschema": "~1.4.1", + "semver": "^7.7.3" + }, + "engines": { + "node": ">= 18.0.0" + } + }, + "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/jsonschema": { + "version": "1.4.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/semver": { + "version": "7.7.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@aws-cdk/cloudformation-diff": { + "version": "2.185.1", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloudformation-diff/-/cloudformation-diff-2.185.1.tgz", + "integrity": "sha512-gyNZTbe+HnOTkCLJGS9J43NOaQYJ4WxeXzBBf2zH2DOY7aQpM0YY4+SKeB7HxJeSGezF+f1mndvvnj7rwlbQBg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-cdk/aws-service-spec": "^0.1.132", + "@aws-cdk/service-spec-types": "^0.0.198", + "chalk": "^4", + "diff": "^8.0.3", + "fast-deep-equal": "^3.1.3", + "string-width": "^4", + "table": "^6" + }, + "engines": { + "node": ">= 18.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-cloudformation": "^3" + } + }, + "node_modules/@aws-cdk/cloudformation-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@aws-cdk/cx-api": { + "version": "2.238.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cx-api/-/cx-api-2.238.0.tgz", + "integrity": "sha512-3PxKP5aXS8H0rb/Z2G/qIv/JaY/lLH1Fcf2oJH6ZRc6r//eMkmdsY/gg+VsZN0I0qVmrAjAa+Pc8xdpLwozPNA==", + "bundleDependencies": [ + "semver", + "@aws-cdk/cloud-assembly-api" + ], + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-cdk/cloud-assembly-api": "^2.0.0", + "semver": "^7.7.3" + }, + "engines": { + "node": ">= 18.0.0" + }, + "peerDependencies": { + "@aws-cdk/cloud-assembly-schema": ">=45.0.0" + } + }, + "node_modules/@aws-cdk/cx-api/node_modules/@aws-cdk/cloud-assembly-api": { + "version": "2.0.0", + "bundleDependencies": [ + "jsonschema", + "semver" + ], + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "jsonschema": "~1.4.1", + "semver": "^7.7.3" + }, + "engines": { + "node": ">= 18.0.0" + }, + "peerDependencies": { + "@aws-cdk/cloud-assembly-schema": ">=50.1.0" + } + }, + "node_modules/@aws-cdk/cx-api/node_modules/@aws-cdk/cloud-assembly-api/node_modules/jsonschema": { + "version": "1.4.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/@aws-cdk/cx-api/node_modules/@aws-cdk/cloud-assembly-api/node_modules/semver": { + "version": "7.7.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@aws-cdk/cx-api/node_modules/semver": { + "version": "7.7.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@aws-cdk/service-spec-types": { + "version": "0.0.198", + "resolved": "https://registry.npmjs.org/@aws-cdk/service-spec-types/-/service-spec-types-0.0.198.tgz", + "integrity": "sha512-oksZShBGTW/W7HnsnWU3N/YZGkWCbZ/4naFwYYVbXNfpTLauz5ME94SQwyHWG7U7ohjN57JR8DvdGfHVs6PTzg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@cdklabs/tskb": "^0.0.4" + } + }, + "node_modules/@aws-cdk/toolkit-lib": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@aws-cdk/toolkit-lib/-/toolkit-lib-1.6.1.tgz", + "integrity": "sha512-EJlek1OwIsPZ0JJXNnXnQlFqJcbBVrxEPU1mDpgh3EPJmwRX0vAButju1BptRb1q3tHDCShnzfhGFTvDLqA9UQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-cdk/cdk-assets-lib": "^1", + "@aws-cdk/cloud-assembly-schema": ">=48.6.0", + "@aws-cdk/cloudformation-diff": "^2", + "@aws-cdk/cx-api": "^2", + "@aws-sdk/client-appsync": "^3", + "@aws-sdk/client-cloudcontrol": "^3", + "@aws-sdk/client-cloudformation": "^3", + "@aws-sdk/client-cloudwatch-logs": "^3", + "@aws-sdk/client-codebuild": "^3", + "@aws-sdk/client-ec2": "^3", + "@aws-sdk/client-ecr": "^3", + "@aws-sdk/client-ecs": "^3", + "@aws-sdk/client-elastic-load-balancing-v2": "^3", + "@aws-sdk/client-iam": "^3", + "@aws-sdk/client-kms": "^3", + "@aws-sdk/client-lambda": "^3", + "@aws-sdk/client-route-53": "^3", + "@aws-sdk/client-s3": "^3", + "@aws-sdk/client-secrets-manager": "^3", + "@aws-sdk/client-sfn": "^3", + "@aws-sdk/client-ssm": "^3", + "@aws-sdk/client-sts": "^3", + "@aws-sdk/credential-providers": "^3", + "@aws-sdk/ec2-metadata-service": "^3", + "@aws-sdk/lib-storage": "^3", + "@smithy/middleware-endpoint": "^4", + "@smithy/property-provider": "^4", + "@smithy/shared-ini-file-loader": "^4", + "@smithy/util-retry": "^4", + "@smithy/util-waiter": "^4", + "archiver": "^7.0.1", + "cdk-from-cfn": "^0.236.0", + "chalk": "^4", + "chokidar": "^3", + "fs-extra": "^9", + "glob": "^11.0.3", + "minimatch": "10.0.3", + "p-limit": "^3", + "semver": "^7.7.2", + "split2": "^4.2.0", + "uuid": "^11.1.0", + "wrap-ansi": "^7", + "yaml": "^1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "peerDependencies": { + "@aws-cdk/cli-plugin-contract": "^2" + } + }, + "node_modules/@aws-cdk/toolkit-lib/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@aws-cdk/toolkit-lib/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@aws-cdk/toolkit-lib/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@aws-cdk/toolkit-lib/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@aws-cdk/toolkit-lib/node_modules/minimatch": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@aws-cdk/toolkit-lib/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@aws-cdk/toolkit-lib/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-cdk/toolkit-lib/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/crc32c": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", + "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha1-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", + "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-amplify": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-amplify/-/client-amplify-3.993.0.tgz", + "integrity": "sha512-KsjH2+E71qBEDzyEONzgPR1wcIiVR4TxTPzNkz0NUxsJZYG1NKa4ABUkGVQjAeYPB9C5HuzOuvOjgr/vP3vZOQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-amplify/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-amplifyuibuilder": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-amplifyuibuilder/-/client-amplifyuibuilder-3.993.0.tgz", + "integrity": "sha512-8u7kN1cc14PFalPspSRDjxE7cyAGgoQ80phs5Fk53+qC5TqTa90i9TE1vLWOH0M4tAklRuOHGUC2AGdz0TJBog==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-amplifyuibuilder/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-appsync": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-appsync/-/client-appsync-3.993.0.tgz", + "integrity": "sha512-lMYN0wO/pcsWv+pcTUomivlEXWaHVko7ypMyyVavULfh1wxfOESGfo9vmBikokNTLp0xULwQEL5lQgtRhcoCCw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-stream": "^4.5.12", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-appsync/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudcontrol": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudcontrol/-/client-cloudcontrol-3.993.0.tgz", + "integrity": "sha512-fsHcxCzZ8eXG+8Ob9JlStjiXaMXaMfXYAjjNdUT1lHHyJUJlUOPpnPQ1xbvHHSFfoVtTl8oBafSRhvKH4YKhBQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudcontrol/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudformation/-/client-cloudformation-3.993.0.tgz", + "integrity": "sha512-HuSoHNGlAFzKP3xn0/ow0PaUxSM/KJgMH++CunpLl4yi1iIZTfnFwQqBTWIodHHkvLQ8yE5qesg3xrSvURDOrw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudformation/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.993.0.tgz", + "integrity": "sha512-ig+uuFNjAPmtnEwP2hrxR3K3nnAcuzVwAw+++eE0L2lfnMSuwxUqEuQVxnGTmrVB/AqTsbSyJWsKcdGQBAb9jw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@smithy/eventstream-serde-browser": "^4.2.8", + "@smithy/eventstream-serde-config-resolver": "^4.3.8", + "@smithy/eventstream-serde-node": "^4.2.8", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudwatch-logs/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-codebuild": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-codebuild/-/client-codebuild-3.993.0.tgz", + "integrity": "sha512-vjcXAVWv3J5Fr3e4fAuq7VI4RKD1RJN7sVK0ScgizBLje5VRZzqZuw7nktuMcHTs3fFZ20ilDD1uyuxzUxIyPg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-codebuild/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.993.0.tgz", + "integrity": "sha512-7Ne3Yk/bgQPVebAkv7W+RfhiwTRSbfER9BtbhOa2w/+dIr902LrJf6vrZlxiqaJbGj2ALx8M+ZK1YIHVxSwu9A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-ec2": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ec2/-/client-ec2-3.993.0.tgz", + "integrity": "sha512-9A42wzwMytUxLT7HmEOdyl5Ob5vmKQcf8nYrFGhje5xCCKzg+HswXE6+MWFfbDIh7YVsJ62enm0rCwqeI9SnNw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-sdk-ec2": "^3.972.8", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-ec2/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-ecr": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ecr/-/client-ecr-3.993.0.tgz", + "integrity": "sha512-Mq/R1qtwioygfHnvzJl/OW2MslWkch8qrrIvmwv1fXiq1YLbwxUre5LVBXC3O4U/qt2PgZiuMZhubCPHSZnidg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-ecr/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-ecs": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ecs/-/client-ecs-3.993.0.tgz", + "integrity": "sha512-QUwUyV+8Gl0Z5JxjqPKLbAw88NmY9EkAc+hH5Nr3l1lQLIvO5KECTglu3k3LsAfT1lphuenOD0E4xdIInNQruw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-ecs/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-elastic-load-balancing-v2": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-elastic-load-balancing-v2/-/client-elastic-load-balancing-v2-3.993.0.tgz", + "integrity": "sha512-N5gdiGivb9ZtTzGknLfTBtfghypynfLG7bZ6Z/ANfnFbRQWaXvMfdOUkM8D91jFQs5jhFfxHtzRZbm7Jyyvcyg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-elastic-load-balancing-v2/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-firehose": { + "version": "3.982.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-firehose/-/client-firehose-3.982.0.tgz", + "integrity": "sha512-Qur2Siqep+gRReTjlKXcdpyX/MUnzm5OgNNudDPxzpmzdnc3ZKlUwGlbEoS1VA5cFS6N4zg6WfZqlwcXg//TSg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.6", + "@aws-sdk/credential-provider-node": "^3.972.5", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.6", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.982.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.4", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.22.0", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.12", + "@smithy/middleware-retry": "^4.4.29", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.28", + "@smithy/util-defaults-mode-node": "^4.2.31", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-firehose/node_modules/@aws-sdk/util-endpoints": { + "version": "3.982.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.982.0.tgz", + "integrity": "sha512-M27u8FJP7O0Of9hMWX5dipp//8iglmV9jr7R8SR8RveU+Z50/8TqH68Tu6wUWBGMfXjzbVwn1INIAO5lZrlxXQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-firehose/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-iam": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-iam/-/client-iam-3.993.0.tgz", + "integrity": "sha512-SIqi/nDToCOQKSXEHCezZbsFaNt24NK8k+ShsWyWuMswPNsTb6e6nNVUtyqsfmah3AXfM1HwD8dgXhNbDMH80A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-iam/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-kinesis": { + "version": "3.982.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-kinesis/-/client-kinesis-3.982.0.tgz", + "integrity": "sha512-Gh3xyumdz3IRj91HIBR48TohQyA3VSn/blDcGXzl4dwQKXgM0ISdHgyniNo2GQNhORJF3d01MSMx72s5NNQxUA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.6", + "@aws-sdk/credential-provider-node": "^3.972.5", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.6", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.982.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.4", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.22.0", + "@smithy/eventstream-serde-browser": "^4.2.8", + "@smithy/eventstream-serde-config-resolver": "^4.3.8", + "@smithy/eventstream-serde-node": "^4.2.8", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.12", + "@smithy/middleware-retry": "^4.4.29", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.28", + "@smithy/util-defaults-mode-node": "^4.2.31", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-kinesis/node_modules/@aws-sdk/util-endpoints": { + "version": "3.982.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.982.0.tgz", + "integrity": "sha512-M27u8FJP7O0Of9hMWX5dipp//8iglmV9jr7R8SR8RveU+Z50/8TqH68Tu6wUWBGMfXjzbVwn1INIAO5lZrlxXQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-kinesis/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-kms": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-kms/-/client-kms-3.993.0.tgz", + "integrity": "sha512-IFXzXqL/aVUbDrEZkV1V4nweH2h3g4y4iF5jSEQtlf7/GchZxZtBCOomcbyQGDh5x4eo52OzpkpwM/hnKJAHQA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-kms/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-lambda": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.993.0.tgz", + "integrity": "sha512-bXUuyTeNjMEyzVdXnYUJFcRXr6NQJjQte3EqnixUkUDZcqbyL3lXQS3cQSUuzmSaQrUDiTqIvbGrQiKv2wTXpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@smithy/eventstream-serde-browser": "^4.2.8", + "@smithy/eventstream-serde-config-resolver": "^4.3.8", + "@smithy/eventstream-serde-node": "^4.2.8", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-stream": "^4.5.12", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-lambda/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize-events": { + "version": "3.982.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-personalize-events/-/client-personalize-events-3.982.0.tgz", + "integrity": "sha512-JllssIZCPxAgYy4gkIM2e/kXxWT0xQzzZd5y9rRStm0bl5MiLAxzX4q9WhGG7glyB++EuhYskiT1N+DzyM5nTw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.6", + "@aws-sdk/credential-provider-node": "^3.972.5", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.6", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.982.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.4", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.22.0", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.12", + "@smithy/middleware-retry": "^4.4.29", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.28", + "@smithy/util-defaults-mode-node": "^4.2.31", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize-events/node_modules/@aws-sdk/util-endpoints": { + "version": "3.982.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.982.0.tgz", + "integrity": "sha512-M27u8FJP7O0Of9hMWX5dipp//8iglmV9jr7R8SR8RveU+Z50/8TqH68Tu6wUWBGMfXjzbVwn1INIAO5lZrlxXQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize-events/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-rds": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-rds/-/client-rds-3.993.0.tgz", + "integrity": "sha512-+u5f0k5mfEUn6lBnhRtdSpfYBf/EgOZiE7MRF7RjMWqRb0SLUg+op+84ofCW9/Y3Q8a3nht+2hDF2vUWm6ATcg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-sdk-rds": "^3.972.8", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-rds/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-route-53": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-route-53/-/client-route-53-3.993.0.tgz", + "integrity": "sha512-mJe9vTgVujo/GEie16fhVK7OBkPXSizdWxOeDp4ZD2oY9kyDl0IDGMzfcJTdNswXXQolUImBYMZaBxoXN6218w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-sdk-route53": "^3.972.4", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-route-53/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.993.0.tgz", + "integrity": "sha512-0slCxdbo9O3rfzqD7/PsBOrZ6vcwFzPAvGeUu5NZApI5WyjEfMLLi2T9QW8R9N9TQeUfiUQiHkg/NV0LPS61/g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha1-browser": "5.2.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/middleware-bucket-endpoint": "^3.972.3", + "@aws-sdk/middleware-expect-continue": "^3.972.3", + "@aws-sdk/middleware-flexible-checksums": "^3.972.9", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-location-constraint": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-sdk-s3": "^3.972.11", + "@aws-sdk/middleware-ssec": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/signature-v4-multi-region": "3.993.0", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@smithy/eventstream-serde-browser": "^4.2.8", + "@smithy/eventstream-serde-config-resolver": "^4.3.8", + "@smithy/eventstream-serde-node": "^4.2.8", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-blob-browser": "^4.2.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/hash-stream-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/md5-js": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-stream": "^4.5.12", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-secrets-manager": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.993.0.tgz", + "integrity": "sha512-yGiBaEod0iWYjV60jPniYE0jWa6nMKlVwtQuITMc9cdQkhjPMZQBfPRMKh0xTmKnUNBqVQb5PNPaYDxWDmys4w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-secrets-manager/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sfn": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sfn/-/client-sfn-3.993.0.tgz", + "integrity": "sha512-5fnYxsAwxLcFa4Qd7IeLld+qu7JTAy583oBL3xBC30aShD+jkXr948xdWFw/ir0SEQCSQc27I5KArKKW+WqQMQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-sfn/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.993.0.tgz", + "integrity": "sha512-BlFRC/b2Gu9ehBa/14Y+X7WRQAox4byIMFLW7vW9yrm2l542cWOE0Lg2sTcfT1A45N3Ldq/S+O9PoKnhAVxvqg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-ssm/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.993.0.tgz", + "integrity": "sha512-VLUN+wIeNX24fg12SCbzTUBnBENlL014yMKZvRhPkcn4wHR6LKgNrjsG3fZ03Xs0XoKaGtNFi1VVrq666sGBoQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.993.0.tgz", + "integrity": "sha512-/2KtypU3r5dq9cIz1Cr/QI2329xESRFvGqFJwYut2GJNBC7DfSZQsorrbqxX/DLlhctyt812FJwCT5++ghM6MQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.973.11", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.11.tgz", + "integrity": "sha512-wdQ8vrvHkKIV7yNUKXyjPWKCdYEUrZTHJ8Ojd5uJxXp9vqPCkUR1dpi1NtOLcrDgueJH7MUH5lQZxshjFPSbDA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/xml-builder": "^3.972.5", + "@smithy/core": "^3.23.2", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/crc64-nvme": { + "version": "3.972.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/crc64-nvme/-/crc64-nvme-3.972.0.tgz", + "integrity": "sha512-ThlLhTqX68jvoIVv+pryOdb5coP1cX1/MaTbB9xkGDCbWbsqQcLqzPxuSoW1DCnAAIacmXCWpzUNOB9pv+xXQw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity": { + "version": "3.972.3", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.972.3.tgz", + "integrity": "sha512-dW/DqTk90XW7hIngqntAVtJJyrkS51wcLhGz39lOMe0TlSmZl+5R/UGnAZqNbXmWuJHLzxe+MLgagxH41aTsAQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.980.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/property-provider": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/client-cognito-identity": { + "version": "3.980.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.980.0.tgz", + "integrity": "sha512-nLgMW2drTzv+dTo3ORCcotQPcrUaTQ+xoaDTdSaUXdZO7zbbVyk7ysE5GDTnJdZWcUjHOSB8xfNQhOTTNVPhFw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.5", + "@aws-sdk/credential-provider-node": "^3.972.4", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.5", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.980.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.3", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.22.0", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.12", + "@smithy/middleware-retry": "^4.4.29", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.28", + "@smithy/util-defaults-mode-node": "^4.2.31", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/util-endpoints": { + "version": "3.980.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.980.0.tgz", + "integrity": "sha512-AjKBNEc+rjOZQE1HwcD9aCELqg1GmUj1rtICKuY8cgwB73xJ4U/kNyqKKpN2k9emGqlfDY2D8itIp/vDc6OKpw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.972.9", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.9.tgz", + "integrity": "sha512-ZptrOwQynfupubvcngLkbdIq/aXvl/czdpEG8XJ8mN8Nb19BR0jaK0bR+tfuMU36Ez9q4xv7GGkHFqEEP2hUUQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/types": "^3.973.1", + "@smithy/property-provider": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.972.11", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.11.tgz", + "integrity": "sha512-hECWoOoH386bGr89NQc9vA/abkGf5TJrMREt+lhNcnSNmoBS04fK7vc3LrJBSQAUGGVj0Tz3f4dHB3w5veovig==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/types": "^3.973.1", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/util-stream": "^4.5.12", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.972.9", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.9.tgz", + "integrity": "sha512-zr1csEu9n4eDiHMTYJabX1mDGuGLgjgUnNckIivvk43DocJC9/f6DefFrnUPZXE+GHtbW50YuXb+JIxKykU74A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-env": "^3.972.9", + "@aws-sdk/credential-provider-http": "^3.972.11", + "@aws-sdk/credential-provider-login": "^3.972.9", + "@aws-sdk/credential-provider-process": "^3.972.9", + "@aws-sdk/credential-provider-sso": "^3.972.9", + "@aws-sdk/credential-provider-web-identity": "^3.972.9", + "@aws-sdk/nested-clients": "3.993.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/credential-provider-imds": "^4.2.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-login": { + "version": "3.972.9", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.9.tgz", + "integrity": "sha512-m4RIpVgZChv0vWS/HKChg1xLgZPpx8Z+ly9Fv7FwA8SOfuC6I3htcSaBz2Ch4bneRIiBUhwP4ziUo0UZgtJStQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/nested-clients": "3.993.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/property-provider": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.972.10", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.10.tgz", + "integrity": "sha512-70nCESlvnzjo4LjJ8By8MYIiBogkYPSXl3WmMZfH9RZcB/Nt9qVWbFpYj6Fk1vLa4Vk8qagFVeXgxdieMxG1QA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "^3.972.9", + "@aws-sdk/credential-provider-http": "^3.972.11", + "@aws-sdk/credential-provider-ini": "^3.972.9", + "@aws-sdk/credential-provider-process": "^3.972.9", + "@aws-sdk/credential-provider-sso": "^3.972.9", + "@aws-sdk/credential-provider-web-identity": "^3.972.9", + "@aws-sdk/types": "^3.973.1", + "@smithy/credential-provider-imds": "^4.2.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.972.9", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.9.tgz", + "integrity": "sha512-gOWl0Fe2gETj5Bk151+LYKpeGi2lBDLNu+NMNpHRlIrKHdBmVun8/AalwMK8ci4uRfG5a3/+zvZBMpuen1SZ0A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/types": "^3.973.1", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.972.9", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.9.tgz", + "integrity": "sha512-ey7S686foGTArvFhi3ifQXmgptKYvLSGE2250BAQceMSXZddz7sUSNERGJT2S7u5KIe/kgugxrt01hntXVln6w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.993.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/token-providers": "3.993.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.972.9", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.9.tgz", + "integrity": "sha512-8LnfS76nHXoEc9aRRiMMpxZxJeDG0yusdyo3NvPhCgESmBUgpMa4luhGbClW5NoX/qRcGxxM6Z/esqANSNMTow==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/nested-clients": "3.993.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.993.0.tgz", + "integrity": "sha512-1M/nukgPSLqe9krzOKHnE8OylUaKAiokAV3xRLdeExVHcRE7WG5uzCTKWTj1imKvPjDqXq/FWhlbbdWIn7xIwA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.993.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/credential-provider-cognito-identity": "^3.972.3", + "@aws-sdk/credential-provider-env": "^3.972.9", + "@aws-sdk/credential-provider-http": "^3.972.11", + "@aws-sdk/credential-provider-ini": "^3.972.9", + "@aws-sdk/credential-provider-login": "^3.972.9", + "@aws-sdk/credential-provider-node": "^3.972.10", + "@aws-sdk/credential-provider-process": "^3.972.9", + "@aws-sdk/credential-provider-sso": "^3.972.9", + "@aws-sdk/credential-provider-web-identity": "^3.972.9", + "@aws-sdk/nested-clients": "3.993.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@smithy/credential-provider-imds": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/ec2-metadata-service": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/ec2-metadata-service/-/ec2-metadata-service-3.993.0.tgz", + "integrity": "sha512-oIEGXD+xHKa4ryXdoUZMnjuSD0p1sFS7+gUYyXvsRIr5AQYO/OmP+aas/YZ/sRjQMjulQei6+L7E7QkkxsU4Hw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-stream": "^4.5.12", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.993.0.tgz", + "integrity": "sha512-+WzMiQqtqb4Rr45YQJEu13LALaT6ba7zA7pUu4jsCCA0zcDdGBKoc24BKKrv4LG5UBXzwBG3CO0V5/LTc9t82w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/smithy-client": "^4.11.5", + "buffer": "5.6.0", + "events": "3.3.0", + "stream-browserify": "3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-s3": "^3.993.0" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.972.3", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.972.3.tgz", + "integrity": "sha512-fmbgWYirF67YF1GfD7cg5N6HHQ96EyRNx/rDIrTF277/zTWVuPI2qS/ZHgofwR1NZPe/NWvoppflQY01LrbVLg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-arn-parser": "^3.972.2", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-config-provider": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.972.3", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.972.3.tgz", + "integrity": "sha512-4msC33RZsXQpUKR5QR4HnvBSNCPLGHmB55oDiROqqgyOc+TOfVu2xgi5goA7ms6MdZLeEh2905UfWMnMMF4mRg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.972.9", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.972.9.tgz", + "integrity": "sha512-E663+r/UQpvF3aJkD40p5ZANVQFsUcbE39jifMtN7wc0t1M0+2gJJp3i75R49aY9OiSX5lfVyPUNjN/BNRCCZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-crypto/util": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/crc64-nvme": "3.972.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-stream": "^4.5.12", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.972.3", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.3.tgz", + "integrity": "sha512-aknPTb2M+G3s+0qLCx4Li/qGZH8IIYjugHMv15JTYMe6mgZO8VBpYgeGYsNMGCqCZOcWzuf900jFBG5bopfzmA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.972.3", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.972.3.tgz", + "integrity": "sha512-nIg64CVrsXp67vbK0U1/Is8rik3huS3QkRHn2DRDx4NldrEFMgdkZGI/+cZMKD9k4YOS110Dfu21KZLHrFA/1g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.972.3", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.3.tgz", + "integrity": "sha512-Ftg09xNNRqaz9QNzlfdQWfpqMCJbsQdnZVJP55jfhbKi1+FTWxGuvfPoBhDHIovqWKjqbuiew3HuhxbJ0+OjgA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.972.3", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.3.tgz", + "integrity": "sha512-PY57QhzNuXHnwbJgbWYTrqIDHYSeOlhfYERTAuc16LKZpTZRJUjzBFokp9hF7u1fuGeE3D70ERXzdbMBOqQz7Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@aws/lambda-invoke-store": "^0.2.2", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-ec2": { + "version": "3.972.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-ec2/-/middleware-sdk-ec2-3.972.8.tgz", + "integrity": "sha512-wedzfuOKyQTj6iYM2Q3Vqop5ZLFriGzMHXM755gTcF/kZJlJ7OaTlNah70v1SdPBCXzZdT0oGRrXZNOJfe7EMA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-format-url": "^3.972.3", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-rds": { + "version": "3.972.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-rds/-/middleware-sdk-rds-3.972.8.tgz", + "integrity": "sha512-QX90KpLOepMRHp3QyvoG2eJ4ozPSly3PMmetZi7jkMHoQXxB0oyqxC8d/yKjiQ6RqVM3lceZdJxNKQK8vsh9jg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-format-url": "^3.972.3", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-route53": { + "version": "3.972.4", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-route53/-/middleware-sdk-route53-3.972.4.tgz", + "integrity": "sha512-y/MXW3DmvsfE9Xgc6nJ9LLfwDW9P74WWk+Bc3WHz1EiHmIzFBGGuubjFSt7rnTTdUAKXsGRUKHU6PMXq7YN1KA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.972.11", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.11.tgz", + "integrity": "sha512-Qr0T7ZQTRMOuR6ahxEoJR1thPVovfWrKB2a6KBGR+a8/ELrFodrgHwhq50n+5VMaGuLtGhHiISU3XGsZmtmVXQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-arn-parser": "^3.972.2", + "@smithy/core": "^3.23.2", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-stream": "^4.5.12", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.972.3", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.972.3.tgz", + "integrity": "sha512-dU6kDuULN3o3jEHcjm0c4zWJlY1zWVkjG9NPe9qxYLLpcbdj5kRYBS2DdWYD+1B9f910DezRuws7xDEqKkHQIg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.972.11", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.11.tgz", + "integrity": "sha512-R8CvPsPHXwzIHCAza+bllY6PrctEk4lYq/SkHJz9NLoBHCcKQrbOcsfXxO6xmipSbUNIbNIUhH0lBsJGgsRdiw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@smithy/core": "^3.23.2", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.993.0.tgz", + "integrity": "sha512-iOq86f2H67924kQUIPOAvlmMaOAvOLoDOIb66I2YqSUpMYB6ufiuJW3RlREgskxv86S5qKzMnfy/X6CqMjK6XQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/middleware-host-header": "^3.972.3", + "@aws-sdk/middleware-logger": "^3.972.3", + "@aws-sdk/middleware-recursion-detection": "^3.972.3", + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/region-config-resolver": "^3.972.3", + "@aws-sdk/types": "^3.973.1", + "@aws-sdk/util-endpoints": "3.993.0", + "@aws-sdk/util-user-agent-browser": "^3.972.3", + "@aws-sdk/util-user-agent-node": "^3.972.9", + "@smithy/config-resolver": "^4.4.6", + "@smithy/core": "^3.23.2", + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/hash-node": "^4.2.8", + "@smithy/invalid-dependency": "^4.2.8", + "@smithy/middleware-content-length": "^4.2.8", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-retry": "^4.4.33", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/protocol-http": "^5.3.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.32", + "@smithy/util-defaults-mode-node": "^4.2.35", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.972.3", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.3.tgz", + "integrity": "sha512-v4J8qYAWfOMcZ4MJUyatntOicTzEMaU7j3OpkRCGGFSL2NgXQ5VbxauIyORA+pxdKZ0qQG2tCQjQjZDlXEC3Ow==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/config-resolver": "^4.4.6", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.993.0.tgz", + "integrity": "sha512-6l20k27TJdqTozJOm+s20/1XDey3aj+yaeIdbtqXuYNhQiWHajvYThcI1sHx2I1W4NelZTOmYEF+dj1mya01eg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-sdk-s3": "^3.972.11", + "@aws-sdk/types": "^3.973.1", + "@smithy/protocol-http": "^5.3.8", + "@smithy/signature-v4": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.993.0.tgz", + "integrity": "sha512-+35g4c+8r7sB9Sjp1KPdM8qxGn6B/shBjJtEUN4e+Edw9UEQlZKIzioOGu3UAbyE0a/s450LdLZr4wbJChtmww==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.973.11", + "@aws-sdk/nested-clients": "3.993.0", + "@aws-sdk/types": "^3.973.1", + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.973.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.1.tgz", + "integrity": "sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.972.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.972.2.tgz", + "integrity": "sha512-VkykWbqMjlSgBFDyrY3nOSqupMc6ivXuGmvci6Q3NnLq5kC+mKQe2QBZ4nrWRE/jqOxeFP2uYzLtwncYYcvQDg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.993.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.993.0.tgz", + "integrity": "sha512-j6vioBeRZ4eHX4SWGvGPpwGg/xSOcK7f1GL0VM+rdf3ZFTIsUEhCFmD78B+5r2PgztcECSzEfvHQX01k8dPQPw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-endpoints": "^3.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/util-format-url": { + "version": "3.972.3", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.972.3.tgz", + "integrity": "sha512-n7F2ycckcKFXa01vAsT/SJdjFHfKH9s96QHcs5gn8AaaigASICeME8WdUL9uBp8XV/OVwEt8+6gzn6KFUgQa8g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/querystring-builder": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.965.4", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.965.4.tgz", + "integrity": "sha512-H1onv5SkgPBK2P6JR2MjGgbOnttoNzSPIRoeZTNPZYyaplwGg50zS3amXvXqF0/qfXpWEC9rLWU564QTB9bSog==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.972.3", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.3.tgz", + "integrity": "sha512-JurOwkRUcXD/5MTDBcqdyQ9eVedtAsZgw5rBwktsPTN7QtPiS2Ld1jkJepNgYoCufz1Wcut9iup7GJDoIHp8Fw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.1", + "@smithy/types": "^4.12.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.972.9", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.972.9.tgz", + "integrity": "sha512-JNswdsLdQemxqaSIBL2HRhsHPUBBziAgoi5RQv6/9avmE5g5RSdt1hWr3mHJ7OxqRYf+KeB11ExWbiqfrnoeaA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "^3.972.11", + "@aws-sdk/types": "^3.973.1", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.972.5", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.5.tgz", + "integrity": "sha512-mCae5Ys6Qm1LDu0qdGwx2UQ63ONUe+FHw908fJzLDqFKTDBK4LDZUqKWm4OkTCNFq19bftjsBSESIGLD/s3/rA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "fast-xml-parser": "5.3.6", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws/lambda-invoke-store": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.3.tgz", + "integrity": "sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.4.tgz", + "integrity": "sha512-aLpZzf79oGT1bxnsadapfUWErDTcxVKrhvR5F8G27JFgH37+/ATrODMJ0/1D2CgQ/WStDX5B5znnWRv0NzW2JQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "7.0.0-beta.4", + "jsesc": "^2.5.1", + "lodash": "^4.2.0", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure/node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", + "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions/node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports/node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression/node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers/node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/parser/node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.28.6.tgz", + "integrity": "sha512-D+OrJumc9McXNEBI/JmFnc/0uCM2/Y3PEBG3gfV3QIYkKv5pvnpzFrl1kYCrcHJP8nOeFB/SHi1IHz29pNGuew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz", + "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz", + "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz", + "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/template": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.27.1.tgz", + "integrity": "sha512-G5eDKsu50udECw7DL2AcsysXiQyB7Nfg521t2OAJ4tbfTJ27doHLeF/vlI1NZGlLdbb/v+ibvtL1YBQqYOwJGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-flow": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", + "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz", + "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.28.6.tgz", + "integrity": "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-syntax-jsx": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz", + "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template/node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/types": { + "version": "7.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.4.tgz", + "integrity": "sha512-yLvBW5TTAgJwURAUAdZa1vrFTkwXXvk0Kw48LYvgxpyT/IaV8W4OIhxdVztAt5ruDQ/OFUwHpzWqk6TN3EfmWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esutils": "^2.0.2", + "lodash": "^4.2.0", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@cdklabs/tskb": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@cdklabs/tskb/-/tskb-0.0.4.tgz", + "integrity": "sha512-NFx1X0l7p5DyHtLLEyNeh1hPN4UN9hTkZkzFs/Mp+kFk7dpdINGmGVpCfRDjJ2DrcNSNENUmT+w8g73TvmBbTw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@fastify/busboy": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.2.0.tgz", + "integrity": "sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@graphql-codegen/core": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/@graphql-codegen/core/-/core-2.6.8.tgz", + "integrity": "sha512-JKllNIipPrheRgl+/Hm/xuWMw9++xNQ12XJR/OHHgFopOg4zmN3TdlRSyYcv/K90hCFkkIwhlHFUQTfKrm8rxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-codegen/plugin-helpers": "^3.1.1", + "@graphql-tools/schema": "^9.0.0", + "@graphql-tools/utils": "^9.1.1", + "tslib": "~2.4.0" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/core/node_modules/@graphql-tools/utils": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", + "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-codegen/core/node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@graphql-codegen/plugin-helpers": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-3.1.2.tgz", + "integrity": "sha512-emOQiHyIliVOIjKVKdsI5MXj312zmRDwmHpyUTZMjfpvxq/UVAHUJIVdVf+lnjjrI+LXBTgMlTWTgHQfmICxjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-tools/utils": "^9.0.0", + "change-case-all": "1.0.15", + "common-tags": "1.8.2", + "import-from": "4.0.0", + "lodash": "~4.17.0", + "tslib": "~2.4.0" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/plugin-helpers/node_modules/@graphql-tools/utils": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", + "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-codegen/plugin-helpers/node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@graphql-codegen/schema-ast": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/schema-ast/-/schema-ast-4.1.0.tgz", + "integrity": "sha512-kZVn0z+th9SvqxfKYgztA6PM7mhnSZaj4fiuBWvMTqA+QqQ9BBed6Pz41KuD/jr0gJtnlr2A4++/0VlpVbCTmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-codegen/plugin-helpers": "^5.0.3", + "@graphql-tools/utils": "^10.0.0", + "tslib": "~2.6.0" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/schema-ast/node_modules/@graphql-codegen/plugin-helpers": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-5.1.1.tgz", + "integrity": "sha512-28GHODK2HY1NhdyRcPP3sCz0Kqxyfiz7boIZ8qIxFYmpLYnlDgiYok5fhFLVSZihyOpCs4Fa37gVHf/Q4I2FEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-tools/utils": "^10.0.0", + "change-case-all": "1.0.15", + "common-tags": "1.8.2", + "import-from": "4.0.0", + "lodash": "~4.17.0", + "tslib": "~2.6.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/schema-ast/node_modules/@graphql-tools/utils": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.11.0.tgz", + "integrity": "sha512-iBFR9GXIs0gCD+yc3hoNswViL1O5josI33dUqiNStFI/MHLCEPduasceAcazRH77YONKNiviHBV8f7OgcT4o2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "@whatwg-node/promise-helpers": "^1.0.0", + "cross-inspect": "1.0.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-codegen/schema-ast/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@graphql-codegen/typescript": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-4.1.6.tgz", + "integrity": "sha512-vpw3sfwf9A7S+kIUjyFxuvrywGxd4lmwmyYnnDVjVE4kSQ6Td3DpqaPTy8aNQ6O96vFoi/bxbZS2BW49PwSUUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-codegen/plugin-helpers": "^5.1.0", + "@graphql-codegen/schema-ast": "^4.0.2", + "@graphql-codegen/visitor-plugin-common": "5.8.0", + "auto-bind": "~4.0.0", + "tslib": "~2.6.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "graphql": "^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/typescript/node_modules/@ardatan/relay-compiler": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@ardatan/relay-compiler/-/relay-compiler-12.0.3.tgz", + "integrity": "sha512-mBDFOGvAoVlWaWqs3hm1AciGHSQE1rqFc/liZTyYz/Oek9yZdT5H26pH2zAFuEiTiBVPPyMuqf5VjOFPI2DGsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/generator": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/runtime": "^7.26.10", + "chalk": "^4.0.0", + "fb-watchman": "^2.0.0", + "immutable": "~3.7.6", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "relay-runtime": "12.0.0", + "signedsource": "^1.0.0" + }, + "bin": { + "relay-compiler": "bin/relay-compiler" + }, + "peerDependencies": { + "graphql": "*" + } + }, + "node_modules/@graphql-codegen/typescript/node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@graphql-codegen/typescript/node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@graphql-codegen/typescript/node_modules/@graphql-codegen/plugin-helpers": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-5.1.1.tgz", + "integrity": "sha512-28GHODK2HY1NhdyRcPP3sCz0Kqxyfiz7boIZ8qIxFYmpLYnlDgiYok5fhFLVSZihyOpCs4Fa37gVHf/Q4I2FEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-tools/utils": "^10.0.0", + "change-case-all": "1.0.15", + "common-tags": "1.8.2", + "import-from": "4.0.0", + "lodash": "~4.17.0", + "tslib": "~2.6.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/typescript/node_modules/@graphql-codegen/visitor-plugin-common": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-5.8.0.tgz", + "integrity": "sha512-lC1E1Kmuzi3WZUlYlqB4fP6+CvbKH9J+haU1iWmgsBx5/sO2ROeXJG4Dmt8gP03bI2BwjiwV5WxCEMlyeuzLnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-codegen/plugin-helpers": "^5.1.0", + "@graphql-tools/optimize": "^2.0.0", + "@graphql-tools/relay-operation-optimizer": "^7.0.0", + "@graphql-tools/utils": "^10.0.0", + "auto-bind": "~4.0.0", + "change-case-all": "1.0.15", + "dependency-graph": "^0.11.0", + "graphql-tag": "^2.11.0", + "parse-filepath": "^1.0.2", + "tslib": "~2.6.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/typescript/node_modules/@graphql-tools/optimize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/optimize/-/optimize-2.0.0.tgz", + "integrity": "sha512-nhdT+CRGDZ+bk68ic+Jw1OZ99YCDIKYA5AlVAnBHJvMawSx9YQqQAIj4refNc1/LRieGiuWvhbG3jvPVYho0Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-codegen/typescript/node_modules/@graphql-tools/relay-operation-optimizer": { + "version": "7.0.27", + "resolved": "https://registry.npmjs.org/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-7.0.27.tgz", + "integrity": "sha512-rdkL1iDMFaGDiHWd7Bwv7hbhrhnljkJaD0MXeqdwQlZVgVdUDlMot2WuF7CEKVgijpH6eSC6AxXMDeqVgSBS2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ardatan/relay-compiler": "^12.0.3", + "@graphql-tools/utils": "^11.0.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-codegen/typescript/node_modules/@graphql-tools/relay-operation-optimizer/node_modules/@graphql-tools/utils": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-11.0.0.tgz", + "integrity": "sha512-bM1HeZdXA2C3LSIeLOnH/bcqSgbQgKEDrjxODjqi3y58xai2TkNrtYcQSoWzGbt9VMN1dORGjR7Vem8SPnUFQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "@whatwg-node/promise-helpers": "^1.0.0", + "cross-inspect": "1.0.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-codegen/typescript/node_modules/@graphql-tools/utils": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.11.0.tgz", + "integrity": "sha512-iBFR9GXIs0gCD+yc3hoNswViL1O5josI33dUqiNStFI/MHLCEPduasceAcazRH77YONKNiviHBV8f7OgcT4o2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "@whatwg-node/promise-helpers": "^1.0.0", + "cross-inspect": "1.0.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-codegen/typescript/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@graphql-codegen/typescript/node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@graphql-codegen/typescript/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@graphql-codegen/visitor-plugin-common": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-1.22.0.tgz", + "integrity": "sha512-2afJGb6d8iuZl9KizYsexPwraEKO1lAvt5eVHNM5Xew4vwz/AUHeqDR2uOeQgVV+27EzjjzSDd47IEdH0dLC2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-codegen/plugin-helpers": "^1.18.8", + "@graphql-tools/optimize": "^1.0.1", + "@graphql-tools/relay-operation-optimizer": "^6.3.0", + "array.prototype.flatmap": "^1.2.4", + "auto-bind": "~4.0.0", + "change-case-all": "1.0.14", + "dependency-graph": "^0.11.0", + "graphql-tag": "^2.11.0", + "parse-filepath": "^1.0.2", + "tslib": "~2.3.0" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" + } + }, + "node_modules/@graphql-codegen/visitor-plugin-common/node_modules/@graphql-codegen/plugin-helpers": { + "version": "1.18.8", + "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-1.18.8.tgz", + "integrity": "sha512-mb4I9j9lMGqvGggYuZ0CV+Hme08nar68xkpPbAVotg/ZBmlhZIok/HqW2BcMQi7Rj+Il5HQMeQ1wQ1M7sv/TlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-tools/utils": "^7.9.1", + "common-tags": "1.8.0", + "import-from": "4.0.0", + "lodash": "~4.17.0", + "tslib": "~2.3.0" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0" + } + }, + "node_modules/@graphql-codegen/visitor-plugin-common/node_modules/@graphql-tools/utils": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-7.10.0.tgz", + "integrity": "sha512-d334r6bo9mxdSqZW6zWboEnnOOFRrAPVQJ7LkU8/6grglrbcu6WhwCLzHb90E94JI3TD3ricC3YGbUqIi9Xg0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ardatan/aggregate-error": "0.0.6", + "camel-case": "4.1.2", + "tslib": "~2.2.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0" + } + }, + "node_modules/@graphql-codegen/visitor-plugin-common/node_modules/@graphql-tools/utils/node_modules/tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@graphql-codegen/visitor-plugin-common/node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/@graphql-codegen/visitor-plugin-common/node_modules/change-case-all": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/change-case-all/-/change-case-all-1.0.14.tgz", + "integrity": "sha512-CWVm2uT7dmSHdO/z1CXT/n47mWonyypzBbuCy5tN7uMg22BsfkhwT6oHmFCAk+gL1LOOxhdbB9SZz3J1KTY3gA==", + "dev": true, + "license": "MIT", + "dependencies": { + "change-case": "^4.1.2", + "is-lower-case": "^2.0.2", + "is-upper-case": "^2.0.2", + "lower-case": "^2.0.2", + "lower-case-first": "^2.0.2", + "sponge-case": "^1.0.1", + "swap-case": "^2.0.2", + "title-case": "^3.0.3", + "upper-case": "^2.0.2", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/@graphql-codegen/visitor-plugin-common/node_modules/common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@graphql-codegen/visitor-plugin-common/node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@graphql-tools/apollo-engine-loader": { + "version": "8.0.28", + "resolved": "https://registry.npmjs.org/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-8.0.28.tgz", + "integrity": "sha512-MzgDrUuoxp6dZeo54zLBL3cEJKJtM3N/2RqK0rbPxPq5X2z6TUA7EGg8vIFTUkt5xelAsUrm8/4ai41ZDdxOng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-tools/utils": "^11.0.0", + "@whatwg-node/fetch": "^0.10.13", + "sync-fetch": "0.6.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/apollo-engine-loader/node_modules/@graphql-tools/utils": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-11.0.0.tgz", + "integrity": "sha512-bM1HeZdXA2C3LSIeLOnH/bcqSgbQgKEDrjxODjqi3y58xai2TkNrtYcQSoWzGbt9VMN1dORGjR7Vem8SPnUFQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "@whatwg-node/promise-helpers": "^1.0.0", + "cross-inspect": "1.0.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/merge": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.4.2.tgz", + "integrity": "sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", + "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/optimize": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/optimize/-/optimize-1.4.0.tgz", + "integrity": "sha512-dJs/2XvZp+wgHH8T5J2TqptT9/6uVzIYvA6uFACha+ufvdMBedkfR4b4GbT8jAKLRARiqRTxy3dctnwkTM2tdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/relay-operation-optimizer": { + "version": "6.5.18", + "resolved": "https://registry.npmjs.org/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-6.5.18.tgz", + "integrity": "sha512-mc5VPyTeV+LwiM+DNvoDQfPqwQYhPV/cl5jOBjTgSniyaq8/86aODfMkrE2OduhQ5E00hqrkuL2Fdrgk0w1QJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ardatan/relay-compiler": "12.0.0", + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/relay-operation-optimizer/node_modules/@graphql-tools/utils": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", + "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/schema": { + "version": "9.0.19", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", + "integrity": "sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-tools/merge": "^8.4.1", + "@graphql-tools/utils": "^9.2.1", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/schema/node_modules/@graphql-tools/utils": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", + "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/utils": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-6.2.4.tgz", + "integrity": "sha512-ybgZ9EIJE3JMOtTrTd2VcIpTXtDrn2q6eiYkeYMKRVh3K41+LZa6YnR2zKERTXqTWqhobROwLt4BZbw2O3Aeeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ardatan/aggregate-error": "0.0.6", + "camel-case": "4.1.1", + "tslib": "~2.0.1" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0" + } + }, + "node_modules/@graphql-tools/utils/node_modules/tslib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@inquirer/ansi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", + "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.2.tgz", + "integrity": "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/confirm": { + "version": "5.1.21", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.21.tgz", + "integrity": "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "10.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz", + "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/core/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/core/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/editor": { + "version": "4.2.23", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.23.tgz", + "integrity": "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/external-editor": "^1.0.3", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.23.tgz", + "integrity": "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.3.1.tgz", + "integrity": "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.23.tgz", + "integrity": "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.23.tgz", + "integrity": "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.10.1.tgz", + "integrity": "sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^4.3.2", + "@inquirer/confirm": "^5.1.21", + "@inquirer/editor": "^4.2.23", + "@inquirer/expand": "^4.0.23", + "@inquirer/input": "^4.3.1", + "@inquirer/number": "^3.0.23", + "@inquirer/password": "^4.0.23", + "@inquirer/rawlist": "^4.1.11", + "@inquirer/search": "^3.2.2", + "@inquirer/select": "^4.4.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.11.tgz", + "integrity": "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.2.tgz", + "integrity": "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.2.tgz", + "integrity": "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", + "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz", + "integrity": "sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/cliui": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz", + "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/context-async-hooks": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-2.5.1.tgz", + "integrity": "sha512-MHbu8XxCHcBn6RwvCt2Vpn1WnLMNECfNKYB14LI5XypcgH4IE0/DiVifVR9tAkwPMyLXN8dOoPJfya3IryLQVw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/core": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.5.1.tgz", + "integrity": "sha512-Dwlc+3HAZqpgTYq0MUyZABjFkcrKTePwuiFVLjahGD8cx3enqihmpAmdgNFO1R4m/sIe5afjJrA25Prqy4NXlA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/resources": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.5.1.tgz", + "integrity": "sha512-BViBCdE/GuXRlp9k7nS1w6wJvY5fnFX5XvuEtWsTAOQFIO89Eru7lGW3WbfbxtCuZ/GbrJfAziXG0w0dpxL7eQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.5.1", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-base": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.5.1.tgz", + "integrity": "sha512-iZH3Gw8cxQn0gjpOjJMmKLd9GIaNh/E3v3ST67vyzLSxHBs14HsG4dy7jMYyC5WXGdBVEcM7U/XTF5hCQxjDMw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.5.1", + "@opentelemetry/resources": "2.5.1", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.39.0.tgz", + "integrity": "sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", + "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.6", + "@parcel/watcher-darwin-arm64": "2.5.6", + "@parcel/watcher-darwin-x64": "2.5.6", + "@parcel/watcher-freebsd-x64": "2.5.6", + "@parcel/watcher-linux-arm-glibc": "2.5.6", + "@parcel/watcher-linux-arm-musl": "2.5.6", + "@parcel/watcher-linux-arm64-glibc": "2.5.6", + "@parcel/watcher-linux-arm64-musl": "2.5.6", + "@parcel/watcher-linux-x64-glibc": "2.5.6", + "@parcel/watcher-linux-x64-musl": "2.5.6", + "@parcel/watcher-win32-arm64": "2.5.6", + "@parcel/watcher-win32-ia32": "2.5.6", + "@parcel/watcher-win32-x64": "2.5.6" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", + "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", + "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", + "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", + "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", + "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", + "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", + "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", + "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", + "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", + "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", + "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", + "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", + "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.8.tgz", + "integrity": "sha512-peuVfkYHAmS5ybKxWcfraK7WBBP0J+rkfUcbHJJKQ4ir3UAUNQI+Y4Vt/PqSzGqgloJ5O1dk7+WzNL8wcCSXbw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.2.0.tgz", + "integrity": "sha512-WmU0TnhEAJLWvfSeMxBNe5xtbselEO8+4wG0NtZeL8oR21WgH1xiO37El+/Y+H/Ie4SCwBy3MxYWmOYaGgZueA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader-native": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.2.1.tgz", + "integrity": "sha512-lX9Ay+6LisTfpLid2zZtIhSEjHMZoAR5hHCR4H7tBz/Zkfr5ea8RcQ7Tk4mi0P76p4cN+Btz16Ffno7YHpKXnQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-base64": "^4.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader-native/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.6.tgz", + "integrity": "sha512-qJpzYC64kaj3S0fueiu3kXm8xPrR3PcXDPEgnaNMRn0EjNSZFoFjvbUp0YUDsRhN1CB90EnHJtbxWKevnH99UQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-endpoints": "^3.2.8", + "@smithy/util-middleware": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "3.23.2", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.23.2.tgz", + "integrity": "sha512-HaaH4VbGie4t0+9nY3tNBRSxVTr96wzIqexUa6C2qx3MPePAuz7lIxPxYtt1Wc//SPfJLNoZJzfdt0B6ksj2jA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.2.9", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-stream": "^4.5.12", + "@smithy/util-utf8": "^4.2.0", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.8.tgz", + "integrity": "sha512-FNT0xHS1c/CPN8upqbMFP83+ul5YgdisfCfkZ86Jh2NSmnqw/AJ6x5pEogVCTVvSm7j9MopRU89bmDelxuDMYw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.8.tgz", + "integrity": "sha512-jS/O5Q14UsufqoGhov7dHLOPCzkYJl9QDzusI2Psh4wyYx/izhzvX9P4D69aTxcdfVhEPhjK+wYyn/PzLjKbbw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.12.0", + "@smithy/util-hex-encoding": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.8.tgz", + "integrity": "sha512-MTfQT/CRQz5g24ayXdjg53V0mhucZth4PESoA5IhvaWVDTOQLfo8qI9vzqHcPsdd2v6sqfTYqF5L/l+pea5Uyw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.8.tgz", + "integrity": "sha512-ah12+luBiDGzBruhu3efNy1IlbwSEdNiw8fOZksoKoWW1ZHvO/04MQsdnws/9Aj+5b0YXSSN2JXKy/ClIsW8MQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.8.tgz", + "integrity": "sha512-cYpCpp29z6EJHa5T9WL0KAlq3SOKUQkcgSoeRfRVwjGgSFl7Uh32eYGt7IDYCX20skiEdRffyDpvF2efEZPC0A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.8.tgz", + "integrity": "sha512-iJ6YNJd0bntJYnX6s52NC4WFYcZeKrPUr1Kmmr5AwZcwCSzVpS7oavAmxMR7pMq7V+D1G4s9F5NJK0xwOsKAlQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-codec": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.9.tgz", + "integrity": "sha512-I4UhmcTYXBrct03rwzQX1Y/iqQlzVQaPxWjCjula++5EmWq9YGBrx6bbGqluGc1f0XEfhSkiY4jhLgbsJUMKRA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.8", + "@smithy/querystring-builder": "^4.2.8", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-blob-browser": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.9.tgz", + "integrity": "sha512-m80d/iicI7DlBDxyQP6Th7BW/ejDGiF0bgI754+tiwK0lgMkcaIBgvwwVc7OFbY4eUzpGtnig52MhPAEJ7iNYg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/chunked-blob-reader": "^5.2.0", + "@smithy/chunked-blob-reader-native": "^4.2.1", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.8.tgz", + "integrity": "sha512-7ZIlPbmaDGxVoxErDZnuFG18WekhbA/g2/i97wGj+wUBeS6pcUeAym8u4BXh/75RXWhgIJhyC11hBzig6MljwA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-stream-node": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.2.8.tgz", + "integrity": "sha512-v0FLTXgHrTeheYZFGhR+ehX5qUm4IQsjAiL9qehad2cyjMWcN2QG6/4mSwbSgEQzI7jwfoXj7z4fxZUx/Mhj2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.8.tgz", + "integrity": "sha512-N9iozRybwAQ2dn9Fot9kI6/w9vos2oTXLhtK7ovGqwZjlOcxu6XhPlpLpC+INsxktqHinn5gS2DXDjDF2kG5sQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", + "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/md5-js": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.2.8.tgz", + "integrity": "sha512-oGMaLj4tVZzLi3itBa9TCswgMBr7k9b+qKYowQ6x1rTyTuO1IU2YHdHUa+891OsOH+wCsH7aTPRsTJO3RMQmjQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.8.tgz", + "integrity": "sha512-RO0jeoaYAB1qBRhfVyq0pMgBoUK34YEJxVxyjOWYZiOKOq2yMZ4MnVXMZCUDenpozHue207+9P5ilTV1zeda0A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "4.4.16", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.16.tgz", + "integrity": "sha512-L5GICFCSsNhbJ5JSKeWFGFy16Q2OhoBizb3X2DrxaJwXSEujVvjG9Jt386dpQn2t7jINglQl0b4K/Su69BdbMA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.23.2", + "@smithy/middleware-serde": "^4.2.9", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "@smithy/url-parser": "^4.2.8", + "@smithy/util-middleware": "^4.2.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "4.4.33", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.33.tgz", + "integrity": "sha512-jLqZOdJhtIL4lnA9hXnAG6GgnJlo1sD3FqsTxm9wSfjviqgWesY/TMBVnT84yr4O0Vfe0jWoXlfFbzsBVph3WA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/service-error-classification": "^4.2.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-retry": "^4.2.8", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.9.tgz", + "integrity": "sha512-eMNiej0u/snzDvlqRGSN3Vl0ESn3838+nKyVfF2FKNXFbi4SERYT6PR392D39iczngbqqGG0Jl1DlCnp7tBbXQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.8.tgz", + "integrity": "sha512-w6LCfOviTYQjBctOKSwy6A8FIkQy7ICvglrZFl6Bw4FmcQ1Z420fUtIhxaUZZshRe0VCq4kvDiPiXrPZAe8oRA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.8.tgz", + "integrity": "sha512-aFP1ai4lrbVlWjfpAfRSL8KFcnJQYfTl5QxLJXY32vghJrDuFyPZ6LtUL+JEGYiFRG1PfPLHLoxj107ulncLIg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.2.8", + "@smithy/shared-ini-file-loader": "^4.4.3", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.10.tgz", + "integrity": "sha512-u4YeUwOWRZaHbWaebvrs3UhwQwj+2VNmcVCwXcYTvPIuVyM7Ex1ftAj+fdbG/P4AkBwLq/+SKn+ydOI4ZJE9PA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/querystring-builder": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.8.tgz", + "integrity": "sha512-EtCTbyIveCKeOXDSWSdze3k612yCPq1YbXsbqX3UHhkOSW8zKsM9NOJG5gTIya0vbY2DIaieG8pKo1rITHYL0w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.8.tgz", + "integrity": "sha512-QNINVDhxpZ5QnP3aviNHQFlRogQZDfYlCkQT+7tJnErPQbDhysondEjhikuANxgMsZrkGeiAxXy4jguEGsDrWQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.8.tgz", + "integrity": "sha512-Xr83r31+DrE8CP3MqPgMJl+pQlLLmOfiEUnoyAlGzzJIrEsbKsPy1hqH0qySaQm4oWrCBlUqRt+idEgunKB+iw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "@smithy/util-uri-escape": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.8.tgz", + "integrity": "sha512-vUurovluVy50CUlazOiXkPq40KGvGWSdmusa3130MwrR1UNnNgKAlj58wlOe61XSHRpUfIIh6cE0zZ8mzKaDPA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.8.tgz", + "integrity": "sha512-mZ5xddodpJhEt3RkCjbmUQuXUOaPNTkbMGR0bcS8FE0bJDLMZlhmpgrvPNCYglVw5rsYTpSnv19womw9WWXKQQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.3.tgz", + "integrity": "sha512-DfQjxXQnzC5UbCUPeC3Ie8u+rIWZTvuDPAGU/BxzrOGhRvgUanaP68kDZA+jaT3ZI+djOf+4dERGlm9mWfFDrg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.8.tgz", + "integrity": "sha512-6A4vdGj7qKNRF16UIcO8HhHjKW27thsxYci+5r/uVRkdcBEkOEiY8OMPuydLX4QHSrJqGHPJzPRwwVTqbLZJhg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-middleware": "^4.2.8", + "@smithy/util-uri-escape": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "4.11.5", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.11.5.tgz", + "integrity": "sha512-xixwBRqoeP2IUgcAl3U9dvJXc+qJum4lzo3maaJxifsZxKUYLfVfCXvhT4/jD01sRrHg5zjd1cw2Zmjr4/SuKQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.23.2", + "@smithy/middleware-endpoint": "^4.4.16", + "@smithy/middleware-stack": "^4.2.8", + "@smithy/protocol-http": "^5.3.8", + "@smithy/types": "^4.12.0", + "@smithy/util-stream": "^4.5.12", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.12.0.tgz", + "integrity": "sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.8.tgz", + "integrity": "sha512-NQho9U68TGMEU639YkXnVMV3GEFFULmmaWdlu1E9qzyIePOHsoSnagTGSDv1Zi8DCNN6btxOSdgmy5E/hsZwhA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-base64/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-base64/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-base64/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", + "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", + "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", + "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", + "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.3.32", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.32.tgz", + "integrity": "sha512-092sjYfFMQ/iaPH798LY/OJFBcYu0sSK34Oy9vdixhsU36zlZu8OcYjF3TD4e2ARupyK7xaxPXl+T0VIJTEkkg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.2.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "4.2.35", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.35.tgz", + "integrity": "sha512-miz/ggz87M8VuM29y7jJZMYkn7+IErM5p5UgKIf8OtqVs/h2bXr1Bt3uTsREsI/4nK8a0PQERbAPsVPVNIsG7Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^4.4.6", + "@smithy/credential-provider-imds": "^4.2.8", + "@smithy/node-config-provider": "^4.3.8", + "@smithy/property-provider": "^4.2.8", + "@smithy/smithy-client": "^4.11.5", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.8.tgz", + "integrity": "sha512-8JaVTn3pBDkhZgHQ8R0epwWt+BqPSLCjdjXXusK1onwJlRuN69fbvSK66aIKKO7SwVFM6x2J2ox5X8pOaWcUEw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", + "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.8.tgz", + "integrity": "sha512-PMqfeJxLcNPMDgvPbbLl/2Vpin+luxqTGPpW3NAQVLbRrFRzTa4rNAASYeIGjRV9Ytuhzny39SpyU04EQreF+A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.8.tgz", + "integrity": "sha512-CfJqwvoRY0kTGe5AkQokpURNCT1u/MkRzMTASWMPPo2hNSnKtF1D45dQl3DE2LKLr4m+PW9mCeBMJr5mCAVThg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "4.5.12", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.12.tgz", + "integrity": "sha512-D8tgkrmhAX/UNeCZbqbEO3uqyghUnEmmoO9YEvRuwxjlkKKUE7FOgCJnqpTlQPe9MApdWPky58mNQQHbnCzoNg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^5.3.9", + "@smithy/node-http-handler": "^4.4.10", + "@smithy/types": "^4.12.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-stream/node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", + "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-waiter": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.8.tgz", + "integrity": "sha512-n+lahlMWk+aejGuax7DPWtqav8HYnWxQwR+LCG2BgCUmaGcTe9qZCFsmw8TMg9iG75HOwhrJCX9TCJRLH+Yzqg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.2.8", + "@smithy/types": "^4.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/uuid": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.0.tgz", + "integrity": "sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@types/aws-lambda": { + "version": "8.10.160", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.160.tgz", + "integrity": "sha512-uoO4QVQNWFPJMh26pXtmtrRfGshPUSpMZGUyUQY20FhfHEElEBOPKgVmFs1z+kbpyBsRs2JnoOPT7++Z4GA9pA==", + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "license": "MIT" + }, + "node_modules/@typescript/vfs": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.3.6.tgz", + "integrity": "sha512-VSLn7rs46Qhe4gYxbK1/IB4NPLvgKl0I6SgeVyJwW5efYAELvDVqf1gVOG7JaKtW8qlMtBaZP02/4TRN39AkEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1" + } + }, + "node_modules/@whatwg-node/disposablestack": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/disposablestack/-/disposablestack-0.0.6.tgz", + "integrity": "sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@whatwg-node/promise-helpers": "^1.0.0", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@whatwg-node/fetch": { + "version": "0.10.13", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.10.13.tgz", + "integrity": "sha512-b4PhJ+zYj4357zwk4TTuF2nEe0vVtOrwdsrNo5hL+u1ojXNhh1FgJ6pg1jzDlwlT4oBdzfSwaBwMCtFCsIWg8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@whatwg-node/node-fetch": "^0.8.3", + "urlpattern-polyfill": "^10.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@whatwg-node/node-fetch": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.8.5.tgz", + "integrity": "sha512-4xzCl/zphPqlp9tASLVeUhB5+WJHbuWGYpfoC2q1qh5dw0AqZBW7L27V5roxYWijPxj4sspRAAoOH3d2ztaHUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^3.1.1", + "@whatwg-node/disposablestack": "^0.0.6", + "@whatwg-node/promise-helpers": "^1.3.2", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@whatwg-node/promise-helpers": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@whatwg-node/promise-helpers/-/promise-helpers-1.3.2.tgz", + "integrity": "sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/archiver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", + "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "archiver-utils": "^5.0.2", + "async": "^3.2.4", + "buffer-crc32": "^1.0.0", + "readable-stream": "^4.0.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^3.0.0", + "zip-stream": "^6.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/archiver-utils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz", + "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "^10.0.0", + "graceful-fs": "^4.2.0", + "is-stream": "^2.0.1", + "lazystream": "^1.0.0", + "lodash": "^4.17.15", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/archiver-utils/node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/archiver-utils/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/archiver-utils/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/archiver-utils/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/archiver-utils/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/archiver-utils/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/archiver-utils/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/archiver-utils/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/archiver-utils/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/archiver-utils/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/auto-bind": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-4.0.0.tgz", + "integrity": "sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-amplify": { + "version": "6.16.2", + "resolved": "https://registry.npmjs.org/aws-amplify/-/aws-amplify-6.16.2.tgz", + "integrity": "sha512-7CHwfH5QxZ0rzCws/DNy5VLVcIIZWd9iUTtV1Oj6kPzpkFhCJ2I8gTvhFdh61HLhrg2lShcPQ8cecBIQS/ZJ0A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/analytics": "7.0.93", + "@aws-amplify/api": "6.3.24", + "@aws-amplify/auth": "6.19.1", + "@aws-amplify/core": "6.16.1", + "@aws-amplify/datastore": "5.1.5", + "@aws-amplify/notifications": "2.0.93", + "@aws-amplify/storage": "6.13.1", + "tslib": "^2.5.0" + } + }, + "node_modules/aws-cdk-lib": { + "version": "2.238.0", + "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.238.0.tgz", + "integrity": "sha512-lmS7DEGcEjNhnl88Z7SynPA1UHdCOkx2pNSGiiBQG5I2jH8H2nnWnr6cZRWmxV2GyNeBmmd9wHdEcSBpkow53Q==", + "bundleDependencies": [ + "@balena/dockerignore", + "@aws-cdk/cloud-assembly-api", + "case", + "fs-extra", + "ignore", + "jsonschema", + "minimatch", + "punycode", + "semver", + "table", + "yaml", + "mime-types" + ], + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-cdk/asset-awscli-v1": "2.2.263", + "@aws-cdk/asset-node-proxy-agent-v6": "^2.1.0", + "@aws-cdk/cloud-assembly-api": "^2.0.0", + "@aws-cdk/cloud-assembly-schema": "^48.20.0", + "@balena/dockerignore": "^1.0.2", + "case": "1.6.3", + "fs-extra": "^11.3.3", + "ignore": "^5.3.2", + "jsonschema": "^1.5.0", + "mime-types": "^2.1.35", + "minimatch": "^3.1.2", + "punycode": "^2.3.1", + "semver": "^7.7.3", + "table": "^6.9.0", + "yaml": "1.10.2" + }, + "engines": { + "node": ">= 18.0.0" + }, + "peerDependencies": { + "constructs": "^10.0.0" + } + }, + "node_modules/aws-cdk-lib/node_modules/@aws-cdk/cloud-assembly-api": { + "version": "2.0.0", + "bundleDependencies": [ + "jsonschema", + "semver" + ], + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "jsonschema": "~1.4.1", + "semver": "^7.7.3" + }, + "engines": { + "node": ">= 18.0.0" + }, + "peerDependencies": { + "@aws-cdk/cloud-assembly-schema": ">=50.1.0" + } + }, + "node_modules/aws-cdk-lib/node_modules/@aws-cdk/cloud-assembly-api/node_modules/jsonschema": { + "version": "1.4.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/aws-cdk-lib/node_modules/@aws-cdk/cloud-assembly-api/node_modules/semver": { + "version": "7.7.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/aws-cdk-lib/node_modules/@aws-cdk/cloud-assembly-schema": { + "version": "48.20.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-48.20.0.tgz", + "integrity": "sha512-+eeiav9LY4wbF/EFuCt/vfvi/Zoxo8bf94PW5clbMraChEliq83w4TbRVy0jB9jE0v1ooFTtIjSQkowSPkfISg==", + "bundleDependencies": [ + "jsonschema", + "semver" + ], + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jsonschema": "~1.4.1", + "semver": "^7.7.2" + }, + "engines": { + "node": ">= 18.0.0" + } + }, + "node_modules/aws-cdk-lib/node_modules/@aws-cdk/cloud-assembly-schema/node_modules/jsonschema": { + "version": "1.4.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/aws-cdk-lib/node_modules/@aws-cdk/cloud-assembly-schema/node_modules/semver": { + "version": "7.7.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/aws-cdk-lib/node_modules/@balena/dockerignore": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0" + }, + "node_modules/aws-cdk-lib/node_modules/ajv": { + "version": "8.17.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/aws-cdk-lib/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/aws-cdk-lib/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/aws-cdk-lib/node_modules/astral-regex": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/aws-cdk-lib/node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/brace-expansion": { + "version": "1.1.12", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/aws-cdk-lib/node_modules/case": { + "version": "1.6.3", + "dev": true, + "inBundle": true, + "license": "(MIT OR GPL-3.0-or-later)", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/aws-cdk-lib/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/aws-cdk-lib/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/fast-uri": { + "version": "3.1.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "inBundle": true, + "license": "BSD-3-Clause" + }, + "node_modules/aws-cdk-lib/node_modules/fs-extra": { + "version": "11.3.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/aws-cdk-lib/node_modules/graceful-fs": { + "version": "4.2.11", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/aws-cdk-lib/node_modules/ignore": { + "version": "5.3.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/aws-cdk-lib/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/aws-cdk-lib/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/jsonfile": { + "version": "6.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/aws-cdk-lib/node_modules/jsonschema": { + "version": "1.5.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/aws-cdk-lib/node_modules/lodash.truncate": { + "version": "4.4.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/aws-cdk-lib/node_modules/mime-types": { + "version": "2.1.35", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/aws-cdk-lib/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/aws-cdk-lib/node_modules/punycode": { + "version": "2.3.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/aws-cdk-lib/node_modules/require-from-string": { + "version": "2.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/aws-cdk-lib/node_modules/semver": { + "version": "7.7.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/aws-cdk-lib/node_modules/slice-ansi": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/aws-cdk-lib/node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/aws-cdk-lib/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/aws-cdk-lib/node_modules/table": { + "version": "6.9.0", + "dev": true, + "inBundle": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/aws-cdk-lib/node_modules/universalify": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aws-cdk-lib/node_modules/yaml": { + "version": "1.10.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/b4a": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.5.tgz", + "integrity": "sha512-iEsKNwDh1wiWTps1/hdkNdmBgDlDVZP5U57ZVOlt+dNFqpc/lpPouCIxZw+DYBgc4P9NDfIZMPNR4CHNhzwLIA==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } + }, + "node_modules/babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + } + }, + "node_modules/babel-generator/node_modules/jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha512-Mke0DA0QjUWuJlhsE0ZPPhYiJkRap642SmI/4ztCFaUs6V2AiH1sfecc+57NgaryfAA2VR3v6O+CSjC1jZJKOA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-syntax-trailing-function-commas": { + "version": "7.0.0-beta.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", + "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-preset-fbjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz", + "integrity": "sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-syntax-class-properties": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoped-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-member-expression-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-super": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-property-literals": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/babel-runtime/node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, + "hasInstallScript": true, + "license": "MIT" + }, + "node_modules/babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "node_modules/babel-types/node_modules/to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/bare-events": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", + "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz", + "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bowser": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.14.1.tgz", + "integrity": "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "node_modules/buffer-crc32": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", + "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camel-case": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz", + "integrity": "sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.1", + "tslib": "^1.10.0" + } + }, + "node_modules/camel-case/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001770", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001770.tgz", + "integrity": "sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/capital-case": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", + "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/cdk-from-cfn": { + "version": "0.236.0", + "resolved": "https://registry.npmjs.org/cdk-from-cfn/-/cdk-from-cfn-0.236.0.tgz", + "integrity": "sha512-D7yG+9ywyasNZFYjRFan06JfoA328N2TF+m67K51BWEqGJs7AowRS5yLb0tkJU67QONyuBLENx3/hIaPLCJ3PA==", + "dev": true, + "license": "MIT OR Apache-2.0" + }, + "node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/change-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", + "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "capital-case": "^1.0.4", + "constant-case": "^3.0.4", + "dot-case": "^3.0.4", + "header-case": "^2.0.4", + "no-case": "^3.0.4", + "param-case": "^3.0.4", + "pascal-case": "^3.1.2", + "path-case": "^3.0.4", + "sentence-case": "^3.0.4", + "snake-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/change-case-all": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/change-case-all/-/change-case-all-1.0.15.tgz", + "integrity": "sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "change-case": "^4.1.2", + "is-lower-case": "^2.0.2", + "is-upper-case": "^2.0.2", + "lower-case": "^2.0.2", + "lower-case-first": "^2.0.2", + "sponge-case": "^1.0.1", + "swap-case": "^2.0.2", + "title-case": "^3.0.3", + "upper-case": "^2.0.2", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/change-case/node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/chardet": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/compress-commons": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz", + "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "crc32-stream": "^6.0.0", + "is-stream": "^2.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/constant-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", + "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case": "^2.0.2" + } + }, + "node_modules/constructs": { + "version": "10.5.1", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-10.5.1.tgz", + "integrity": "sha512-f/TfFXiS3G/yVIXDjOQn9oTlyu9Wo7Fxyjj7lb8r92iO81jR2uST+9MstxZTmDGx/CgIbxCXkFXgupnLTNxQZg==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/core-js": { + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.48.0.tgz", + "integrity": "sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz", + "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==", + "dev": true, + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/cross-fetch": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/cross-fetch/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/cross-inspect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cross-inspect/-/cross-inspect-1.0.1.tgz", + "integrity": "sha512-Pcw1JTvZLSJH83iiGWt6fRcT+BjZlCDRVwYLbUcHzv/CRpB7r0MlSrGbIyQvVSNyGnbt7G4AXuyCiDR3POvZ1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/csv-parse": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.6.0.tgz", + "integrity": "sha512-l3nz3euub2QMg5ouu5U09Ew9Wf6/wQ8I++ch1loQ0ljmzhmfZYrH9fflS22i/PQEvsPvxCwxgz5q7UB8K1JO4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debounce-promise": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/debounce-promise/-/debounce-promise-3.1.2.tgz", + "integrity": "sha512-rZHcgBkbYavBeD9ej6sP56XfG53d51CD4dnaw989YX/nZ/ZJfgRx/9ePKmTNiUiyQvh4mtrMoS3OAWW+yoYtpg==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha512-BDKtmHlOzwI7iRuEkhzsnPoi5ypEhWAJB5RvHWe1kMr06js3uK5B3734i3ui5Yd+wOJV1cpE4JnivPD283GU/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "repeating": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", + "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/envinfo": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.21.0.tgz", + "integrity": "sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==", + "dev": true, + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/es-abstract": { + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", + "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.3", + "@esbuild/android-arm": "0.27.3", + "@esbuild/android-arm64": "0.27.3", + "@esbuild/android-x64": "0.27.3", + "@esbuild/darwin-arm64": "0.27.3", + "@esbuild/darwin-x64": "0.27.3", + "@esbuild/freebsd-arm64": "0.27.3", + "@esbuild/freebsd-x64": "0.27.3", + "@esbuild/linux-arm": "0.27.3", + "@esbuild/linux-arm64": "0.27.3", + "@esbuild/linux-ia32": "0.27.3", + "@esbuild/linux-loong64": "0.27.3", + "@esbuild/linux-mips64el": "0.27.3", + "@esbuild/linux-ppc64": "0.27.3", + "@esbuild/linux-riscv64": "0.27.3", + "@esbuild/linux-s390x": "0.27.3", + "@esbuild/linux-x64": "0.27.3", + "@esbuild/netbsd-arm64": "0.27.3", + "@esbuild/netbsd-x64": "0.27.3", + "@esbuild/openbsd-arm64": "0.27.3", + "@esbuild/openbsd-x64": "0.27.3", + "@esbuild/openharmony-arm64": "0.27.3", + "@esbuild/sunos-x64": "0.27.3", + "@esbuild/win32-arm64": "0.27.3", + "@esbuild/win32-ia32": "0.27.3", + "@esbuild/win32-x64": "0.27.3" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, + "node_modules/execa": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.1.tgz", + "integrity": "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.6", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.2.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fast-xml-parser": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.6.tgz", + "integrity": "sha512-QNI3sAvSvaOiaMl8FYU4trnEzCwiRr8XMWgAHzlrWpTSj+QaCSvOf1h82OEP1s4hiAXhnbXSyFWCf4ldZzZRVA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^2.1.2" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fbjs": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", + "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-fetch": "^3.1.5", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^1.0.35" + } + }, + "node_modules/fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-property": "^1.0.2" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", + "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stream/node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.13.6", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.6.tgz", + "integrity": "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/getopts": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/getopts/-/getopts-2.3.0.tgz", + "integrity": "sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==", + "dev": true, + "license": "MIT" + }, + "node_modules/glob": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", + "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob/node_modules/balanced-match": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.3.tgz", + "integrity": "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz", + "integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.1.tgz", + "integrity": "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphql": { + "version": "15.10.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.10.1.tgz", + "integrity": "sha512-BL/Xd/T9baO6NFzoMpiMD7YUZ62R6viR5tp/MULVEnbYJXZA//kRNW7J0j1w/wXArgL0sCxhDfK5dczSKn3+cg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/graphql-mapping-template": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/graphql-mapping-template/-/graphql-mapping-template-5.0.2.tgz", + "integrity": "sha512-Wkhrv4eusKv0n+QRcY9EgwUssOCrkBLyaFcdBrjBIup4mck739IsGuljK7/Q9kBUblzq2oe1yIyLdtiiFeXcrA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/graphql-tag": { + "version": "2.12.6", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", + "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/graphql-transformer-common": { + "version": "4.34.0", + "resolved": "https://registry.npmjs.org/graphql-transformer-common/-/graphql-transformer-common-4.34.0.tgz", + "integrity": "sha512-rkR7N1wTZpV1rUHkaMrowp6zT2BNUmK5wvYOFKj1IIrYGX2B57Y/yYIFcu+TPIQqVV/xdre45anRl0fjPUixsg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "graphql": "^15.5.0", + "graphql-mapping-template": "4.20.16", + "md5": "^2.2.1", + "pluralize": "8.0.0" + } + }, + "node_modules/graphql-transformer-common/node_modules/graphql-mapping-template": { + "version": "4.20.16", + "resolved": "https://registry.npmjs.org/graphql-mapping-template/-/graphql-mapping-template-4.20.16.tgz", + "integrity": "sha512-J+shdngmnAxBM4mS4ga2RGusbPRMMO/TfRiNuHNKHxEU8O85us9zC6l7kSQ9hkWQDrKISJfDaesNKO3Jo5GerA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/header-case": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", + "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "capital-case": "^1.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/hjson": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz", + "integrity": "sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q==", + "dev": true, + "license": "MIT", + "bin": { + "hjson": "bin/hjson" + } + }, + "node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/idb": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/idb/-/idb-5.0.6.tgz", + "integrity": "sha512-/PFvOWPzRcEPmlDt5jEvzVZVs0wyd/EvGvkDIcbBpGuMMLQKrTPG0TxvE2UJtgZtCQCmOtM2QD7yQJBVEjKGOw==", + "license": "ISC" + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.6.tgz", + "integrity": "sha512-G95ivKpy+EvVAnAab4fVa4YGYn24J1SpEktnJX7JJ45Bd7xqME/SCplFzYFmTbrkwZbQ4xJK1xMTUYBkN6pWsQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/immutable": { + "version": "3.7.6", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz", + "integrity": "sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/import-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", + "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inflected": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/inflected/-/inflected-2.1.0.tgz", + "integrity": "sha512-hAEKNxvHf2Iq3H60oMBHkB4wl5jn3TPF3+fXek/sRwAB5gP9xWs4r7aweSF95f99HFoz69pnZTcu8f0SIHV18w==", + "dev": true, + "license": "MIT" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-4.1.0.tgz", + "integrity": "sha512-Ab9bQDQ11lWootZUI5qxgN2ZXwxNI5hTwnsvOc1wyxQ7zQ8OkEDw79mI0+9jI3x432NfwbVRru+3noJfXF6lSQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "dependencies": { + "ci-info": "^4.1.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-2.0.2.tgz", + "integrity": "sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-upper-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-2.0.2.tgz", + "integrity": "sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz", + "integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^9.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/knex": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/knex/-/knex-2.4.2.tgz", + "integrity": "sha512-tMI1M7a+xwHhPxjbl/H9K1kHX+VncEYcvCx5K00M16bWvpYPKAZd6QrCu68PtHAdIZNQPWZn0GVhqVBEthGWCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "2.0.19", + "commander": "^9.1.0", + "debug": "4.3.4", + "escalade": "^3.1.1", + "esm": "^3.2.25", + "get-package-type": "^0.1.0", + "getopts": "2.3.0", + "interpret": "^2.2.0", + "lodash": "^4.17.21", + "pg-connection-string": "2.5.0", + "rechoir": "^0.8.0", + "resolve-from": "^5.0.0", + "tarn": "^3.0.2", + "tildify": "2.0.0" + }, + "bin": { + "knex": "bin/cli.js" + }, + "engines": { + "node": ">=12" + }, + "peerDependenciesMeta": { + "better-sqlite3": { + "optional": true + }, + "mysql": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-native": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "tedious": { + "optional": true + } + } + }, + "node_modules/knex/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/knex/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz", + "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", + "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "is-unicode-supported": "^1.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lower-case-first": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-2.0.2.tgz", + "integrity": "sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lru.min": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.4.tgz", + "integrity": "sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==", + "dev": true, + "license": "MIT", + "engines": { + "bun": ">=1.0.0", + "deno": ">=1.30.0", + "node": ">=8.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wellwelwel" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/mysql2": { + "version": "3.9.9", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.9.9.tgz", + "integrity": "sha512-Qtb2RUxwWMFkWXqF7Rd/7ySkupbQnNY7O0zQuQYgPcuJZ06M36JG3HIDEh/pEeq7LImcvA6O3lOVQ9XQK+HEZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "denque": "^2.1.0", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.3", + "long": "^5.2.1", + "lru-cache": "^8.0.0", + "named-placeholders": "^1.1.3", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/mysql2/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mysql2/node_modules/lru-cache": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", + "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16.14" + } + }, + "node_modules/named-placeholders": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.6.tgz", + "integrity": "sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "lru.min": "^1.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/nanoclone": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz", + "integrity": "sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==", + "dev": true, + "license": "MIT" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "dev": true, + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", + "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "cli-cursor": "^5.0.0", + "cli-spinners": "^2.9.2", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.0.0", + "log-symbols": "^6.0.0", + "stdin-discarder": "^0.2.2", + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/ora/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/parse-gitignore": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-gitignore/-/parse-gitignore-2.0.0.tgz", + "integrity": "sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", + "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-root-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-scurry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pg": { + "version": "8.11.6", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.11.6.tgz", + "integrity": "sha512-6CyL4F0j3vPmakU9rWdeRY8qF5Cjc3OE86y6YpgDI6YtKHhNyCjGEIE8U5ZRfBjKTZikwolKIFWh3I22MeRnoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pg-connection-string": "^2.6.4", + "pg-pool": "^3.6.2", + "pg-protocol": "^1.6.1", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.1.1" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.3.0.tgz", + "integrity": "sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", + "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.11.0.tgz", + "integrity": "sha512-MJYfvHwtGp870aeusDh+hg9apvOe2zmpZJpyt+BMtzUWlVqbhFmMK6bOBXLBUPd7iRtIF9fZplDc7KrPN3PN7w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.11.0.tgz", + "integrity": "sha512-pfsxk2M9M3BuGgDOfuy37VNRRX3jmKgMjcvAcWqNDpZSf4cUmv8HSOl5ViRQFsfARFn0KuUQTgLxVMbNq5NW3g==", + "dev": true, + "license": "MIT" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pg/node_modules/pg-connection-string": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.11.0.tgz", + "integrity": "sha512-kecgoJwhOpxYU21rZjULrmrBJ698U2RxXofKVzOn5UDj61BPj/qMb7diYUR1nLScCDbrztQFl1TaQZT0t1EtzQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "split2": "^4.1.0" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz", + "integrity": "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prettier": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-ms": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", + "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/property-expr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz", + "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "dev": true, + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/readable-stream/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/relay-runtime": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/relay-runtime/-/relay-runtime-12.0.0.tgz", + "integrity": "sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.0.0", + "fbjs": "^3.0.0", + "invariant": "^2.2.4" + } + }, + "node_modules/repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-finite": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true, + "license": "ISC" + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sentence-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", + "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==", + "dev": true + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true, + "license": "ISC" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true, + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/signedsource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/signedsource/-/signedsource-1.0.0.tgz", + "integrity": "sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/sponge-case": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sponge-case/-/sponge-case-1.0.1.tgz", + "integrity": "sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stdin-discarder": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", + "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "node_modules/stream-browserify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/streamx": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", + "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strnum": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz", + "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/swap-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-2.0.2.tgz", + "integrity": "sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/sync-fetch": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/sync-fetch/-/sync-fetch-0.6.0.tgz", + "integrity": "sha512-IELLEvzHuCfc1uTsshPK58ViSdNqXxlml1U+fmwJIKLYKOr/rAtBrorE2RYm5IHaMpDNlmC0fr1LAvdXvyheEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "node-fetch": "^3.3.2", + "timeout-signal": "^2.0.0", + "whatwg-mimetype": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/tarn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz", + "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/text-decoder": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.7.tgz", + "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/tildify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz", + "integrity": "sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/timeout-signal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/timeout-signal/-/timeout-signal-2.0.0.tgz", + "integrity": "sha512-YBGpG4bWsHoPvofT6y/5iqulfXIiIErl5B0LdtHT1mGXDFTAhhRrbUpTvBgYbovr+3cKblya2WAOcpoy90XguA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/title-case": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-3.0.3.tgz", + "integrity": "sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-dedent": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-1.2.0.tgz", + "integrity": "sha512-6zSJp23uQI+Txyz5LlXMXAHpUhY4Hi0oluXny0OgIR7g/Cromq4vDBnhtbBdyIV34g0pgwxUvnvg+jLJe4c1NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.10" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ua-parser-js": { + "version": "1.0.41", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.41.tgz", + "integrity": "sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "license": "MIT", + "bin": { + "ua-parser-js": "script/cli.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ulid": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ulid/-/ulid-2.4.0.tgz", + "integrity": "sha512-fIRiVTJNcSRmXKPZtGzFQv9WRrZ3M9eoptl/teFJvjOzmpU+/K/JH6HZ8deBfb5vMEpicJcLn7JmvdknlMq7Zg==", + "license": "MIT", + "bin": { + "ulid": "bin/cli.js" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/upper-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", + "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/upper-case-first": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", + "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/urlpattern-polyfill": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz", + "integrity": "sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==", + "dev": true, + "license": "MIT" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, + "node_modules/value-or-promise": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", + "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/which-typed-array": { + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yup": { + "version": "0.32.11", + "resolved": "https://registry.npmjs.org/yup/-/yup-0.32.11.tgz", + "integrity": "sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.15.4", + "@types/lodash": "^4.14.175", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "nanoclone": "^0.2.1", + "property-expr": "^2.0.4", + "toposort": "^2.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/zip-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", + "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "archiver-utils": "^5.0.0", + "compress-commons": "^6.0.2", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/zod": { + "version": "3.25.17", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.17.tgz", + "integrity": "sha512-8hQzQ/kMOIFbwOgPrm9Sf9rtFHpFUMy4HvN0yEB0spw14aYi0uT5xG5CE2DB9cd51GWNsz+DNO7se1kztHMKnw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/aws-kinesis/infra/package.json b/aws-kinesis/infra/package.json new file mode 100644 index 0000000000..e44b041170 --- /dev/null +++ b/aws-kinesis/infra/package.json @@ -0,0 +1,20 @@ +{ + "name": "kinesis-e2e-test-infra", + "version": "1.0.0", + "type": "module", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "devDependencies": { + "@aws-amplify/backend": "^1.21.0", + "@aws-amplify/backend-cli": "^1.8.2", + "aws-cdk-lib": "^2.234.1", + "constructs": "^10.5.1", + "esbuild": "^0.27.3", + "tsx": "^4.21.0", + "typescript": "^5.9.3" + }, + "dependencies": { + "aws-amplify": "^6.16.2" + } +} diff --git a/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt b/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt index e6e525d956..2705dd1462 100644 --- a/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt +++ b/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt @@ -14,7 +14,6 @@ */ package com.amplifyframework.kinesis -import android.content.Context import androidx.test.core.app.ApplicationProvider import com.amplifyframework.auth.CognitoCredentialsProvider import com.amplifyframework.auth.cognito.AWSCognitoAuthPlugin @@ -22,6 +21,10 @@ import com.amplifyframework.core.Amplify import com.amplifyframework.foundation.credentials.AwsCredentials import com.amplifyframework.foundation.credentials.AwsCredentialsProvider import com.amplifyframework.foundation.credentials.toAwsCredentialsProvider +import com.amplifyframework.foundation.result.exceptionOrNull +import com.amplifyframework.foundation.result.getOrThrow +import com.amplifyframework.foundation.result.isFailure +import com.amplifyframework.foundation.result.isSuccess import com.amplifyframework.recordcache.FlushStrategy import com.amplifyframework.testutils.Sleep import com.amplifyframework.testutils.sync.SynchronousAuth diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt index f37e045612..a5a3b63b90 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt @@ -7,6 +7,10 @@ import com.amplifyframework.foundation.credentials.AwsCredentialsProvider import com.amplifyframework.foundation.credentials.toSmithyProvider import com.amplifyframework.foundation.logging.AmplifyLogging import com.amplifyframework.foundation.logging.Logger +import com.amplifyframework.foundation.result.Result +import com.amplifyframework.foundation.result.exceptionOrNull +import com.amplifyframework.foundation.result.getOrThrow +import com.amplifyframework.foundation.result.isSuccess import com.amplifyframework.recordcache.AutoFlushScheduler import com.amplifyframework.recordcache.ClearCacheResult import com.amplifyframework.recordcache.FlushResult @@ -108,7 +112,7 @@ class AmplifyKinesisClient( suspend fun record(data: ByteArray, partitionKey: String, streamName: String): RecordResult { if (!isEnabled) { logger.debug { "Record collection is disabled, dropping record" } - return Result.success(RecordData()) + return Result.Success(RecordData()) } logger.verbose { "Recording to stream: $streamName" } return logOp( @@ -183,23 +187,21 @@ class AmplifyKinesisClient( scheduler.disable() } - /** Maps any failure in the [Result] to a [AmplifyKinesisException] via [AmplifyKinesisException.from]. */ - private fun Result.wrapError(): Result { - if (isSuccess) return this - val error = exceptionOrNull() ?: return this - return Result.failure(AmplifyKinesisException.from(error)) + private fun Result.wrapError(): Result = when (this) { + is Result.Success -> this + is Result.Failure -> Result.Failure(AmplifyKinesisException.from(error)) } private suspend inline fun logOp( - operation: suspend () -> Result, + operation: suspend () -> Result, logSuccess: (T, Long) -> Unit, logFailure: (Throwable?, Long) -> Unit - ): Result { - val result: Result + ): Result { + val result: Result val timeMs = measureTimeMillis { result = operation() } - if (result.isSuccess) { + if (result.isSuccess()) { logSuccess(result.getOrThrow(), timeMs) } else { logFailure(result.exceptionOrNull(), timeMs) diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisRecordSender.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisRecordSender.kt index 7d28bdb389..316b8332bd 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisRecordSender.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisRecordSender.kt @@ -4,6 +4,9 @@ import androidx.annotation.VisibleForTesting import aws.sdk.kotlin.services.kinesis.KinesisClient import aws.sdk.kotlin.services.kinesis.model.PutRecordsRequest import aws.sdk.kotlin.services.kinesis.model.PutRecordsRequestEntry +import com.amplifyframework.foundation.result.Result +import com.amplifyframework.foundation.result.amplifyRunCatching +import com.amplifyframework.foundation.result.mapFailure import com.amplifyframework.recordcache.PutRecordsResponse import com.amplifyframework.recordcache.Record import com.amplifyframework.recordcache.RecordSender @@ -15,12 +18,12 @@ internal class KinesisRecordSender( private val maxRetries: Int ) : RecordSender { - override suspend fun putRecords(streamName: String, records: List): Result = - runCatching { + override suspend fun putRecords(streamName: String, records: List): Result = + amplifyRunCatching { val request = createRequest(streamName, records) val sdkResponse = kinesisClient.putRecords(request) splitResponse(sdkResponse, records) - }.recoverCatching { throw AmplifyKinesisException.from(it) } + } mapFailure { AmplifyKinesisException.from(it) } @VisibleForTesting internal fun createRequest(streamName: String, records: List) = PutRecordsRequest { diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/AutoFlushScheduler.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/AutoFlushScheduler.kt index e7095b56f9..4126621b45 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/AutoFlushScheduler.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/AutoFlushScheduler.kt @@ -2,6 +2,9 @@ package com.amplifyframework.recordcache import com.amplifyframework.foundation.logging.AmplifyLogging import com.amplifyframework.foundation.logging.Logger +import com.amplifyframework.foundation.result.exceptionOrNull +import com.amplifyframework.foundation.result.getOrThrow +import com.amplifyframework.foundation.result.isSuccess import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineName import kotlinx.coroutines.CoroutineScope @@ -36,7 +39,7 @@ internal class AutoFlushScheduler( delay(interval.interval) try { val result = client.flush() - if (result.isSuccess) { + if (result.isSuccess()) { val data = result.getOrThrow() logger.debug { "Auto-flush completed: ${data.recordsFlushed} records flushed" } } else { diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordClient.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordClient.kt index 5068fdf799..e6f5a9abd6 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordClient.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordClient.kt @@ -2,6 +2,9 @@ package com.amplifyframework.recordcache import com.amplifyframework.foundation.logging.AmplifyLogging import com.amplifyframework.foundation.logging.Logger +import com.amplifyframework.foundation.result.Result +import com.amplifyframework.foundation.result.getOrThrow +import com.amplifyframework.foundation.result.mapSuccess import java.util.concurrent.atomic.AtomicBoolean internal class RecordClient( @@ -11,51 +14,52 @@ internal class RecordClient( private val logger: Logger = AmplifyLogging.logger() private val isFlushing = AtomicBoolean(false) - suspend fun record(record: RecordInput): RecordResult = storage.addRecord(record).mapCatching { RecordData() } + suspend fun record(record: RecordInput): Result = + storage.addRecord(record) mapSuccess { RecordData() } - suspend fun flush(): FlushResult { + suspend fun flush(): Result { // Guard against concurrent flushes to return early if (!isFlushing.compareAndSet(false, true)) { logger.debug { "Flush already in progress, skipping" } - return Result.success(FlushData(recordsFlushed = 0, flushInProgress = true)) + return Result.Success(FlushData(recordsFlushed = 0, flushInProgress = true)) } return try { - runCatching { - val recordsByStream = storage.getRecordsByStream().getOrThrow() - logger.debug { "Retrieved ${recordsByStream.size} stream(s) with records to flush" } + val recordsByStream = storage.getRecordsByStream().getOrThrow() + logger.debug { "Retrieved ${recordsByStream.size} stream(s) with records to flush" } - val totalFlushed = recordsByStream - .map { records -> - val streamName = records.first().streamName - val recordCount = records.size - logger.verbose { "Flushing $recordCount records to stream: $streamName" } + val totalFlushed = recordsByStream + .map { records -> + val streamName = records.first().streamName + val recordCount = records.size + logger.verbose { "Flushing $recordCount records to stream: $streamName" } - val result = sender.putRecords(streamName, records).getOrThrow() + val result = sender.putRecords(streamName, records).getOrThrow() - val deleteSuccessful = storage.deleteRecords(result.successfulIds) - val deleteFailed = storage.deleteRecords(result.failedIds) - val incrementRetry = storage.incrementRetryCount(result.retryableIds) + val deleteSuccessful = storage.deleteRecords(result.successfulIds) + val deleteFailed = storage.deleteRecords(result.failedIds) + val incrementRetry = storage.incrementRetryCount(result.retryableIds) - // Ensure all updates are triggered before checking for exceptions - deleteSuccessful.getOrThrow() - deleteFailed.getOrThrow() - incrementRetry.getOrThrow() + // Ensure all updates are triggered before checking for exceptions + deleteSuccessful.getOrThrow() + deleteFailed.getOrThrow() + incrementRetry.getOrThrow() - logger.verbose { - "Stream $streamName: ${result.successfulIds.size} succeeded, " + - "${result.retryableIds.size} retryable, ${result.failedIds.size} failed" - } - - result.successfulIds + logger.verbose { + "Stream $streamName: ${result.successfulIds.size} succeeded, " + + "${result.retryableIds.size} retryable, ${result.failedIds.size} failed" } - .map { it.size }.sum() - FlushData(totalFlushed) - } + result.successfulIds + } + .map { it.size }.sum() + + Result.Success(FlushData(totalFlushed)) + } catch (e: Throwable) { + Result.Failure(e) } finally { isFlushing.set(false) } } - suspend fun clearCache(): ClearCacheResult = storage.clearRecords() + suspend fun clearCache(): Result = storage.clearRecords() } diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordSender.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordSender.kt index fcaab50ff6..0fffa1e8a1 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordSender.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordSender.kt @@ -1,5 +1,7 @@ package com.amplifyframework.recordcache +import com.amplifyframework.foundation.result.Result + internal data class PutRecordsResponse( val successfulIds: List, val retryableIds: List, @@ -7,5 +9,5 @@ internal data class PutRecordsResponse( ) internal interface RecordSender { - suspend fun putRecords(streamName: String, records: List): Result + suspend fun putRecords(streamName: String, records: List): Result } diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordStorage.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordStorage.kt index 2d534287f0..208a773f77 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordStorage.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordStorage.kt @@ -1,14 +1,16 @@ package com.amplifyframework.recordcache +import com.amplifyframework.foundation.result.Result + internal abstract class RecordStorage( val maxRecords: Int, val maxBytes: Long, val identifier: String ) { - abstract suspend fun addRecord(record: RecordInput): Result - abstract suspend fun getRecordsByStream(): Result>> - abstract suspend fun deleteRecords(ids: List): Result - abstract suspend fun incrementRetryCount(ids: List): Result - abstract suspend fun getCurrentCacheSize(): Result - abstract suspend fun clearRecords(): Result + abstract suspend fun addRecord(record: RecordInput): Result + abstract suspend fun getRecordsByStream(): Result>, RecordCacheException> + abstract suspend fun deleteRecords(ids: List): Result + abstract suspend fun incrementRetryCount(ids: List): Result + abstract suspend fun getCurrentCacheSize(): Result + abstract suspend fun clearRecords(): Result } diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt index 8347240536..26d6fd9544 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt @@ -7,6 +7,10 @@ import androidx.sqlite.driver.bundled.BundledSQLiteDriver import androidx.sqlite.execSQL import com.amplifyframework.foundation.logging.AmplifyLogging import com.amplifyframework.foundation.logging.Logger +import com.amplifyframework.foundation.result.Result +import com.amplifyframework.foundation.result.amplifyRunCatching +import com.amplifyframework.foundation.result.exceptionOrNull +import com.amplifyframework.foundation.result.isSuccess import java.io.File import java.util.concurrent.atomic.AtomicInteger import kotlinx.coroutines.CoroutineDispatcher @@ -65,7 +69,7 @@ internal class SQLiteRecordStorage internal constructor( /** * Helper to wrap DB queries with locking and dispatch */ - private suspend fun wrapDispatchAndCatching(block: () -> T) = Result.runCatching { + private suspend fun wrapDispatchAndCatching(block: () -> T): Result = amplifyRunCatching { withContext(dispatcher) { dbMutex.withLock { block() @@ -76,7 +80,7 @@ internal class SQLiteRecordStorage internal constructor( /** * Helper to wrap DB queries in a transaction and suspend */ - private suspend fun wrapDispatchAndTransactionAndCatching(block: () -> T) = wrapDispatchAndCatching { + private suspend fun wrapDispatchAndTransactionAndCatching(block: () -> T): Result = wrapDispatchAndCatching { connection.execSQL("BEGIN IMMEDIATE TRANSACTION") try { val result = block() @@ -87,8 +91,8 @@ internal class SQLiteRecordStorage internal constructor( throw e } } - - override suspend fun addRecord(record: RecordInput): Result = wrapDispatchAndCatching { + + override suspend fun addRecord(record: RecordInput): Result = wrapDispatchAndCatching { // Check cache size limit before adding if (cachedSize.get() + record.dataSize > maxBytes) { throw RecordCacheLimitExceededException( @@ -107,13 +111,13 @@ internal class SQLiteRecordStorage internal constructor( stmt.step() } cachedSize.addAndGet(record.dataSize) - - return@wrapDispatchAndCatching + Unit }.recoverAsRecordCacheException("Failed to add record to cache") - override suspend fun getRecordsByStream(): Result>> = wrapDispatchAndTransactionAndCatching { - connection.prepare( - """ + override suspend fun getRecordsByStream(): Result>, RecordCacheException> = + wrapDispatchAndTransactionAndCatching { + connection.prepare( + """ SELECT id, stream_name, partition_key, data, data_size, retry_count, created_at FROM ( SELECT *, @@ -124,33 +128,33 @@ internal class SQLiteRecordStorage internal constructor( WHERE rn <= ? AND running_size <= ? ORDER BY stream_name, id """ - ).use { stmt -> - stmt.bindInt(1, maxRecords) - stmt.bindLong(2, maxBytes) - - val recordsByStream = mutableMapOf>() - - while (stmt.step()) { - val streamName = stmt.getText(1) - - recordsByStream.getOrPut(streamName) { mutableListOf() }.add( - Record( - id = stmt.getLong(0), - streamName = streamName, - partitionKey = stmt.getText(2), - data = stmt.getBlob(3), - dataSize = stmt.getInt(4), - retryCount = stmt.getInt(5), - createdAt = stmt.getLong(6) + ).use { stmt -> + stmt.bindInt(1, maxRecords) + stmt.bindLong(2, maxBytes) + + val recordsByStream = mutableMapOf>() + + while (stmt.step()) { + val streamName = stmt.getText(1) + + recordsByStream.getOrPut(streamName) { mutableListOf() }.add( + Record( + id = stmt.getLong(0), + streamName = streamName, + partitionKey = stmt.getText(2), + data = stmt.getBlob(3), + dataSize = stmt.getInt(4), + retryCount = stmt.getInt(5), + createdAt = stmt.getLong(6) + ) ) - ) - } + } - recordsByStream.values.toList() - } - }.recoverAsRecordCacheException("Could not retrieve records from storage") + recordsByStream.values.toList() + } + }.recoverAsRecordCacheException("Could not retrieve records from storage") - override suspend fun deleteRecords(ids: List): Result = wrapDispatchAndCatching { + override suspend fun deleteRecords(ids: List): Result = wrapDispatchAndCatching { if (ids.isNotEmpty()) { val placeholders = ids.joinToString(",") { "?" } @@ -164,20 +168,20 @@ internal class SQLiteRecordStorage internal constructor( } }.recoverAsRecordCacheException("Failed to delete records from cache") - override suspend fun incrementRetryCount(ids: List): Result = wrapDispatchAndCatching { - if (ids.isNotEmpty()) { - val placeholders = ids.joinToString(",") { "?" } - connection.prepare( - "UPDATE records SET retry_count = retry_count + 1 WHERE id IN ($placeholders)" - ).use { stmt -> - ids.forEachIndexed { index, id -> - stmt.bindLong(index + 1, id) + override suspend fun incrementRetryCount(ids: List): Result = + wrapDispatchAndCatching { + if (ids.isNotEmpty()) { + val placeholders = ids.joinToString(",") { "?" } + connection.prepare( + "UPDATE records SET retry_count = retry_count + 1 WHERE id IN ($placeholders)" + ).use { stmt -> + ids.forEachIndexed { index, id -> + stmt.bindLong(index + 1, id) + } + stmt.step() } - stmt.step() } - return@wrapDispatchAndCatching - } - }.recoverAsRecordCacheException("Failed to increment retry count") + }.recoverAsRecordCacheException("Failed to increment retry count") /** * Resets the cached size by recalculating from the database. @@ -192,31 +196,33 @@ internal class SQLiteRecordStorage internal constructor( ) } - override suspend fun getCurrentCacheSize(): Result = Result.success(cachedSize.toInt()) - - override suspend fun clearRecords(): Result = wrapDispatchAndTransactionAndCatching { - val count = connection.prepare("SELECT COUNT(*) FROM records").use { stmt -> - if (stmt.step()) stmt.getInt(0) else 0 - } + override suspend fun getCurrentCacheSize(): Result = Result.Success(cachedSize.toInt()) - connection.execSQL("DELETE FROM records") - cachedSize.set(0) - return@wrapDispatchAndTransactionAndCatching ClearCacheData(count) - }.recoverAsRecordCacheException("Failed to clear cache") -} + override suspend fun clearRecords(): Result = + wrapDispatchAndTransactionAndCatching { + val count = connection.prepare("SELECT COUNT(*) FROM records").use { stmt -> + if (stmt.step()) stmt.getInt(0) else 0 + } -private fun Result.recoverAsRecordCacheException(message: String): Result { - if (this.isSuccess) { - return this - } + connection.execSQL("DELETE FROM records") + cachedSize.set(0) + ClearCacheData(count) + }.recoverAsRecordCacheException("Failed to clear cache") - val transformedException = when (val exception = this.exceptionOrNull()) { - is RecordCacheException -> exception - else -> RecordCacheDatabaseException( - message, - DEFAULT_RECOVERY_SUGGESTION, - exception - ) + private fun Result.recoverAsRecordCacheException( + message: String + ): Result { + if (this.isSuccess()) { + return this as Result.Success + } + val transformedException = when (val exception = this.exceptionOrNull()) { + is RecordCacheException -> exception + else -> RecordCacheDatabaseException( + message, + DEFAULT_RECOVERY_SUGGESTION, + exception + ) + } + return Result.Failure(transformedException) } - return Result.failure(transformedException) } diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/Types.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/Types.kt index 37cf35f189..b527648d0f 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/Types.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/Types.kt @@ -1,5 +1,8 @@ package com.amplifyframework.recordcache +import com.amplifyframework.foundation.result.Result as AmplifyResult +import com.amplifyframework.kinesis.AmplifyKinesisException + /** * Result data for record operations. * @@ -24,6 +27,6 @@ data class FlushData(val recordsFlushed: Int = 0, val flushInProgress: Boolean = */ data class ClearCacheData(val recordsCleared: Int = 0) -typealias RecordResult = Result -typealias FlushResult = Result -typealias ClearCacheResult = Result +typealias RecordResult = AmplifyResult +typealias FlushResult = AmplifyResult +typealias ClearCacheResult = AmplifyResult diff --git a/aws-kinesis/src/test/java/com/amplifyframework/recordcache/AutoFlushSchedulerTest.kt b/aws-kinesis/src/test/java/com/amplifyframework/recordcache/AutoFlushSchedulerTest.kt index 5522d7bc24..ed330e88b8 100644 --- a/aws-kinesis/src/test/java/com/amplifyframework/recordcache/AutoFlushSchedulerTest.kt +++ b/aws-kinesis/src/test/java/com/amplifyframework/recordcache/AutoFlushSchedulerTest.kt @@ -1,5 +1,6 @@ package com.amplifyframework.recordcache +import com.amplifyframework.foundation.result.Result import io.mockk.coEvery import io.mockk.coVerify import io.mockk.mockk @@ -17,7 +18,7 @@ class AutoFlushSchedulerTest { fun `start should begin periodic flushing`() = runTest { // Given val mockClient = mockk() - coEvery { mockClient.flush() } returns Result.success(FlushData(0)) + coEvery { mockClient.flush() } returns Result.Success(FlushData(0)) val interval = FlushStrategy.Interval(1.seconds) val scheduler = AutoFlushScheduler( @@ -39,7 +40,7 @@ class AutoFlushSchedulerTest { fun `disable should stop periodic flushing`() = runTest { // Given val mockClient = mockk() - coEvery { mockClient.flush() } returns Result.success(FlushData(0)) + coEvery { mockClient.flush() } returns Result.Success(FlushData(0)) val interval = FlushStrategy.Interval(1.seconds) val scheduler = AutoFlushScheduler( @@ -62,7 +63,7 @@ class AutoFlushSchedulerTest { fun `start should cancel previous job and restart`() = runTest { // Given val mockClient = mockk() - coEvery { mockClient.flush() } returns Result.success(FlushData(0)) + coEvery { mockClient.flush() } returns Result.Success(FlushData(0)) val interval = FlushStrategy.Interval(1.seconds) val scheduler = AutoFlushScheduler( diff --git a/aws-kinesis/src/test/java/com/amplifyframework/recordcache/RecordClientFlushTest.kt b/aws-kinesis/src/test/java/com/amplifyframework/recordcache/RecordClientFlushTest.kt index c9aa556bfe..71859fd3e1 100644 --- a/aws-kinesis/src/test/java/com/amplifyframework/recordcache/RecordClientFlushTest.kt +++ b/aws-kinesis/src/test/java/com/amplifyframework/recordcache/RecordClientFlushTest.kt @@ -1,6 +1,9 @@ package com.amplifyframework.recordcache import androidx.sqlite.driver.bundled.BundledSQLiteDriver +import com.amplifyframework.foundation.result.Result +import com.amplifyframework.foundation.result.getOrThrow +import com.amplifyframework.foundation.result.isSuccess import io.kotest.matchers.booleans.shouldBeTrue import io.kotest.matchers.shouldBe import io.mockk.coEvery @@ -63,7 +66,7 @@ class RecordClientFlushTest { storage.incrementRetryCount(listOf(record3Id)).getOrThrow() // Now at max retries (3) // Configure mock sender response - coEvery { mockSender.putRecords(streamName, any()) } returns Result.success( + coEvery { mockSender.putRecords(streamName, any()) } returns Result.Success( PutRecordsResponse( successfulIds = listOf(allRecords[0].id), retryableIds = listOf(allRecords[1].id), @@ -75,7 +78,7 @@ class RecordClientFlushTest { val result = recordClient.flush() // Then - result.isSuccess.shouldBeTrue() + result.isSuccess().shouldBeTrue() // Verify final state val remainingRecordsByStream = storage.getRecordsByStream().getOrThrow() diff --git a/aws-kinesis/src/test/java/com/amplifyframework/recordcache/SQLiteRecordStorageCacheAccuracyTest.kt b/aws-kinesis/src/test/java/com/amplifyframework/recordcache/SQLiteRecordStorageCacheAccuracyTest.kt index 73f3f99661..8bd5bc1573 100644 --- a/aws-kinesis/src/test/java/com/amplifyframework/recordcache/SQLiteRecordStorageCacheAccuracyTest.kt +++ b/aws-kinesis/src/test/java/com/amplifyframework/recordcache/SQLiteRecordStorageCacheAccuracyTest.kt @@ -1,6 +1,7 @@ package com.amplifyframework.recordcache import androidx.sqlite.driver.bundled.BundledSQLiteDriver +import com.amplifyframework.foundation.result.getOrThrow import io.kotest.matchers.collections.shouldNotBeEmpty import io.kotest.matchers.shouldBe import kotlinx.coroutines.Dispatchers diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Get.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Get.kt index 727dd468f5..69dafdc56e 100644 --- a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Get.kt +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Get.kt @@ -37,3 +37,15 @@ fun Result.getOrNull(): T? { } return if (this is Result.Success) data else null } + +@InternalAmplifyApi +fun Result.exceptionOrNull(): E? { + contract { + returnsNotNull() implies (this@exceptionOrNull is Result.Failure) + returns(null) implies (this@exceptionOrNull is Result.Success) + } + return when (this) { + is Result.Failure -> error + is Result.Success -> null + } +} diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Map.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Map.kt index ee8bd32bb3..bdd189d505 100644 --- a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Map.kt +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Map.kt @@ -52,3 +52,33 @@ inline fun Result.mapBoth(mapSuccess: (T) -> T2, mapFailure is Result.Success -> Result.Success(mapSuccess(this.data)) } } + +@InternalAmplifyApi +inline fun Result.mapCatching(transform: (T) -> R): Result { + contract { + callsInPlace(transform, InvocationKind.AT_MOST_ONCE) + } + return when (this) { + is Result.Success -> try { + Result.Success(transform(data)) + } catch (e: Throwable) { + Result.Failure(e) + } + is Result.Failure -> this + } +} + +@InternalAmplifyApi +inline fun Result.recoverCatching(transform: (E) -> T): Result { + contract { + callsInPlace(transform, InvocationKind.AT_MOST_ONCE) + } + return when (this) { + is Result.Success -> this + is Result.Failure -> try { + Result.Success(transform(error)) + } catch (e: Throwable) { + Result.Failure(e) + } + } +} diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Result.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Result.kt index 462589d11c..a6167dc8b5 100644 --- a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Result.kt +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Result.kt @@ -29,3 +29,13 @@ sealed interface Result { */ data class Failure(val error: E) : Result } + +/** + * Returns `true` if this result is a success, `false` otherwise. + */ +fun Result.isSuccess(): Boolean = this is Result.Success + +/** + * Returns `true` if this result is a failure, `false` otherwise. + */ +fun Result.isFailure(): Boolean = this is Result.Failure diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Run.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Run.kt index 22c8c00499..3f125f4170 100644 --- a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Run.kt +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Run.kt @@ -20,7 +20,7 @@ import kotlin.contracts.InvocationKind import kotlin.contracts.contract @InternalAmplifyApi -inline fun runCatching(block: () -> T): Result { +inline fun amplifyRunCatching(block: () -> T): Result { contract { callsInPlace(block, InvocationKind.AT_MOST_ONCE) } diff --git a/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultRunTest.kt b/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultRunTest.kt index 9422e8eb43..3d9406c2a4 100644 --- a/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultRunTest.kt +++ b/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultRunTest.kt @@ -15,7 +15,7 @@ package com.amplifyframework.foundation.result -import com.amplifyframework.foundation.result.runCatching as localRunCatching +import com.amplifyframework.foundation.result.amplifyRunCatching import com.amplifyframework.testutils.foundation.results.shouldBeFailure import com.amplifyframework.testutils.foundation.results.shouldBeSuccess import org.junit.Test @@ -33,7 +33,7 @@ class ResultRunTest { fun `runCatching returns failure result for thrown exception`() { val exception = RuntimeException("failed") - val result = localRunCatching { + val result = amplifyRunCatching { throw exception } From e10db4495bf8da1bbcaaeeb118f0f28225e2384b Mon Sep 17 00:00:00 2001 From: Matt Creaser Date: Fri, 20 Feb 2026 13:15:12 -0400 Subject: [PATCH 15/37] fix(foundation): Move ResultAssertions to foundation module (#3204) --- foundation/build.gradle.kts | 1 - .../com/amplifyframework/foundation}/ResultAssertions.kt | 2 +- .../amplifyframework/foundation/result/ResultCatchingTest.kt | 4 ++-- .../com/amplifyframework/foundation/result/ResultMapTest.kt | 4 ++-- 4 files changed, 5 insertions(+), 6 deletions(-) rename {testutils/src/main/java/com/amplifyframework/testutils/foundation/results => foundation/src/commonTest/kotlin/com/amplifyframework/foundation}/ResultAssertions.kt (97%) diff --git a/foundation/build.gradle.kts b/foundation/build.gradle.kts index 3893b79076..63b5b9dfcb 100644 --- a/foundation/build.gradle.kts +++ b/foundation/build.gradle.kts @@ -14,7 +14,6 @@ kotlin { commonTest { dependencies { implementation(libs.test.kotest.assertions) - implementation(project(":testutils")) } } diff --git a/testutils/src/main/java/com/amplifyframework/testutils/foundation/results/ResultAssertions.kt b/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/ResultAssertions.kt similarity index 97% rename from testutils/src/main/java/com/amplifyframework/testutils/foundation/results/ResultAssertions.kt rename to foundation/src/commonTest/kotlin/com/amplifyframework/foundation/ResultAssertions.kt index e3a197ad9a..2ca50434cf 100644 --- a/testutils/src/main/java/com/amplifyframework/testutils/foundation/results/ResultAssertions.kt +++ b/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/ResultAssertions.kt @@ -15,7 +15,7 @@ @file:OptIn(ExperimentalContracts::class) -package com.amplifyframework.testutils.foundation.results +package com.amplifyframework.foundation import com.amplifyframework.foundation.result.Result import io.kotest.matchers.Matcher diff --git a/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultCatchingTest.kt b/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultCatchingTest.kt index daf7ff83dc..d7c009c357 100644 --- a/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultCatchingTest.kt +++ b/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultCatchingTest.kt @@ -15,8 +15,8 @@ package com.amplifyframework.foundation.result -import com.amplifyframework.testutils.foundation.results.shouldBeFailure -import com.amplifyframework.testutils.foundation.results.shouldBeSuccess +import com.amplifyframework.foundation.shouldBeFailure +import com.amplifyframework.foundation.shouldBeSuccess import org.junit.Test class ResultCatchingTest { diff --git a/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultMapTest.kt b/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultMapTest.kt index a4019ad614..4a3e635791 100644 --- a/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultMapTest.kt +++ b/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultMapTest.kt @@ -15,8 +15,8 @@ package com.amplifyframework.foundation.result -import com.amplifyframework.testutils.foundation.results.shouldBeFailure -import com.amplifyframework.testutils.foundation.results.shouldBeSuccess +import com.amplifyframework.foundation.shouldBeFailure +import com.amplifyframework.foundation.shouldBeSuccess import org.junit.Test class ResultMapTest { From 66b06b466fbfe9a643fa46c8001df696298ba757 Mon Sep 17 00:00:00 2001 From: Matt Creaser Date: Fri, 20 Feb 2026 13:30:32 -0400 Subject: [PATCH 16/37] Update androidx test dependencies --- gradle/libs.versions.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 75bf023788..6a132603b5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,10 +13,10 @@ androidx-legacy = "1.0.0" androidx-lifecycle = "2.4.1" androidx-security = "1.0.0" androidx-sqlite = "2.2.0" -androidx-test-core = "1.3.0" -androidx-test-junit = "1.1.2" +androidx-test-core = "1.5.0" +androidx-test-junit = "1.1.5" androidx-test-orchestrator = "1.4.2" -androidx-test-runner = "1.3.0" +androidx-test-runner = "1.5.2" androidx-workmanager = "2.9.1" apollo = "4.3.1" aws-kotlin = "1.5.15" # ensure proper aws-smithy version also set From b7f2cb7cbb93579d51b58ff5b9461c2c8ac96eb2 Mon Sep 17 00:00:00 2001 From: Matt Creaser Date: Fri, 20 Feb 2026 13:58:27 -0400 Subject: [PATCH 17/37] Move tests to androidHostTest root --- .../foundation/credentials/SmithyCredentialsTest.kt | 0 .../kotlin/com/amplifyframework/foundation/ResultAssertions.kt | 0 .../com/amplifyframework/foundation/logging/AmplifyLoggingTest.kt | 0 .../com/amplifyframework/foundation/result/ResultCatchingTest.kt | 0 .../com/amplifyframework/foundation/result/ResultGetTest.kt | 0 .../com/amplifyframework/foundation/result/ResultMapTest.kt | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename foundation-bridge/src/{commonTest => androidHostTest}/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentialsTest.kt (100%) rename foundation/src/{commonTest => androidHostTest}/kotlin/com/amplifyframework/foundation/ResultAssertions.kt (100%) rename foundation/src/{commonTest => androidHostTest}/kotlin/com/amplifyframework/foundation/logging/AmplifyLoggingTest.kt (100%) rename foundation/src/{commonTest => androidHostTest}/kotlin/com/amplifyframework/foundation/result/ResultCatchingTest.kt (100%) rename foundation/src/{commonTest => androidHostTest}/kotlin/com/amplifyframework/foundation/result/ResultGetTest.kt (100%) rename foundation/src/{commonTest => androidHostTest}/kotlin/com/amplifyframework/foundation/result/ResultMapTest.kt (100%) diff --git a/foundation-bridge/src/commonTest/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentialsTest.kt b/foundation-bridge/src/androidHostTest/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentialsTest.kt similarity index 100% rename from foundation-bridge/src/commonTest/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentialsTest.kt rename to foundation-bridge/src/androidHostTest/kotlin/com/amplifyframework/foundation/credentials/SmithyCredentialsTest.kt diff --git a/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/ResultAssertions.kt b/foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation/ResultAssertions.kt similarity index 100% rename from foundation/src/commonTest/kotlin/com/amplifyframework/foundation/ResultAssertions.kt rename to foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation/ResultAssertions.kt diff --git a/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/logging/AmplifyLoggingTest.kt b/foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation/logging/AmplifyLoggingTest.kt similarity index 100% rename from foundation/src/commonTest/kotlin/com/amplifyframework/foundation/logging/AmplifyLoggingTest.kt rename to foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation/logging/AmplifyLoggingTest.kt diff --git a/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultCatchingTest.kt b/foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation/result/ResultCatchingTest.kt similarity index 100% rename from foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultCatchingTest.kt rename to foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation/result/ResultCatchingTest.kt diff --git a/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultGetTest.kt b/foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation/result/ResultGetTest.kt similarity index 100% rename from foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultGetTest.kt rename to foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation/result/ResultGetTest.kt diff --git a/foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultMapTest.kt b/foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation/result/ResultMapTest.kt similarity index 100% rename from foundation/src/commonTest/kotlin/com/amplifyframework/foundation/result/ResultMapTest.kt rename to foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation/result/ResultMapTest.kt From e1b54df0ce27cde9d2d70add2bf690ab5b247d5b Mon Sep 17 00:00:00 2001 From: Jan Vincent Hoffbauer Date: Mon, 23 Feb 2026 11:45:52 +0100 Subject: [PATCH 18/37] Remove maxrecords from the configuration --- .../com/amplifyframework/kinesis/AmplifyKinesisClient.kt | 8 +++++++- .../kinesis/AmplifyKinesisClientConfiguration.kt | 4 ---- .../amplifyframework/recordcache/SQLiteRecordStorage.kt | 6 +++--- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt index a5a3b63b90..e57bf8aeb4 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt @@ -23,6 +23,12 @@ import com.amplifyframework.recordcache.RecordResult import com.amplifyframework.recordcache.SQLiteRecordStorage import kotlin.system.measureTimeMillis +/** + * Kinesis supports up to 500 records per stream. + * See [the docs](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecords.html) + */ +private const val MAX_RECORDS_PER_STREAM = 500 + /** * A client for sending data to Amazon Kinesis Data Streams. * @@ -80,7 +86,7 @@ class AmplifyKinesisClient( storage = SQLiteRecordStorage( context = context, identifier = region, - maxRecords = configuration.maxRecords, + maxRecordsByStream = MAX_RECORDS_PER_STREAM, maxBytes = configuration.cacheMaxBytes ) ) diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientConfiguration.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientConfiguration.kt index bffdf607f0..d76a347fd6 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientConfiguration.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientConfiguration.kt @@ -15,7 +15,6 @@ private const val DEFAULT_CACHE_SIZE_LIMIT_IN_BYTES = 500L * 1024 * 1024 */ data class AmplifyKinesisClientConfiguration internal constructor( val cacheMaxBytes: Long, - val maxRecords: Int, val maxRetries: Int, val flushStrategy: FlushStrategy, val configureClient: AmplifyKinesisClientConfigurationProvider? = null @@ -48,9 +47,6 @@ data class AmplifyKinesisClientConfiguration internal constructor( var cacheMaxBytes: Long = DEFAULT_CACHE_SIZE_LIMIT_IN_BYTES @JvmSynthetic set - var maxRecords: Int = 500 - @JvmSynthetic set - var maxRetries: Int = 5 @JvmSynthetic set diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt index 26d6fd9544..6154bef0e5 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt @@ -33,7 +33,7 @@ internal class SQLiteRecordStorage internal constructor( constructor( context: Context, - maxRecords: Int, + maxRecordsByStream: Int, maxBytes: Long, identifier: String, dispatcher: CoroutineDispatcher = Dispatchers.IO @@ -127,9 +127,9 @@ internal class SQLiteRecordStorage internal constructor( ) WHERE rn <= ? AND running_size <= ? ORDER BY stream_name, id - """ + """ ).use { stmt -> - stmt.bindInt(1, maxRecords) + stmt.bindInt(1, maxRecordsByStream) stmt.bindLong(2, maxBytes) val recordsByStream = mutableMapOf>() From 6c470f2f6a1b0517c0add79d7878049903c84d35 Mon Sep 17 00:00:00 2001 From: Jan Vincent Hoffbauer Date: Mon, 23 Feb 2026 14:35:23 +0100 Subject: [PATCH 19/37] Remove maxRecords config and minor adaptions --- aws-kinesis/api/aws-kinesis.api | 9 ++--- .../KinesisDataStreamsInstrumentationTest.kt | 32 ++++++++--------- .../kinesis/AmplifyKinesisClient.kt | 4 +-- .../AmplifyKinesisClientConfiguration.kt | 10 ------ .../kinesis/KinesisRecordSender.kt | 6 ++-- .../recordcache/SQLiteRecordStorage.kt | 36 ++++++++++--------- .../recordcache/RecordClientFlushTest.kt | 2 +- .../SQLiteRecordStorageCacheAccuracyTest.kt | 2 +- 8 files changed, 46 insertions(+), 55 deletions(-) diff --git a/aws-kinesis/api/aws-kinesis.api b/aws-kinesis/api/aws-kinesis.api index f720abb210..67b0e38004 100644 --- a/aws-kinesis/api/aws-kinesis.api +++ b/aws-kinesis/api/aws-kinesis.api @@ -17,15 +17,13 @@ public final class com/amplifyframework/kinesis/AmplifyKinesisClientConfiguratio public static final fun builder ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration$Builder; public final fun component1 ()J public final fun component2 ()I - public final fun component3 ()I - public final fun component4 ()Lcom/amplifyframework/recordcache/FlushStrategy; - public final fun component5 ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider; + public final fun component3 ()Lcom/amplifyframework/recordcache/FlushStrategy; + public final fun component4 ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider; public static final fun defaults ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration; public fun equals (Ljava/lang/Object;)Z public final fun getCacheMaxBytes ()J public final fun getConfigureClient ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider; public final fun getFlushStrategy ()Lcom/amplifyframework/recordcache/FlushStrategy; - public final fun getMaxRecords ()I public final fun getMaxRetries ()I public fun hashCode ()I public fun toString ()Ljava/lang/String; @@ -39,14 +37,11 @@ public final class com/amplifyframework/kinesis/AmplifyKinesisClientConfiguratio public final fun getCacheMaxBytes ()J public final fun getConfigureClient ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider; public final fun getFlushStrategy ()Lcom/amplifyframework/recordcache/FlushStrategy; - public final fun getMaxRecords ()I public final fun getMaxRetries ()I - public final fun maxRecords (I)Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration$Builder; public final fun maxRetries (I)Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration$Builder; public final synthetic fun setCacheMaxBytes (J)V public final synthetic fun setConfigureClient (Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider;)V public final synthetic fun setFlushStrategy (Lcom/amplifyframework/recordcache/FlushStrategy;)V - public final synthetic fun setMaxRecords (I)V public final synthetic fun setMaxRetries (I)V } diff --git a/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt b/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt index 2705dd1462..53990f78a6 100644 --- a/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt +++ b/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt @@ -14,6 +14,7 @@ */ package com.amplifyframework.kinesis +import android.content.Context import androidx.test.core.app.ApplicationProvider import com.amplifyframework.auth.CognitoCredentialsProvider import com.amplifyframework.auth.cognito.AWSCognitoAuthPlugin @@ -145,10 +146,10 @@ class KinesisDataStreamsInstrumentationTest { partitionKey = "partition-1", streamName = STREAM_NAME ) - result.isSuccess.shouldBeTrue() + result.isSuccess().shouldBeTrue() val flushResult = kinesis.flush() - flushResult.isSuccess.shouldBeTrue() + flushResult.isSuccess().shouldBeTrue() flushResult.getOrThrow().recordsFlushed shouldBeGreaterThan 0 } @@ -156,7 +157,7 @@ class KinesisDataStreamsInstrumentationTest { @Test fun testFlushWhenEmpty(): Unit = runBlocking { val flushResult = kinesis.flush() - flushResult.isSuccess.shouldBeTrue() + flushResult.isSuccess().shouldBeTrue() val data = flushResult.getOrThrow() data.recordsFlushed shouldBe 0 @@ -174,11 +175,11 @@ class KinesisDataStreamsInstrumentationTest { streamName = STREAM_NAME ) // record() returns success even when disabled (silently dropped) - result.isSuccess.shouldBeTrue() + result.isSuccess().shouldBeTrue() kinesis.enable() val flushResult = kinesis.flush() - flushResult.isSuccess.shouldBeTrue() + flushResult.isSuccess().shouldBeTrue() flushResult.getOrThrow().recordsFlushed shouldBe 0 } @@ -204,7 +205,7 @@ class KinesisDataStreamsInstrumentationTest { kinesis.enable() val flushResult = kinesis.flush() - flushResult.isSuccess.shouldBeTrue() + flushResult.isSuccess().shouldBeTrue() // Only the pre-disable record should be flushed flushResult.getOrThrow().recordsFlushed shouldBe 1 } @@ -226,7 +227,7 @@ class KinesisDataStreamsInstrumentationTest { async { kinesis.flush() } ).awaitAll() - val successResults = results.filter { it.isSuccess } + val successResults = results.filter { it.isSuccess() } successResults.size shouldBe 2 val flushDatas = successResults.map { it.getOrThrow() } @@ -252,7 +253,6 @@ class KinesisDataStreamsInstrumentationTest { credentialsProvider = credentialsProvider, configuration = AmplifyKinesisClientConfiguration { cacheMaxBytes = 100L // 100 bytes - maxRecords = 500 } ) smallCacheKinesis.enable() @@ -273,7 +273,7 @@ class KinesisDataStreamsInstrumentationTest { streamName = STREAM_NAME ) - result.isFailure.shouldBeTrue() + result.isFailure().shouldBeTrue() result.exceptionOrNull().shouldBeInstanceOf() } finally { smallCacheKinesis.disable() @@ -291,11 +291,11 @@ class KinesisDataStreamsInstrumentationTest { ) val clearResult = kinesis.clearCache() - clearResult.isSuccess.shouldBeTrue() + clearResult.isSuccess().shouldBeTrue() clearResult.getOrThrow().recordsCleared shouldBeGreaterThan 0 val flushResult = kinesis.flush() - flushResult.isSuccess.shouldBeTrue() + flushResult.isSuccess().shouldBeTrue() flushResult.getOrThrow().recordsFlushed shouldBe 0 } @@ -329,7 +329,7 @@ class KinesisDataStreamsInstrumentationTest { ) val flushResult = badKinesis.flush() - flushResult.isFailure.shouldBeTrue() + flushResult.isFailure().shouldBeTrue() flushResult.exceptionOrNull().shouldBeInstanceOf() } finally { badKinesis.disable() @@ -351,11 +351,11 @@ class KinesisDataStreamsInstrumentationTest { partitionKey = "partition-${i % 5}", streamName = STREAM_NAME ) - result.isSuccess.shouldBeTrue() + result.isSuccess().shouldBeTrue() } val flushResult = kinesis.flush() - flushResult.isSuccess.shouldBeTrue() + flushResult.isSuccess().shouldBeTrue() flushResult.getOrThrow().recordsFlushed shouldBe count } @@ -375,7 +375,7 @@ class KinesisDataStreamsInstrumentationTest { ) } val flushResult = kinesis.flush() - flushResult.isSuccess.shouldBeTrue() + flushResult.isSuccess().shouldBeTrue() totalFlushed += flushResult.getOrThrow().recordsFlushed } @@ -413,7 +413,7 @@ class KinesisDataStreamsInstrumentationTest { // After auto-flush, a manual flush should find nothing left val flushResult = autoFlushKinesis.flush() - flushResult.isSuccess.shouldBeTrue() + flushResult.isSuccess().shouldBeTrue() flushResult.getOrThrow().recordsFlushed shouldBe 0 } finally { autoFlushKinesis.disable() diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt index e57bf8aeb4..3c5e1f5b2a 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt @@ -24,9 +24,9 @@ import com.amplifyframework.recordcache.SQLiteRecordStorage import kotlin.system.measureTimeMillis /** - * Kinesis supports up to 500 records per stream. + * Kinesis supports up to 500 records per stream. * See [the docs](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecords.html) - */ + */ private const val MAX_RECORDS_PER_STREAM = 500 /** diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientConfiguration.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientConfiguration.kt index d76a347fd6..dfebc1c2dc 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientConfiguration.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientConfiguration.kt @@ -9,7 +9,6 @@ private const val DEFAULT_CACHE_SIZE_LIMIT_IN_BYTES = 500L * 1024 * 1024 * Configuration options for [AmplifyKinesisClient]. * * @param cacheMaxBytes Maximum size of the local cache in bytes (default: 500MB) - * @param maxRecords Maximum number of records to cache before forcing a flush (default: 500) * @param maxRetries Maximum number of retry attempts for failed records (default: 5) * @param flushStrategy Strategy for automatic flushing of cached records */ @@ -64,14 +63,6 @@ data class AmplifyKinesisClientConfiguration internal constructor( */ fun cacheMaxBytes(value: Long) = apply { cacheMaxBytes = value } - /** - * Sets the maximum number of records to cache. - * - * @param value Maximum number of records - * @return This builder instance - */ - fun maxRecords(value: Int) = apply { maxRecords = value } - /** * Sets the maximum number of retry attempts. * @@ -96,7 +87,6 @@ data class AmplifyKinesisClientConfiguration internal constructor( */ fun build() = AmplifyKinesisClientConfiguration( cacheMaxBytes, - maxRecords, maxRetries, flushStrategy, configureClient diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisRecordSender.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisRecordSender.kt index 316b8332bd..b94ab6c4cb 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisRecordSender.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/KinesisRecordSender.kt @@ -4,22 +4,24 @@ import androidx.annotation.VisibleForTesting import aws.sdk.kotlin.services.kinesis.KinesisClient import aws.sdk.kotlin.services.kinesis.model.PutRecordsRequest import aws.sdk.kotlin.services.kinesis.model.PutRecordsRequestEntry +import com.amplifyframework.annotations.InternalAmplifyApi import com.amplifyframework.foundation.result.Result -import com.amplifyframework.foundation.result.amplifyRunCatching import com.amplifyframework.foundation.result.mapFailure +import com.amplifyframework.foundation.result.resultCatching import com.amplifyframework.recordcache.PutRecordsResponse import com.amplifyframework.recordcache.Record import com.amplifyframework.recordcache.RecordSender typealias PutRecordsResponseSdk = aws.sdk.kotlin.services.kinesis.model.PutRecordsResponse +@OptIn(InternalAmplifyApi::class) internal class KinesisRecordSender( private val kinesisClient: KinesisClient, private val maxRetries: Int ) : RecordSender { override suspend fun putRecords(streamName: String, records: List): Result = - amplifyRunCatching { + resultCatching { val request = createRequest(streamName, records) val sdkResponse = kinesisClient.putRecords(request) splitResponse(sdkResponse, records) diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt index 6154bef0e5..358997fb94 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt @@ -5,12 +5,13 @@ import androidx.annotation.VisibleForTesting import androidx.sqlite.SQLiteConnection import androidx.sqlite.driver.bundled.BundledSQLiteDriver import androidx.sqlite.execSQL +import com.amplifyframework.annotations.InternalAmplifyApi import com.amplifyframework.foundation.logging.AmplifyLogging import com.amplifyframework.foundation.logging.Logger import com.amplifyframework.foundation.result.Result -import com.amplifyframework.foundation.result.amplifyRunCatching import com.amplifyframework.foundation.result.exceptionOrNull import com.amplifyframework.foundation.result.isSuccess +import com.amplifyframework.foundation.result.resultCatching import java.io.File import java.util.concurrent.atomic.AtomicInteger import kotlinx.coroutines.CoroutineDispatcher @@ -19,17 +20,19 @@ import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext +@OptIn(InternalAmplifyApi::class) internal class SQLiteRecordStorage internal constructor( - maxRecords: Int, + maxRecordsByStream: Int, maxBytes: Long, identifier: String, connectionFactory: () -> SQLiteConnection, private val dispatcher: CoroutineDispatcher = Dispatchers.IO -) : RecordStorage(maxRecords, maxBytes, identifier) { +) : RecordStorage(maxRecordsByStream, maxBytes, identifier) { private val logger: Logger = AmplifyLogging.logger() private val connection: SQLiteConnection = connectionFactory() private var cachedSize = AtomicInteger(0) private val dbMutex = Mutex() + private val maxRecordsByStream = maxRecordsByStream constructor( context: Context, @@ -37,7 +40,7 @@ internal class SQLiteRecordStorage internal constructor( maxBytes: Long, identifier: String, dispatcher: CoroutineDispatcher = Dispatchers.IO - ) : this(maxRecords, maxBytes, identifier, { + ) : this(maxRecordsByStream, maxBytes, identifier, { val dbFile = File(context.getDatabasePath("kinesis_records_$identifier.db").absolutePath) BundledSQLiteDriver().open(dbFile.absolutePath) }, dispatcher) @@ -69,7 +72,7 @@ internal class SQLiteRecordStorage internal constructor( /** * Helper to wrap DB queries with locking and dispatch */ - private suspend fun wrapDispatchAndCatching(block: () -> T): Result = amplifyRunCatching { + private suspend fun wrapDispatchAndCatching(block: () -> T): Result = resultCatching { withContext(dispatcher) { dbMutex.withLock { block() @@ -80,18 +83,19 @@ internal class SQLiteRecordStorage internal constructor( /** * Helper to wrap DB queries in a transaction and suspend */ - private suspend fun wrapDispatchAndTransactionAndCatching(block: () -> T): Result = wrapDispatchAndCatching { - connection.execSQL("BEGIN IMMEDIATE TRANSACTION") - try { - val result = block() - connection.execSQL("END TRANSACTION") - result - } catch (e: Exception) { - connection.execSQL("ROLLBACK TRANSACTION") - throw e + private suspend fun wrapDispatchAndTransactionAndCatching(block: () -> T): Result = + wrapDispatchAndCatching { + connection.execSQL("BEGIN IMMEDIATE TRANSACTION") + try { + val result = block() + connection.execSQL("END TRANSACTION") + result + } catch (e: Exception) { + connection.execSQL("ROLLBACK TRANSACTION") + throw e + } } - } - + override suspend fun addRecord(record: RecordInput): Result = wrapDispatchAndCatching { // Check cache size limit before adding if (cachedSize.get() + record.dataSize > maxBytes) { diff --git a/aws-kinesis/src/test/java/com/amplifyframework/recordcache/RecordClientFlushTest.kt b/aws-kinesis/src/test/java/com/amplifyframework/recordcache/RecordClientFlushTest.kt index 71859fd3e1..7ecfe567eb 100644 --- a/aws-kinesis/src/test/java/com/amplifyframework/recordcache/RecordClientFlushTest.kt +++ b/aws-kinesis/src/test/java/com/amplifyframework/recordcache/RecordClientFlushTest.kt @@ -26,7 +26,7 @@ class RecordClientFlushTest { @Before fun setup() { storage = SQLiteRecordStorage( - maxRecords = 1000, + maxRecordsByStream = 1000, maxBytes = 1024 * 1024L, identifier = "test_flush", connectionFactory = { BundledSQLiteDriver().open(":memory:") }, diff --git a/aws-kinesis/src/test/java/com/amplifyframework/recordcache/SQLiteRecordStorageCacheAccuracyTest.kt b/aws-kinesis/src/test/java/com/amplifyframework/recordcache/SQLiteRecordStorageCacheAccuracyTest.kt index 8bd5bc1573..1531ff2dc8 100644 --- a/aws-kinesis/src/test/java/com/amplifyframework/recordcache/SQLiteRecordStorageCacheAccuracyTest.kt +++ b/aws-kinesis/src/test/java/com/amplifyframework/recordcache/SQLiteRecordStorageCacheAccuracyTest.kt @@ -18,7 +18,7 @@ import org.robolectric.RobolectricTestRunner class SQLiteRecordStorageCacheAccuracyTest { private fun createTestStorage(): SQLiteRecordStorage = SQLiteRecordStorage( - maxRecords = 1000, + maxRecordsByStream = 1000, maxBytes = 1024 * 1024L, identifier = "test", connectionFactory = { BundledSQLiteDriver().open(":memory:") }, From 3e674b85760243830a05adbb4d1c963ded35b1e9 Mon Sep 17 00:00:00 2001 From: Jan Vincent Hoffbauer Date: Mon, 23 Feb 2026 16:48:21 +0100 Subject: [PATCH 20/37] Apply reviewer comments --- .../KinesisDataStreamsInstrumentationTest.kt | 26 +++++++------------ 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt b/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt index f1c3415fb8..f734dc8899 100644 --- a/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt +++ b/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt @@ -57,7 +57,6 @@ class KinesisDataStreamsInstrumentationTest { private const val STREAM_NAME = "amplify-kinesis-test-stream" private const val CREDENTIALS_RESOURCE_NAME = "credentials" private const val CONFIGURATION_NAME = "amplifyconfiguration" - private const val COGNITO_CONFIGURATION_TIMEOUT = 5_000L private const val REGION = "us-east-1" private lateinit var synchronousAuth: SynchronousAuth @@ -69,17 +68,13 @@ class KinesisDataStreamsInstrumentationTest { val context = ApplicationProvider.getApplicationContext() Amplify.Auth.addPlugin(AWSCognitoAuthPlugin()) Amplify.configure(context) - Sleep.milliseconds(COGNITO_CONFIGURATION_TIMEOUT) synchronousAuth = SynchronousAuth.delegatingTo(Amplify.Auth) // Sign in with test credentials @androidx.annotation.RawRes val resourceId = com.amplifyframework.testutils.Resources.getRawResourceId(context, CREDENTIALS_RESOURCE_NAME) - val userAndPasswordPair = readCredentialsFromResource(context, resourceId) + val (user, password) = readCredentialsFromResource(context, resourceId) synchronousAuth.signOut() - synchronousAuth.signIn( - userAndPasswordPair!!.first, - userAndPasswordPair.second - ) + synchronousAuth.signIn(user, password) credentialsProvider = object : AWSCredentialsProvider { override fun fetchAWSCredentials( @@ -115,20 +110,17 @@ class KinesisDataStreamsInstrumentationTest { } } - private fun readCredentialsFromResource(context: Context, @androidx.annotation.RawRes resourceId: Int): android.util.Pair? { + private fun readCredentialsFromResource(context: Context, @androidx.annotation.RawRes resourceId: Int): Pair { val resource = com.amplifyframework.testutils.Resources.readAsJson(context, resourceId) - var userCredentials: android.util.Pair? = null return try { val credentials = resource.getJSONArray("credentials") - for (index in 0 until credentials.length()) { - val credential = credentials.getJSONObject(index) - val username = credential.getString("username") - val password = credential.getString("password") - userCredentials = android.util.Pair(username, password) - } - userCredentials + val lastIndex = credentials.length() - 1 + val credential = credentials.getJSONObject(lastIndex) + val username = credential.getString("username") + val password = credential.getString("password") + Pair(username, password) } catch (jsonReadingFailure: org.json.JSONException) { - throw RuntimeException(jsonReadingFailure) + throw jsonReadingFailure } } } From cbec7ff2e526ba0f24d27d1036cc162e1e42dc5e Mon Sep 17 00:00:00 2001 From: Jan Vincent Hoffbauer Date: Mon, 23 Feb 2026 17:36:48 +0100 Subject: [PATCH 21/37] Fix format --- .../kinesis/KinesisDataStreamsInstrumentationTest.kt | 11 ++++++++--- .../kinesis/AmplifyKinesisClientConfiguration.kt | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt b/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt index 17ea608be0..17adf942cf 100644 --- a/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt +++ b/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt @@ -27,7 +27,6 @@ import com.amplifyframework.foundation.result.getOrThrow import com.amplifyframework.foundation.result.isFailure import com.amplifyframework.foundation.result.isSuccess import com.amplifyframework.recordcache.FlushStrategy -import com.amplifyframework.testutils.Sleep import com.amplifyframework.testutils.sync.SynchronousAuth import io.kotest.matchers.booleans.shouldBeFalse import io.kotest.matchers.booleans.shouldBeTrue @@ -74,7 +73,10 @@ class KinesisDataStreamsInstrumentationTest { synchronousAuth = SynchronousAuth.delegatingTo(Amplify.Auth) // Sign in with test credentials - @androidx.annotation.RawRes val resourceId = com.amplifyframework.testutils.Resources.getRawResourceId(context, CREDENTIALS_RESOURCE_NAME) + @androidx.annotation.RawRes val resourceId = com.amplifyframework.testutils.Resources.getRawResourceId( + context, + CREDENTIALS_RESOURCE_NAME + ) val (user, password) = readCredentialsFromResource(context, resourceId) synchronousAuth.signOut() synchronousAuth.signIn(user, password) @@ -83,7 +85,10 @@ class KinesisDataStreamsInstrumentationTest { credentialsProvider = CognitoCredentialsProvider().toAwsCredentialsProvider() } - private fun readCredentialsFromResource(context: Context, @androidx.annotation.RawRes resourceId: Int): Pair { + private fun readCredentialsFromResource( + context: Context, + @androidx.annotation.RawRes resourceId: Int + ): Pair { val resource = com.amplifyframework.testutils.Resources.readAsJson(context, resourceId) return try { val credentials = resource.getJSONArray("credentials") diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientConfiguration.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientConfiguration.kt index 3cde15bf4b..c453b53ee1 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientConfiguration.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientConfiguration.kt @@ -78,7 +78,7 @@ data class AmplifyKinesisClientConfiguration internal constructor( * @return This builder instance */ fun flushStrategy(value: FlushStrategy) = apply { flushStrategy = value } - + fun configureClient(value: AmplifyKinesisClientConfigurationProvider?) = apply { configureClient = value } /** From 5f0c3dbffd5152fe0a52a7aa5a003d4c026ec3ce Mon Sep 17 00:00:00 2001 From: Jan Vincent Hoffbauer Date: Mon, 23 Feb 2026 18:14:49 +0100 Subject: [PATCH 22/37] Do not use type alias for amplify result --- .../main/java/com/amplifyframework/recordcache/Types.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/Types.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/Types.kt index b527648d0f..c2fb4314ff 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/Types.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/Types.kt @@ -1,6 +1,6 @@ package com.amplifyframework.recordcache -import com.amplifyframework.foundation.result.Result as AmplifyResult +import com.amplifyframework.foundation.result.Result import com.amplifyframework.kinesis.AmplifyKinesisException /** @@ -27,6 +27,6 @@ data class FlushData(val recordsFlushed: Int = 0, val flushInProgress: Boolean = */ data class ClearCacheData(val recordsCleared: Int = 0) -typealias RecordResult = AmplifyResult -typealias FlushResult = AmplifyResult -typealias ClearCacheResult = AmplifyResult +typealias RecordResult = Result +typealias FlushResult = Result +typealias ClearCacheResult = Result From 7014dbc06013d17a46d78c16e431a8dfd81758b6 Mon Sep 17 00:00:00 2001 From: Matt Creaser Date: Tue, 24 Feb 2026 15:51:39 -0400 Subject: [PATCH 23/37] Move ResultAssertions to testutil This allows them to be used in other modules --- foundation/build.gradle.kts | 1 + .../amplifyframework/foundation/result/ResultCatchingTest.kt | 4 ++-- .../com/amplifyframework/foundation/result/ResultMapTest.kt | 4 ++-- .../testutils/assertions}/ResultAssertions.kt | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) rename {foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation => testutils/src/main/java/com/amplifyframework/testutils/assertions}/ResultAssertions.kt (97%) diff --git a/foundation/build.gradle.kts b/foundation/build.gradle.kts index 63b5b9dfcb..31a01862c5 100644 --- a/foundation/build.gradle.kts +++ b/foundation/build.gradle.kts @@ -20,6 +20,7 @@ kotlin { getByName("androidHostTest") { dependencies { implementation(libs.test.mockk) + implementation(project(":testutils")) } } } diff --git a/foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation/result/ResultCatchingTest.kt b/foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation/result/ResultCatchingTest.kt index d7c009c357..24cda62f14 100644 --- a/foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation/result/ResultCatchingTest.kt +++ b/foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation/result/ResultCatchingTest.kt @@ -15,8 +15,8 @@ package com.amplifyframework.foundation.result -import com.amplifyframework.foundation.shouldBeFailure -import com.amplifyframework.foundation.shouldBeSuccess +import com.amplifyframework.testutils.assertions.shouldBeFailure +import com.amplifyframework.testutils.assertions.shouldBeSuccess import org.junit.Test class ResultCatchingTest { diff --git a/foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation/result/ResultMapTest.kt b/foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation/result/ResultMapTest.kt index 4a3e635791..aa5c4e1eed 100644 --- a/foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation/result/ResultMapTest.kt +++ b/foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation/result/ResultMapTest.kt @@ -15,8 +15,8 @@ package com.amplifyframework.foundation.result -import com.amplifyframework.foundation.shouldBeFailure -import com.amplifyframework.foundation.shouldBeSuccess +import com.amplifyframework.testutils.assertions.shouldBeFailure +import com.amplifyframework.testutils.assertions.shouldBeSuccess import org.junit.Test class ResultMapTest { diff --git a/foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation/ResultAssertions.kt b/testutils/src/main/java/com/amplifyframework/testutils/assertions/ResultAssertions.kt similarity index 97% rename from foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation/ResultAssertions.kt rename to testutils/src/main/java/com/amplifyframework/testutils/assertions/ResultAssertions.kt index 2ca50434cf..7a59d65c8d 100644 --- a/foundation/src/androidHostTest/kotlin/com/amplifyframework/foundation/ResultAssertions.kt +++ b/testutils/src/main/java/com/amplifyframework/testutils/assertions/ResultAssertions.kt @@ -15,7 +15,7 @@ @file:OptIn(ExperimentalContracts::class) -package com.amplifyframework.foundation +package com.amplifyframework.testutils.assertions import com.amplifyframework.foundation.result.Result import io.kotest.matchers.Matcher From 9a8b2a55381feaffbbc6d568a76e9b8473b4bf60 Mon Sep 17 00:00:00 2001 From: jvh-aws Date: Tue, 24 Feb 2026 20:57:39 +0100 Subject: [PATCH 24/37] Apply suggestion from @mattcreaser Co-authored-by: Matt Creaser --- .../recordcache/AutoFlushScheduler.kt | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/AutoFlushScheduler.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/AutoFlushScheduler.kt index 4126621b45..ca897acc4a 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/AutoFlushScheduler.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/AutoFlushScheduler.kt @@ -38,13 +38,11 @@ internal class AutoFlushScheduler( while (true) { delay(interval.interval) try { - val result = client.flush() - if (result.isSuccess()) { - val data = result.getOrThrow() - logger.debug { "Auto-flush completed: ${data.recordsFlushed} records flushed" } - } else { - // Expected failures (network, throttling, etc.) - will retry on next cycle - logger.warn(result.exceptionOrNull()) { "Auto-flush failed" } + when (val result = client.flush()) { + is Result.Success -> logger.debug { + "Auto-flush completed: ${result.data.recordsFlushed} records flushed" + } + is Result.Failure -> logger.warn(result.error) { "Auto-flush failed" } } } catch (e: Exception) { // Defensive catch for unexpected exceptions to prevent scheduler from crashing From 4d6349b51d78b9334d6c94668c313b5adbdaa217 Mon Sep 17 00:00:00 2001 From: jvh-aws Date: Tue, 24 Feb 2026 20:58:50 +0100 Subject: [PATCH 25/37] Apply suggestion from @mattcreaser Co-authored-by: Matt Creaser --- .../recordcache/SQLiteRecordStorage.kt | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt index 358997fb94..57f21384ae 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt @@ -213,20 +213,13 @@ internal class SQLiteRecordStorage internal constructor( ClearCacheData(count) }.recoverAsRecordCacheException("Failed to clear cache") - private fun Result.recoverAsRecordCacheException( +private fun Result.recoverAsRecordCacheException( message: String - ): Result { - if (this.isSuccess()) { - return this as Result.Success - } - val transformedException = when (val exception = this.exceptionOrNull()) { + ): Result = mapFailure { exception -> + when(exception) { is RecordCacheException -> exception - else -> RecordCacheDatabaseException( - message, - DEFAULT_RECOVERY_SUGGESTION, - exception - ) + else -> RecordCacheDatabaseException(message, DEFAULT_RECOVERY_SUGGESTION, exception) } - return Result.Failure(transformedException) + } } } From 42baaa0114306c357d23aa559088c746d79da85b Mon Sep 17 00:00:00 2001 From: jvh-aws Date: Tue, 24 Feb 2026 21:01:02 +0100 Subject: [PATCH 26/37] Apply suggestion from @mattcreaser Co-authored-by: Matt Creaser --- .../com/amplifyframework/kinesis/AmplifyKinesisClient.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt index 3c5e1f5b2a..2beb0fef0e 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt @@ -193,9 +193,8 @@ class AmplifyKinesisClient( scheduler.disable() } - private fun Result.wrapError(): Result = when (this) { - is Result.Success -> this - is Result.Failure -> Result.Failure(AmplifyKinesisException.from(error)) + private fun Result.wrapError(): Result = mapFailure { + AmplifyKinesisException.from(it) } private suspend inline fun logOp( From ffb367aa645c046c6b8f1de43bd9f5e39aec7ba7 Mon Sep 17 00:00:00 2001 From: jvh-aws Date: Tue, 24 Feb 2026 21:01:18 +0100 Subject: [PATCH 27/37] Apply suggestion from @mattcreaser Co-authored-by: Matt Creaser --- .../java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt index 2beb0fef0e..24486465f8 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt @@ -210,6 +210,9 @@ class AmplifyKinesisClient( logSuccess(result.getOrThrow(), timeMs) } else { logFailure(result.exceptionOrNull(), timeMs) + when (result) { + is Result.Failure -> logFailure(result.error, timeMs) + is Result.Success -> logSuccess(result.data, timeMs) } return result } From 66a2c4b7125b5952d88d309c1e46b41fc7f2ee4f Mon Sep 17 00:00:00 2001 From: Jan Vincent Hoffbauer Date: Tue, 24 Feb 2026 21:08:03 +0100 Subject: [PATCH 28/37] Rename AmplifyKinesisClientConfiguration to Options --- .../KinesisDataStreamsInstrumentationTest.kt | 4 ++-- .../kinesis/AmplifyKinesisClient.kt | 14 +++++++------- .../AmplifyKinesisClientConfigurationProvider.kt | 2 +- ...iguration.kt => AmplifyKinesisClientOptions.kt} | 12 ++++++------ 4 files changed, 16 insertions(+), 16 deletions(-) rename aws-kinesis/src/main/java/com/amplifyframework/kinesis/{AmplifyKinesisClientConfiguration.kt => AmplifyKinesisClientOptions.kt} (88%) diff --git a/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt b/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt index 17adf942cf..9b2911a4ca 100644 --- a/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt +++ b/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt @@ -241,7 +241,7 @@ class KinesisDataStreamsInstrumentationTest { context = context, region = REGION, credentialsProvider = credentialsProvider, - configuration = AmplifyKinesisClientConfiguration { + options = AmplifyKinesisClientOptions { cacheMaxBytes = 100L // 100 bytes } ) @@ -385,7 +385,7 @@ class KinesisDataStreamsInstrumentationTest { context = context, region = REGION, credentialsProvider = credentialsProvider, - configuration = AmplifyKinesisClientConfiguration { + options = AmplifyKinesisClientOptions { flushStrategy = FlushStrategy.Interval(5.seconds) } ) diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt index 3c5e1f5b2a..bbc6543414 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt @@ -61,13 +61,13 @@ private const val MAX_RECORDS_PER_STREAM = 500 * @param region AWS region where the Kinesis stream is located * @param credentialsProvider AWS credentials for authentication. Use * `CognitoCredentialsProvider().toAwsCredentialsProvider()` to bridge from V2 Auth. - * @param configuration Configuration options with sensible defaults + * @param options Configuration options with sensible defaults */ class AmplifyKinesisClient( val context: Context, val region: String, val credentialsProvider: AwsCredentialsProvider, - configuration: AmplifyKinesisClientConfiguration = AmplifyKinesisClientConfiguration.defaults() + options: AmplifyKinesisClientOptions = AmplifyKinesisClientOptions.defaults() ) { private val logger: Logger = AmplifyLogging.logger() @@ -75,19 +75,19 @@ class AmplifyKinesisClient( val kinesisClient: KinesisClient = KinesisClient { this.region = this@AmplifyKinesisClient.region this.credentialsProvider = this@AmplifyKinesisClient.credentialsProvider.toSmithyProvider() - configuration.configureClient?.applyConfiguration(this) + options.configureClient?.applyConfiguration(this) } private val recordClient: RecordClient = RecordClient( sender = KinesisRecordSender( kinesisClient = kinesisClient, - maxRetries = configuration.maxRetries + maxRetries = options.maxRetries ), storage = SQLiteRecordStorage( context = context, identifier = region, maxRecordsByStream = MAX_RECORDS_PER_STREAM, - maxBytes = configuration.cacheMaxBytes + maxBytes = options.cacheMaxBytes ) ) private val scheduler: AutoFlushScheduler @@ -95,9 +95,9 @@ class AmplifyKinesisClient( @Volatile private var isEnabled = false init { - if (configuration.flushStrategy is FlushStrategy.Interval) { + if (options.flushStrategy is FlushStrategy.Interval) { scheduler = AutoFlushScheduler( - configuration.flushStrategy, + options.flushStrategy, client = recordClient ) } else { diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider.kt index a31eb7f140..f9718156cc 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider.kt @@ -16,7 +16,7 @@ import aws.sdk.kotlin.services.kinesis.KinesisClient * context = context, * region = "us-east-1", * credentialsProvider = provider, - * configuration = AmplifyKinesisClientConfiguration { + * options = AmplifyKinesisClientOptions { * configureClient = AmplifyKinesisClientConfigurationProvider { builder -> * builder.httpClient { /* custom http config */ } * } diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientConfiguration.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientOptions.kt similarity index 88% rename from aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientConfiguration.kt rename to aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientOptions.kt index c453b53ee1..3d4a2c576a 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientConfiguration.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClientOptions.kt @@ -12,7 +12,7 @@ private const val DEFAULT_CACHE_SIZE_LIMIT_IN_BYTES = 500L * 1024 * 1024 * @param maxRetries Maximum number of retry attempts for failed records (default: 5) * @param flushStrategy Strategy for automatic flushing of cached records */ -data class AmplifyKinesisClientConfiguration internal constructor( +data class AmplifyKinesisClientOptions internal constructor( val cacheMaxBytes: Long, val maxRetries: Int, val flushStrategy: FlushStrategy, @@ -20,7 +20,7 @@ data class AmplifyKinesisClientConfiguration internal constructor( ) { companion object { /** - * Creates a new builder for configuring [AmplifyKinesisClientConfiguration]. + * Creates a new builder for configuring [AmplifyKinesisClientOptions]. * * @return A new builder instance with default values */ @@ -31,7 +31,7 @@ data class AmplifyKinesisClientConfiguration internal constructor( operator fun invoke(func: Builder.() -> Unit) = Builder().apply(func).build() /** - * Creates [AmplifyKinesisClientConfiguration] with default values. + * Creates [AmplifyKinesisClientOptions] with default values. * * @return Options with default values */ @@ -40,7 +40,7 @@ data class AmplifyKinesisClientConfiguration internal constructor( } /** - * Builder for [AmplifyKinesisClientConfiguration]. + * Builder for [AmplifyKinesisClientOptions]. */ class Builder internal constructor() { var cacheMaxBytes: Long = DEFAULT_CACHE_SIZE_LIMIT_IN_BYTES @@ -82,11 +82,11 @@ data class AmplifyKinesisClientConfiguration internal constructor( fun configureClient(value: AmplifyKinesisClientConfigurationProvider?) = apply { configureClient = value } /** - * Builds the [AmplifyKinesisClientConfiguration] with configured values. + * Builds the [AmplifyKinesisClientOptions] with configured values. * * @return Configured options instance */ - fun build() = AmplifyKinesisClientConfiguration( + fun build() = AmplifyKinesisClientOptions( cacheMaxBytes, maxRetries, flushStrategy, From 5d01dc11dfc3adaece62e7ac390001e317925759 Mon Sep 17 00:00:00 2001 From: Jan Vincent Hoffbauer Date: Tue, 24 Feb 2026 21:22:33 +0100 Subject: [PATCH 29/37] Remove obsolete code and minor fixes --- .../kinesis/AmplifyKinesisClient.kt | 9 +++--- .../recordcache/AutoFlushScheduler.kt | 1 + .../recordcache/SQLiteRecordStorage.kt | 4 +-- .../amplifyframework/foundation/result/Get.kt | 12 -------- .../amplifyframework/foundation/result/Map.kt | 30 ------------------- 5 files changed, 7 insertions(+), 49 deletions(-) diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt index 04f85e6275..e4263c236e 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt @@ -2,6 +2,7 @@ package com.amplifyframework.kinesis import android.content.Context import aws.sdk.kotlin.services.kinesis.KinesisClient +import com.amplifyframework.annotations.InternalAmplifyApi import com.amplifyframework.foundation.credentials.AwsCredentials import com.amplifyframework.foundation.credentials.AwsCredentialsProvider import com.amplifyframework.foundation.credentials.toSmithyProvider @@ -11,6 +12,7 @@ import com.amplifyframework.foundation.result.Result import com.amplifyframework.foundation.result.exceptionOrNull import com.amplifyframework.foundation.result.getOrThrow import com.amplifyframework.foundation.result.isSuccess +import com.amplifyframework.foundation.result.mapFailure import com.amplifyframework.recordcache.AutoFlushScheduler import com.amplifyframework.recordcache.ClearCacheResult import com.amplifyframework.recordcache.FlushResult @@ -63,6 +65,7 @@ private const val MAX_RECORDS_PER_STREAM = 500 * `CognitoCredentialsProvider().toAwsCredentialsProvider()` to bridge from V2 Auth. * @param options Configuration options with sensible defaults */ +@OptIn(InternalAmplifyApi::class) class AmplifyKinesisClient( val context: Context, val region: String, @@ -206,11 +209,7 @@ class AmplifyKinesisClient( val timeMs = measureTimeMillis { result = operation() } - if (result.isSuccess()) { - logSuccess(result.getOrThrow(), timeMs) - } else { - logFailure(result.exceptionOrNull(), timeMs) - when (result) { + when (result) { is Result.Failure -> logFailure(result.error, timeMs) is Result.Success -> logSuccess(result.data, timeMs) } diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/AutoFlushScheduler.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/AutoFlushScheduler.kt index ca897acc4a..df499ad7a4 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/AutoFlushScheduler.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/AutoFlushScheduler.kt @@ -2,6 +2,7 @@ package com.amplifyframework.recordcache import com.amplifyframework.foundation.logging.AmplifyLogging import com.amplifyframework.foundation.logging.Logger +import com.amplifyframework.foundation.result.Result import com.amplifyframework.foundation.result.exceptionOrNull import com.amplifyframework.foundation.result.getOrThrow import com.amplifyframework.foundation.result.isSuccess diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt index 57f21384ae..b168750b5e 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt @@ -11,6 +11,7 @@ import com.amplifyframework.foundation.logging.Logger import com.amplifyframework.foundation.result.Result import com.amplifyframework.foundation.result.exceptionOrNull import com.amplifyframework.foundation.result.isSuccess +import com.amplifyframework.foundation.result.mapFailure import com.amplifyframework.foundation.result.resultCatching import java.io.File import java.util.concurrent.atomic.AtomicInteger @@ -213,7 +214,7 @@ internal class SQLiteRecordStorage internal constructor( ClearCacheData(count) }.recoverAsRecordCacheException("Failed to clear cache") -private fun Result.recoverAsRecordCacheException( + private fun Result.recoverAsRecordCacheException( message: String ): Result = mapFailure { exception -> when(exception) { @@ -221,5 +222,4 @@ private fun Result.recoverAsRecordCacheException( else -> RecordCacheDatabaseException(message, DEFAULT_RECOVERY_SUGGESTION, exception) } } - } } diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Get.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Get.kt index 6854de2c17..ab7c94cde9 100644 --- a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Get.kt +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Get.kt @@ -43,15 +43,3 @@ fun Result.getOrNull(): T? { } return if (this is Result.Success) data else null } - -@InternalAmplifyApi -fun Result.exceptionOrNull(): E? { - contract { - returnsNotNull() implies (this@exceptionOrNull is Result.Failure) - returns(null) implies (this@exceptionOrNull is Result.Success) - } - return when (this) { - is Result.Failure -> error - is Result.Success -> null - } -} diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Map.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Map.kt index 2dd4ea9677..51fcc83a64 100644 --- a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Map.kt +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Map.kt @@ -61,33 +61,3 @@ inline fun Result.mapBoth(mapSuccess: (T) -> T2, mapFailure is Result.Success -> Result.Success(mapSuccess(this.data)) } } - -@InternalAmplifyApi -inline fun Result.mapCatching(transform: (T) -> R): Result { - contract { - callsInPlace(transform, InvocationKind.AT_MOST_ONCE) - } - return when (this) { - is Result.Success -> try { - Result.Success(transform(data)) - } catch (e: Throwable) { - Result.Failure(e) - } - is Result.Failure -> this - } -} - -@InternalAmplifyApi -inline fun Result.recoverCatching(transform: (E) -> T): Result { - contract { - callsInPlace(transform, InvocationKind.AT_MOST_ONCE) - } - return when (this) { - is Result.Success -> this - is Result.Failure -> try { - Result.Success(transform(error)) - } catch (e: Throwable) { - Result.Failure(e) - } - } -} From 462f24731e23e90380e87314070ed1eab67d1a63 Mon Sep 17 00:00:00 2001 From: Jan Vincent Hoffbauer Date: Tue, 24 Feb 2026 21:59:22 +0100 Subject: [PATCH 30/37] Update instrumentation test to use amplify result asserts --- aws-kinesis/api/aws-kinesis.api | 40 +++++++------- .../KinesisDataStreamsInstrumentationTest.kt | 53 +++++++------------ .../kinesis/AmplifyKinesisClient.kt | 3 -- .../recordcache/AutoFlushScheduler.kt | 3 -- .../recordcache/SQLiteRecordStorage.kt | 4 +- 5 files changed, 41 insertions(+), 62 deletions(-) diff --git a/aws-kinesis/api/aws-kinesis.api b/aws-kinesis/api/aws-kinesis.api index 67b0e38004..39d44e6b85 100644 --- a/aws-kinesis/api/aws-kinesis.api +++ b/aws-kinesis/api/aws-kinesis.api @@ -1,6 +1,6 @@ public final class com/amplifyframework/kinesis/AmplifyKinesisClient { - public fun (Landroid/content/Context;Ljava/lang/String;Lcom/amplifyframework/foundation/credentials/AwsCredentialsProvider;Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration;)V - public synthetic fun (Landroid/content/Context;Ljava/lang/String;Lcom/amplifyframework/foundation/credentials/AwsCredentialsProvider;Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Landroid/content/Context;Ljava/lang/String;Lcom/amplifyframework/foundation/credentials/AwsCredentialsProvider;Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions;)V + public synthetic fun (Landroid/content/Context;Ljava/lang/String;Lcom/amplifyframework/foundation/credentials/AwsCredentialsProvider;Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun clearCache (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; public final fun disable ()V public final fun enable ()V @@ -12,14 +12,18 @@ public final class com/amplifyframework/kinesis/AmplifyKinesisClient { public final fun record ([BLjava/lang/String;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; } -public final class com/amplifyframework/kinesis/AmplifyKinesisClientConfiguration { - public static final field Companion Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration$Companion; - public static final fun builder ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration$Builder; +public abstract interface class com/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider { + public abstract fun applyConfiguration (Laws/sdk/kotlin/services/kinesis/KinesisClient$Config$Builder;)V +} + +public final class com/amplifyframework/kinesis/AmplifyKinesisClientOptions { + public static final field Companion Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions$Companion; + public static final fun builder ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions$Builder; public final fun component1 ()J public final fun component2 ()I public final fun component3 ()Lcom/amplifyframework/recordcache/FlushStrategy; public final fun component4 ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider; - public static final fun defaults ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration; + public static final fun defaults ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions; public fun equals (Ljava/lang/Object;)Z public final fun getCacheMaxBytes ()J public final fun getConfigureClient ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider; @@ -29,30 +33,26 @@ public final class com/amplifyframework/kinesis/AmplifyKinesisClientConfiguratio public fun toString ()Ljava/lang/String; } -public final class com/amplifyframework/kinesis/AmplifyKinesisClientConfiguration$Builder { - public final fun build ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration; - public final fun cacheMaxBytes (J)Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration$Builder; - public final fun configureClient (Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider;)Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration$Builder; - public final fun flushStrategy (Lcom/amplifyframework/recordcache/FlushStrategy;)Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration$Builder; +public final class com/amplifyframework/kinesis/AmplifyKinesisClientOptions$Builder { + public final fun build ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions; + public final fun cacheMaxBytes (J)Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions$Builder; + public final fun configureClient (Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider;)Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions$Builder; + public final fun flushStrategy (Lcom/amplifyframework/recordcache/FlushStrategy;)Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions$Builder; public final fun getCacheMaxBytes ()J public final fun getConfigureClient ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider; public final fun getFlushStrategy ()Lcom/amplifyframework/recordcache/FlushStrategy; public final fun getMaxRetries ()I - public final fun maxRetries (I)Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration$Builder; + public final fun maxRetries (I)Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions$Builder; public final synthetic fun setCacheMaxBytes (J)V public final synthetic fun setConfigureClient (Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider;)V public final synthetic fun setFlushStrategy (Lcom/amplifyframework/recordcache/FlushStrategy;)V public final synthetic fun setMaxRetries (I)V } -public final class com/amplifyframework/kinesis/AmplifyKinesisClientConfiguration$Companion { - public final fun builder ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration$Builder; - public final fun defaults ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration; - public final synthetic fun invoke (Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/kinesis/AmplifyKinesisClientConfiguration; -} - -public abstract interface class com/amplifyframework/kinesis/AmplifyKinesisClientConfigurationProvider { - public abstract fun applyConfiguration (Laws/sdk/kotlin/services/kinesis/KinesisClient$Config$Builder;)V +public final class com/amplifyframework/kinesis/AmplifyKinesisClientOptions$Companion { + public final fun builder ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions$Builder; + public final fun defaults ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions; + public final synthetic fun invoke (Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions; } public abstract class com/amplifyframework/kinesis/AmplifyKinesisException : com/amplifyframework/AmplifyException { diff --git a/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt b/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt index 9b2911a4ca..a1518bb090 100644 --- a/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt +++ b/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt @@ -22,13 +22,11 @@ import com.amplifyframework.core.Amplify import com.amplifyframework.foundation.credentials.AwsCredentials import com.amplifyframework.foundation.credentials.AwsCredentialsProvider import com.amplifyframework.foundation.credentials.toAwsCredentialsProvider -import com.amplifyframework.foundation.result.exceptionOrNull -import com.amplifyframework.foundation.result.getOrThrow -import com.amplifyframework.foundation.result.isFailure -import com.amplifyframework.foundation.result.isSuccess +import com.amplifyframework.foundation.result.Result import com.amplifyframework.recordcache.FlushStrategy +import com.amplifyframework.testutils.assertions.shouldBeFailure +import com.amplifyframework.testutils.assertions.shouldBeSuccess import com.amplifyframework.testutils.sync.SynchronousAuth -import io.kotest.matchers.booleans.shouldBeFalse import io.kotest.matchers.booleans.shouldBeTrue import io.kotest.matchers.ints.shouldBeGreaterThan import io.kotest.matchers.nulls.shouldNotBeNull @@ -136,20 +134,17 @@ class KinesisDataStreamsInstrumentationTest { partitionKey = "partition-1", streamName = STREAM_NAME ) - result.isSuccess().shouldBeTrue() + result.shouldBeSuccess() val flushResult = kinesis.flush() - flushResult.isSuccess().shouldBeTrue() - flushResult.getOrThrow().recordsFlushed shouldBeGreaterThan 0 + flushResult.shouldBeSuccess().data.recordsFlushed shouldBeGreaterThan 0 } /** Flush with no cached records returns zero flushed. */ @Test fun testFlushWhenEmpty(): Unit = runBlocking { val flushResult = kinesis.flush() - flushResult.isSuccess().shouldBeTrue() - - val data = flushResult.getOrThrow() + val data = flushResult.shouldBeSuccess().data data.recordsFlushed shouldBe 0 data.flushInProgress.shouldBeFalse() } @@ -165,12 +160,11 @@ class KinesisDataStreamsInstrumentationTest { streamName = STREAM_NAME ) // record() returns success even when disabled (silently dropped) - result.isSuccess().shouldBeTrue() + result.shouldBeSuccess() kinesis.enable() val flushResult = kinesis.flush() - flushResult.isSuccess().shouldBeTrue() - flushResult.getOrThrow().recordsFlushed shouldBe 0 + flushResult.shouldBeSuccess().data.recordsFlushed shouldBe 0 } /** Enable → record → disable → enable → flush verifies only pre-disable records flush. */ @@ -195,9 +189,8 @@ class KinesisDataStreamsInstrumentationTest { kinesis.enable() val flushResult = kinesis.flush() - flushResult.isSuccess().shouldBeTrue() // Only the pre-disable record should be flushed - flushResult.getOrThrow().recordsFlushed shouldBe 1 + flushResult.shouldBeSuccess().data.recordsFlushed shouldBe 1 } /** Two concurrent flushes — one should return flushInProgress = true. */ @@ -217,10 +210,10 @@ class KinesisDataStreamsInstrumentationTest { async { kinesis.flush() } ).awaitAll() - val successResults = results.filter { it.isSuccess() } + val successResults = results.filter { it is Result.Success } successResults.size shouldBe 2 - val flushDatas = successResults.map { it.getOrThrow() } + val flushDatas = successResults.map { (it as Result.Success).data } // At least one should have done actual work, and one may report flushInProgress val anyFlushed = flushDatas.any { it.recordsFlushed > 0 } val anyInProgress = flushDatas.any { it.flushInProgress } @@ -263,8 +256,7 @@ class KinesisDataStreamsInstrumentationTest { streamName = STREAM_NAME ) - result.isFailure().shouldBeTrue() - result.exceptionOrNull().shouldBeInstanceOf() + result.shouldBeFailure().error.shouldBeInstanceOf() } finally { smallCacheKinesis.disable() smallCacheKinesis.clearCache() @@ -281,12 +273,10 @@ class KinesisDataStreamsInstrumentationTest { ) val clearResult = kinesis.clearCache() - clearResult.isSuccess().shouldBeTrue() - clearResult.getOrThrow().recordsCleared shouldBeGreaterThan 0 + clearResult.shouldBeSuccess().data.recordsCleared shouldBeGreaterThan 0 val flushResult = kinesis.flush() - flushResult.isSuccess().shouldBeTrue() - flushResult.getOrThrow().recordsFlushed shouldBe 0 + flushResult.shouldBeSuccess().data.recordsFlushed shouldBe 0 } // --------------------------------------------------------------- @@ -319,8 +309,7 @@ class KinesisDataStreamsInstrumentationTest { ) val flushResult = badKinesis.flush() - flushResult.isFailure().shouldBeTrue() - flushResult.exceptionOrNull().shouldBeInstanceOf() + flushResult.shouldBeFailure().error.shouldBeInstanceOf() } finally { badKinesis.disable() badKinesis.clearCache() @@ -341,12 +330,11 @@ class KinesisDataStreamsInstrumentationTest { partitionKey = "partition-${i % 5}", streamName = STREAM_NAME ) - result.isSuccess().shouldBeTrue() + result.shouldBeSuccess() } val flushResult = kinesis.flush() - flushResult.isSuccess().shouldBeTrue() - flushResult.getOrThrow().recordsFlushed shouldBe count + flushResult.shouldBeSuccess().data.recordsFlushed shouldBe count } /** Record + flush in a loop — verify consistency across cycles. */ @@ -365,8 +353,8 @@ class KinesisDataStreamsInstrumentationTest { ) } val flushResult = kinesis.flush() - flushResult.isSuccess().shouldBeTrue() - totalFlushed += flushResult.getOrThrow().recordsFlushed + flushResult.shouldBeSuccess() + totalFlushed += flushResult.data.recordsFlushed } totalFlushed shouldBe (cycles * recordsPerCycle) @@ -403,8 +391,7 @@ class KinesisDataStreamsInstrumentationTest { // After auto-flush, a manual flush should find nothing left val flushResult = autoFlushKinesis.flush() - flushResult.isSuccess().shouldBeTrue() - flushResult.getOrThrow().recordsFlushed shouldBe 0 + flushResult.shouldBeSuccess().data.recordsFlushed shouldBe 0 } finally { autoFlushKinesis.disable() autoFlushKinesis.clearCache() diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt index e4263c236e..3bd335ab7a 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt @@ -9,9 +9,6 @@ import com.amplifyframework.foundation.credentials.toSmithyProvider import com.amplifyframework.foundation.logging.AmplifyLogging import com.amplifyframework.foundation.logging.Logger import com.amplifyframework.foundation.result.Result -import com.amplifyframework.foundation.result.exceptionOrNull -import com.amplifyframework.foundation.result.getOrThrow -import com.amplifyframework.foundation.result.isSuccess import com.amplifyframework.foundation.result.mapFailure import com.amplifyframework.recordcache.AutoFlushScheduler import com.amplifyframework.recordcache.ClearCacheResult diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/AutoFlushScheduler.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/AutoFlushScheduler.kt index df499ad7a4..58962dc170 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/AutoFlushScheduler.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/AutoFlushScheduler.kt @@ -3,9 +3,6 @@ package com.amplifyframework.recordcache import com.amplifyframework.foundation.logging.AmplifyLogging import com.amplifyframework.foundation.logging.Logger import com.amplifyframework.foundation.result.Result -import com.amplifyframework.foundation.result.exceptionOrNull -import com.amplifyframework.foundation.result.getOrThrow -import com.amplifyframework.foundation.result.isSuccess import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineName import kotlinx.coroutines.CoroutineScope diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt index b168750b5e..1235f4436c 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt @@ -9,8 +9,6 @@ import com.amplifyframework.annotations.InternalAmplifyApi import com.amplifyframework.foundation.logging.AmplifyLogging import com.amplifyframework.foundation.logging.Logger import com.amplifyframework.foundation.result.Result -import com.amplifyframework.foundation.result.exceptionOrNull -import com.amplifyframework.foundation.result.isSuccess import com.amplifyframework.foundation.result.mapFailure import com.amplifyframework.foundation.result.resultCatching import java.io.File @@ -217,7 +215,7 @@ internal class SQLiteRecordStorage internal constructor( private fun Result.recoverAsRecordCacheException( message: String ): Result = mapFailure { exception -> - when(exception) { + when (exception) { is RecordCacheException -> exception else -> RecordCacheDatabaseException(message, DEFAULT_RECOVERY_SUGGESTION, exception) } From 7e80c3176641b911b93ded4c87e40de3f89a6b6f Mon Sep 17 00:00:00 2001 From: Jan Vincent Hoffbauer Date: Tue, 24 Feb 2026 22:23:55 +0100 Subject: [PATCH 31/37] Use foundation amplify exception type --- aws-kinesis/api/aws-kinesis.api | 20 +++---- aws-kinesis/build.gradle.kts | 2 - .../kinesis/AmplifyKinesisException.kt | 52 +++++++++---------- foundation/api/foundation.api | 9 +++- .../foundation/exceptions/AmplifyException.kt | 6 +-- 5 files changed, 46 insertions(+), 43 deletions(-) diff --git a/aws-kinesis/api/aws-kinesis.api b/aws-kinesis/api/aws-kinesis.api index 39d44e6b85..835fac9dd0 100644 --- a/aws-kinesis/api/aws-kinesis.api +++ b/aws-kinesis/api/aws-kinesis.api @@ -55,10 +55,10 @@ public final class com/amplifyframework/kinesis/AmplifyKinesisClientOptions$Comp public final synthetic fun invoke (Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions; } -public abstract class com/amplifyframework/kinesis/AmplifyKinesisException : com/amplifyframework/AmplifyException { +public abstract class com/amplifyframework/kinesis/AmplifyKinesisException : com/amplifyframework/foundation/exceptions/AmplifyException { public static final field Companion Lcom/amplifyframework/kinesis/AmplifyKinesisException$Companion; - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/Throwable;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/Throwable;Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V } public final class com/amplifyframework/kinesis/AmplifyKinesisException$Companion { @@ -66,24 +66,24 @@ public final class com/amplifyframework/kinesis/AmplifyKinesisException$Companio } public final class com/amplifyframework/kinesis/AmplifyKinesisLimitExceededException : com/amplifyframework/kinesis/AmplifyKinesisException { - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/Throwable;Ljava/lang/String;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/Throwable;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V } public final class com/amplifyframework/kinesis/AmplifyKinesisServiceException : com/amplifyframework/kinesis/AmplifyKinesisException { - public fun (Ljava/lang/String;Ljava/lang/String;Laws/sdk/kotlin/services/kinesis/model/KinesisException;)V + public fun (Ljava/lang/String;Laws/sdk/kotlin/services/kinesis/model/KinesisException;Ljava/lang/String;)V public fun getCause ()Laws/sdk/kotlin/services/kinesis/model/KinesisException; public synthetic fun getCause ()Ljava/lang/Throwable; } public final class com/amplifyframework/kinesis/AmplifyKinesisStorageException : com/amplifyframework/kinesis/AmplifyKinesisException { - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/Throwable;Ljava/lang/String;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/Throwable;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V } public final class com/amplifyframework/kinesis/AmplifyKinesisUnknownException : com/amplifyframework/kinesis/AmplifyKinesisException { - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/Throwable;Ljava/lang/String;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/Throwable;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V } public final class com/amplifyframework/kinesis/BuildConfig { diff --git a/aws-kinesis/build.gradle.kts b/aws-kinesis/build.gradle.kts index b9d4d11a4a..9de4e3640c 100644 --- a/aws-kinesis/build.gradle.kts +++ b/aws-kinesis/build.gradle.kts @@ -26,8 +26,6 @@ android { } dependencies { - implementation(project(":core")) - implementation(project(":aws-core")) implementation(project(":foundation")) implementation(project(":foundation-bridge")) diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisException.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisException.kt index b29ee79fe4..da0d50e158 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisException.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisException.kt @@ -1,7 +1,7 @@ package com.amplifyframework.kinesis import aws.sdk.kotlin.services.kinesis.model.KinesisException as SdkKinesisException -import com.amplifyframework.AmplifyException +import com.amplifyframework.foundation.exceptions.AmplifyException import com.amplifyframework.recordcache.DEFAULT_RECOVERY_SUGGESTION import com.amplifyframework.recordcache.RecordCacheDatabaseException import com.amplifyframework.recordcache.RecordCacheException @@ -18,13 +18,13 @@ import com.amplifyframework.recordcache.RecordCacheLimitExceededException * - [AmplifyKinesisUnknownException] — unexpected / uncategorized errors * * @param message Error message describing what went wrong - * @param recoverySuggestion Suggested action to resolve the error * @param cause Underlying cause of the exception + * @param recoverySuggestion Suggested action to resolve the error */ sealed class AmplifyKinesisException( message: String, - recoverySuggestion: String, - cause: Throwable? = null + cause: Throwable? = null, + recoverySuggestion: String ) : AmplifyException(message, cause, recoverySuggestion) { companion object { /** @@ -35,28 +35,28 @@ sealed class AmplifyKinesisException( is AmplifyKinesisException -> error is RecordCacheDatabaseException -> AmplifyKinesisStorageException( message = error.message, - recoverySuggestion = error.recoverySuggestion, - cause = error + cause = error, + recoverySuggestion = error.recoverySuggestion ) is RecordCacheLimitExceededException -> AmplifyKinesisLimitExceededException( message = error.message, - recoverySuggestion = error.recoverySuggestion, - cause = error + cause = error, + recoverySuggestion = error.recoverySuggestion ) is RecordCacheException -> AmplifyKinesisStorageException( message = error.message, - recoverySuggestion = error.recoverySuggestion, - cause = error + cause = error, + recoverySuggestion = error.recoverySuggestion ) is SdkKinesisException -> AmplifyKinesisServiceException( message = "A service error occurred", - recoverySuggestion = DEFAULT_RECOVERY_SUGGESTION, - cause = error + cause = error, + recoverySuggestion = DEFAULT_RECOVERY_SUGGESTION ) else -> AmplifyKinesisUnknownException( message = error.message ?: "An unknown error occurred", - recoverySuggestion = DEFAULT_RECOVERY_SUGGESTION, - cause = error + cause = error, + recoverySuggestion = DEFAULT_RECOVERY_SUGGESTION ) } } @@ -65,27 +65,27 @@ sealed class AmplifyKinesisException( /** Local storage / database error. */ class AmplifyKinesisStorageException( message: String, - recoverySuggestion: String, - cause: Throwable? = null -) : AmplifyKinesisException(message, recoverySuggestion, cause) + cause: Throwable? = null, + recoverySuggestion: String +) : AmplifyKinesisException(message, cause, recoverySuggestion) /** Kinesis API / SDK error. */ class AmplifyKinesisServiceException( message: String, - recoverySuggestion: String, - override val cause: SdkKinesisException -) : AmplifyKinesisException(message, recoverySuggestion, cause) + override val cause: SdkKinesisException, + recoverySuggestion: String +) : AmplifyKinesisException(message, cause, recoverySuggestion) /** Local cache size or record limit exceeded. */ class AmplifyKinesisLimitExceededException( message: String, - recoverySuggestion: String, - cause: Throwable? = null -) : AmplifyKinesisException(message, recoverySuggestion, cause) + cause: Throwable? = null, + recoverySuggestion: String +) : AmplifyKinesisException(message, cause, recoverySuggestion) /** Unexpected / uncategorized error. */ class AmplifyKinesisUnknownException( message: String, - recoverySuggestion: String, - cause: Throwable? = null -) : AmplifyKinesisException(message, recoverySuggestion, cause) + cause: Throwable? = null, + recoverySuggestion: String +) : AmplifyKinesisException(message, cause, recoverySuggestion) diff --git a/foundation/api/foundation.api b/foundation/api/foundation.api index 2ac8f1d963..f9f018d7f8 100644 --- a/foundation/api/foundation.api +++ b/foundation/api/foundation.api @@ -30,8 +30,8 @@ public abstract interface class com/amplifyframework/foundation/credentials/AwsC } public abstract class com/amplifyframework/foundation/exceptions/AmplifyException : java/lang/Exception { - public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/Throwable;Ljava/lang/String;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/Throwable;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun getRecoverySuggestion ()Ljava/lang/String; public fun toString ()Ljava/lang/String; } @@ -100,3 +100,8 @@ public final class com/amplifyframework/foundation/result/Result$Success : com/a public fun toString ()Ljava/lang/String; } +public final class com/amplifyframework/foundation/result/ResultKt { + public static final fun isFailure (Lcom/amplifyframework/foundation/result/Result;)Z + public static final fun isSuccess (Lcom/amplifyframework/foundation/result/Result;)Z +} + diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/exceptions/AmplifyException.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/exceptions/AmplifyException.kt index df5f5b9747..718b376dfe 100644 --- a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/exceptions/AmplifyException.kt +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/exceptions/AmplifyException.kt @@ -18,13 +18,13 @@ package com.amplifyframework.foundation.exceptions /** * Top-level exception in the Amplify framework. All other Amplify exceptions should extend this. * @param message An error message describing why this exception was thrown - * @param recoverySuggestion Text suggesting a way to recover from the error being described * @param cause The underlying cause of this exception + * @param recoverySuggestion Text suggesting a way to recover from the error being described */ abstract class AmplifyException( message: String, - val recoverySuggestion: String, - cause: Throwable? = null + cause: Throwable? = null, + val recoverySuggestion: String ) : Exception(message, cause) { override fun toString() = "${this::class.simpleName}(message=$message, cause=$cause, recoverySuggestion=$recoverySuggestion)" From f1cd31a1c619ecbcb8f4d9513b1f2255c7cb8667 Mon Sep 17 00:00:00 2001 From: Jan Vincent Hoffbauer Date: Tue, 24 Feb 2026 22:27:45 +0100 Subject: [PATCH 32/37] Fix amplify exception argument ordering --- aws-kinesis/api/aws-kinesis.api | 18 +++---- .../kinesis/AmplifyKinesisException.kt | 52 +++++++++---------- foundation/api/foundation.api | 4 +- .../foundation/exceptions/AmplifyException.kt | 6 +-- 4 files changed, 40 insertions(+), 40 deletions(-) diff --git a/aws-kinesis/api/aws-kinesis.api b/aws-kinesis/api/aws-kinesis.api index 835fac9dd0..31bd1c8346 100644 --- a/aws-kinesis/api/aws-kinesis.api +++ b/aws-kinesis/api/aws-kinesis.api @@ -57,8 +57,8 @@ public final class com/amplifyframework/kinesis/AmplifyKinesisClientOptions$Comp public abstract class com/amplifyframework/kinesis/AmplifyKinesisException : com/amplifyframework/foundation/exceptions/AmplifyException { public static final field Companion Lcom/amplifyframework/kinesis/AmplifyKinesisException$Companion; - public synthetic fun (Ljava/lang/String;Ljava/lang/Throwable;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/Throwable;Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;Lkotlin/jvm/internal/DefaultConstructorMarker;)V } public final class com/amplifyframework/kinesis/AmplifyKinesisException$Companion { @@ -66,24 +66,24 @@ public final class com/amplifyframework/kinesis/AmplifyKinesisException$Companio } public final class com/amplifyframework/kinesis/AmplifyKinesisLimitExceededException : com/amplifyframework/kinesis/AmplifyKinesisException { - public fun (Ljava/lang/String;Ljava/lang/Throwable;Ljava/lang/String;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/Throwable;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V } public final class com/amplifyframework/kinesis/AmplifyKinesisServiceException : com/amplifyframework/kinesis/AmplifyKinesisException { - public fun (Ljava/lang/String;Laws/sdk/kotlin/services/kinesis/model/KinesisException;Ljava/lang/String;)V + public fun (Ljava/lang/String;Ljava/lang/String;Laws/sdk/kotlin/services/kinesis/model/KinesisException;)V public fun getCause ()Laws/sdk/kotlin/services/kinesis/model/KinesisException; public synthetic fun getCause ()Ljava/lang/Throwable; } public final class com/amplifyframework/kinesis/AmplifyKinesisStorageException : com/amplifyframework/kinesis/AmplifyKinesisException { - public fun (Ljava/lang/String;Ljava/lang/Throwable;Ljava/lang/String;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/Throwable;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V } public final class com/amplifyframework/kinesis/AmplifyKinesisUnknownException : com/amplifyframework/kinesis/AmplifyKinesisException { - public fun (Ljava/lang/String;Ljava/lang/Throwable;Ljava/lang/String;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/Throwable;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V } public final class com/amplifyframework/kinesis/BuildConfig { diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisException.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisException.kt index da0d50e158..ac08774590 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisException.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisException.kt @@ -18,14 +18,14 @@ import com.amplifyframework.recordcache.RecordCacheLimitExceededException * - [AmplifyKinesisUnknownException] — unexpected / uncategorized errors * * @param message Error message describing what went wrong - * @param cause Underlying cause of the exception * @param recoverySuggestion Suggested action to resolve the error + * @param cause Underlying cause of the exception */ sealed class AmplifyKinesisException( message: String, - cause: Throwable? = null, - recoverySuggestion: String -) : AmplifyException(message, cause, recoverySuggestion) { + recoverySuggestion: String, + cause: Throwable? = null +) : AmplifyException(message, recoverySuggestion, cause) { companion object { /** * Maps a [Throwable] into the appropriate [AmplifyKinesisException] subtype, @@ -35,28 +35,28 @@ sealed class AmplifyKinesisException( is AmplifyKinesisException -> error is RecordCacheDatabaseException -> AmplifyKinesisStorageException( message = error.message, - cause = error, - recoverySuggestion = error.recoverySuggestion + recoverySuggestion = error.recoverySuggestion, + cause = error ) is RecordCacheLimitExceededException -> AmplifyKinesisLimitExceededException( message = error.message, - cause = error, - recoverySuggestion = error.recoverySuggestion + recoverySuggestion = error.recoverySuggestion, + cause = error ) is RecordCacheException -> AmplifyKinesisStorageException( message = error.message, - cause = error, - recoverySuggestion = error.recoverySuggestion + recoverySuggestion = error.recoverySuggestion, + cause = error ) is SdkKinesisException -> AmplifyKinesisServiceException( message = "A service error occurred", - cause = error, - recoverySuggestion = DEFAULT_RECOVERY_SUGGESTION + recoverySuggestion = DEFAULT_RECOVERY_SUGGESTION, + cause = error ) else -> AmplifyKinesisUnknownException( message = error.message ?: "An unknown error occurred", - cause = error, - recoverySuggestion = DEFAULT_RECOVERY_SUGGESTION + recoverySuggestion = DEFAULT_RECOVERY_SUGGESTION, + cause = error ) } } @@ -65,27 +65,27 @@ sealed class AmplifyKinesisException( /** Local storage / database error. */ class AmplifyKinesisStorageException( message: String, - cause: Throwable? = null, - recoverySuggestion: String -) : AmplifyKinesisException(message, cause, recoverySuggestion) + recoverySuggestion: String, + cause: Throwable? = null +) : AmplifyKinesisException(message, recoverySuggestion, cause) /** Kinesis API / SDK error. */ class AmplifyKinesisServiceException( message: String, - override val cause: SdkKinesisException, - recoverySuggestion: String -) : AmplifyKinesisException(message, cause, recoverySuggestion) + recoverySuggestion: String, + override val cause: SdkKinesisException +) : AmplifyKinesisException(message, recoverySuggestion, cause) /** Local cache size or record limit exceeded. */ class AmplifyKinesisLimitExceededException( message: String, - cause: Throwable? = null, - recoverySuggestion: String -) : AmplifyKinesisException(message, cause, recoverySuggestion) + recoverySuggestion: String, + cause: Throwable? = null +) : AmplifyKinesisException(message, recoverySuggestion, cause) /** Unexpected / uncategorized error. */ class AmplifyKinesisUnknownException( message: String, - cause: Throwable? = null, - recoverySuggestion: String -) : AmplifyKinesisException(message, cause, recoverySuggestion) + recoverySuggestion: String, + cause: Throwable? = null +) : AmplifyKinesisException(message, recoverySuggestion, cause) diff --git a/foundation/api/foundation.api b/foundation/api/foundation.api index f9f018d7f8..aba5d134b3 100644 --- a/foundation/api/foundation.api +++ b/foundation/api/foundation.api @@ -30,8 +30,8 @@ public abstract interface class com/amplifyframework/foundation/credentials/AwsC } public abstract class com/amplifyframework/foundation/exceptions/AmplifyException : java/lang/Exception { - public fun (Ljava/lang/String;Ljava/lang/Throwable;Ljava/lang/String;)V - public synthetic fun (Ljava/lang/String;Ljava/lang/Throwable;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V + public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun getRecoverySuggestion ()Ljava/lang/String; public fun toString ()Ljava/lang/String; } diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/exceptions/AmplifyException.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/exceptions/AmplifyException.kt index 718b376dfe..df5f5b9747 100644 --- a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/exceptions/AmplifyException.kt +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/exceptions/AmplifyException.kt @@ -18,13 +18,13 @@ package com.amplifyframework.foundation.exceptions /** * Top-level exception in the Amplify framework. All other Amplify exceptions should extend this. * @param message An error message describing why this exception was thrown - * @param cause The underlying cause of this exception * @param recoverySuggestion Text suggesting a way to recover from the error being described + * @param cause The underlying cause of this exception */ abstract class AmplifyException( message: String, - cause: Throwable? = null, - val recoverySuggestion: String + val recoverySuggestion: String, + cause: Throwable? = null ) : Exception(message, cause) { override fun toString() = "${this::class.simpleName}(message=$message, cause=$cause, recoverySuggestion=$recoverySuggestion)" From cb1087822606649d6c3b8963e186fff863d0bdf4 Mon Sep 17 00:00:00 2001 From: Jan Vincent Hoffbauer Date: Wed, 25 Feb 2026 07:55:26 +0100 Subject: [PATCH 33/37] Fix further results imports and remove obsolete functions --- aws-kinesis/api/aws-kinesis.api | 7 +++++++ .../KinesisDataStreamsInstrumentationTest.kt | 1 + .../recordcache/RecordClientFlushTest.kt | 18 +++++++++--------- foundation/api/foundation.api | 5 ----- .../foundation/result/Result.kt | 10 ---------- 5 files changed, 17 insertions(+), 24 deletions(-) diff --git a/aws-kinesis/api/aws-kinesis.api b/aws-kinesis/api/aws-kinesis.api index 31bd1c8346..0c2aa2f51b 100644 --- a/aws-kinesis/api/aws-kinesis.api +++ b/aws-kinesis/api/aws-kinesis.api @@ -137,6 +137,13 @@ public final class com/amplifyframework/recordcache/FlushStrategy$Interval : com public fun toString ()Ljava/lang/String; } +public final class com/amplifyframework/recordcache/FlushStrategy$None : com/amplifyframework/recordcache/FlushStrategy { + public static final field INSTANCE Lcom/amplifyframework/recordcache/FlushStrategy$None; + public fun equals (Ljava/lang/Object;)Z + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + public final class com/amplifyframework/recordcache/RecordData { public fun ()V public fun (Z)V diff --git a/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt b/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt index a1518bb090..967d47491e 100644 --- a/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt +++ b/aws-kinesis/src/androidTest/java/com/amplifyframework/kinesis/KinesisDataStreamsInstrumentationTest.kt @@ -27,6 +27,7 @@ import com.amplifyframework.recordcache.FlushStrategy import com.amplifyframework.testutils.assertions.shouldBeFailure import com.amplifyframework.testutils.assertions.shouldBeSuccess import com.amplifyframework.testutils.sync.SynchronousAuth +import io.kotest.matchers.booleans.shouldBeFalse import io.kotest.matchers.booleans.shouldBeTrue import io.kotest.matchers.ints.shouldBeGreaterThan import io.kotest.matchers.nulls.shouldNotBeNull diff --git a/aws-kinesis/src/test/java/com/amplifyframework/recordcache/RecordClientFlushTest.kt b/aws-kinesis/src/test/java/com/amplifyframework/recordcache/RecordClientFlushTest.kt index 7ecfe567eb..e279dda612 100644 --- a/aws-kinesis/src/test/java/com/amplifyframework/recordcache/RecordClientFlushTest.kt +++ b/aws-kinesis/src/test/java/com/amplifyframework/recordcache/RecordClientFlushTest.kt @@ -3,8 +3,7 @@ package com.amplifyframework.recordcache import androidx.sqlite.driver.bundled.BundledSQLiteDriver import com.amplifyframework.foundation.result.Result import com.amplifyframework.foundation.result.getOrThrow -import com.amplifyframework.foundation.result.isSuccess -import io.kotest.matchers.booleans.shouldBeTrue +import com.amplifyframework.testutils.assertions.shouldBeSuccess import io.kotest.matchers.shouldBe import io.mockk.coEvery import io.mockk.mockk @@ -66,19 +65,20 @@ class RecordClientFlushTest { storage.incrementRetryCount(listOf(record3Id)).getOrThrow() // Now at max retries (3) // Configure mock sender response - coEvery { mockSender.putRecords(streamName, any()) } returns Result.Success( - PutRecordsResponse( - successfulIds = listOf(allRecords[0].id), - retryableIds = listOf(allRecords[1].id), - failedIds = listOf(record3Id) + coEvery { mockSender.putRecords(streamName, any()) } returns + Result.Success( + PutRecordsResponse( + successfulIds = listOf(allRecords[0].id), + retryableIds = listOf(allRecords[1].id), + failedIds = listOf(record3Id) + ) ) - ) // When val result = recordClient.flush() // Then - result.isSuccess().shouldBeTrue() + result.shouldBeSuccess() // Verify final state val remainingRecordsByStream = storage.getRecordsByStream().getOrThrow() diff --git a/foundation/api/foundation.api b/foundation/api/foundation.api index aba5d134b3..2ac8f1d963 100644 --- a/foundation/api/foundation.api +++ b/foundation/api/foundation.api @@ -100,8 +100,3 @@ public final class com/amplifyframework/foundation/result/Result$Success : com/a public fun toString ()Ljava/lang/String; } -public final class com/amplifyframework/foundation/result/ResultKt { - public static final fun isFailure (Lcom/amplifyframework/foundation/result/Result;)Z - public static final fun isSuccess (Lcom/amplifyframework/foundation/result/Result;)Z -} - diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Result.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Result.kt index a6167dc8b5..462589d11c 100644 --- a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Result.kt +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/result/Result.kt @@ -29,13 +29,3 @@ sealed interface Result { */ data class Failure(val error: E) : Result } - -/** - * Returns `true` if this result is a success, `false` otherwise. - */ -fun Result.isSuccess(): Boolean = this is Result.Success - -/** - * Returns `true` if this result is a failure, `false` otherwise. - */ -fun Result.isFailure(): Boolean = this is Result.Failure From 6cd09962e46cdce26d2ad6b28db54999ae13679a Mon Sep 17 00:00:00 2001 From: Jan Vincent Hoffbauer Date: Wed, 25 Feb 2026 07:55:40 +0100 Subject: [PATCH 34/37] Add core dependencies to e2e test --- aws-kinesis/build.gradle.kts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/aws-kinesis/build.gradle.kts b/aws-kinesis/build.gradle.kts index 9de4e3640c..c58c2b5d02 100644 --- a/aws-kinesis/build.gradle.kts +++ b/aws-kinesis/build.gradle.kts @@ -51,6 +51,8 @@ dependencies { androidTestImplementation(project(":testutils")) androidTestImplementation(libs.test.androidx.core) + androidTestImplementation(project(":core")) + androidTestImplementation(project(":aws-core")) androidTestImplementation(project(":aws-auth-cognito")) androidTestImplementation(libs.test.androidx.runner) androidTestImplementation(libs.test.kotlin.coroutines) From 5c915bba30ae1e0a481b5baae74e6f3705b19ae1 Mon Sep 17 00:00:00 2001 From: Jan Vincent Hoffbauer Date: Wed, 25 Feb 2026 07:56:15 +0100 Subject: [PATCH 35/37] Add flush strategy none --- .../kinesis/AmplifyKinesisClient.kt | 18 ++++++++++-------- .../recordcache/FlushStrategy.kt | 5 +++++ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt index 3bd335ab7a..1e508ded2a 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt @@ -90,19 +90,21 @@ class AmplifyKinesisClient( maxBytes = options.cacheMaxBytes ) ) - private val scheduler: AutoFlushScheduler + private val scheduler: AutoFlushScheduler? - @Volatile private var isEnabled = false + @Volatile private var isEnabled = true init { - if (options.flushStrategy is FlushStrategy.Interval) { - scheduler = AutoFlushScheduler( + scheduler = when (options.flushStrategy) { + is FlushStrategy.Interval -> AutoFlushScheduler( options.flushStrategy, client = recordClient ) - } else { - throw IllegalArgumentException("Flush strategy must be interval") + is FlushStrategy.None -> null } + + // Auto-start the scheduler if present + scheduler?.start() } /** @@ -181,7 +183,7 @@ class AmplifyKinesisClient( */ fun enable() { isEnabled = true - scheduler.start() + scheduler?.start() } /** @@ -190,7 +192,7 @@ class AmplifyKinesisClient( */ fun disable() { isEnabled = false - scheduler.disable() + scheduler?.disable() } private fun Result.wrapError(): Result = mapFailure { diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/FlushStrategy.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/FlushStrategy.kt index 2ed8d56713..b60be08178 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/FlushStrategy.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/FlushStrategy.kt @@ -24,4 +24,9 @@ sealed class FlushStrategy { */ val interval: Duration = 30.seconds ) : FlushStrategy() + + /** + * Disable automatic flushing. Records must be flushed manually by calling flush(). + */ + data object None : FlushStrategy() } From fbf83008c527a2282522f7f7e07bf24d119986d9 Mon Sep 17 00:00:00 2001 From: Jan Vincent Hoffbauer Date: Wed, 25 Feb 2026 08:04:33 +0100 Subject: [PATCH 36/37] Move default recovery suggestion to foundation --- .../com/amplifyframework/kinesis/AmplifyKinesisException.kt | 2 +- .../com/amplifyframework/recordcache/RecordCacheException.kt | 3 --- .../com/amplifyframework/recordcache/SQLiteRecordStorage.kt | 1 + foundation/api/foundation.api | 4 ++++ .../foundation/exceptions/AmplifyException.kt | 3 +++ 5 files changed, 9 insertions(+), 4 deletions(-) diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisException.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisException.kt index ac08774590..8e88eca623 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisException.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisException.kt @@ -2,7 +2,7 @@ package com.amplifyframework.kinesis import aws.sdk.kotlin.services.kinesis.model.KinesisException as SdkKinesisException import com.amplifyframework.foundation.exceptions.AmplifyException -import com.amplifyframework.recordcache.DEFAULT_RECOVERY_SUGGESTION +import com.amplifyframework.foundation.exceptions.DEFAULT_RECOVERY_SUGGESTION import com.amplifyframework.recordcache.RecordCacheDatabaseException import com.amplifyframework.recordcache.RecordCacheException import com.amplifyframework.recordcache.RecordCacheLimitExceededException diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordCacheException.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordCacheException.kt index 31d257882c..230a061a53 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordCacheException.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/RecordCacheException.kt @@ -25,6 +25,3 @@ internal class RecordCacheLimitExceededException( recoverySuggestion: String, cause: Throwable? = null ) : RecordCacheException(message, recoverySuggestion, cause) - -/** Default recovery suggestion for errors. */ -internal const val DEFAULT_RECOVERY_SUGGESTION = "Inspect the underlying error for more details." diff --git a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt index 1235f4436c..51206b288b 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/recordcache/SQLiteRecordStorage.kt @@ -6,6 +6,7 @@ import androidx.sqlite.SQLiteConnection import androidx.sqlite.driver.bundled.BundledSQLiteDriver import androidx.sqlite.execSQL import com.amplifyframework.annotations.InternalAmplifyApi +import com.amplifyframework.foundation.exceptions.DEFAULT_RECOVERY_SUGGESTION import com.amplifyframework.foundation.logging.AmplifyLogging import com.amplifyframework.foundation.logging.Logger import com.amplifyframework.foundation.result.Result diff --git a/foundation/api/foundation.api b/foundation/api/foundation.api index 2ac8f1d963..9f27bd018b 100644 --- a/foundation/api/foundation.api +++ b/foundation/api/foundation.api @@ -36,6 +36,10 @@ public abstract class com/amplifyframework/foundation/exceptions/AmplifyExceptio public fun toString ()Ljava/lang/String; } +public final class com/amplifyframework/foundation/exceptions/AmplifyExceptionKt { + public static final field DEFAULT_RECOVERY_SUGGESTION Ljava/lang/String; +} + public final class com/amplifyframework/foundation/logging/AmplifyLogging { public static final field INSTANCE Lcom/amplifyframework/foundation/logging/AmplifyLogging; public static final fun addSink (Lcom/amplifyframework/foundation/logging/LogSink;)V diff --git a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/exceptions/AmplifyException.kt b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/exceptions/AmplifyException.kt index df5f5b9747..0ff0c66e6b 100644 --- a/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/exceptions/AmplifyException.kt +++ b/foundation/src/commonMain/kotlin/com/amplifyframework/foundation/exceptions/AmplifyException.kt @@ -15,6 +15,9 @@ package com.amplifyframework.foundation.exceptions +/** Default recovery suggestion for errors. */ +const val DEFAULT_RECOVERY_SUGGESTION = "Inspect the underlying error for more details." + /** * Top-level exception in the Amplify framework. All other Amplify exceptions should extend this. * @param message An error message describing why this exception was thrown From 41e80e6de899c4675ace074de1eaa657e71e1e99 Mon Sep 17 00:00:00 2001 From: Jan Vincent Hoffbauer Date: Thu, 26 Feb 2026 11:20:25 +0100 Subject: [PATCH 37/37] Add user agent to kinesis sdk client --- aws-kinesis/build.gradle.kts | 1 + .../kinesis/AmplifyKinesisClient.kt | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/aws-kinesis/build.gradle.kts b/aws-kinesis/build.gradle.kts index c58c2b5d02..1864b49a6f 100644 --- a/aws-kinesis/build.gradle.kts +++ b/aws-kinesis/build.gradle.kts @@ -30,6 +30,7 @@ dependencies { implementation(project(":foundation-bridge")) implementation(libs.androidx.appcompat) + implementation(libs.aws.http) implementation(libs.aws.kinesis) implementation(libs.kotlin.serializationJson) implementation(libs.androidx.sqlite) diff --git a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt index 1e508ded2a..6d6504fc98 100644 --- a/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt +++ b/aws-kinesis/src/main/java/com/amplifyframework/kinesis/AmplifyKinesisClient.kt @@ -1,7 +1,10 @@ package com.amplifyframework.kinesis import android.content.Context +import aws.sdk.kotlin.runtime.http.operation.customUserAgentMetadata import aws.sdk.kotlin.services.kinesis.KinesisClient +import aws.smithy.kotlin.runtime.client.RequestInterceptorContext +import aws.smithy.kotlin.runtime.http.interceptors.HttpInterceptor import com.amplifyframework.annotations.InternalAmplifyApi import com.amplifyframework.foundation.credentials.AwsCredentials import com.amplifyframework.foundation.credentials.AwsCredentialsProvider @@ -75,6 +78,18 @@ class AmplifyKinesisClient( val kinesisClient: KinesisClient = KinesisClient { this.region = this@AmplifyKinesisClient.region this.credentialsProvider = this@AmplifyKinesisClient.credentialsProvider.toSmithyProvider() + + // Add user agent metadata for tracking Kinesis feature usage + this.interceptors += object : HttpInterceptor { + override suspend fun modifyBeforeSerialization(context: RequestInterceptorContext): Any { + context.executionContext.customUserAgentMetadata.add( + "kinesis", + BuildConfig.VERSION_NAME + ) + return super.modifyBeforeSerialization(context) + } + } + options.configureClient?.applyConfiguration(this) }