diff --git a/clients/client-ivs-realtime/src/commands/CreateStageCommand.ts b/clients/client-ivs-realtime/src/commands/CreateStageCommand.ts index 5c81b344b072..dfdf5126e43b 100644 --- a/clients/client-ivs-realtime/src/commands/CreateStageCommand.ts +++ b/clients/client-ivs-realtime/src/commands/CreateStageCommand.ts @@ -52,6 +52,12 @@ export interface CreateStageCommandOutput extends CreateStageResponse, __Metadat * tags: { // Tags * "": "STRING_VALUE", * }, + * autoParticipantRecordingConfiguration: { // AutoParticipantRecordingConfiguration + * storageConfigurationArn: "STRING_VALUE", // required + * mediaTypes: [ // ParticipantRecordingMediaTypeList + * "STRING_VALUE", + * ], + * }, * }; * const command = new CreateStageCommand(input); * const response = await client.send(command); @@ -63,6 +69,12 @@ export interface CreateStageCommandOutput extends CreateStageResponse, __Metadat * // tags: { // Tags * // "": "STRING_VALUE", * // }, + * // autoParticipantRecordingConfiguration: { // AutoParticipantRecordingConfiguration + * // storageConfigurationArn: "STRING_VALUE", // required + * // mediaTypes: [ // ParticipantRecordingMediaTypeList + * // "STRING_VALUE", + * // ], + * // }, * // }, * // participantTokens: [ // ParticipantTokenList * // { // ParticipantToken diff --git a/clients/client-ivs-realtime/src/commands/GetParticipantCommand.ts b/clients/client-ivs-realtime/src/commands/GetParticipantCommand.ts index b19ac334edcc..353a4220dbbe 100644 --- a/clients/client-ivs-realtime/src/commands/GetParticipantCommand.ts +++ b/clients/client-ivs-realtime/src/commands/GetParticipantCommand.ts @@ -58,6 +58,9 @@ export interface GetParticipantCommandOutput extends GetParticipantResponse, __M * // browserName: "STRING_VALUE", * // browserVersion: "STRING_VALUE", * // sdkVersion: "STRING_VALUE", + * // recordingS3BucketName: "STRING_VALUE", + * // recordingS3Prefix: "STRING_VALUE", + * // recordingState: "STRING_VALUE", * // }, * // }; * diff --git a/clients/client-ivs-realtime/src/commands/GetStageCommand.ts b/clients/client-ivs-realtime/src/commands/GetStageCommand.ts index a21f9dc9a5b6..19126d2c92d4 100644 --- a/clients/client-ivs-realtime/src/commands/GetStageCommand.ts +++ b/clients/client-ivs-realtime/src/commands/GetStageCommand.ts @@ -48,6 +48,12 @@ export interface GetStageCommandOutput extends GetStageResponse, __MetadataBeare * // tags: { // Tags * // "": "STRING_VALUE", * // }, + * // autoParticipantRecordingConfiguration: { // AutoParticipantRecordingConfiguration + * // storageConfigurationArn: "STRING_VALUE", // required + * // mediaTypes: [ // ParticipantRecordingMediaTypeList + * // "STRING_VALUE", + * // ], + * // }, * // }, * // }; * diff --git a/clients/client-ivs-realtime/src/commands/ListParticipantsCommand.ts b/clients/client-ivs-realtime/src/commands/ListParticipantsCommand.ts index f79a21689049..c29b8284ec19 100644 --- a/clients/client-ivs-realtime/src/commands/ListParticipantsCommand.ts +++ b/clients/client-ivs-realtime/src/commands/ListParticipantsCommand.ts @@ -43,6 +43,7 @@ export interface ListParticipantsCommandOutput extends ListParticipantsResponse, * filterByState: "STRING_VALUE", * nextToken: "STRING_VALUE", * maxResults: Number("int"), + * filterByRecordingState: "STRING_VALUE", * }; * const command = new ListParticipantsCommand(input); * const response = await client.send(command); @@ -54,6 +55,7 @@ export interface ListParticipantsCommandOutput extends ListParticipantsResponse, * // state: "STRING_VALUE", * // firstJoinTime: new Date("TIMESTAMP"), * // published: true || false, + * // recordingState: "STRING_VALUE", * // }, * // ], * // nextToken: "STRING_VALUE", diff --git a/clients/client-ivs-realtime/src/commands/UpdateStageCommand.ts b/clients/client-ivs-realtime/src/commands/UpdateStageCommand.ts index ca8a04b726d0..58500829ab3e 100644 --- a/clients/client-ivs-realtime/src/commands/UpdateStageCommand.ts +++ b/clients/client-ivs-realtime/src/commands/UpdateStageCommand.ts @@ -38,6 +38,12 @@ export interface UpdateStageCommandOutput extends UpdateStageResponse, __Metadat * const input = { // UpdateStageRequest * arn: "STRING_VALUE", // required * name: "STRING_VALUE", + * autoParticipantRecordingConfiguration: { // AutoParticipantRecordingConfiguration + * storageConfigurationArn: "STRING_VALUE", // required + * mediaTypes: [ // ParticipantRecordingMediaTypeList + * "STRING_VALUE", + * ], + * }, * }; * const command = new UpdateStageCommand(input); * const response = await client.send(command); @@ -49,6 +55,12 @@ export interface UpdateStageCommandOutput extends UpdateStageResponse, __Metadat * // tags: { // Tags * // "": "STRING_VALUE", * // }, + * // autoParticipantRecordingConfiguration: { // AutoParticipantRecordingConfiguration + * // storageConfigurationArn: "STRING_VALUE", // required + * // mediaTypes: [ // ParticipantRecordingMediaTypeList + * // "STRING_VALUE", + * // ], + * // }, * // }, * // }; * diff --git a/clients/client-ivs-realtime/src/models/models_0.ts b/clients/client-ivs-realtime/src/models/models_0.ts index a0c0346d0907..badb4b77b087 100644 --- a/clients/client-ivs-realtime/src/models/models_0.ts +++ b/clients/client-ivs-realtime/src/models/models_0.ts @@ -420,6 +420,39 @@ export interface CreateParticipantTokenResponse { participantToken?: ParticipantToken; } +/** + * @public + * @enum + */ +export const ParticipantRecordingMediaType = { + AUDIO_ONLY: "AUDIO_ONLY", + AUDIO_VIDEO: "AUDIO_VIDEO", +} as const; + +/** + * @public + */ +export type ParticipantRecordingMediaType = + (typeof ParticipantRecordingMediaType)[keyof typeof ParticipantRecordingMediaType]; + +/** + *

Object specifying an auto-participant-recording configuration.

+ * @public + */ +export interface AutoParticipantRecordingConfiguration { + /** + *

ARN of the StorageConfiguration resource to use for auto participant recording. Default: "" (empty string, no storage configuration is specified). Individual participant recording cannot be started unless a storage configuration is specified, when a Stage is created or updated.

+ * @public + */ + storageConfigurationArn: string | undefined; + + /** + *

Types of media to be recorded. Default: AUDIO_VIDEO.

+ * @public + */ + mediaTypes?: ParticipantRecordingMediaType[]; +} + /** *

Object specifying a participant token configuration in a stage.

* @public @@ -485,6 +518,12 @@ export interface CreateStageRequest { * @public */ tags?: Record; + + /** + *

Auto participant recording configuration object attached to the stage.

+ * @public + */ + autoParticipantRecordingConfiguration?: AutoParticipantRecordingConfiguration; } /** @@ -519,6 +558,12 @@ export interface Stage { * @public */ tags?: Record; + + /** + *

Auto-participant-recording configuration object attached to the stage.

+ * @public + */ + autoParticipantRecordingConfiguration?: AutoParticipantRecordingConfiguration; } /** @@ -1230,6 +1275,24 @@ export interface GetParticipantRequest { participantId: string | undefined; } +/** + * @public + * @enum + */ +export const ParticipantRecordingState = { + ACTIVE: "ACTIVE", + DISABLED: "DISABLED", + FAILED: "FAILED", + STARTING: "STARTING", + STOPPED: "STOPPED", + STOPPING: "STOPPING", +} as const; + +/** + * @public + */ +export type ParticipantRecordingState = (typeof ParticipantRecordingState)[keyof typeof ParticipantRecordingState]; + /** * @public * @enum @@ -1327,6 +1390,24 @@ export interface Participant { * @public */ sdkVersion?: string; + + /** + *

Name of the S3 bucket to where the participant is being recorded, if individual participant recording is enabled, or "" (empty string), if recording is not enabled.

+ * @public + */ + recordingS3BucketName?: string; + + /** + *

S3 prefix of the S3 bucket to where the participant is being recorded, if individual participant recording is enabled, or "" (empty string), if recording is not enabled.

+ * @public + */ + recordingS3Prefix?: string; + + /** + *

Participant’s recording state.

+ * @public + */ + recordingState?: ParticipantRecordingState; } /** @@ -1775,6 +1856,24 @@ export interface ListParticipantEventsResponse { nextToken?: string; } +/** + * @public + * @enum + */ +export const ParticipantRecordingFilterByRecordingState = { + ACTIVE: "ACTIVE", + FAILED: "FAILED", + STARTING: "STARTING", + STOPPED: "STOPPED", + STOPPING: "STOPPING", +} as const; + +/** + * @public + */ +export type ParticipantRecordingFilterByRecordingState = + (typeof ParticipantRecordingFilterByRecordingState)[keyof typeof ParticipantRecordingFilterByRecordingState]; + /** * @public */ @@ -1792,27 +1891,28 @@ export interface ListParticipantsRequest { sessionId: string | undefined; /** - *

Filters the response list to match the specified user ID. Only one of - * filterByUserId, filterByPublished, or - * filterByState can be provided per request. A userId is a - * customer-assigned name to help identify the token; this can be used to link a participant - * to a user in the customer’s own systems.

+ *

Filters the response list to match the specified user ID. + * Only one of filterByUserId, filterByPublished, + * filterByState, or filterByRecordingState can be provided per request. + * A userId is a + * customer-assigned name to help identify the token; this can be used to link a participant + * to a user in the customer’s own systems.

* @public */ filterByUserId?: string; /** - *

Filters the response list to only show participants who published during the stage - * session. Only one of filterByUserId, filterByPublished, or - * filterByState can be provided per request.

+ *

Filters the response list to only show participants who published during the stage session. + * Only one of filterByUserId, filterByPublished, + * filterByState, or filterByRecordingState can be provided per request.

* @public */ filterByPublished?: boolean; /** - *

Filters the response list to only show participants in the specified state. Only one of - * filterByUserId, filterByPublished, or - * filterByState can be provided per request.

+ *

Filters the response list to only show participants in the specified state. + * Only one of filterByUserId, filterByPublished, + * filterByState, or filterByRecordingState can be provided per request.

* @public */ filterByState?: ParticipantState; @@ -1829,6 +1929,14 @@ export interface ListParticipantsRequest { * @public */ maxResults?: number; + + /** + *

Filters the response list to only show participants with the specified recording state. + * Only one of filterByUserId, filterByPublished, + * filterByState, or filterByRecordingState can be provided per request.

+ * @public + */ + filterByRecordingState?: ParticipantRecordingFilterByRecordingState; } /** @@ -1869,6 +1977,12 @@ export interface ParticipantSummary { * @public */ published?: boolean; + + /** + *

Participant’s recording state.

+ * @public + */ + recordingState?: ParticipantRecordingState; } /** @@ -2253,6 +2367,13 @@ export interface UpdateStageRequest { * @public */ name?: string; + + /** + *

Auto-participant-recording configuration object to attach to the stage. + * Auto-participant-recording configuration cannot be updated while recording is active.

+ * @public + */ + autoParticipantRecordingConfiguration?: AutoParticipantRecordingConfiguration; } /** diff --git a/clients/client-ivs-realtime/src/protocols/Aws_restJson1.ts b/clients/client-ivs-realtime/src/protocols/Aws_restJson1.ts index 147fcbfe7f4d..13415c51738f 100644 --- a/clients/client-ivs-realtime/src/protocols/Aws_restJson1.ts +++ b/clients/client-ivs-realtime/src/protocols/Aws_restJson1.ts @@ -93,6 +93,7 @@ import { UpdateStageCommandInput, UpdateStageCommandOutput } from "../commands/U import { IVSRealTimeServiceException as __BaseException } from "../models/IVSRealTimeServiceException"; import { AccessDeniedException, + AutoParticipantRecordingConfiguration, ChannelDestinationConfiguration, Composition, CompositionSummary, @@ -106,6 +107,7 @@ import { InternalServerException, LayoutConfiguration, Participant, + ParticipantRecordingMediaType, ParticipantSummary, ParticipantToken, ParticipantTokenCapability, @@ -188,6 +190,7 @@ export const se_CreateStageCommand = async ( let body: any; body = JSON.stringify( take(input, { + autoParticipantRecordingConfiguration: (_) => _json(_), name: [], participantTokenConfigurations: (_) => _json(_), tags: (_) => _json(_), @@ -536,6 +539,7 @@ export const se_ListParticipantsCommand = async ( body = JSON.stringify( take(input, { filterByPublished: [], + filterByRecordingState: [], filterByState: [], filterByUserId: [], maxResults: [], @@ -743,6 +747,7 @@ export const se_UpdateStageCommand = async ( body = JSON.stringify( take(input, { arn: [], + autoParticipantRecordingConfiguration: (_) => _json(_), name: [], }) ); @@ -1470,6 +1475,8 @@ const de_ValidationExceptionRes = async (parsedOutput: any, context: __SerdeCont return __decorateServiceException(exception, parsedOutput.body); }; +// se_AutoParticipantRecordingConfiguration omitted. + // se_ChannelDestinationConfiguration omitted. // se_DestinationConfiguration omitted. @@ -1482,6 +1489,8 @@ const de_ValidationExceptionRes = async (parsedOutput: any, context: __SerdeCont // se_LayoutConfiguration omitted. +// se_ParticipantRecordingMediaTypeList omitted. + // se_ParticipantTokenAttributes omitted. // se_ParticipantTokenCapabilities omitted. @@ -1512,6 +1521,8 @@ const se_Video = (input: Video, context: __SerdeContext): any => { }); }; +// de_AutoParticipantRecordingConfiguration omitted. + // de_ChannelDestinationConfiguration omitted. /** @@ -1672,6 +1683,9 @@ const de_Participant = (output: any, context: __SerdeContext): Participant => { osVersion: __expectString, participantId: __expectString, published: __expectBoolean, + recordingS3BucketName: __expectString, + recordingS3Prefix: __expectString, + recordingState: __expectString, sdkVersion: __expectString, state: __expectString, userId: __expectString, @@ -1692,6 +1706,8 @@ const de_ParticipantList = (output: any, context: __SerdeContext): ParticipantSu return retVal; }; +// de_ParticipantRecordingMediaTypeList omitted. + /** * deserializeAws_restJson1ParticipantSummary */ @@ -1700,6 +1716,7 @@ const de_ParticipantSummary = (output: any, context: __SerdeContext): Participan firstJoinTime: (_: any) => __expectNonNull(__parseRfc3339DateTimeWithOffset(_)), participantId: __expectString, published: __expectBoolean, + recordingState: __expectString, state: __expectString, userId: __expectString, }) as any; diff --git a/codegen/sdk-codegen/aws-models/ivs-realtime.json b/codegen/sdk-codegen/aws-models/ivs-realtime.json index e2fb1e8daab2..f2f4c619ff18 100644 --- a/codegen/sdk-codegen/aws-models/ivs-realtime.json +++ b/codegen/sdk-codegen/aws-models/ivs-realtime.json @@ -812,6 +812,37 @@ "smithy.api#pattern": "^[a-zA-Z0-9-_]*$" } }, + "com.amazonaws.ivsrealtime#AutoParticipantRecordingConfiguration": { + "type": "structure", + "members": { + "storageConfigurationArn": { + "target": "com.amazonaws.ivsrealtime#AutoParticipantRecordingStorageConfigurationArn", + "traits": { + "smithy.api#documentation": "

ARN of the StorageConfiguration resource to use for auto participant recording. Default: \"\" (empty string, no storage configuration is specified). Individual participant recording cannot be started unless a storage configuration is specified, when a Stage is created or updated.

", + "smithy.api#required": {} + } + }, + "mediaTypes": { + "target": "com.amazonaws.ivsrealtime#ParticipantRecordingMediaTypeList", + "traits": { + "smithy.api#documentation": "

Types of media to be recorded. Default: AUDIO_VIDEO.

" + } + } + }, + "traits": { + "smithy.api#documentation": "

Object specifying an auto-participant-recording configuration.

" + } + }, + "com.amazonaws.ivsrealtime#AutoParticipantRecordingStorageConfigurationArn": { + "type": "string", + "traits": { + "smithy.api#length": { + "min": 0, + "max": 128 + }, + "smithy.api#pattern": "^^$|^arn:aws:ivs:[a-z0-9-]+:[0-9]+:storage-configuration/[a-zA-Z0-9-]+$$" + } + }, "com.amazonaws.ivsrealtime#Bitrate": { "type": "integer", "traits": { @@ -1245,6 +1276,12 @@ "traits": { "smithy.api#documentation": "

Tags attached to the resource. Array of maps, each of the form string:string\n (key:value). See Tagging AWS\n Resources for details, including restrictions that apply to tags and \"Tag naming\n limits and requirements\"; Amazon IVS has no constraints on tags beyond what is documented\n there.

" } + }, + "autoParticipantRecordingConfiguration": { + "target": "com.amazonaws.ivsrealtime#AutoParticipantRecordingConfiguration", + "traits": { + "smithy.api#documentation": "

Auto participant recording configuration object attached to the stage.

" + } } } }, @@ -2784,20 +2821,20 @@ "filterByUserId": { "target": "com.amazonaws.ivsrealtime#UserId", "traits": { - "smithy.api#documentation": "

Filters the response list to match the specified user ID. Only one of\n filterByUserId, filterByPublished, or\n filterByState can be provided per request. A userId is a\n customer-assigned name to help identify the token; this can be used to link a participant\n to a user in the customer’s own systems.

" + "smithy.api#documentation": "

Filters the response list to match the specified user ID. \n Only one of filterByUserId, filterByPublished, \n filterByState, or filterByRecordingState can be provided per request.\n\t A userId is a\n customer-assigned name to help identify the token; this can be used to link a participant\n to a user in the customer’s own systems.

" } }, "filterByPublished": { "target": "com.amazonaws.ivsrealtime#Published", "traits": { "smithy.api#default": false, - "smithy.api#documentation": "

Filters the response list to only show participants who published during the stage\n session. Only one of filterByUserId, filterByPublished, or\n filterByState can be provided per request.

" + "smithy.api#documentation": "

Filters the response list to only show participants who published during the stage session.\n Only one of filterByUserId, filterByPublished, \n filterByState, or filterByRecordingState can be provided per request.

" } }, "filterByState": { "target": "com.amazonaws.ivsrealtime#ParticipantState", "traits": { - "smithy.api#documentation": "

Filters the response list to only show participants in the specified state. Only one of\n filterByUserId, filterByPublished, or\n filterByState can be provided per request.

" + "smithy.api#documentation": "

Filters the response list to only show participants in the specified state. \n Only one of filterByUserId, filterByPublished, \n filterByState, or filterByRecordingState can be provided per request.

" } }, "nextToken": { @@ -2811,6 +2848,12 @@ "traits": { "smithy.api#documentation": "

Maximum number of results to return. Default: 50.

" } + }, + "filterByRecordingState": { + "target": "com.amazonaws.ivsrealtime#ParticipantRecordingFilterByRecordingState", + "traits": { + "smithy.api#documentation": "

Filters the response list to only show participants with the specified recording state.\n Only one of filterByUserId, filterByPublished, \n filterByState, or filterByRecordingState can be provided per request.

" + } } }, "traits": { @@ -3271,6 +3314,24 @@ "traits": { "smithy.api#documentation": "

The participant’s SDK version.

" } + }, + "recordingS3BucketName": { + "target": "com.amazonaws.ivsrealtime#ParticipantRecordingS3BucketName", + "traits": { + "smithy.api#documentation": "

Name of the S3 bucket to where the participant is being recorded, if individual participant recording is enabled, or \"\" (empty string), if recording is not enabled.

" + } + }, + "recordingS3Prefix": { + "target": "com.amazonaws.ivsrealtime#ParticipantRecordingS3Prefix", + "traits": { + "smithy.api#documentation": "

S3 prefix of the S3 bucket to where the participant is being recorded, if individual participant recording is enabled, or \"\" (empty string), if recording is not enabled.

" + } + }, + "recordingState": { + "target": "com.amazonaws.ivsrealtime#ParticipantRecordingState", + "traits": { + "smithy.api#documentation": "

Participant’s recording state.

" + } } }, "traits": { @@ -3312,6 +3373,111 @@ "target": "com.amazonaws.ivsrealtime#ParticipantSummary" } }, + "com.amazonaws.ivsrealtime#ParticipantRecordingFilterByRecordingState": { + "type": "string", + "traits": { + "smithy.api#enum": [ + { + "value": "STARTING", + "name": "STARTING" + }, + { + "value": "ACTIVE", + "name": "ACTIVE" + }, + { + "value": "STOPPING", + "name": "STOPPING" + }, + { + "value": "STOPPED", + "name": "STOPPED" + }, + { + "value": "FAILED", + "name": "FAILED" + } + ] + } + }, + "com.amazonaws.ivsrealtime#ParticipantRecordingMediaType": { + "type": "string", + "traits": { + "smithy.api#enum": [ + { + "value": "AUDIO_VIDEO", + "name": "AUDIO_VIDEO" + }, + { + "value": "AUDIO_ONLY", + "name": "AUDIO_ONLY" + } + ] + } + }, + "com.amazonaws.ivsrealtime#ParticipantRecordingMediaTypeList": { + "type": "list", + "member": { + "target": "com.amazonaws.ivsrealtime#ParticipantRecordingMediaType" + }, + "traits": { + "smithy.api#length": { + "min": 0, + "max": 1 + } + } + }, + "com.amazonaws.ivsrealtime#ParticipantRecordingS3BucketName": { + "type": "string", + "traits": { + "smithy.api#length": { + "min": 0, + "max": 63 + }, + "smithy.api#pattern": "^[a-z0-9-.]*$" + } + }, + "com.amazonaws.ivsrealtime#ParticipantRecordingS3Prefix": { + "type": "string", + "traits": { + "smithy.api#length": { + "min": 0, + "max": 256 + }, + "smithy.api#pattern": "^[a-zA-Z0-9-]*$" + } + }, + "com.amazonaws.ivsrealtime#ParticipantRecordingState": { + "type": "string", + "traits": { + "smithy.api#enum": [ + { + "value": "STARTING", + "name": "STARTING" + }, + { + "value": "ACTIVE", + "name": "ACTIVE" + }, + { + "value": "STOPPING", + "name": "STOPPING" + }, + { + "value": "STOPPED", + "name": "STOPPED" + }, + { + "value": "FAILED", + "name": "FAILED" + }, + { + "value": "DISABLED", + "name": "DISABLED" + } + ] + } + }, "com.amazonaws.ivsrealtime#ParticipantState": { "type": "string", "traits": { @@ -3360,6 +3526,12 @@ "smithy.api#default": false, "smithy.api#documentation": "

Whether the participant ever published to the stage session.

" } + }, + "recordingState": { + "target": "com.amazonaws.ivsrealtime#ParticipantRecordingState", + "traits": { + "smithy.api#documentation": "

Participant’s recording state.

" + } } }, "traits": { @@ -3861,6 +4033,12 @@ "traits": { "smithy.api#documentation": "

Tags attached to the resource. Array of maps, each of the form string:string\n (key:value). See Tagging AWS\n Resources for details, including restrictions that apply to tags and \"Tag naming\n limits and requirements\"; Amazon IVS has no constraints on tags beyond what is documented\n there.

" } + }, + "autoParticipantRecordingConfiguration": { + "target": "com.amazonaws.ivsrealtime#AutoParticipantRecordingConfiguration", + "traits": { + "smithy.api#documentation": "

Auto-participant-recording configuration object attached to the stage.

" + } } }, "traits": { @@ -4446,6 +4624,12 @@ "traits": { "smithy.api#documentation": "

Name of the stage to be updated.

" } + }, + "autoParticipantRecordingConfiguration": { + "target": "com.amazonaws.ivsrealtime#AutoParticipantRecordingConfiguration", + "traits": { + "smithy.api#documentation": "

Auto-participant-recording configuration object to attach to the stage.\n Auto-participant-recording configuration cannot be updated while recording is active.

" + } } } },