Skip to content

Commit 87d2b46

Browse files
jvh-awsmattcreaserthisisabhash
authored
feat(kinesis): Add Kinesis Client (#3194)
Co-authored-by: Matt Creaser <mattwcc@amazon.com> Co-authored-by: Abhash Kumar Singh <thisisabhash@gmail.com>
1 parent 7971c8b commit 87d2b46

41 files changed

Lines changed: 32370 additions & 3 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

aws-kinesis/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/build

aws-kinesis/api/aws-kinesis.api

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
public final class com/amplifyframework/kinesis/AmplifyKinesisClient {
2+
public fun <init> (Landroid/content/Context;Ljava/lang/String;Lcom/amplifyframework/foundation/credentials/AwsCredentialsProvider;Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions;)V
3+
public synthetic fun <init> (Landroid/content/Context;Ljava/lang/String;Lcom/amplifyframework/foundation/credentials/AwsCredentialsProvider;Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
4+
public final fun clearCache (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
5+
public final fun disable ()V
6+
public final fun enable ()V
7+
public final fun flush (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
8+
public final fun getKinesisClient ()Laws/sdk/kotlin/services/kinesis/KinesisClient;
9+
public final fun record ([BLjava/lang/String;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
10+
}
11+
12+
public final class com/amplifyframework/kinesis/AmplifyKinesisClientOptions {
13+
public static final field Companion Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions$Companion;
14+
public static final fun builder ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions$Builder;
15+
public final fun component1 ()J
16+
public final fun component2 ()I
17+
public final fun component3 ()Lcom/amplifyframework/recordcache/FlushStrategy;
18+
public final fun component4 ()Lcom/amplifyframework/kinesis/KinesisClientConfigurationProvider;
19+
public static final fun defaults ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions;
20+
public fun equals (Ljava/lang/Object;)Z
21+
public final fun getCacheMaxBytes ()J
22+
public final fun getConfigureClient ()Lcom/amplifyframework/kinesis/KinesisClientConfigurationProvider;
23+
public final fun getFlushStrategy ()Lcom/amplifyframework/recordcache/FlushStrategy;
24+
public final fun getMaxRetries ()I
25+
public fun hashCode ()I
26+
public fun toString ()Ljava/lang/String;
27+
}
28+
29+
public final class com/amplifyframework/kinesis/AmplifyKinesisClientOptions$Builder {
30+
public final fun build ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions;
31+
public final fun cacheMaxBytes (J)Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions$Builder;
32+
public final fun configureClient (Lcom/amplifyframework/kinesis/KinesisClientConfigurationProvider;)Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions$Builder;
33+
public final synthetic fun configureClient (Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions$Builder;
34+
public final fun flushStrategy (Lcom/amplifyframework/recordcache/FlushStrategy;)Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions$Builder;
35+
public final fun getCacheMaxBytes ()J
36+
public final fun getConfigureClient ()Lcom/amplifyframework/kinesis/KinesisClientConfigurationProvider;
37+
public final fun getFlushStrategy ()Lcom/amplifyframework/recordcache/FlushStrategy;
38+
public final fun getMaxRetries ()I
39+
public final fun maxRetries (I)Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions$Builder;
40+
public final synthetic fun setCacheMaxBytes (J)V
41+
public final synthetic fun setFlushStrategy (Lcom/amplifyframework/recordcache/FlushStrategy;)V
42+
public final synthetic fun setMaxRetries (I)V
43+
}
44+
45+
public final class com/amplifyframework/kinesis/AmplifyKinesisClientOptions$Companion {
46+
public final fun builder ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions$Builder;
47+
public final fun defaults ()Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions;
48+
public final synthetic fun invoke (Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/kinesis/AmplifyKinesisClientOptions;
49+
}
50+
51+
public abstract class com/amplifyframework/kinesis/AmplifyKinesisException : com/amplifyframework/foundation/exceptions/AmplifyException {
52+
public static final field Companion Lcom/amplifyframework/kinesis/AmplifyKinesisException$Companion;
53+
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
54+
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
55+
}
56+
57+
public final class com/amplifyframework/kinesis/AmplifyKinesisException$Companion {
58+
}
59+
60+
public final class com/amplifyframework/kinesis/AmplifyKinesisLimitExceededException : com/amplifyframework/kinesis/AmplifyKinesisException {
61+
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V
62+
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
63+
}
64+
65+
public final class com/amplifyframework/kinesis/AmplifyKinesisStorageException : com/amplifyframework/kinesis/AmplifyKinesisException {
66+
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V
67+
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
68+
}
69+
70+
public final class com/amplifyframework/kinesis/AmplifyKinesisUnknownException : com/amplifyframework/kinesis/AmplifyKinesisException {
71+
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V
72+
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
73+
}
74+
75+
public final class com/amplifyframework/kinesis/AmplifyKinesisValidationException : com/amplifyframework/kinesis/AmplifyKinesisException {
76+
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V
77+
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
78+
}
79+
80+
public final class com/amplifyframework/kinesis/BuildConfig {
81+
public static final field BUILD_TYPE Ljava/lang/String;
82+
public static final field DEBUG Z
83+
public static final field LIBRARY_PACKAGE_NAME Ljava/lang/String;
84+
public static final field VERSION_NAME Ljava/lang/String;
85+
public fun <init> ()V
86+
}
87+
88+
public abstract interface class com/amplifyframework/kinesis/KinesisClientConfigurationProvider {
89+
public abstract fun applyConfiguration (Laws/sdk/kotlin/services/kinesis/KinesisClient$Config$Builder;)V
90+
}
91+
92+
public final class com/amplifyframework/recordcache/ClearCacheData {
93+
public fun <init> ()V
94+
public fun <init> (I)V
95+
public synthetic fun <init> (IILkotlin/jvm/internal/DefaultConstructorMarker;)V
96+
public final fun component1 ()I
97+
public final fun copy (I)Lcom/amplifyframework/recordcache/ClearCacheData;
98+
public static synthetic fun copy$default (Lcom/amplifyframework/recordcache/ClearCacheData;IILjava/lang/Object;)Lcom/amplifyframework/recordcache/ClearCacheData;
99+
public fun equals (Ljava/lang/Object;)Z
100+
public final fun getRecordsCleared ()I
101+
public fun hashCode ()I
102+
public fun toString ()Ljava/lang/String;
103+
}
104+
105+
public final class com/amplifyframework/recordcache/FlushData {
106+
public fun <init> ()V
107+
public fun <init> (IZ)V
108+
public synthetic fun <init> (IZILkotlin/jvm/internal/DefaultConstructorMarker;)V
109+
public final fun component1 ()I
110+
public final fun component2 ()Z
111+
public final fun copy (IZ)Lcom/amplifyframework/recordcache/FlushData;
112+
public static synthetic fun copy$default (Lcom/amplifyframework/recordcache/FlushData;IZILjava/lang/Object;)Lcom/amplifyframework/recordcache/FlushData;
113+
public fun equals (Ljava/lang/Object;)Z
114+
public final fun getFlushInProgress ()Z
115+
public final fun getRecordsFlushed ()I
116+
public fun hashCode ()I
117+
public fun toString ()Ljava/lang/String;
118+
}
119+
120+
public abstract class com/amplifyframework/recordcache/FlushStrategy {
121+
}
122+
123+
public final class com/amplifyframework/recordcache/FlushStrategy$Interval : com/amplifyframework/recordcache/FlushStrategy {
124+
public synthetic fun <init> (JILkotlin/jvm/internal/DefaultConstructorMarker;)V
125+
public synthetic fun <init> (JLkotlin/jvm/internal/DefaultConstructorMarker;)V
126+
public final fun component1-UwyO8pc ()J
127+
public final fun copy-LRDsOJo (J)Lcom/amplifyframework/recordcache/FlushStrategy$Interval;
128+
public static synthetic fun copy-LRDsOJo$default (Lcom/amplifyframework/recordcache/FlushStrategy$Interval;JILjava/lang/Object;)Lcom/amplifyframework/recordcache/FlushStrategy$Interval;
129+
public fun equals (Ljava/lang/Object;)Z
130+
public final fun getInterval-UwyO8pc ()J
131+
public fun hashCode ()I
132+
public fun toString ()Ljava/lang/String;
133+
}
134+
135+
public final class com/amplifyframework/recordcache/FlushStrategy$None : com/amplifyframework/recordcache/FlushStrategy {
136+
public static final field INSTANCE Lcom/amplifyframework/recordcache/FlushStrategy$None;
137+
public fun equals (Ljava/lang/Object;)Z
138+
public fun hashCode ()I
139+
public fun toString ()Ljava/lang/String;
140+
}
141+
142+
public final class com/amplifyframework/recordcache/RecordData {
143+
public fun <init> ()V
144+
public fun <init> (Z)V
145+
public synthetic fun <init> (ZILkotlin/jvm/internal/DefaultConstructorMarker;)V
146+
public final fun component1 ()Z
147+
public final fun copy (Z)Lcom/amplifyframework/recordcache/RecordData;
148+
public static synthetic fun copy$default (Lcom/amplifyframework/recordcache/RecordData;ZILjava/lang/Object;)Lcom/amplifyframework/recordcache/RecordData;
149+
public fun equals (Ljava/lang/Object;)Z
150+
public final fun getSuccess ()Z
151+
public fun hashCode ()I
152+
public fun toString ()Ljava/lang/String;
153+
}
154+

aws-kinesis/build.gradle.kts

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/*
2+
* Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License").
5+
* You may not use this file except in compliance with the License.
6+
* A copy of the License is located at
7+
*
8+
* http://aws.amazon.com/apache2.0
9+
*
10+
* or in the "license" file accompanying this file. This file is distributed
11+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12+
* express or implied. See the License for the specific language governing
13+
* permissions and limitations under the License.
14+
*/
15+
16+
plugins {
17+
alias(libs.plugins.amplify.android.library)
18+
alias(libs.plugins.kotlin.serialization)
19+
alias(libs.plugins.amplify.publishing)
20+
}
21+
22+
apply(from = rootProject.file("configuration/checkstyle.gradle"))
23+
24+
android {
25+
namespace = "com.amplifyframework.kinesis"
26+
}
27+
28+
dependencies {
29+
implementation(project(":foundation"))
30+
implementation(project(":foundation-bridge"))
31+
32+
implementation(libs.androidx.appcompat)
33+
implementation(libs.aws.kinesis)
34+
implementation(libs.aws.http)
35+
implementation(libs.kotlin.serializationJson)
36+
implementation(libs.androidx.sqlite)
37+
implementation(libs.androidx.sqlite.bundled)
38+
implementation(libs.androidx.workmanager)
39+
40+
testImplementation(libs.test.junit)
41+
testImplementation(libs.test.mockk)
42+
testImplementation(libs.test.mockito.core)
43+
testImplementation(libs.test.mockito.inline)
44+
testImplementation(libs.test.robolectric)
45+
testImplementation(libs.test.androidx.junit)
46+
testImplementation(libs.test.androidx.core)
47+
testImplementation(libs.test.kotlin.coroutines)
48+
testImplementation(libs.test.kotest.assertions)
49+
testImplementation(libs.androidx.sqlite.bundled.jvm)
50+
testImplementation(project(":testutils"))
51+
testImplementation(project(":aws-kinesis"))
52+
53+
androidTestImplementation(project(":testutils"))
54+
androidTestImplementation(libs.test.androidx.core)
55+
androidTestImplementation(project(":core"))
56+
androidTestImplementation(project(":aws-core"))
57+
androidTestImplementation(project(":aws-auth-cognito"))
58+
androidTestImplementation(libs.test.androidx.runner)
59+
androidTestImplementation(libs.test.kotlin.coroutines)
60+
androidTestImplementation(libs.test.androidx.junit)
61+
androidTestImplementation(libs.test.kotest.assertions)
62+
androidTestImplementation(project(":aws-kinesis"))
63+
androidTestImplementation(libs.androidx.sqlite)
64+
65+
androidTestUtil(libs.test.androidx.orchestrator)
66+
}

aws-kinesis/gradle.properties

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
POM_ARTIFACT_ID=aws-kinesis
2+
POM_NAME=Amplify Framework for Android - Kinesis Datastreams
3+
POM_DESCRIPTION=Amplify Framework for Android - Kinesis Datastreams
4+
POM_PACKAGING=aar
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { defineAuth } from '@aws-amplify/backend';
2+
3+
export const auth = defineAuth({
4+
loginWith: {
5+
email: true,
6+
},
7+
});
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { defineBackend } from '@aws-amplify/backend';
2+
import { auth } from './auth/resource';
3+
import * as kinesis from 'aws-cdk-lib/aws-kinesis';
4+
import { Duration } from 'aws-cdk-lib';
5+
import { PolicyStatement } from 'aws-cdk-lib/aws-iam';
6+
7+
const backend = defineBackend({
8+
auth,
9+
});
10+
11+
const kinesisStack = backend.createStack('KinesisStack');
12+
13+
const stream = new kinesis.Stream(kinesisStack, 'TestStream', {
14+
streamName: 'amplify-kinesis-test-stream',
15+
shardCount: 1,
16+
retentionPeriod: Duration.hours(24),
17+
});
18+
19+
// Grant authenticated users permission to put records
20+
backend.auth.resources.authenticatedUserIamRole.addToPrincipalPolicy(
21+
new PolicyStatement({
22+
actions: [
23+
'kinesis:PutRecord',
24+
'kinesis:PutRecords',
25+
'kinesis:DescribeStream',
26+
],
27+
resources: [stream.streamArn],
28+
})
29+
);
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"type": "module"
3+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"compilerOptions": {
3+
"target": "es2022",
4+
"module": "es2022",
5+
"moduleResolution": "bundler",
6+
"resolveJsonModule": true,
7+
"esModuleInterop": true,
8+
"forceConsistentCasingInFileNames": true,
9+
"strict": true,
10+
"skipLibCheck": true,
11+
"paths": {
12+
"$amplify/*": [
13+
"../.amplify/generated/*"
14+
]
15+
}
16+
}
17+
}

0 commit comments

Comments
 (0)