From 29e9aba17cf814ad0ce4c8662e786dc70e419daa Mon Sep 17 00:00:00 2001 From: awstools Date: Mon, 11 Sep 2023 18:16:18 +0000 Subject: [PATCH] feat(client-medialive): AWS Elemental Link now supports attaching a Link UHD device to a MediaConnect flow. --- clients/client-medialive/README.md | 16 + clients/client-medialive/src/MediaLive.ts | 43 +++ .../client-medialive/src/MediaLiveClient.ts | 6 + .../commands/DescribeInputDeviceCommand.ts | 11 + .../src/commands/ListInputDevicesCommand.ts | 11 + .../commands/ListMultiplexProgramsCommand.ts | 2 +- .../src/commands/ListMultiplexesCommand.ts | 3 +- .../src/commands/ListOfferingsCommand.ts | 3 +- .../src/commands/StartInputDeviceCommand.ts | 164 +++++++++ .../src/commands/StopInputDeviceCommand.ts | 164 +++++++++ .../src/commands/UpdateInputDeviceCommand.ts | 25 ++ .../client-medialive/src/commands/index.ts | 2 + .../client-medialive/src/models/models_0.ts | 127 ++++--- .../client-medialive/src/models/models_1.ts | 242 ++++++------- .../client-medialive/src/models/models_2.ts | 189 ++++++++++ .../src/protocols/Aws_restJson1.ts | 235 ++++++++++++- codegen/sdk-codegen/aws-models/medialive.json | 332 +++++++++++++++++- 17 files changed, 1382 insertions(+), 193 deletions(-) create mode 100644 clients/client-medialive/src/commands/StartInputDeviceCommand.ts create mode 100644 clients/client-medialive/src/commands/StopInputDeviceCommand.ts diff --git a/clients/client-medialive/README.md b/clients/client-medialive/README.md index d9f3c33ef4882..f1fe65b4b97b9 100644 --- a/clients/client-medialive/README.md +++ b/clients/client-medialive/README.md @@ -586,6 +586,14 @@ StartChannel [Command API Reference](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-medialive/classes/startchannelcommand.html) / [Input](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-medialive/interfaces/startchannelcommandinput.html) / [Output](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-medialive/interfaces/startchannelcommandoutput.html) + +
+ +StartInputDevice + + +[Command API Reference](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-medialive/classes/startinputdevicecommand.html) / [Input](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-medialive/interfaces/startinputdevicecommandinput.html) / [Output](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-medialive/interfaces/startinputdevicecommandoutput.html) +
@@ -610,6 +618,14 @@ StopChannel [Command API Reference](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-medialive/classes/stopchannelcommand.html) / [Input](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-medialive/interfaces/stopchannelcommandinput.html) / [Output](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-medialive/interfaces/stopchannelcommandoutput.html) +
+
+ +StopInputDevice + + +[Command API Reference](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-medialive/classes/stopinputdevicecommand.html) / [Input](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-medialive/interfaces/stopinputdevicecommandinput.html) / [Output](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-medialive/interfaces/stopinputdevicecommandoutput.html) +
diff --git a/clients/client-medialive/src/MediaLive.ts b/clients/client-medialive/src/MediaLive.ts index 4a440ea756c99..ed107ac60924c 100644 --- a/clients/client-medialive/src/MediaLive.ts +++ b/clients/client-medialive/src/MediaLive.ts @@ -206,6 +206,11 @@ import { StartChannelCommandInput, StartChannelCommandOutput, } from "./commands/StartChannelCommand"; +import { + StartInputDeviceCommand, + StartInputDeviceCommandInput, + StartInputDeviceCommandOutput, +} from "./commands/StartInputDeviceCommand"; import { StartInputDeviceMaintenanceWindowCommand, StartInputDeviceMaintenanceWindowCommandInput, @@ -217,6 +222,11 @@ import { StartMultiplexCommandOutput, } from "./commands/StartMultiplexCommand"; import { StopChannelCommand, StopChannelCommandInput, StopChannelCommandOutput } from "./commands/StopChannelCommand"; +import { + StopInputDeviceCommand, + StopInputDeviceCommandInput, + StopInputDeviceCommandOutput, +} from "./commands/StopInputDeviceCommand"; import { StopMultiplexCommand, StopMultiplexCommandInput, @@ -319,9 +329,11 @@ const commands = { RebootInputDeviceCommand, RejectInputDeviceTransferCommand, StartChannelCommand, + StartInputDeviceCommand, StartInputDeviceMaintenanceWindowCommand, StartMultiplexCommand, StopChannelCommand, + StopInputDeviceCommand, StopMultiplexCommand, TransferInputDeviceCommand, UpdateAccountConfigurationCommand, @@ -1047,6 +1059,23 @@ export interface MediaLive { cb: (err: any, data?: StartChannelCommandOutput) => void ): void; + /** + * @see {@link StartInputDeviceCommand} + */ + startInputDevice( + args: StartInputDeviceCommandInput, + options?: __HttpHandlerOptions + ): Promise; + startInputDevice( + args: StartInputDeviceCommandInput, + cb: (err: any, data?: StartInputDeviceCommandOutput) => void + ): void; + startInputDevice( + args: StartInputDeviceCommandInput, + options: __HttpHandlerOptions, + cb: (err: any, data?: StartInputDeviceCommandOutput) => void + ): void; + /** * @see {@link StartInputDeviceMaintenanceWindowCommand} */ @@ -1089,6 +1118,20 @@ export interface MediaLive { cb: (err: any, data?: StopChannelCommandOutput) => void ): void; + /** + * @see {@link StopInputDeviceCommand} + */ + stopInputDevice( + args: StopInputDeviceCommandInput, + options?: __HttpHandlerOptions + ): Promise; + stopInputDevice(args: StopInputDeviceCommandInput, cb: (err: any, data?: StopInputDeviceCommandOutput) => void): void; + stopInputDevice( + args: StopInputDeviceCommandInput, + options: __HttpHandlerOptions, + cb: (err: any, data?: StopInputDeviceCommandOutput) => void + ): void; + /** * @see {@link StopMultiplexCommand} */ diff --git a/clients/client-medialive/src/MediaLiveClient.ts b/clients/client-medialive/src/MediaLiveClient.ts index b7391c897128f..0192dfb9a5746 100644 --- a/clients/client-medialive/src/MediaLiveClient.ts +++ b/clients/client-medialive/src/MediaLiveClient.ts @@ -153,12 +153,14 @@ import { RejectInputDeviceTransferCommandOutput, } from "./commands/RejectInputDeviceTransferCommand"; import { StartChannelCommandInput, StartChannelCommandOutput } from "./commands/StartChannelCommand"; +import { StartInputDeviceCommandInput, StartInputDeviceCommandOutput } from "./commands/StartInputDeviceCommand"; import { StartInputDeviceMaintenanceWindowCommandInput, StartInputDeviceMaintenanceWindowCommandOutput, } from "./commands/StartInputDeviceMaintenanceWindowCommand"; import { StartMultiplexCommandInput, StartMultiplexCommandOutput } from "./commands/StartMultiplexCommand"; import { StopChannelCommandInput, StopChannelCommandOutput } from "./commands/StopChannelCommand"; +import { StopInputDeviceCommandInput, StopInputDeviceCommandOutput } from "./commands/StopInputDeviceCommand"; import { StopMultiplexCommandInput, StopMultiplexCommandOutput } from "./commands/StopMultiplexCommand"; import { TransferInputDeviceCommandInput, @@ -245,9 +247,11 @@ export type ServiceInputTypes = | RebootInputDeviceCommandInput | RejectInputDeviceTransferCommandInput | StartChannelCommandInput + | StartInputDeviceCommandInput | StartInputDeviceMaintenanceWindowCommandInput | StartMultiplexCommandInput | StopChannelCommandInput + | StopInputDeviceCommandInput | StopMultiplexCommandInput | TransferInputDeviceCommandInput | UpdateAccountConfigurationCommandInput @@ -312,9 +316,11 @@ export type ServiceOutputTypes = | RebootInputDeviceCommandOutput | RejectInputDeviceTransferCommandOutput | StartChannelCommandOutput + | StartInputDeviceCommandOutput | StartInputDeviceMaintenanceWindowCommandOutput | StartMultiplexCommandOutput | StopChannelCommandOutput + | StopInputDeviceCommandOutput | StopMultiplexCommandOutput | TransferInputDeviceCommandOutput | UpdateAccountConfigurationCommandOutput diff --git a/clients/client-medialive/src/commands/DescribeInputDeviceCommand.ts b/clients/client-medialive/src/commands/DescribeInputDeviceCommand.ts index 6f548adacf66b..41f4d2637bae2 100644 --- a/clients/client-medialive/src/commands/DescribeInputDeviceCommand.ts +++ b/clients/client-medialive/src/commands/DescribeInputDeviceCommand.ts @@ -88,11 +88,22 @@ export interface DescribeInputDeviceCommandOutput extends DescribeInputDeviceRes * // ScanType: "INTERLACED" || "PROGRESSIVE", * // Width: Number("int"), * // LatencyMs: Number("int"), + * // Codec: "HEVC" || "AVC", + * // MediaconnectSettings: { // InputDeviceMediaConnectSettings + * // FlowArn: "STRING_VALUE", + * // RoleArn: "STRING_VALUE", + * // SecretArn: "STRING_VALUE", + * // SourceName: "STRING_VALUE", + * // }, * // }, * // Tags: { // Tags * // "": "STRING_VALUE", * // }, * // AvailabilityZone: "STRING_VALUE", + * // MedialiveInputArns: [ + * // "STRING_VALUE", + * // ], + * // OutputType: "NONE" || "MEDIALIVE_INPUT" || "MEDIACONNECT_FLOW", * // }; * * ``` diff --git a/clients/client-medialive/src/commands/ListInputDevicesCommand.ts b/clients/client-medialive/src/commands/ListInputDevicesCommand.ts index 792fdcb9a7e96..086fc499541a3 100644 --- a/clients/client-medialive/src/commands/ListInputDevicesCommand.ts +++ b/clients/client-medialive/src/commands/ListInputDevicesCommand.ts @@ -91,11 +91,22 @@ export interface ListInputDevicesCommandOutput extends ListInputDevicesResponse, * // ScanType: "INTERLACED" || "PROGRESSIVE", * // Width: Number("int"), * // LatencyMs: Number("int"), + * // Codec: "HEVC" || "AVC", + * // MediaconnectSettings: { // InputDeviceMediaConnectSettings + * // FlowArn: "STRING_VALUE", + * // RoleArn: "STRING_VALUE", + * // SecretArn: "STRING_VALUE", + * // SourceName: "STRING_VALUE", + * // }, * // }, * // Tags: { // Tags * // "": "STRING_VALUE", * // }, * // AvailabilityZone: "STRING_VALUE", + * // MedialiveInputArns: [ + * // "STRING_VALUE", + * // ], + * // OutputType: "NONE" || "MEDIALIVE_INPUT" || "MEDIACONNECT_FLOW", * // }, * // ], * // NextToken: "STRING_VALUE", diff --git a/clients/client-medialive/src/commands/ListMultiplexProgramsCommand.ts b/clients/client-medialive/src/commands/ListMultiplexProgramsCommand.ts index 8d5fd64a35ba5..7924a2486442f 100644 --- a/clients/client-medialive/src/commands/ListMultiplexProgramsCommand.ts +++ b/clients/client-medialive/src/commands/ListMultiplexProgramsCommand.ts @@ -14,7 +14,7 @@ import { } from "@smithy/types"; import { MediaLiveClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../MediaLiveClient"; -import { ListMultiplexProgramsRequest, ListMultiplexProgramsResponse } from "../models/models_1"; +import { ListMultiplexProgramsRequest, ListMultiplexProgramsResponse } from "../models/models_2"; import { de_ListMultiplexProgramsCommand, se_ListMultiplexProgramsCommand } from "../protocols/Aws_restJson1"; /** diff --git a/clients/client-medialive/src/commands/ListMultiplexesCommand.ts b/clients/client-medialive/src/commands/ListMultiplexesCommand.ts index 31137bd44119e..48736b2a69db7 100644 --- a/clients/client-medialive/src/commands/ListMultiplexesCommand.ts +++ b/clients/client-medialive/src/commands/ListMultiplexesCommand.ts @@ -14,7 +14,8 @@ import { } from "@smithy/types"; import { MediaLiveClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../MediaLiveClient"; -import { ListMultiplexesRequest, ListMultiplexesResponse } from "../models/models_1"; +import { ListMultiplexesRequest } from "../models/models_1"; +import { ListMultiplexesResponse } from "../models/models_2"; import { de_ListMultiplexesCommand, se_ListMultiplexesCommand } from "../protocols/Aws_restJson1"; /** diff --git a/clients/client-medialive/src/commands/ListOfferingsCommand.ts b/clients/client-medialive/src/commands/ListOfferingsCommand.ts index cfd00c8512e34..00f846adf766a 100644 --- a/clients/client-medialive/src/commands/ListOfferingsCommand.ts +++ b/clients/client-medialive/src/commands/ListOfferingsCommand.ts @@ -14,8 +14,7 @@ import { } from "@smithy/types"; import { MediaLiveClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../MediaLiveClient"; -import { ListOfferingsRequest } from "../models/models_1"; -import { ListOfferingsResponse } from "../models/models_2"; +import { ListOfferingsRequest, ListOfferingsResponse } from "../models/models_2"; import { de_ListOfferingsCommand, se_ListOfferingsCommand } from "../protocols/Aws_restJson1"; /** diff --git a/clients/client-medialive/src/commands/StartInputDeviceCommand.ts b/clients/client-medialive/src/commands/StartInputDeviceCommand.ts new file mode 100644 index 0000000000000..7d0d75e842f9e --- /dev/null +++ b/clients/client-medialive/src/commands/StartInputDeviceCommand.ts @@ -0,0 +1,164 @@ +// smithy-typescript generated code +import { EndpointParameterInstructions, getEndpointPlugin } from "@smithy/middleware-endpoint"; +import { getSerdePlugin } from "@smithy/middleware-serde"; +import { HttpRequest as __HttpRequest, HttpResponse as __HttpResponse } from "@smithy/protocol-http"; +import { Command as $Command } from "@smithy/smithy-client"; +import { + FinalizeHandlerArguments, + Handler, + HandlerExecutionContext, + HttpHandlerOptions as __HttpHandlerOptions, + MetadataBearer as __MetadataBearer, + MiddlewareStack, + SerdeContext as __SerdeContext, +} from "@smithy/types"; + +import { MediaLiveClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../MediaLiveClient"; +import { StartInputDeviceRequest, StartInputDeviceResponse } from "../models/models_2"; +import { de_StartInputDeviceCommand, se_StartInputDeviceCommand } from "../protocols/Aws_restJson1"; + +/** + * @public + */ +export { __MetadataBearer, $Command }; +/** + * @public + * + * The input for {@link StartInputDeviceCommand}. + */ +export interface StartInputDeviceCommandInput extends StartInputDeviceRequest {} +/** + * @public + * + * The output of {@link StartInputDeviceCommand}. + */ +export interface StartInputDeviceCommandOutput extends StartInputDeviceResponse, __MetadataBearer {} + +/** + * @public + * Start an input device that is attached to a MediaConnect flow. (There is no need to start a device that is attached to a MediaLive input; MediaLive starts the device when the channel starts.) + * @example + * Use a bare-bones client and the command you need to make an API call. + * ```javascript + * import { MediaLiveClient, StartInputDeviceCommand } from "@aws-sdk/client-medialive"; // ES Modules import + * // const { MediaLiveClient, StartInputDeviceCommand } = require("@aws-sdk/client-medialive"); // CommonJS import + * const client = new MediaLiveClient(config); + * const input = { // StartInputDeviceRequest + * InputDeviceId: "STRING_VALUE", // required + * }; + * const command = new StartInputDeviceCommand(input); + * const response = await client.send(command); + * // {}; + * + * ``` + * + * @param StartInputDeviceCommandInput - {@link StartInputDeviceCommandInput} + * @returns {@link StartInputDeviceCommandOutput} + * @see {@link StartInputDeviceCommandInput} for command's `input` shape. + * @see {@link StartInputDeviceCommandOutput} for command's `response` shape. + * @see {@link MediaLiveClientResolvedConfig | config} for MediaLiveClient's `config` shape. + * + * @throws {@link BadGatewayException} (server fault) + * Placeholder documentation for BadGatewayException + * + * @throws {@link BadRequestException} (client fault) + * Placeholder documentation for BadRequestException + * + * @throws {@link ForbiddenException} (client fault) + * Placeholder documentation for ForbiddenException + * + * @throws {@link GatewayTimeoutException} (server fault) + * Placeholder documentation for GatewayTimeoutException + * + * @throws {@link InternalServerErrorException} (server fault) + * Placeholder documentation for InternalServerErrorException + * + * @throws {@link NotFoundException} (client fault) + * Placeholder documentation for NotFoundException + * + * @throws {@link TooManyRequestsException} (client fault) + * Placeholder documentation for TooManyRequestsException + * + * @throws {@link UnprocessableEntityException} (client fault) + * Placeholder documentation for UnprocessableEntityException + * + * @throws {@link MediaLiveServiceException} + *

Base exception class for all service exceptions from MediaLive service.

+ * + */ +export class StartInputDeviceCommand extends $Command< + StartInputDeviceCommandInput, + StartInputDeviceCommandOutput, + MediaLiveClientResolvedConfig +> { + // Start section: command_properties + // End section: command_properties + + public static getEndpointParameterInstructions(): EndpointParameterInstructions { + return { + UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" }, + Endpoint: { type: "builtInParams", name: "endpoint" }, + Region: { type: "builtInParams", name: "region" }, + UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" }, + }; + } + + /** + * @public + */ + constructor(readonly input: StartInputDeviceCommandInput) { + // Start section: command_constructor + super(); + // End section: command_constructor + } + + /** + * @internal + */ + resolveMiddleware( + clientStack: MiddlewareStack, + configuration: MediaLiveClientResolvedConfig, + options?: __HttpHandlerOptions + ): Handler { + this.middlewareStack.use(getSerdePlugin(configuration, this.serialize, this.deserialize)); + this.middlewareStack.use( + getEndpointPlugin(configuration, StartInputDeviceCommand.getEndpointParameterInstructions()) + ); + + const stack = clientStack.concat(this.middlewareStack); + + const { logger } = configuration; + const clientName = "MediaLiveClient"; + const commandName = "StartInputDeviceCommand"; + const handlerExecutionContext: HandlerExecutionContext = { + logger, + clientName, + commandName, + inputFilterSensitiveLog: (_: any) => _, + outputFilterSensitiveLog: (_: any) => _, + }; + const { requestHandler } = configuration; + return stack.resolve( + (request: FinalizeHandlerArguments) => + requestHandler.handle(request.request as __HttpRequest, options || {}), + handlerExecutionContext + ); + } + + /** + * @internal + */ + private serialize(input: StartInputDeviceCommandInput, context: __SerdeContext): Promise<__HttpRequest> { + return se_StartInputDeviceCommand(input, context); + } + + /** + * @internal + */ + private deserialize(output: __HttpResponse, context: __SerdeContext): Promise { + return de_StartInputDeviceCommand(output, context); + } + + // Start section: command_body_extra + // End section: command_body_extra +} diff --git a/clients/client-medialive/src/commands/StopInputDeviceCommand.ts b/clients/client-medialive/src/commands/StopInputDeviceCommand.ts new file mode 100644 index 0000000000000..fd07ba16d7071 --- /dev/null +++ b/clients/client-medialive/src/commands/StopInputDeviceCommand.ts @@ -0,0 +1,164 @@ +// smithy-typescript generated code +import { EndpointParameterInstructions, getEndpointPlugin } from "@smithy/middleware-endpoint"; +import { getSerdePlugin } from "@smithy/middleware-serde"; +import { HttpRequest as __HttpRequest, HttpResponse as __HttpResponse } from "@smithy/protocol-http"; +import { Command as $Command } from "@smithy/smithy-client"; +import { + FinalizeHandlerArguments, + Handler, + HandlerExecutionContext, + HttpHandlerOptions as __HttpHandlerOptions, + MetadataBearer as __MetadataBearer, + MiddlewareStack, + SerdeContext as __SerdeContext, +} from "@smithy/types"; + +import { MediaLiveClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../MediaLiveClient"; +import { StopInputDeviceRequest, StopInputDeviceResponse } from "../models/models_2"; +import { de_StopInputDeviceCommand, se_StopInputDeviceCommand } from "../protocols/Aws_restJson1"; + +/** + * @public + */ +export { __MetadataBearer, $Command }; +/** + * @public + * + * The input for {@link StopInputDeviceCommand}. + */ +export interface StopInputDeviceCommandInput extends StopInputDeviceRequest {} +/** + * @public + * + * The output of {@link StopInputDeviceCommand}. + */ +export interface StopInputDeviceCommandOutput extends StopInputDeviceResponse, __MetadataBearer {} + +/** + * @public + * Stop an input device that is attached to a MediaConnect flow. (There is no need to stop a device that is attached to a MediaLive input; MediaLive automatically stops the device when the channel stops.) + * @example + * Use a bare-bones client and the command you need to make an API call. + * ```javascript + * import { MediaLiveClient, StopInputDeviceCommand } from "@aws-sdk/client-medialive"; // ES Modules import + * // const { MediaLiveClient, StopInputDeviceCommand } = require("@aws-sdk/client-medialive"); // CommonJS import + * const client = new MediaLiveClient(config); + * const input = { // StopInputDeviceRequest + * InputDeviceId: "STRING_VALUE", // required + * }; + * const command = new StopInputDeviceCommand(input); + * const response = await client.send(command); + * // {}; + * + * ``` + * + * @param StopInputDeviceCommandInput - {@link StopInputDeviceCommandInput} + * @returns {@link StopInputDeviceCommandOutput} + * @see {@link StopInputDeviceCommandInput} for command's `input` shape. + * @see {@link StopInputDeviceCommandOutput} for command's `response` shape. + * @see {@link MediaLiveClientResolvedConfig | config} for MediaLiveClient's `config` shape. + * + * @throws {@link BadGatewayException} (server fault) + * Placeholder documentation for BadGatewayException + * + * @throws {@link BadRequestException} (client fault) + * Placeholder documentation for BadRequestException + * + * @throws {@link ForbiddenException} (client fault) + * Placeholder documentation for ForbiddenException + * + * @throws {@link GatewayTimeoutException} (server fault) + * Placeholder documentation for GatewayTimeoutException + * + * @throws {@link InternalServerErrorException} (server fault) + * Placeholder documentation for InternalServerErrorException + * + * @throws {@link NotFoundException} (client fault) + * Placeholder documentation for NotFoundException + * + * @throws {@link TooManyRequestsException} (client fault) + * Placeholder documentation for TooManyRequestsException + * + * @throws {@link UnprocessableEntityException} (client fault) + * Placeholder documentation for UnprocessableEntityException + * + * @throws {@link MediaLiveServiceException} + *

Base exception class for all service exceptions from MediaLive service.

+ * + */ +export class StopInputDeviceCommand extends $Command< + StopInputDeviceCommandInput, + StopInputDeviceCommandOutput, + MediaLiveClientResolvedConfig +> { + // Start section: command_properties + // End section: command_properties + + public static getEndpointParameterInstructions(): EndpointParameterInstructions { + return { + UseFIPS: { type: "builtInParams", name: "useFipsEndpoint" }, + Endpoint: { type: "builtInParams", name: "endpoint" }, + Region: { type: "builtInParams", name: "region" }, + UseDualStack: { type: "builtInParams", name: "useDualstackEndpoint" }, + }; + } + + /** + * @public + */ + constructor(readonly input: StopInputDeviceCommandInput) { + // Start section: command_constructor + super(); + // End section: command_constructor + } + + /** + * @internal + */ + resolveMiddleware( + clientStack: MiddlewareStack, + configuration: MediaLiveClientResolvedConfig, + options?: __HttpHandlerOptions + ): Handler { + this.middlewareStack.use(getSerdePlugin(configuration, this.serialize, this.deserialize)); + this.middlewareStack.use( + getEndpointPlugin(configuration, StopInputDeviceCommand.getEndpointParameterInstructions()) + ); + + const stack = clientStack.concat(this.middlewareStack); + + const { logger } = configuration; + const clientName = "MediaLiveClient"; + const commandName = "StopInputDeviceCommand"; + const handlerExecutionContext: HandlerExecutionContext = { + logger, + clientName, + commandName, + inputFilterSensitiveLog: (_: any) => _, + outputFilterSensitiveLog: (_: any) => _, + }; + const { requestHandler } = configuration; + return stack.resolve( + (request: FinalizeHandlerArguments) => + requestHandler.handle(request.request as __HttpRequest, options || {}), + handlerExecutionContext + ); + } + + /** + * @internal + */ + private serialize(input: StopInputDeviceCommandInput, context: __SerdeContext): Promise<__HttpRequest> { + return se_StopInputDeviceCommand(input, context); + } + + /** + * @internal + */ + private deserialize(output: __HttpResponse, context: __SerdeContext): Promise { + return de_StopInputDeviceCommand(output, context); + } + + // Start section: command_body_extra + // End section: command_body_extra +} diff --git a/clients/client-medialive/src/commands/UpdateInputDeviceCommand.ts b/clients/client-medialive/src/commands/UpdateInputDeviceCommand.ts index 2979a1586f44e..773751b830ea2 100644 --- a/clients/client-medialive/src/commands/UpdateInputDeviceCommand.ts +++ b/clients/client-medialive/src/commands/UpdateInputDeviceCommand.ts @@ -48,6 +48,13 @@ export interface UpdateInputDeviceCommandOutput extends UpdateInputDeviceRespons * ConfiguredInput: "AUTO" || "HDMI" || "SDI", * MaxBitrate: Number("int"), * LatencyMs: Number("int"), + * Codec: "HEVC" || "AVC", + * MediaconnectSettings: { // InputDeviceMediaConnectConfigurableSettings + * FlowArn: "STRING_VALUE", + * RoleArn: "STRING_VALUE", + * SecretArn: "STRING_VALUE", + * SourceName: "STRING_VALUE", + * }, * }, * InputDeviceId: "STRING_VALUE", // required * Name: "STRING_VALUE", @@ -55,6 +62,13 @@ export interface UpdateInputDeviceCommandOutput extends UpdateInputDeviceRespons * ConfiguredInput: "AUTO" || "HDMI" || "SDI", * MaxBitrate: Number("int"), * LatencyMs: Number("int"), + * Codec: "HEVC" || "AVC", + * MediaconnectSettings: { + * FlowArn: "STRING_VALUE", + * RoleArn: "STRING_VALUE", + * SecretArn: "STRING_VALUE", + * SourceName: "STRING_VALUE", + * }, * }, * AvailabilityZone: "STRING_VALUE", * }; @@ -100,11 +114,22 @@ export interface UpdateInputDeviceCommandOutput extends UpdateInputDeviceRespons * // ScanType: "INTERLACED" || "PROGRESSIVE", * // Width: Number("int"), * // LatencyMs: Number("int"), + * // Codec: "HEVC" || "AVC", + * // MediaconnectSettings: { // InputDeviceMediaConnectSettings + * // FlowArn: "STRING_VALUE", + * // RoleArn: "STRING_VALUE", + * // SecretArn: "STRING_VALUE", + * // SourceName: "STRING_VALUE", + * // }, * // }, * // Tags: { // Tags * // "": "STRING_VALUE", * // }, * // AvailabilityZone: "STRING_VALUE", + * // MedialiveInputArns: [ + * // "STRING_VALUE", + * // ], + * // OutputType: "NONE" || "MEDIALIVE_INPUT" || "MEDIACONNECT_FLOW", * // }; * * ``` diff --git a/clients/client-medialive/src/commands/index.ts b/clients/client-medialive/src/commands/index.ts index cf41f64c58eae..b2c159c89531b 100644 --- a/clients/client-medialive/src/commands/index.ts +++ b/clients/client-medialive/src/commands/index.ts @@ -47,9 +47,11 @@ export * from "./PurchaseOfferingCommand"; export * from "./RebootInputDeviceCommand"; export * from "./RejectInputDeviceTransferCommand"; export * from "./StartChannelCommand"; +export * from "./StartInputDeviceCommand"; export * from "./StartInputDeviceMaintenanceWindowCommand"; export * from "./StartMultiplexCommand"; export * from "./StopChannelCommand"; +export * from "./StopInputDeviceCommand"; export * from "./StopMultiplexCommand"; export * from "./TransferInputDeviceCommand"; export * from "./UpdateAccountConfigurationCommand"; diff --git a/clients/client-medialive/src/models/models_0.ts b/clients/client-medialive/src/models/models_0.ts index ae6b1cd51dcea..febdd22626fee 100644 --- a/clients/client-medialive/src/models/models_0.ts +++ b/clients/client-medialive/src/models/models_0.ts @@ -4055,6 +4055,21 @@ export interface InputDeviceNetworkSettings { SubnetMask?: string; } +/** + * @public + * @enum + */ +export const InputDeviceOutputType = { + MEDIACONNECT_FLOW: "MEDIACONNECT_FLOW", + MEDIALIVE_INPUT: "MEDIALIVE_INPUT", + NONE: "NONE", +} as const; + +/** + * @public + */ +export type InputDeviceOutputType = (typeof InputDeviceOutputType)[keyof typeof InputDeviceOutputType]; + /** * @public * @enum @@ -4069,6 +4084,50 @@ export const InputDeviceType = { */ export type InputDeviceType = (typeof InputDeviceType)[keyof typeof InputDeviceType]; +/** + * @public + * @enum + */ +export const InputDeviceCodec = { + AVC: "AVC", + HEVC: "HEVC", +} as const; + +/** + * @public + */ +export type InputDeviceCodec = (typeof InputDeviceCodec)[keyof typeof InputDeviceCodec]; + +/** + * @public + * Information about the MediaConnect flow attached to the device. + */ +export interface InputDeviceMediaConnectSettings { + /** + * @public + * The ARN of the MediaConnect flow. + */ + FlowArn?: string; + + /** + * @public + * The ARN for the role that MediaLive assumes to access the attached flow and secret. + */ + RoleArn?: string; + + /** + * @public + * The ARN of the secret used to encrypt the stream. + */ + SecretArn?: string; + + /** + * @public + * The name of the MediaConnect flow source. + */ + SourceName?: string; +} + /** * @public * Settings that describe the active source from the input device, and the video characteristics of that source. @@ -4127,6 +4186,18 @@ export interface InputDeviceUhdSettings { * The Link device's buffer size (latency) in milliseconds (ms). You can specify this value. */ LatencyMs?: number; + + /** + * @public + * The codec for the video that the device produces. + */ + Codec?: InputDeviceCodec | string; + + /** + * @public + * Information about the MediaConnect flow attached to the device. Returned only if the outputType is MEDIACONNECT_FLOW. + */ + MediaconnectSettings?: InputDeviceMediaConnectSettings; } /** @@ -4217,6 +4288,18 @@ export interface InputDeviceSummary { * The Availability Zone associated with this input device. */ AvailabilityZone?: string; + + /** + * @public + * An array of the ARNs for the MediaLive inputs attached to the device. Returned only if the outputType is MEDIALIVE_INPUT. + */ + MedialiveInputArns?: string[]; + + /** + * @public + * The output attachment type of the input device. Specifies MEDIACONNECT_FLOW if this device is the source for a MediaConnect flow. Specifies MEDIALIVE_INPUT if this device is the source for a MediaLive input. + */ + OutputType?: InputDeviceOutputType | string; } /** @@ -6656,47 +6739,3 @@ export const HlsIvInManifest = { * @public */ export type HlsIvInManifest = (typeof HlsIvInManifest)[keyof typeof HlsIvInManifest]; - -/** - * @public - * @enum - */ -export const HlsIvSource = { - EXPLICIT: "EXPLICIT", - FOLLOWS_SEGMENT_NUMBER: "FOLLOWS_SEGMENT_NUMBER", -} as const; - -/** - * @public - */ -export type HlsIvSource = (typeof HlsIvSource)[keyof typeof HlsIvSource]; - -/** - * @public - * Static Key Settings - */ -export interface StaticKeySettings { - /** - * @public - * The URL of the license server used for protecting content. - */ - KeyProviderServer?: InputLocation; - - /** - * @public - * Static key value as a 32 character hexadecimal string. - */ - StaticKeyValue: string | undefined; -} - -/** - * @public - * Key Provider Settings - */ -export interface KeyProviderSettings { - /** - * @public - * Static Key Settings - */ - StaticKeySettings?: StaticKeySettings; -} diff --git a/clients/client-medialive/src/models/models_1.ts b/clients/client-medialive/src/models/models_1.ts index 665651a81d237..7fa9dc6f27b5a 100644 --- a/clients/client-medialive/src/models/models_1.ts +++ b/clients/client-medialive/src/models/models_1.ts @@ -30,17 +30,18 @@ import { HlsId3SegmentTaggingState, HlsIncompleteSegmentBehavior, HlsIvInManifest, - HlsIvSource, IFrameOnlyPlaylistType, Input, InputAttachment, InputClass, InputDestination, InputDestinationRequest, + InputDeviceCodec, InputDeviceConfiguredInput, InputDeviceConnectionState, InputDeviceHdSettings, InputDeviceNetworkSettings, + InputDeviceOutputType, InputDeviceSettings, InputDeviceSummary, InputDeviceType, @@ -57,7 +58,6 @@ import { InputType, InputWhitelistRule, InputWhitelistRuleCidr, - KeyProviderSettings, LogLevel, MaintenanceDay, MaintenanceStatus, @@ -65,9 +65,7 @@ import { MediaConnectFlowRequest, MultiplexOutputDestination, MultiplexProgramPipelineDetail, - MultiplexProgramSummary, MultiplexState, - MultiplexSummary, OfferingDurationUnits, OfferingType, Output, @@ -77,6 +75,50 @@ import { VpcOutputSettingsDescription, } from "./models_0"; +/** + * @public + * @enum + */ +export const HlsIvSource = { + EXPLICIT: "EXPLICIT", + FOLLOWS_SEGMENT_NUMBER: "FOLLOWS_SEGMENT_NUMBER", +} as const; + +/** + * @public + */ +export type HlsIvSource = (typeof HlsIvSource)[keyof typeof HlsIvSource]; + +/** + * @public + * Static Key Settings + */ +export interface StaticKeySettings { + /** + * @public + * The URL of the license server used for protecting content. + */ + KeyProviderServer?: InputLocation; + + /** + * @public + * Static key value as a 32 character hexadecimal string. + */ + StaticKeyValue: string | undefined; +} + +/** + * @public + * Key Provider Settings + */ +export interface KeyProviderSettings { + /** + * @public + * Static Key Settings + */ + StaticKeySettings?: StaticKeySettings; +} + /** * @public * @enum @@ -6878,6 +6920,18 @@ export interface DescribeInputDeviceResponse { * The Availability Zone associated with this input device. */ AvailabilityZone?: string; + + /** + * @public + * An array of the ARNs for the MediaLive inputs attached to the device. Returned only if the outputType is MEDIALIVE_INPUT. + */ + MedialiveInputArns?: string[]; + + /** + * @public + * The output attachment type of the input device. Specifies MEDIACONNECT_FLOW if this device is the source for a MediaConnect flow. Specifies MEDIALIVE_INPUT if this device is the source for a MediaLive input. + */ + OutputType?: InputDeviceOutputType | string; } /** @@ -7414,6 +7468,36 @@ export interface DescribeThumbnailsResponse { ThumbnailDetails?: ThumbnailDetail[]; } +/** + * @public + * Parameters required to attach a MediaConnect flow to the device. + */ +export interface InputDeviceMediaConnectConfigurableSettings { + /** + * @public + * The ARN of the MediaConnect flow to attach this device to. + */ + FlowArn?: string; + + /** + * @public + * The ARN for the role that MediaLive assumes to access the attached flow and secret. For more information about how to create this role, see the MediaLive user guide. + */ + RoleArn?: string; + + /** + * @public + * The ARN for the secret that holds the encryption key to encrypt the content output by the device. + */ + SecretArn?: string; + + /** + * @public + * The name of the MediaConnect Flow source to stream to. + */ + SourceName?: string; +} + /** * @public * Configurable settings for the input device. @@ -7436,6 +7520,18 @@ export interface InputDeviceConfigurableSettings { * The Link device's buffer size (latency) in milliseconds (ms). */ LatencyMs?: number; + + /** + * @public + * Choose the codec for the video that the device produces. Only UHD devices can specify this parameter. + */ + Codec?: InputDeviceCodec | string; + + /** + * @public + * To attach this device to a MediaConnect flow, specify these parameters. To detach an existing flow, enter \{\} for the value of mediaconnectSettings. Only UHD devices can specify this parameter. + */ + MediaconnectSettings?: InputDeviceMediaConnectConfigurableSettings; } /** @@ -7642,144 +7738,6 @@ export interface ListMultiplexesRequest { NextToken?: string; } -/** - * @public - * Placeholder documentation for ListMultiplexesResponse - */ -export interface ListMultiplexesResponse { - /** - * @public - * List of multiplexes. - */ - Multiplexes?: MultiplexSummary[]; - - /** - * @public - * Token for the next ListMultiplexes request. - */ - NextToken?: string; -} - -/** - * @public - * Placeholder documentation for ListMultiplexProgramsRequest - */ -export interface ListMultiplexProgramsRequest { - /** - * @public - * The maximum number of items to return. - */ - MaxResults?: number; - - /** - * @public - * The ID of the multiplex that the programs belong to. - */ - MultiplexId: string | undefined; - - /** - * @public - * The token to retrieve the next page of results. - */ - NextToken?: string; -} - -/** - * @public - * Placeholder documentation for ListMultiplexProgramsResponse - */ -export interface ListMultiplexProgramsResponse { - /** - * @public - * List of multiplex programs. - */ - MultiplexPrograms?: MultiplexProgramSummary[]; - - /** - * @public - * Token for the next ListMultiplexProgram request. - */ - NextToken?: string; -} - -/** - * @public - * Placeholder documentation for ListOfferingsRequest - */ -export interface ListOfferingsRequest { - /** - * @public - * Filter by channel class, 'STANDARD' or 'SINGLE_PIPELINE' - */ - ChannelClass?: string; - - /** - * @public - * Filter to offerings that match the configuration of an existing channel, e.g. '2345678' (a channel ID) - */ - ChannelConfiguration?: string; - - /** - * @public - * Filter by codec, 'AVC', 'HEVC', 'MPEG2', 'AUDIO', or 'LINK' - */ - Codec?: string; - - /** - * @public - * Filter by offering duration, e.g. '12' - */ - Duration?: string; - - /** - * @public - * Placeholder documentation for MaxResults - */ - MaxResults?: number; - - /** - * @public - * Filter by bitrate, 'MAX_10_MBPS', 'MAX_20_MBPS', or 'MAX_50_MBPS' - */ - MaximumBitrate?: string; - - /** - * @public - * Filter by framerate, 'MAX_30_FPS' or 'MAX_60_FPS' - */ - MaximumFramerate?: string; - - /** - * @public - * Placeholder documentation for __string - */ - NextToken?: string; - - /** - * @public - * Filter by resolution, 'SD', 'HD', 'FHD', or 'UHD' - */ - Resolution?: string; - - /** - * @public - * Filter by resource type, 'INPUT', 'OUTPUT', 'MULTIPLEX', or 'CHANNEL' - */ - ResourceType?: string; - - /** - * @public - * Filter by special feature, 'ADVANCED_AUDIO' or 'AUDIO_NORMALIZATION' - */ - SpecialFeature?: string; - - /** - * @public - * Filter by video quality, 'STANDARD', 'ENHANCED', or 'PREMIUM' - */ - VideoQuality?: string; -} - /** * @internal */ diff --git a/clients/client-medialive/src/models/models_2.ts b/clients/client-medialive/src/models/models_2.ts index c5e10b25b6111..a2d64c1b0860b 100644 --- a/clients/client-medialive/src/models/models_2.ts +++ b/clients/client-medialive/src/models/models_2.ts @@ -12,6 +12,7 @@ import { InputDeviceConnectionState, InputDeviceHdSettings, InputDeviceNetworkSettings, + InputDeviceOutputType, InputDeviceRequest, InputDeviceType, InputDeviceUhdSettings, @@ -24,7 +25,9 @@ import { MaintenanceStatus, MediaConnectFlowRequest, MultiplexOutputDestination, + MultiplexProgramSummary, MultiplexState, + MultiplexSummary, Offering, OutputDestination, VpcOutputSettingsDescription, @@ -43,6 +46,144 @@ import { Reservation, } from "./models_1"; +/** + * @public + * Placeholder documentation for ListMultiplexesResponse + */ +export interface ListMultiplexesResponse { + /** + * @public + * List of multiplexes. + */ + Multiplexes?: MultiplexSummary[]; + + /** + * @public + * Token for the next ListMultiplexes request. + */ + NextToken?: string; +} + +/** + * @public + * Placeholder documentation for ListMultiplexProgramsRequest + */ +export interface ListMultiplexProgramsRequest { + /** + * @public + * The maximum number of items to return. + */ + MaxResults?: number; + + /** + * @public + * The ID of the multiplex that the programs belong to. + */ + MultiplexId: string | undefined; + + /** + * @public + * The token to retrieve the next page of results. + */ + NextToken?: string; +} + +/** + * @public + * Placeholder documentation for ListMultiplexProgramsResponse + */ +export interface ListMultiplexProgramsResponse { + /** + * @public + * List of multiplex programs. + */ + MultiplexPrograms?: MultiplexProgramSummary[]; + + /** + * @public + * Token for the next ListMultiplexProgram request. + */ + NextToken?: string; +} + +/** + * @public + * Placeholder documentation for ListOfferingsRequest + */ +export interface ListOfferingsRequest { + /** + * @public + * Filter by channel class, 'STANDARD' or 'SINGLE_PIPELINE' + */ + ChannelClass?: string; + + /** + * @public + * Filter to offerings that match the configuration of an existing channel, e.g. '2345678' (a channel ID) + */ + ChannelConfiguration?: string; + + /** + * @public + * Filter by codec, 'AVC', 'HEVC', 'MPEG2', 'AUDIO', or 'LINK' + */ + Codec?: string; + + /** + * @public + * Filter by offering duration, e.g. '12' + */ + Duration?: string; + + /** + * @public + * Placeholder documentation for MaxResults + */ + MaxResults?: number; + + /** + * @public + * Filter by bitrate, 'MAX_10_MBPS', 'MAX_20_MBPS', or 'MAX_50_MBPS' + */ + MaximumBitrate?: string; + + /** + * @public + * Filter by framerate, 'MAX_30_FPS' or 'MAX_60_FPS' + */ + MaximumFramerate?: string; + + /** + * @public + * Placeholder documentation for __string + */ + NextToken?: string; + + /** + * @public + * Filter by resolution, 'SD', 'HD', 'FHD', or 'UHD' + */ + Resolution?: string; + + /** + * @public + * Filter by resource type, 'INPUT', 'OUTPUT', 'MULTIPLEX', or 'CHANNEL' + */ + ResourceType?: string; + + /** + * @public + * Filter by special feature, 'ADVANCED_AUDIO' or 'AUDIO_NORMALIZATION' + */ + SpecialFeature?: string; + + /** + * @public + * Filter by video quality, 'STANDARD', 'ENHANCED', or 'PREMIUM' + */ + VideoQuality?: string; +} + /** * @public * Placeholder documentation for ListOfferingsResponse @@ -437,6 +578,24 @@ export interface StartChannelResponse { Vpc?: VpcOutputSettingsDescription; } +/** + * @public + * Placeholder documentation for StartInputDeviceRequest + */ +export interface StartInputDeviceRequest { + /** + * @public + * The unique ID of the input device to reboot. For example, hd-123456789abcdef. + */ + InputDeviceId: string | undefined; +} + +/** + * @public + * Placeholder documentation for StartInputDeviceResponse + */ +export interface StartInputDeviceResponse {} + /** * @public * Placeholder documentation for StartInputDeviceMaintenanceWindowRequest @@ -661,6 +820,24 @@ export interface StopChannelResponse { Vpc?: VpcOutputSettingsDescription; } +/** + * @public + * Placeholder documentation for StopInputDeviceRequest + */ +export interface StopInputDeviceRequest { + /** + * @public + * The unique ID of the input device to reboot. For example, hd-123456789abcdef. + */ + InputDeviceId: string | undefined; +} + +/** + * @public + * Placeholder documentation for StopInputDeviceResponse + */ +export interface StopInputDeviceResponse {} + /** * @public * Placeholder documentation for StopMultiplexRequest @@ -1107,6 +1284,18 @@ export interface UpdateInputDeviceResponse { * The Availability Zone associated with this input device. */ AvailabilityZone?: string; + + /** + * @public + * An array of the ARNs for the MediaLive inputs attached to the device. Returned only if the outputType is MEDIALIVE_INPUT. + */ + MedialiveInputArns?: string[]; + + /** + * @public + * The output attachment type of the input device. Specifies MEDIACONNECT_FLOW if this device is the source for a MediaConnect flow. Specifies MEDIALIVE_INPUT if this device is the source for a MediaLive input. + */ + OutputType?: InputDeviceOutputType | string; } /** diff --git a/clients/client-medialive/src/protocols/Aws_restJson1.ts b/clients/client-medialive/src/protocols/Aws_restJson1.ts index 2fedb87133e4f..9e5850f3bb2ca 100644 --- a/clients/client-medialive/src/protocols/Aws_restJson1.ts +++ b/clients/client-medialive/src/protocols/Aws_restJson1.ts @@ -130,12 +130,14 @@ import { RejectInputDeviceTransferCommandOutput, } from "../commands/RejectInputDeviceTransferCommand"; import { StartChannelCommandInput, StartChannelCommandOutput } from "../commands/StartChannelCommand"; +import { StartInputDeviceCommandInput, StartInputDeviceCommandOutput } from "../commands/StartInputDeviceCommand"; import { StartInputDeviceMaintenanceWindowCommandInput, StartInputDeviceMaintenanceWindowCommandOutput, } from "../commands/StartInputDeviceMaintenanceWindowCommand"; import { StartMultiplexCommandInput, StartMultiplexCommandOutput } from "../commands/StartMultiplexCommand"; import { StopChannelCommandInput, StopChannelCommandOutput } from "../commands/StopChannelCommand"; +import { StopInputDeviceCommandInput, StopInputDeviceCommandOutput } from "../commands/StopInputDeviceCommand"; import { StopMultiplexCommandInput, StopMultiplexCommandOutput } from "../commands/StopMultiplexCommand"; import { TransferInputDeviceCommandInput, @@ -237,6 +239,7 @@ import { InputDestinationRequest, InputDestinationVpc, InputDeviceHdSettings, + InputDeviceMediaConnectSettings, InputDeviceNetworkSettings, InputDeviceRequest, InputDeviceSettings, @@ -251,7 +254,6 @@ import { InputSpecification, InputWhitelistRule, InputWhitelistRuleCidr, - KeyProviderSettings, M2tsSettings, M3u8Settings, MaintenanceStatus, @@ -291,7 +293,6 @@ import { Scte27SourceSettings, SmpteTtDestinationSettings, StandardHlsSettings, - StaticKeySettings, TeletextDestinationSettings, TeletextSourceSettings, TtmlDestinationSettings, @@ -346,11 +347,13 @@ import { ImmediateModeScheduleActionStartSettings, InputClippingSettings, InputDeviceConfigurableSettings, + InputDeviceMediaConnectConfigurableSettings, InputLossBehavior, InputPrepareScheduleActionSettings, InputSwitchScheduleActionSettings, InputVpcRequest, InternalServerErrorException, + KeyProviderSettings, MaintenanceCreateSettings, MediaPackageGroupSettings, MotionGraphicsActivateScheduleActionSettings, @@ -400,6 +403,7 @@ import { StartTimecode, StaticImageActivateScheduleActionSettings, StaticImageDeactivateScheduleActionSettings, + StaticKeySettings, StopTimecode, TemporalFilterSettings, Thumbnail, @@ -1838,6 +1842,37 @@ export const se_StartChannelCommand = async ( }); }; +/** + * serializeAws_restJson1StartInputDeviceCommand + */ +export const se_StartInputDeviceCommand = async ( + input: StartInputDeviceCommandInput, + context: __SerdeContext +): Promise<__HttpRequest> => { + const { hostname, protocol = "https", port, path: basePath } = await context.endpoint(); + const headers: any = {}; + let resolvedPath = + `${basePath?.endsWith("/") ? basePath.slice(0, -1) : basePath || ""}` + "/prod/inputDevices/{InputDeviceId}/start"; + resolvedPath = __resolvedPath( + resolvedPath, + input, + "InputDeviceId", + () => input.InputDeviceId!, + "{InputDeviceId}", + false + ); + let body: any; + return new __HttpRequest({ + protocol, + hostname, + port, + method: "POST", + headers, + path: resolvedPath, + body, + }); +}; + /** * serializeAws_restJson1StartInputDeviceMaintenanceWindowCommand */ @@ -1918,6 +1953,37 @@ export const se_StopChannelCommand = async ( }); }; +/** + * serializeAws_restJson1StopInputDeviceCommand + */ +export const se_StopInputDeviceCommand = async ( + input: StopInputDeviceCommandInput, + context: __SerdeContext +): Promise<__HttpRequest> => { + const { hostname, protocol = "https", port, path: basePath } = await context.endpoint(); + const headers: any = {}; + let resolvedPath = + `${basePath?.endsWith("/") ? basePath.slice(0, -1) : basePath || ""}` + "/prod/inputDevices/{InputDeviceId}/stop"; + resolvedPath = __resolvedPath( + resolvedPath, + input, + "InputDeviceId", + () => input.InputDeviceId!, + "{InputDeviceId}", + false + ); + let body: any; + return new __HttpRequest({ + protocol, + hostname, + port, + method: "POST", + headers, + path: resolvedPath, + body, + }); +}; + /** * serializeAws_restJson1StopMultiplexCommand */ @@ -4026,8 +4092,10 @@ export const de_DescribeInputDeviceCommand = async ( HdDeviceSettings: [, (_) => de_InputDeviceHdSettings(_, context), `hdDeviceSettings`], Id: [, __expectString, `id`], MacAddress: [, __expectString, `macAddress`], + MedialiveInputArns: [, _json, `medialiveInputArns`], Name: [, __expectString, `name`], NetworkSettings: [, (_) => de_InputDeviceNetworkSettings(_, context), `networkSettings`], + OutputType: [, __expectString, `outputType`], SerialNumber: [, __expectString, `serialNumber`], Tags: [, _json, `tags`], Type: [, __expectString, `type`], @@ -5572,6 +5640,70 @@ const de_StartChannelCommandError = async ( } }; +/** + * deserializeAws_restJson1StartInputDeviceCommand + */ +export const de_StartInputDeviceCommand = async ( + output: __HttpResponse, + context: __SerdeContext +): Promise => { + if (output.statusCode !== 200 && output.statusCode >= 300) { + return de_StartInputDeviceCommandError(output, context); + } + const contents: any = map({ + $metadata: deserializeMetadata(output), + }); + await collectBody(output.body, context); + return contents; +}; + +/** + * deserializeAws_restJson1StartInputDeviceCommandError + */ +const de_StartInputDeviceCommandError = async ( + output: __HttpResponse, + context: __SerdeContext +): Promise => { + const parsedOutput: any = { + ...output, + body: await parseErrorBody(output.body, context), + }; + const errorCode = loadRestJsonErrorCode(output, parsedOutput.body); + switch (errorCode) { + case "BadGatewayException": + case "com.amazonaws.medialive#BadGatewayException": + throw await de_BadGatewayExceptionRes(parsedOutput, context); + case "BadRequestException": + case "com.amazonaws.medialive#BadRequestException": + throw await de_BadRequestExceptionRes(parsedOutput, context); + case "ForbiddenException": + case "com.amazonaws.medialive#ForbiddenException": + throw await de_ForbiddenExceptionRes(parsedOutput, context); + case "GatewayTimeoutException": + case "com.amazonaws.medialive#GatewayTimeoutException": + throw await de_GatewayTimeoutExceptionRes(parsedOutput, context); + case "InternalServerErrorException": + case "com.amazonaws.medialive#InternalServerErrorException": + throw await de_InternalServerErrorExceptionRes(parsedOutput, context); + case "NotFoundException": + case "com.amazonaws.medialive#NotFoundException": + throw await de_NotFoundExceptionRes(parsedOutput, context); + case "TooManyRequestsException": + case "com.amazonaws.medialive#TooManyRequestsException": + throw await de_TooManyRequestsExceptionRes(parsedOutput, context); + case "UnprocessableEntityException": + case "com.amazonaws.medialive#UnprocessableEntityException": + throw await de_UnprocessableEntityExceptionRes(parsedOutput, context); + default: + const parsedBody = parsedOutput.body; + return throwDefaultError({ + output, + parsedBody, + errorCode, + }); + } +}; + /** * deserializeAws_restJson1StartInputDeviceMaintenanceWindowCommand */ @@ -5798,6 +5930,70 @@ const de_StopChannelCommandError = async ( } }; +/** + * deserializeAws_restJson1StopInputDeviceCommand + */ +export const de_StopInputDeviceCommand = async ( + output: __HttpResponse, + context: __SerdeContext +): Promise => { + if (output.statusCode !== 200 && output.statusCode >= 300) { + return de_StopInputDeviceCommandError(output, context); + } + const contents: any = map({ + $metadata: deserializeMetadata(output), + }); + await collectBody(output.body, context); + return contents; +}; + +/** + * deserializeAws_restJson1StopInputDeviceCommandError + */ +const de_StopInputDeviceCommandError = async ( + output: __HttpResponse, + context: __SerdeContext +): Promise => { + const parsedOutput: any = { + ...output, + body: await parseErrorBody(output.body, context), + }; + const errorCode = loadRestJsonErrorCode(output, parsedOutput.body); + switch (errorCode) { + case "BadGatewayException": + case "com.amazonaws.medialive#BadGatewayException": + throw await de_BadGatewayExceptionRes(parsedOutput, context); + case "BadRequestException": + case "com.amazonaws.medialive#BadRequestException": + throw await de_BadRequestExceptionRes(parsedOutput, context); + case "ForbiddenException": + case "com.amazonaws.medialive#ForbiddenException": + throw await de_ForbiddenExceptionRes(parsedOutput, context); + case "GatewayTimeoutException": + case "com.amazonaws.medialive#GatewayTimeoutException": + throw await de_GatewayTimeoutExceptionRes(parsedOutput, context); + case "InternalServerErrorException": + case "com.amazonaws.medialive#InternalServerErrorException": + throw await de_InternalServerErrorExceptionRes(parsedOutput, context); + case "NotFoundException": + case "com.amazonaws.medialive#NotFoundException": + throw await de_NotFoundExceptionRes(parsedOutput, context); + case "TooManyRequestsException": + case "com.amazonaws.medialive#TooManyRequestsException": + throw await de_TooManyRequestsExceptionRes(parsedOutput, context); + case "UnprocessableEntityException": + case "com.amazonaws.medialive#UnprocessableEntityException": + throw await de_UnprocessableEntityExceptionRes(parsedOutput, context); + default: + const parsedBody = parsedOutput.body; + return throwDefaultError({ + output, + parsedBody, + errorCode, + }); + } +}; + /** * deserializeAws_restJson1StopMultiplexCommand */ @@ -6231,8 +6427,10 @@ export const de_UpdateInputDeviceCommand = async ( HdDeviceSettings: [, (_) => de_InputDeviceHdSettings(_, context), `hdDeviceSettings`], Id: [, __expectString, `id`], MacAddress: [, __expectString, `macAddress`], + MedialiveInputArns: [, _json, `medialiveInputArns`], Name: [, __expectString, `name`], NetworkSettings: [, (_) => de_InputDeviceNetworkSettings(_, context), `networkSettings`], + OutputType: [, __expectString, `outputType`], SerialNumber: [, __expectString, `serialNumber`], Tags: [, _json, `tags`], Type: [, __expectString, `type`], @@ -8181,9 +8379,26 @@ const se_InputDestinationRequest = (input: InputDestinationRequest, context: __S */ const se_InputDeviceConfigurableSettings = (input: InputDeviceConfigurableSettings, context: __SerdeContext): any => { return take(input, { + codec: [, , `Codec`], configuredInput: [, , `ConfiguredInput`], latencyMs: [, , `LatencyMs`], maxBitrate: [, , `MaxBitrate`], + mediaconnectSettings: [, (_) => se_InputDeviceMediaConnectConfigurableSettings(_, context), `MediaconnectSettings`], + }); +}; + +/** + * serializeAws_restJson1InputDeviceMediaConnectConfigurableSettings + */ +const se_InputDeviceMediaConnectConfigurableSettings = ( + input: InputDeviceMediaConnectConfigurableSettings, + context: __SerdeContext +): any => { + return take(input, { + flowArn: [, , `FlowArn`], + roleArn: [, , `RoleArn`], + secretArn: [, , `SecretArn`], + sourceName: [, , `SourceName`], }); }; @@ -11253,6 +11468,18 @@ const de_InputDeviceHdSettings = (output: any, context: __SerdeContext): InputDe }) as any; }; +/** + * deserializeAws_restJson1InputDeviceMediaConnectSettings + */ +const de_InputDeviceMediaConnectSettings = (output: any, context: __SerdeContext): InputDeviceMediaConnectSettings => { + return take(output, { + FlowArn: [, __expectString, `flowArn`], + RoleArn: [, __expectString, `roleArn`], + SecretArn: [, __expectString, `secretArn`], + SourceName: [, __expectString, `sourceName`], + }) as any; +}; + /** * deserializeAws_restJson1InputDeviceNetworkSettings */ @@ -11288,8 +11515,10 @@ const de_InputDeviceSummary = (output: any, context: __SerdeContext): InputDevic HdDeviceSettings: [, (_: any) => de_InputDeviceHdSettings(_, context), `hdDeviceSettings`], Id: [, __expectString, `id`], MacAddress: [, __expectString, `macAddress`], + MedialiveInputArns: [, _json, `medialiveInputArns`], Name: [, __expectString, `name`], NetworkSettings: [, (_: any) => de_InputDeviceNetworkSettings(_, context), `networkSettings`], + OutputType: [, __expectString, `outputType`], SerialNumber: [, __expectString, `serialNumber`], Tags: [, _json, `tags`], Type: [, __expectString, `type`], @@ -11303,12 +11532,14 @@ const de_InputDeviceSummary = (output: any, context: __SerdeContext): InputDevic const de_InputDeviceUhdSettings = (output: any, context: __SerdeContext): InputDeviceUhdSettings => { return take(output, { ActiveInput: [, __expectString, `activeInput`], + Codec: [, __expectString, `codec`], ConfiguredInput: [, __expectString, `configuredInput`], DeviceState: [, __expectString, `deviceState`], Framerate: [, __limitedParseDouble, `framerate`], Height: [, __expectInt32, `height`], LatencyMs: [, __expectInt32, `latencyMs`], MaxBitrate: [, __expectInt32, `maxBitrate`], + MediaconnectSettings: [, (_: any) => de_InputDeviceMediaConnectSettings(_, context), `mediaconnectSettings`], ScanType: [, __expectString, `scanType`], Width: [, __expectInt32, `width`], }) as any; diff --git a/codegen/sdk-codegen/aws-models/medialive.json b/codegen/sdk-codegen/aws-models/medialive.json index 661be0feacaef..b126df42f2b33 100644 --- a/codegen/sdk-codegen/aws-models/medialive.json +++ b/codegen/sdk-codegen/aws-models/medialive.json @@ -5671,6 +5671,20 @@ "smithy.api#documentation": "The Availability Zone associated with this input device.", "smithy.api#jsonName": "availabilityZone" } + }, + "MedialiveInputArns": { + "target": "com.amazonaws.medialive#__listOf__string", + "traits": { + "smithy.api#documentation": "An array of the ARNs for the MediaLive inputs attached to the device. Returned only if the outputType is MEDIALIVE_INPUT.", + "smithy.api#jsonName": "medialiveInputArns" + } + }, + "OutputType": { + "target": "com.amazonaws.medialive#InputDeviceOutputType", + "traits": { + "smithy.api#documentation": "The output attachment type of the input device. Specifies MEDIACONNECT_FLOW if this device is the source for a MediaConnect flow. Specifies MEDIALIVE_INPUT if this device is the source for a MediaLive input.", + "smithy.api#jsonName": "outputType" + } } }, "traits": { @@ -12505,6 +12519,26 @@ "smithy.api#documentation": "The source at the input device that is currently active." } }, + "com.amazonaws.medialive#InputDeviceCodec": { + "type": "enum", + "members": { + "HEVC": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "HEVC" + } + }, + "AVC": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "AVC" + } + } + }, + "traits": { + "smithy.api#documentation": "The codec to use on the video that the device produces." + } + }, "com.amazonaws.medialive#InputDeviceConfigurableSettings": { "type": "structure", "members": { @@ -12528,6 +12562,20 @@ "smithy.api#documentation": "The Link device's buffer size (latency) in milliseconds (ms).", "smithy.api#jsonName": "latencyMs" } + }, + "Codec": { + "target": "com.amazonaws.medialive#InputDeviceCodec", + "traits": { + "smithy.api#documentation": "Choose the codec for the video that the device produces. Only UHD devices can specify this parameter.", + "smithy.api#jsonName": "codec" + } + }, + "MediaconnectSettings": { + "target": "com.amazonaws.medialive#InputDeviceMediaConnectConfigurableSettings", + "traits": { + "smithy.api#documentation": "To attach this device to a MediaConnect flow, specify these parameters. To detach an existing flow, enter {} for the value of mediaconnectSettings. Only UHD devices can specify this parameter.", + "smithy.api#jsonName": "mediaconnectSettings" + } } }, "traits": { @@ -12671,6 +12719,78 @@ "smithy.api#documentation": "Specifies whether the input device has been configured (outside of MediaLive) to use a dynamic IP address assignment (DHCP) or a static IP address." } }, + "com.amazonaws.medialive#InputDeviceMediaConnectConfigurableSettings": { + "type": "structure", + "members": { + "FlowArn": { + "target": "com.amazonaws.medialive#__string", + "traits": { + "smithy.api#documentation": "The ARN of the MediaConnect flow to attach this device to.", + "smithy.api#jsonName": "flowArn" + } + }, + "RoleArn": { + "target": "com.amazonaws.medialive#__string", + "traits": { + "smithy.api#documentation": "The ARN for the role that MediaLive assumes to access the attached flow and secret. For more information about how to create this role, see the MediaLive user guide.", + "smithy.api#jsonName": "roleArn" + } + }, + "SecretArn": { + "target": "com.amazonaws.medialive#__string", + "traits": { + "smithy.api#documentation": "The ARN for the secret that holds the encryption key to encrypt the content output by the device.", + "smithy.api#jsonName": "secretArn" + } + }, + "SourceName": { + "target": "com.amazonaws.medialive#__string", + "traits": { + "smithy.api#documentation": "The name of the MediaConnect Flow source to stream to.", + "smithy.api#jsonName": "sourceName" + } + } + }, + "traits": { + "smithy.api#documentation": "Parameters required to attach a MediaConnect flow to the device." + } + }, + "com.amazonaws.medialive#InputDeviceMediaConnectSettings": { + "type": "structure", + "members": { + "FlowArn": { + "target": "com.amazonaws.medialive#__string", + "traits": { + "smithy.api#documentation": "The ARN of the MediaConnect flow.", + "smithy.api#jsonName": "flowArn" + } + }, + "RoleArn": { + "target": "com.amazonaws.medialive#__string", + "traits": { + "smithy.api#documentation": "The ARN for the role that MediaLive assumes to access the attached flow and secret.", + "smithy.api#jsonName": "roleArn" + } + }, + "SecretArn": { + "target": "com.amazonaws.medialive#__string", + "traits": { + "smithy.api#documentation": "The ARN of the secret used to encrypt the stream.", + "smithy.api#jsonName": "secretArn" + } + }, + "SourceName": { + "target": "com.amazonaws.medialive#__string", + "traits": { + "smithy.api#documentation": "The name of the MediaConnect flow source.", + "smithy.api#jsonName": "sourceName" + } + } + }, + "traits": { + "smithy.api#documentation": "Information about the MediaConnect flow attached to the device." + } + }, "com.amazonaws.medialive#InputDeviceNetworkSettings": { "type": "structure", "members": { @@ -12714,6 +12834,32 @@ "smithy.api#documentation": "The network settings for the input device." } }, + "com.amazonaws.medialive#InputDeviceOutputType": { + "type": "enum", + "members": { + "NONE": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "NONE" + } + }, + "MEDIALIVE_INPUT": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "MEDIALIVE_INPUT" + } + }, + "MEDIACONNECT_FLOW": { + "target": "smithy.api#Unit", + "traits": { + "smithy.api#enumValue": "MEDIACONNECT_FLOW" + } + } + }, + "traits": { + "smithy.api#documentation": "The output attachment type of the input device." + } + }, "com.amazonaws.medialive#InputDeviceRequest": { "type": "structure", "members": { @@ -12884,6 +13030,20 @@ "smithy.api#documentation": "The Availability Zone associated with this input device.", "smithy.api#jsonName": "availabilityZone" } + }, + "MedialiveInputArns": { + "target": "com.amazonaws.medialive#__listOf__string", + "traits": { + "smithy.api#documentation": "An array of the ARNs for the MediaLive inputs attached to the device. Returned only if the outputType is MEDIALIVE_INPUT.", + "smithy.api#jsonName": "medialiveInputArns" + } + }, + "OutputType": { + "target": "com.amazonaws.medialive#InputDeviceOutputType", + "traits": { + "smithy.api#documentation": "The output attachment type of the input device. Specifies MEDIACONNECT_FLOW if this device is the source for a MediaConnect flow. Specifies MEDIALIVE_INPUT if this device is the source for a MediaLive input.", + "smithy.api#jsonName": "outputType" + } } }, "traits": { @@ -13002,6 +13162,20 @@ "smithy.api#documentation": "The Link device's buffer size (latency) in milliseconds (ms). You can specify this value.", "smithy.api#jsonName": "latencyMs" } + }, + "Codec": { + "target": "com.amazonaws.medialive#InputDeviceCodec", + "traits": { + "smithy.api#documentation": "The codec for the video that the device produces.", + "smithy.api#jsonName": "codec" + } + }, + "MediaconnectSettings": { + "target": "com.amazonaws.medialive#InputDeviceMediaConnectSettings", + "traits": { + "smithy.api#documentation": "Information about the MediaConnect flow attached to the device. Returned only if the outputType is MEDIACONNECT_FLOW.", + "smithy.api#jsonName": "mediaconnectSettings" + } } }, "traits": { @@ -16225,6 +16399,9 @@ { "target": "com.amazonaws.medialive#StartChannel" }, + { + "target": "com.amazonaws.medialive#StartInputDevice" + }, { "target": "com.amazonaws.medialive#StartInputDeviceMaintenanceWindow" }, @@ -16234,6 +16411,9 @@ { "target": "com.amazonaws.medialive#StopChannel" }, + { + "target": "com.amazonaws.medialive#StopInputDevice" + }, { "target": "com.amazonaws.medialive#StopMultiplex" }, @@ -21510,6 +21690,49 @@ "smithy.api#output": {} } }, + "com.amazonaws.medialive#StartInputDevice": { + "type": "operation", + "input": { + "target": "com.amazonaws.medialive#StartInputDeviceRequest" + }, + "output": { + "target": "com.amazonaws.medialive#StartInputDeviceResponse" + }, + "errors": [ + { + "target": "com.amazonaws.medialive#BadGatewayException" + }, + { + "target": "com.amazonaws.medialive#BadRequestException" + }, + { + "target": "com.amazonaws.medialive#ForbiddenException" + }, + { + "target": "com.amazonaws.medialive#GatewayTimeoutException" + }, + { + "target": "com.amazonaws.medialive#InternalServerErrorException" + }, + { + "target": "com.amazonaws.medialive#NotFoundException" + }, + { + "target": "com.amazonaws.medialive#TooManyRequestsException" + }, + { + "target": "com.amazonaws.medialive#UnprocessableEntityException" + } + ], + "traits": { + "smithy.api#documentation": "Start an input device that is attached to a MediaConnect flow. (There is no need to start a device that is attached to a MediaLive input; MediaLive starts the device when the channel starts.)", + "smithy.api#http": { + "method": "POST", + "uri": "/prod/inputDevices/{InputDeviceId}/start", + "code": 200 + } + } + }, "com.amazonaws.medialive#StartInputDeviceMaintenanceWindow": { "type": "operation", "input": { @@ -21578,6 +21801,31 @@ "smithy.api#output": {} } }, + "com.amazonaws.medialive#StartInputDeviceRequest": { + "type": "structure", + "members": { + "InputDeviceId": { + "target": "com.amazonaws.medialive#__string", + "traits": { + "smithy.api#documentation": "The unique ID of the input device to reboot. For example, hd-123456789abcdef.", + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#documentation": "Placeholder documentation for StartInputDeviceRequest", + "smithy.api#input": {} + } + }, + "com.amazonaws.medialive#StartInputDeviceResponse": { + "type": "structure", + "members": {}, + "traits": { + "smithy.api#documentation": "Placeholder documentation for StartInputDeviceResponse", + "smithy.api#output": {} + } + }, "com.amazonaws.medialive#StartMultiplex": { "type": "operation", "input": { @@ -22049,6 +22297,74 @@ "smithy.api#output": {} } }, + "com.amazonaws.medialive#StopInputDevice": { + "type": "operation", + "input": { + "target": "com.amazonaws.medialive#StopInputDeviceRequest" + }, + "output": { + "target": "com.amazonaws.medialive#StopInputDeviceResponse" + }, + "errors": [ + { + "target": "com.amazonaws.medialive#BadGatewayException" + }, + { + "target": "com.amazonaws.medialive#BadRequestException" + }, + { + "target": "com.amazonaws.medialive#ForbiddenException" + }, + { + "target": "com.amazonaws.medialive#GatewayTimeoutException" + }, + { + "target": "com.amazonaws.medialive#InternalServerErrorException" + }, + { + "target": "com.amazonaws.medialive#NotFoundException" + }, + { + "target": "com.amazonaws.medialive#TooManyRequestsException" + }, + { + "target": "com.amazonaws.medialive#UnprocessableEntityException" + } + ], + "traits": { + "smithy.api#documentation": "Stop an input device that is attached to a MediaConnect flow. (There is no need to stop a device that is attached to a MediaLive input; MediaLive automatically stops the device when the channel stops.)", + "smithy.api#http": { + "method": "POST", + "uri": "/prod/inputDevices/{InputDeviceId}/stop", + "code": 200 + } + } + }, + "com.amazonaws.medialive#StopInputDeviceRequest": { + "type": "structure", + "members": { + "InputDeviceId": { + "target": "com.amazonaws.medialive#__string", + "traits": { + "smithy.api#documentation": "The unique ID of the input device to reboot. For example, hd-123456789abcdef.", + "smithy.api#httpLabel": {}, + "smithy.api#required": {} + } + } + }, + "traits": { + "smithy.api#documentation": "Placeholder documentation for StopInputDeviceRequest", + "smithy.api#input": {} + } + }, + "com.amazonaws.medialive#StopInputDeviceResponse": { + "type": "structure", + "members": {}, + "traits": { + "smithy.api#documentation": "Placeholder documentation for StopInputDeviceResponse", + "smithy.api#output": {} + } + }, "com.amazonaws.medialive#StopMultiplex": { "type": "operation", "input": { @@ -23531,6 +23847,20 @@ "smithy.api#documentation": "The Availability Zone associated with this input device.", "smithy.api#jsonName": "availabilityZone" } + }, + "MedialiveInputArns": { + "target": "com.amazonaws.medialive#__listOf__string", + "traits": { + "smithy.api#documentation": "An array of the ARNs for the MediaLive inputs attached to the device. Returned only if the outputType is MEDIALIVE_INPUT.", + "smithy.api#jsonName": "medialiveInputArns" + } + }, + "OutputType": { + "target": "com.amazonaws.medialive#InputDeviceOutputType", + "traits": { + "smithy.api#documentation": "The output attachment type of the input device. Specifies MEDIACONNECT_FLOW if this device is the source for a MediaConnect flow. Specifies MEDIALIVE_INPUT if this device is the source for a MediaLive input.", + "smithy.api#jsonName": "outputType" + } } }, "traits": { @@ -25714,4 +26044,4 @@ } } } -} \ No newline at end of file +}