Skip to content

Commit 298749b

Browse files
committed
chore: add codegen for eventstream handler
1 parent ff982fa commit 298749b

File tree

3 files changed

+37
-24
lines changed

3 files changed

+37
-24
lines changed
Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package software.amazon.smithy.aws.typescript.codegen;
22

3+
import static software.amazon.smithy.typescript.codegen.integration.RuntimeClientPlugin.Convention.HAS_CONFIG;
4+
import static software.amazon.smithy.typescript.codegen.integration.RuntimeClientPlugin.Convention.HAS_MIDDLEWARE;
5+
6+
37
import java.util.Collections;
48
import java.util.List;
59
import java.util.Map;
@@ -21,14 +25,23 @@
2125
import software.amazon.smithy.utils.ListUtils;
2226
import software.amazon.smithy.utils.MapUtils;
2327

24-
public class AddEventStreamSigningDependency implements TypeScriptIntegration {
28+
/**
29+
* Adds runtime client plugins that handle the eventstream flow in request,
30+
* including eventstream payload signing.
31+
*/
32+
public class AddEventStreamHandlingDependency implements TypeScriptIntegration {
2533
@Override
2634
public List<RuntimeClientPlugin> getClientPlugins() {
2735
return ListUtils.of(
2836
RuntimeClientPlugin.builder()
29-
.withConventions(AwsDependency.MIDDLEWARE_EVENTSTREAM_SIGNING.dependency,
30-
"EventStream")
31-
.servicePredicate(AddEventStreamSigningDependency::hasEventStreamInput)
37+
.withConventions(AwsDependency.MIDDLEWARE_EVENTSTREAM.dependency,
38+
"EventStream", HAS_CONFIG)
39+
.servicePredicate(AddEventStreamHandlingDependency::hasEventStreamInput)
40+
.build(),
41+
RuntimeClientPlugin.builder()
42+
.withConventions(AwsDependency.MIDDLEWARE_EVENTSTREAM.dependency,
43+
"EventStream", HAS_MIDDLEWARE)
44+
.operationPredicate((m, s, o) -> AddEventStreamHandlingDependency.hasEventStreamInput(m, s))
3245
.build()
3346
);
3447
}
@@ -41,10 +54,10 @@ public void addConfigInterfaceFields(
4154
TypeScriptWriter writer
4255
) {
4356
if (hasEventStreamInput(model, settings.getService(model))) {
44-
writer.addImport("EventStreamSignerProvider", "__EventStreamSignerProvider",
57+
writer.addImport("EventStreamPayloadHandlerProvider", "__EventStreamPayloadHandlerProvider",
4558
TypeScriptDependency.AWS_SDK_TYPES.packageName);
46-
writer.writeDocs("The function that provides necessary utilities for singing event stream");
47-
writer.write("eventStreamSignerProvider?: __EventStreamSignerProvider;\n");
59+
writer.writeDocs("The function that provides necessary utilities for handling request event stream.");
60+
writer.write("eventStreamPayloadHandlerProvider?: __EventStreamPayloadHandlerProvider;\n");
4861
}
4962
}
5063

@@ -62,25 +75,24 @@ public Map<String, Consumer<TypeScriptWriter>> getRuntimeConfigWriters(
6275

6376
switch (target) {
6477
case NODE:
65-
return MapUtils.of("eventStreamSignerProvider", writer -> {
66-
writer.addDependency(AwsDependency.AWS_SDK_EVENTSTREAM_SIGNER_NODE);
67-
writer.addImport("eventStreamSignerProvider", "eventStreamSignerProvider",
68-
AwsDependency.AWS_SDK_EVENTSTREAM_SIGNER_NODE.packageName);
69-
writer.write("eventStreamSignerProvider,");
78+
return MapUtils.of("eventStreamPayloadHandlerProvider", writer -> {
79+
writer.addDependency(AwsDependency.AWS_SDK_EVENTSTREAM_HANDLER_NODE);
80+
writer.addImport("eventStreamPayloadHandlerProvider", "eventStreamPayloadHandlerProvider",
81+
AwsDependency.AWS_SDK_EVENTSTREAM_HANDLER_NODE.packageName);
82+
writer.write("eventStreamPayloadHandlerProvider,");
7083
});
7184
case BROWSER:
7285
/**
7386
* Browser doesn't support streaming requests as of March 2020.
74-
* Here we don't supply invalidFunction. Each service client needs to support eventstream request
75-
* in browsers has to implement a customization providing its own eventStreamSignerProvider
76-
* TODO: update this when WebSocket event stream support lands
87+
* Each service client needs to support eventstream request in browser individually.
88+
* Services like TranscribeStreaming support it via WebSocket.
7789
*/
78-
return MapUtils.of("eventStreamSignerProvider", writer -> {
90+
return MapUtils.of("eventStreamPayloadHandlerProvider", writer -> {
7991
writer.addDependency(TypeScriptDependency.INVALID_DEPENDENCY);
8092
writer.addImport("invalidFunction", "invalidFunction",
8193
TypeScriptDependency.INVALID_DEPENDENCY.packageName);
82-
writer.openBlock("eventStreamSignerProvider: () => ({", "}),", () -> {
83-
writer.write("sign: invalidFunction(\"event stream request is not supported in browser.\"),");
94+
writer.openBlock("eventStreamPayloadHandlerProvider: () => ({", "}),", () -> {
95+
writer.write("handle: invalidFunction(\"event stream request is not supported in browser.\"),");
8496
});
8597
});
8698
case REACT_NATIVE:
@@ -89,12 +101,12 @@ public Map<String, Consumer<TypeScriptWriter>> getRuntimeConfigWriters(
89101
* Here we don't supply invalidFunction. Each service client needs to support eventstream request
90102
* in RN has to implement a customization providing its own eventStreamSignerProvider
91103
*/
92-
return MapUtils.of("eventStreamSignerProvider", writer -> {
104+
return MapUtils.of("eventStreamPayloadHandlerProvider", writer -> {
93105
writer.addDependency(TypeScriptDependency.INVALID_DEPENDENCY);
94106
writer.addImport("invalidFunction", "invalidFunction",
95107
TypeScriptDependency.INVALID_DEPENDENCY.packageName);
96-
writer.openBlock("eventStreamSignerProvider: () => ({", "}),", () -> {
97-
writer.write("sign: invalidFunction(\"event stream request is not supported in ReactNative.\"),");
108+
writer.openBlock("eventStreamPayloadHandlerProvider: () => ({", "}),", () -> {
109+
writer.write("handle: invalidFunction(\"event stream request is not supported in ReactNative.\"),");
98110
});
99111
});
100112
default:

codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsDependency.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,9 @@ public enum AwsDependency implements SymbolDependencyContainer {
5656
XML_PARSER(NORMAL_DEPENDENCY, "fast-xml-parser", "^3.16.0"),
5757
UUID_GENERATOR(NORMAL_DEPENDENCY, "uuid", "^7.0.0"),
5858
UUID_GENERATOR_TYPES(DEV_DEPENDENCY, "@types/uuid", "^7.0.0"),
59-
MIDDLEWARE_EVENTSTREAM_SIGNING(NORMAL_DEPENDENCY, "@aws-sdk/middleware-eventstream-signing", "^1.0.0-beta.0"),
60-
AWS_SDK_EVENTSTREAM_SIGNER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/eventstream-signer-node", "^1.0.0-beta.0");
59+
MIDDLEWARE_EVENTSTREAM(NORMAL_DEPENDENCY, "@aws-sdk/middleware-eventstream", "^1.0.0-beta.0"),
60+
AWS_SDK_EVENTSTREAM_HANDLER_NODE(NORMAL_DEPENDENCY, "@aws-sdk/eventstream-handler-node", "^1.0.0-beta.0"),
61+
TRANSCRIBESTREAMING_MIDDLEWARE(NORMAL_DEPENDENCY, "@aws-sdk/eventstream-handler", "^1.0.0-beta.0");
6162

6263
public final String packageName;
6364
public final String version;

codegen/smithy-aws-typescript-codegen/src/main/resources/META-INF/services/software.amazon.smithy.typescript.codegen.integration.TypeScriptIntegration

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ software.amazon.smithy.aws.typescript.codegen.AddMd5HashDependency
88
software.amazon.smithy.aws.typescript.codegen.AddStreamHasherDependency
99
software.amazon.smithy.aws.typescript.codegen.AddBodyChecksumGeneratorDependency
1010
software.amazon.smithy.aws.typescript.codegen.AddS3Config
11-
software.amazon.smithy.aws.typescript.codegen.AddEventStreamSigningDependency
11+
software.amazon.smithy.aws.typescript.codegen.AddEventStreamHandlingDependency
1212
software.amazon.smithy.aws.typescript.codegen.AddHttp2Dependency

0 commit comments

Comments
 (0)