From 791009c2ac2234b66f4ffc461630b7b4b7317c20 Mon Sep 17 00:00:00 2001 From: AsyncAws Bot Date: Fri, 14 Nov 2025 06:36:57 +0000 Subject: [PATCH 1/2] update generated code --- manifest.json | 2 +- src/Service/CloudFormation/CHANGELOG.md | 1 + .../src/CloudFormationClient.php | 4 +- .../src/Input/DescribeStackEventsInput.php | 14 ++-- .../src/Input/DescribeStacksInput.php | 2 +- .../CloudFormation/src/ValueObject/Output.php | 2 +- .../src/ValueObject/Parameter.php | 2 +- .../CloudFormation/src/ValueObject/Stack.php | 2 +- .../src/ValueObject/StackEvent.php | 2 +- src/Service/MediaConvert/CHANGELOG.md | 1 + .../src/Enum/CmfcC2paManifest.php | 21 ++++++ .../MediaConvert/src/Enum/FrameControl.php | 26 +++++++ .../MediaConvert/src/Enum/MpdC2paManifest.php | 21 ++++++ .../src/Result/CreateJobResponse.php | 7 ++ .../src/Result/GetJobResponse.php | 7 ++ .../src/Result/ListJobsResponse.php | 7 ++ .../src/ValueObject/CmfcSettings.php | 67 +++++++++++++++++++ .../src/ValueObject/InputVideoGenerator.php | 2 +- .../src/ValueObject/MpdSettings.php | 67 +++++++++++++++++++ .../src/ValueObject/PassthroughSettings.php | 31 +++++++++ 20 files changed, 274 insertions(+), 14 deletions(-) create mode 100644 src/Service/MediaConvert/src/Enum/CmfcC2paManifest.php create mode 100644 src/Service/MediaConvert/src/Enum/FrameControl.php create mode 100644 src/Service/MediaConvert/src/Enum/MpdC2paManifest.php diff --git a/manifest.json b/manifest.json index 3f45e52a9..f51ed7237 100644 --- a/manifest.json +++ b/manifest.json @@ -1,6 +1,6 @@ { "variables": { - "${LATEST}": "3.359.9" + "${LATEST}": "3.359.12" }, "endpoints": "https://raw.githubusercontent.com/aws/aws-sdk-php/${LATEST}/src/data/endpoints.json", "services": { diff --git a/src/Service/CloudFormation/CHANGELOG.md b/src/Service/CloudFormation/CHANGELOG.md index 26543e8d1..554aba1cd 100644 --- a/src/Service/CloudFormation/CHANGELOG.md +++ b/src/Service/CloudFormation/CHANGELOG.md @@ -6,6 +6,7 @@ - AWS api-change: Update endpoint ruleset parameters casing - AWS apu-change: Added `us-isob-west-1` region +- AWS api-change: CloudFormation now supports GetHookResult API with annotations to retrieve structured compliance check results and remediation guidance for each evaluated resource, replacing the previous single-message limitation with detailed validation outcomes. ### Dependency bumped diff --git a/src/Service/CloudFormation/src/CloudFormationClient.php b/src/Service/CloudFormation/src/CloudFormationClient.php index fb4ce36c8..57c3ef178 100644 --- a/src/Service/CloudFormation/src/CloudFormationClient.php +++ b/src/Service/CloudFormation/src/CloudFormationClient.php @@ -60,12 +60,12 @@ public function describeStackDriftDetectionStatus($input): DescribeStackDriftDet * @see https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-cloudformation-2010-05-15.html#describestackevents * * @param array{ - * StackName?: string|null, + * StackName: string, * NextToken?: string|null, * '@region'?: string|null, * }|DescribeStackEventsInput $input */ - public function describeStackEvents($input = []): DescribeStackEventsOutput + public function describeStackEvents($input): DescribeStackEventsOutput { $input = DescribeStackEventsInput::create($input); $response = $this->getResponse($input->request(), new RequestContext(['operation' => 'DescribeStackEvents', 'region' => $input->getRegion()])); diff --git a/src/Service/CloudFormation/src/Input/DescribeStackEventsInput.php b/src/Service/CloudFormation/src/Input/DescribeStackEventsInput.php index 2c98f2ad3..9343c2c12 100644 --- a/src/Service/CloudFormation/src/Input/DescribeStackEventsInput.php +++ b/src/Service/CloudFormation/src/Input/DescribeStackEventsInput.php @@ -2,6 +2,7 @@ namespace AsyncAws\CloudFormation\Input; +use AsyncAws\Core\Exception\InvalidArgument; use AsyncAws\Core\Input; use AsyncAws\Core\Request; use AsyncAws\Core\Stream\StreamFactory; @@ -17,12 +18,14 @@ final class DescribeStackEventsInput extends Input * - Running stacks: You can specify either the stack's name or its unique stack ID. * - Deleted stacks: You must specify the unique stack ID. * + * @required + * * @var string|null */ private $stackName; /** - * A string that identifies the next page of events that you want to retrieve. + * The token for the next set of items to return. (You received this token from a previous call.). * * @var string|null */ @@ -30,7 +33,7 @@ final class DescribeStackEventsInput extends Input /** * @param array{ - * StackName?: string|null, + * StackName?: string, * NextToken?: string|null, * '@region'?: string|null, * } $input @@ -44,7 +47,7 @@ public function __construct(array $input = []) /** * @param array{ - * StackName?: string|null, + * StackName?: string, * NextToken?: string|null, * '@region'?: string|null, * }|DescribeStackEventsInput $input @@ -102,9 +105,10 @@ public function setStackName(?string $value): self private function requestBody(): array { $payload = []; - if (null !== $v = $this->stackName) { - $payload['StackName'] = $v; + if (null === $v = $this->stackName) { + throw new InvalidArgument(\sprintf('Missing parameter "StackName" for "%s". The value cannot be null.', __CLASS__)); } + $payload['StackName'] = $v; if (null !== $v = $this->nextToken) { $payload['NextToken'] = $v; } diff --git a/src/Service/CloudFormation/src/Input/DescribeStacksInput.php b/src/Service/CloudFormation/src/Input/DescribeStacksInput.php index fc927adb5..8e5762da5 100644 --- a/src/Service/CloudFormation/src/Input/DescribeStacksInput.php +++ b/src/Service/CloudFormation/src/Input/DescribeStacksInput.php @@ -33,7 +33,7 @@ final class DescribeStacksInput extends Input private $stackName; /** - * A string that identifies the next page of stacks that you want to retrieve. + * The token for the next set of items to return. (You received this token from a previous call.). * * @var string|null */ diff --git a/src/Service/CloudFormation/src/ValueObject/Output.php b/src/Service/CloudFormation/src/ValueObject/Output.php index 60f868d8a..177bba560 100644 --- a/src/Service/CloudFormation/src/ValueObject/Output.php +++ b/src/Service/CloudFormation/src/ValueObject/Output.php @@ -3,7 +3,7 @@ namespace AsyncAws\CloudFormation\ValueObject; /** - * The Output data type. + * The `Output` data type. */ final class Output { diff --git a/src/Service/CloudFormation/src/ValueObject/Parameter.php b/src/Service/CloudFormation/src/ValueObject/Parameter.php index 60ab71f89..1a0256d18 100644 --- a/src/Service/CloudFormation/src/ValueObject/Parameter.php +++ b/src/Service/CloudFormation/src/ValueObject/Parameter.php @@ -3,7 +3,7 @@ namespace AsyncAws\CloudFormation\ValueObject; /** - * The Parameter data type. + * The `Parameter` data type. */ final class Parameter { diff --git a/src/Service/CloudFormation/src/ValueObject/Stack.php b/src/Service/CloudFormation/src/ValueObject/Stack.php index d98a9f631..5bbf755f3 100644 --- a/src/Service/CloudFormation/src/ValueObject/Stack.php +++ b/src/Service/CloudFormation/src/ValueObject/Stack.php @@ -9,7 +9,7 @@ use AsyncAws\Core\Exception\InvalidArgument; /** - * The Stack data type. + * The `Stack` data type. */ final class Stack { diff --git a/src/Service/CloudFormation/src/ValueObject/StackEvent.php b/src/Service/CloudFormation/src/ValueObject/StackEvent.php index 856a8569f..97c99468d 100644 --- a/src/Service/CloudFormation/src/ValueObject/StackEvent.php +++ b/src/Service/CloudFormation/src/ValueObject/StackEvent.php @@ -10,7 +10,7 @@ use AsyncAws\Core\Exception\InvalidArgument; /** - * The StackEvent data type. + * The `StackEvent` data type. */ final class StackEvent { diff --git a/src/Service/MediaConvert/CHANGELOG.md b/src/Service/MediaConvert/CHANGELOG.md index d6ce4cc5c..12b9cf61a 100644 --- a/src/Service/MediaConvert/CHANGELOG.md +++ b/src/Service/MediaConvert/CHANGELOG.md @@ -6,6 +6,7 @@ - AWS api-change: This release adds the ability to set resolution for the black video generator. - AWS api-change: Adds SlowPalPitchCorrection to audio pitch correction settings. Enables opacity for VideoOverlays. Adds REMUX_ALL option to enable multi-rendition passthrough to VideoSelector for allow listed accounts. +- AWS api-change: Lowers minimum duration for black video generator. Adds support for embedding and signing C2PA content credentials in DASH and CMAF HLS outputs. ### Dependency bumped diff --git a/src/Service/MediaConvert/src/Enum/CmfcC2paManifest.php b/src/Service/MediaConvert/src/Enum/CmfcC2paManifest.php new file mode 100644 index 000000000..beb252a49 --- /dev/null +++ b/src/Service/MediaConvert/src/Enum/CmfcC2paManifest.php @@ -0,0 +1,21 @@ + true, + self::INCLUDE => true, + ][$value]); + } +} diff --git a/src/Service/MediaConvert/src/Enum/FrameControl.php b/src/Service/MediaConvert/src/Enum/FrameControl.php new file mode 100644 index 000000000..0bb6b85c5 --- /dev/null +++ b/src/Service/MediaConvert/src/Enum/FrameControl.php @@ -0,0 +1,26 @@ + true, + self::NEAREST_IFRAME => true, + ][$value]); + } +} diff --git a/src/Service/MediaConvert/src/Enum/MpdC2paManifest.php b/src/Service/MediaConvert/src/Enum/MpdC2paManifest.php new file mode 100644 index 000000000..ce2162c4d --- /dev/null +++ b/src/Service/MediaConvert/src/Enum/MpdC2paManifest.php @@ -0,0 +1,21 @@ + true, + self::INCLUDE => true, + ][$value]); + } +} diff --git a/src/Service/MediaConvert/src/Result/CreateJobResponse.php b/src/Service/MediaConvert/src/Result/CreateJobResponse.php index a218ea7be..2a91115b9 100644 --- a/src/Service/MediaConvert/src/Result/CreateJobResponse.php +++ b/src/Service/MediaConvert/src/Result/CreateJobResponse.php @@ -657,12 +657,15 @@ private function populateResultCmfcSettings(array $json): CmfcSettings 'AudioGroupId' => isset($json['audioGroupId']) ? (string) $json['audioGroupId'] : null, 'AudioRenditionSets' => isset($json['audioRenditionSets']) ? (string) $json['audioRenditionSets'] : null, 'AudioTrackType' => isset($json['audioTrackType']) ? (string) $json['audioTrackType'] : null, + 'C2paManifest' => isset($json['c2paManifest']) ? (string) $json['c2paManifest'] : null, + 'CertificateSecret' => isset($json['certificateSecret']) ? (string) $json['certificateSecret'] : null, 'DescriptiveVideoServiceFlag' => isset($json['descriptiveVideoServiceFlag']) ? (string) $json['descriptiveVideoServiceFlag'] : null, 'IFrameOnlyManifest' => isset($json['iFrameOnlyManifest']) ? (string) $json['iFrameOnlyManifest'] : null, 'KlvMetadata' => isset($json['klvMetadata']) ? (string) $json['klvMetadata'] : null, 'ManifestMetadataSignaling' => isset($json['manifestMetadataSignaling']) ? (string) $json['manifestMetadataSignaling'] : null, 'Scte35Esam' => isset($json['scte35Esam']) ? (string) $json['scte35Esam'] : null, 'Scte35Source' => isset($json['scte35Source']) ? (string) $json['scte35Source'] : null, + 'SigningKmsKey' => isset($json['signingKmsKey']) ? (string) $json['signingKmsKey'] : null, 'TimedMetadata' => isset($json['timedMetadata']) ? (string) $json['timedMetadata'] : null, 'TimedMetadataBoxVersion' => isset($json['timedMetadataBoxVersion']) ? (string) $json['timedMetadataBoxVersion'] : null, 'TimedMetadataSchemeIdUri' => isset($json['timedMetadataSchemeIdUri']) ? (string) $json['timedMetadataSchemeIdUri'] : null, @@ -1695,11 +1698,14 @@ private function populateResultMpdSettings(array $json): MpdSettings return new MpdSettings([ 'AccessibilityCaptionHints' => isset($json['accessibilityCaptionHints']) ? (string) $json['accessibilityCaptionHints'] : null, 'AudioDuration' => isset($json['audioDuration']) ? (string) $json['audioDuration'] : null, + 'C2paManifest' => isset($json['c2paManifest']) ? (string) $json['c2paManifest'] : null, 'CaptionContainerType' => isset($json['captionContainerType']) ? (string) $json['captionContainerType'] : null, + 'CertificateSecret' => isset($json['certificateSecret']) ? (string) $json['certificateSecret'] : null, 'KlvMetadata' => isset($json['klvMetadata']) ? (string) $json['klvMetadata'] : null, 'ManifestMetadataSignaling' => isset($json['manifestMetadataSignaling']) ? (string) $json['manifestMetadataSignaling'] : null, 'Scte35Esam' => isset($json['scte35Esam']) ? (string) $json['scte35Esam'] : null, 'Scte35Source' => isset($json['scte35Source']) ? (string) $json['scte35Source'] : null, + 'SigningKmsKey' => isset($json['signingKmsKey']) ? (string) $json['signingKmsKey'] : null, 'TimedMetadata' => isset($json['timedMetadata']) ? (string) $json['timedMetadata'] : null, 'TimedMetadataBoxVersion' => isset($json['timedMetadataBoxVersion']) ? (string) $json['timedMetadataBoxVersion'] : null, 'TimedMetadataSchemeIdUri' => isset($json['timedMetadataSchemeIdUri']) ? (string) $json['timedMetadataSchemeIdUri'] : null, @@ -1952,6 +1958,7 @@ private function populateResultPartnerWatermarking(array $json): PartnerWatermar private function populateResultPassthroughSettings(array $json): PassthroughSettings { return new PassthroughSettings([ + 'FrameControl' => isset($json['frameControl']) ? (string) $json['frameControl'] : null, 'VideoSelectorMode' => isset($json['videoSelectorMode']) ? (string) $json['videoSelectorMode'] : null, ]); } diff --git a/src/Service/MediaConvert/src/Result/GetJobResponse.php b/src/Service/MediaConvert/src/Result/GetJobResponse.php index 1a9a2dadd..9f284ca97 100644 --- a/src/Service/MediaConvert/src/Result/GetJobResponse.php +++ b/src/Service/MediaConvert/src/Result/GetJobResponse.php @@ -657,12 +657,15 @@ private function populateResultCmfcSettings(array $json): CmfcSettings 'AudioGroupId' => isset($json['audioGroupId']) ? (string) $json['audioGroupId'] : null, 'AudioRenditionSets' => isset($json['audioRenditionSets']) ? (string) $json['audioRenditionSets'] : null, 'AudioTrackType' => isset($json['audioTrackType']) ? (string) $json['audioTrackType'] : null, + 'C2paManifest' => isset($json['c2paManifest']) ? (string) $json['c2paManifest'] : null, + 'CertificateSecret' => isset($json['certificateSecret']) ? (string) $json['certificateSecret'] : null, 'DescriptiveVideoServiceFlag' => isset($json['descriptiveVideoServiceFlag']) ? (string) $json['descriptiveVideoServiceFlag'] : null, 'IFrameOnlyManifest' => isset($json['iFrameOnlyManifest']) ? (string) $json['iFrameOnlyManifest'] : null, 'KlvMetadata' => isset($json['klvMetadata']) ? (string) $json['klvMetadata'] : null, 'ManifestMetadataSignaling' => isset($json['manifestMetadataSignaling']) ? (string) $json['manifestMetadataSignaling'] : null, 'Scte35Esam' => isset($json['scte35Esam']) ? (string) $json['scte35Esam'] : null, 'Scte35Source' => isset($json['scte35Source']) ? (string) $json['scte35Source'] : null, + 'SigningKmsKey' => isset($json['signingKmsKey']) ? (string) $json['signingKmsKey'] : null, 'TimedMetadata' => isset($json['timedMetadata']) ? (string) $json['timedMetadata'] : null, 'TimedMetadataBoxVersion' => isset($json['timedMetadataBoxVersion']) ? (string) $json['timedMetadataBoxVersion'] : null, 'TimedMetadataSchemeIdUri' => isset($json['timedMetadataSchemeIdUri']) ? (string) $json['timedMetadataSchemeIdUri'] : null, @@ -1695,11 +1698,14 @@ private function populateResultMpdSettings(array $json): MpdSettings return new MpdSettings([ 'AccessibilityCaptionHints' => isset($json['accessibilityCaptionHints']) ? (string) $json['accessibilityCaptionHints'] : null, 'AudioDuration' => isset($json['audioDuration']) ? (string) $json['audioDuration'] : null, + 'C2paManifest' => isset($json['c2paManifest']) ? (string) $json['c2paManifest'] : null, 'CaptionContainerType' => isset($json['captionContainerType']) ? (string) $json['captionContainerType'] : null, + 'CertificateSecret' => isset($json['certificateSecret']) ? (string) $json['certificateSecret'] : null, 'KlvMetadata' => isset($json['klvMetadata']) ? (string) $json['klvMetadata'] : null, 'ManifestMetadataSignaling' => isset($json['manifestMetadataSignaling']) ? (string) $json['manifestMetadataSignaling'] : null, 'Scte35Esam' => isset($json['scte35Esam']) ? (string) $json['scte35Esam'] : null, 'Scte35Source' => isset($json['scte35Source']) ? (string) $json['scte35Source'] : null, + 'SigningKmsKey' => isset($json['signingKmsKey']) ? (string) $json['signingKmsKey'] : null, 'TimedMetadata' => isset($json['timedMetadata']) ? (string) $json['timedMetadata'] : null, 'TimedMetadataBoxVersion' => isset($json['timedMetadataBoxVersion']) ? (string) $json['timedMetadataBoxVersion'] : null, 'TimedMetadataSchemeIdUri' => isset($json['timedMetadataSchemeIdUri']) ? (string) $json['timedMetadataSchemeIdUri'] : null, @@ -1952,6 +1958,7 @@ private function populateResultPartnerWatermarking(array $json): PartnerWatermar private function populateResultPassthroughSettings(array $json): PassthroughSettings { return new PassthroughSettings([ + 'FrameControl' => isset($json['frameControl']) ? (string) $json['frameControl'] : null, 'VideoSelectorMode' => isset($json['videoSelectorMode']) ? (string) $json['videoSelectorMode'] : null, ]); } diff --git a/src/Service/MediaConvert/src/Result/ListJobsResponse.php b/src/Service/MediaConvert/src/Result/ListJobsResponse.php index 3d157d53f..44082facb 100644 --- a/src/Service/MediaConvert/src/Result/ListJobsResponse.php +++ b/src/Service/MediaConvert/src/Result/ListJobsResponse.php @@ -724,12 +724,15 @@ private function populateResultCmfcSettings(array $json): CmfcSettings 'AudioGroupId' => isset($json['audioGroupId']) ? (string) $json['audioGroupId'] : null, 'AudioRenditionSets' => isset($json['audioRenditionSets']) ? (string) $json['audioRenditionSets'] : null, 'AudioTrackType' => isset($json['audioTrackType']) ? (string) $json['audioTrackType'] : null, + 'C2paManifest' => isset($json['c2paManifest']) ? (string) $json['c2paManifest'] : null, + 'CertificateSecret' => isset($json['certificateSecret']) ? (string) $json['certificateSecret'] : null, 'DescriptiveVideoServiceFlag' => isset($json['descriptiveVideoServiceFlag']) ? (string) $json['descriptiveVideoServiceFlag'] : null, 'IFrameOnlyManifest' => isset($json['iFrameOnlyManifest']) ? (string) $json['iFrameOnlyManifest'] : null, 'KlvMetadata' => isset($json['klvMetadata']) ? (string) $json['klvMetadata'] : null, 'ManifestMetadataSignaling' => isset($json['manifestMetadataSignaling']) ? (string) $json['manifestMetadataSignaling'] : null, 'Scte35Esam' => isset($json['scte35Esam']) ? (string) $json['scte35Esam'] : null, 'Scte35Source' => isset($json['scte35Source']) ? (string) $json['scte35Source'] : null, + 'SigningKmsKey' => isset($json['signingKmsKey']) ? (string) $json['signingKmsKey'] : null, 'TimedMetadata' => isset($json['timedMetadata']) ? (string) $json['timedMetadata'] : null, 'TimedMetadataBoxVersion' => isset($json['timedMetadataBoxVersion']) ? (string) $json['timedMetadataBoxVersion'] : null, 'TimedMetadataSchemeIdUri' => isset($json['timedMetadataSchemeIdUri']) ? (string) $json['timedMetadataSchemeIdUri'] : null, @@ -1762,11 +1765,14 @@ private function populateResultMpdSettings(array $json): MpdSettings return new MpdSettings([ 'AccessibilityCaptionHints' => isset($json['accessibilityCaptionHints']) ? (string) $json['accessibilityCaptionHints'] : null, 'AudioDuration' => isset($json['audioDuration']) ? (string) $json['audioDuration'] : null, + 'C2paManifest' => isset($json['c2paManifest']) ? (string) $json['c2paManifest'] : null, 'CaptionContainerType' => isset($json['captionContainerType']) ? (string) $json['captionContainerType'] : null, + 'CertificateSecret' => isset($json['certificateSecret']) ? (string) $json['certificateSecret'] : null, 'KlvMetadata' => isset($json['klvMetadata']) ? (string) $json['klvMetadata'] : null, 'ManifestMetadataSignaling' => isset($json['manifestMetadataSignaling']) ? (string) $json['manifestMetadataSignaling'] : null, 'Scte35Esam' => isset($json['scte35Esam']) ? (string) $json['scte35Esam'] : null, 'Scte35Source' => isset($json['scte35Source']) ? (string) $json['scte35Source'] : null, + 'SigningKmsKey' => isset($json['signingKmsKey']) ? (string) $json['signingKmsKey'] : null, 'TimedMetadata' => isset($json['timedMetadata']) ? (string) $json['timedMetadata'] : null, 'TimedMetadataBoxVersion' => isset($json['timedMetadataBoxVersion']) ? (string) $json['timedMetadataBoxVersion'] : null, 'TimedMetadataSchemeIdUri' => isset($json['timedMetadataSchemeIdUri']) ? (string) $json['timedMetadataSchemeIdUri'] : null, @@ -2019,6 +2025,7 @@ private function populateResultPartnerWatermarking(array $json): PartnerWatermar private function populateResultPassthroughSettings(array $json): PassthroughSettings { return new PassthroughSettings([ + 'FrameControl' => isset($json['frameControl']) ? (string) $json['frameControl'] : null, 'VideoSelectorMode' => isset($json['videoSelectorMode']) ? (string) $json['videoSelectorMode'] : null, ]); } diff --git a/src/Service/MediaConvert/src/ValueObject/CmfcSettings.php b/src/Service/MediaConvert/src/ValueObject/CmfcSettings.php index aa01e9b3e..186840ff3 100644 --- a/src/Service/MediaConvert/src/ValueObject/CmfcSettings.php +++ b/src/Service/MediaConvert/src/ValueObject/CmfcSettings.php @@ -5,6 +5,7 @@ use AsyncAws\Core\Exception\InvalidArgument; use AsyncAws\MediaConvert\Enum\CmfcAudioDuration; use AsyncAws\MediaConvert\Enum\CmfcAudioTrackType; +use AsyncAws\MediaConvert\Enum\CmfcC2paManifest; use AsyncAws\MediaConvert\Enum\CmfcDescriptiveVideoServiceFlag; use AsyncAws\MediaConvert\Enum\CmfcIFrameOnlyManifest; use AsyncAws\MediaConvert\Enum\CmfcKlvMetadata; @@ -81,6 +82,25 @@ final class CmfcSettings */ private $audioTrackType; + /** + * When enabled, a C2PA compliant manifest will be generated, signed and embeded in the output. For more information on + * C2PA, see https://c2pa.org/specifications/specifications/2.1/index.html. + * + * @var CmfcC2paManifest::*|null + */ + private $c2paManifest; + + /** + * Specify the name or ARN of the AWS Secrets Manager secret that contains your C2PA public certificate chain in PEM + * format. Provide a valid secret name or ARN. Note that your MediaConvert service role must allow access to this + * secret. The public certificate chain is added to the COSE header (x5chain) for signature validation. Include the + * signer's certificate and all intermediate certificates. Do not include the root certificate. For details on COSE, + * see: https://opensource.contentauthenticity.org/docs/manifest/signing-manifests. + * + * @var string|null + */ + private $certificateSecret; + /** * Specify whether to flag this audio track as descriptive video service (DVS) in your HLS parent manifest. When you * choose Flag, MediaConvert includes the parameter CHARACTERISTICS="public.accessibility.describes-video" in the @@ -140,6 +160,14 @@ final class CmfcSettings */ private $scte35Source; + /** + * Specify the ID or ARN of the AWS KMS key used to sign the C2PA manifest in your MP4 output. Provide a valid KMS key + * ARN. Note that your MediaConvert service role must allow access to this key. + * + * @var string|null + */ + private $signingKmsKey; + /** * To include ID3 metadata in this output: Set ID3 metadata to Passthrough. Specify this ID3 metadata in Custom ID3 * metadata inserter. MediaConvert writes each instance of ID3 metadata in a separate Event Message (eMSG) box. To @@ -183,12 +211,15 @@ final class CmfcSettings * AudioGroupId?: string|null, * AudioRenditionSets?: string|null, * AudioTrackType?: CmfcAudioTrackType::*|null, + * C2paManifest?: CmfcC2paManifest::*|null, + * CertificateSecret?: string|null, * DescriptiveVideoServiceFlag?: CmfcDescriptiveVideoServiceFlag::*|null, * IFrameOnlyManifest?: CmfcIFrameOnlyManifest::*|null, * KlvMetadata?: CmfcKlvMetadata::*|null, * ManifestMetadataSignaling?: CmfcManifestMetadataSignaling::*|null, * Scte35Esam?: CmfcScte35Esam::*|null, * Scte35Source?: CmfcScte35Source::*|null, + * SigningKmsKey?: string|null, * TimedMetadata?: CmfcTimedMetadata::*|null, * TimedMetadataBoxVersion?: CmfcTimedMetadataBoxVersion::*|null, * TimedMetadataSchemeIdUri?: string|null, @@ -201,12 +232,15 @@ public function __construct(array $input) $this->audioGroupId = $input['AudioGroupId'] ?? null; $this->audioRenditionSets = $input['AudioRenditionSets'] ?? null; $this->audioTrackType = $input['AudioTrackType'] ?? null; + $this->c2paManifest = $input['C2paManifest'] ?? null; + $this->certificateSecret = $input['CertificateSecret'] ?? null; $this->descriptiveVideoServiceFlag = $input['DescriptiveVideoServiceFlag'] ?? null; $this->iframeOnlyManifest = $input['IFrameOnlyManifest'] ?? null; $this->klvMetadata = $input['KlvMetadata'] ?? null; $this->manifestMetadataSignaling = $input['ManifestMetadataSignaling'] ?? null; $this->scte35Esam = $input['Scte35Esam'] ?? null; $this->scte35Source = $input['Scte35Source'] ?? null; + $this->signingKmsKey = $input['SigningKmsKey'] ?? null; $this->timedMetadata = $input['TimedMetadata'] ?? null; $this->timedMetadataBoxVersion = $input['TimedMetadataBoxVersion'] ?? null; $this->timedMetadataSchemeIdUri = $input['TimedMetadataSchemeIdUri'] ?? null; @@ -219,12 +253,15 @@ public function __construct(array $input) * AudioGroupId?: string|null, * AudioRenditionSets?: string|null, * AudioTrackType?: CmfcAudioTrackType::*|null, + * C2paManifest?: CmfcC2paManifest::*|null, + * CertificateSecret?: string|null, * DescriptiveVideoServiceFlag?: CmfcDescriptiveVideoServiceFlag::*|null, * IFrameOnlyManifest?: CmfcIFrameOnlyManifest::*|null, * KlvMetadata?: CmfcKlvMetadata::*|null, * ManifestMetadataSignaling?: CmfcManifestMetadataSignaling::*|null, * Scte35Esam?: CmfcScte35Esam::*|null, * Scte35Source?: CmfcScte35Source::*|null, + * SigningKmsKey?: string|null, * TimedMetadata?: CmfcTimedMetadata::*|null, * TimedMetadataBoxVersion?: CmfcTimedMetadataBoxVersion::*|null, * TimedMetadataSchemeIdUri?: string|null, @@ -262,6 +299,19 @@ public function getAudioTrackType(): ?string return $this->audioTrackType; } + /** + * @return CmfcC2paManifest::*|null + */ + public function getC2paManifest(): ?string + { + return $this->c2paManifest; + } + + public function getCertificateSecret(): ?string + { + return $this->certificateSecret; + } + /** * @return CmfcDescriptiveVideoServiceFlag::*|null */ @@ -310,6 +360,11 @@ public function getScte35Source(): ?string return $this->scte35Source; } + public function getSigningKmsKey(): ?string + { + return $this->signingKmsKey; + } + /** * @return CmfcTimedMetadata::*|null */ @@ -360,6 +415,15 @@ public function requestBody(): array } $payload['audioTrackType'] = $v; } + if (null !== $v = $this->c2paManifest) { + if (!CmfcC2paManifest::exists($v)) { + throw new InvalidArgument(\sprintf('Invalid parameter "c2paManifest" for "%s". The value "%s" is not a valid "CmfcC2paManifest".', __CLASS__, $v)); + } + $payload['c2paManifest'] = $v; + } + if (null !== $v = $this->certificateSecret) { + $payload['certificateSecret'] = $v; + } if (null !== $v = $this->descriptiveVideoServiceFlag) { if (!CmfcDescriptiveVideoServiceFlag::exists($v)) { throw new InvalidArgument(\sprintf('Invalid parameter "descriptiveVideoServiceFlag" for "%s". The value "%s" is not a valid "CmfcDescriptiveVideoServiceFlag".', __CLASS__, $v)); @@ -396,6 +460,9 @@ public function requestBody(): array } $payload['scte35Source'] = $v; } + if (null !== $v = $this->signingKmsKey) { + $payload['signingKmsKey'] = $v; + } if (null !== $v = $this->timedMetadata) { if (!CmfcTimedMetadata::exists($v)) { throw new InvalidArgument(\sprintf('Invalid parameter "timedMetadata" for "%s". The value "%s" is not a valid "CmfcTimedMetadata".', __CLASS__, $v)); diff --git a/src/Service/MediaConvert/src/ValueObject/InputVideoGenerator.php b/src/Service/MediaConvert/src/ValueObject/InputVideoGenerator.php index acd55c7da..230ffbae0 100644 --- a/src/Service/MediaConvert/src/ValueObject/InputVideoGenerator.php +++ b/src/Service/MediaConvert/src/ValueObject/InputVideoGenerator.php @@ -20,7 +20,7 @@ final class InputVideoGenerator /** * Specify the duration, in milliseconds, for your video generator input. - * Enter an integer from 50 to 86400000. + * Enter an integer from 1 to 86400000. * * @var int|null */ diff --git a/src/Service/MediaConvert/src/ValueObject/MpdSettings.php b/src/Service/MediaConvert/src/ValueObject/MpdSettings.php index 800ef1f87..4648bf288 100644 --- a/src/Service/MediaConvert/src/ValueObject/MpdSettings.php +++ b/src/Service/MediaConvert/src/ValueObject/MpdSettings.php @@ -5,6 +5,7 @@ use AsyncAws\Core\Exception\InvalidArgument; use AsyncAws\MediaConvert\Enum\MpdAccessibilityCaptionHints; use AsyncAws\MediaConvert\Enum\MpdAudioDuration; +use AsyncAws\MediaConvert\Enum\MpdC2paManifest; use AsyncAws\MediaConvert\Enum\MpdCaptionContainerType; use AsyncAws\MediaConvert\Enum\MpdKlvMetadata; use AsyncAws\MediaConvert\Enum\MpdManifestMetadataSignaling; @@ -44,6 +45,14 @@ final class MpdSettings */ private $audioDuration; + /** + * When enabled, a C2PA compliant manifest will be generated, signed and embeded in the output. For more information on + * C2PA, see https://c2pa.org/specifications/specifications/2.1/index.html. + * + * @var MpdC2paManifest::*|null + */ + private $c2paManifest; + /** * Use this setting only in DASH output groups that include sidecar TTML, IMSC or WEBVTT captions. You specify sidecar * captions in a separate output from your audio and video. Choose Raw for captions in a single XML file in a raw @@ -54,6 +63,17 @@ final class MpdSettings */ private $captionContainerType; + /** + * Specify the name or ARN of the AWS Secrets Manager secret that contains your C2PA public certificate chain in PEM + * format. Provide a valid secret name or ARN. Note that your MediaConvert service role must allow access to this + * secret. The public certificate chain is added to the COSE header (x5chain) for signature validation. Include the + * signer's certificate and all intermediate certificates. Do not include the root certificate. For details on COSE, + * see: https://opensource.contentauthenticity.org/docs/manifest/signing-manifests. + * + * @var string|null + */ + private $certificateSecret; + /** * To include key-length-value metadata in this output: Set KLV metadata insertion to Passthrough. MediaConvert reads * KLV metadata present in your input and writes each instance to a separate event message box in the output, according @@ -92,6 +112,14 @@ final class MpdSettings */ private $scte35Source; + /** + * Specify the ID or ARN of the AWS KMS key used to sign the C2PA manifest in your MP4 output. Provide a valid KMS key + * ARN. Note that your MediaConvert service role must allow access to this key. + * + * @var string|null + */ + private $signingKmsKey; + /** * To include ID3 metadata in this output: Set ID3 metadata to Passthrough. Specify this ID3 metadata in Custom ID3 * metadata inserter. MediaConvert writes each instance of ID3 metadata in a separate Event Message (eMSG) box. To @@ -133,11 +161,14 @@ final class MpdSettings * @param array{ * AccessibilityCaptionHints?: MpdAccessibilityCaptionHints::*|null, * AudioDuration?: MpdAudioDuration::*|null, + * C2paManifest?: MpdC2paManifest::*|null, * CaptionContainerType?: MpdCaptionContainerType::*|null, + * CertificateSecret?: string|null, * KlvMetadata?: MpdKlvMetadata::*|null, * ManifestMetadataSignaling?: MpdManifestMetadataSignaling::*|null, * Scte35Esam?: MpdScte35Esam::*|null, * Scte35Source?: MpdScte35Source::*|null, + * SigningKmsKey?: string|null, * TimedMetadata?: MpdTimedMetadata::*|null, * TimedMetadataBoxVersion?: MpdTimedMetadataBoxVersion::*|null, * TimedMetadataSchemeIdUri?: string|null, @@ -148,11 +179,14 @@ public function __construct(array $input) { $this->accessibilityCaptionHints = $input['AccessibilityCaptionHints'] ?? null; $this->audioDuration = $input['AudioDuration'] ?? null; + $this->c2paManifest = $input['C2paManifest'] ?? null; $this->captionContainerType = $input['CaptionContainerType'] ?? null; + $this->certificateSecret = $input['CertificateSecret'] ?? null; $this->klvMetadata = $input['KlvMetadata'] ?? null; $this->manifestMetadataSignaling = $input['ManifestMetadataSignaling'] ?? null; $this->scte35Esam = $input['Scte35Esam'] ?? null; $this->scte35Source = $input['Scte35Source'] ?? null; + $this->signingKmsKey = $input['SigningKmsKey'] ?? null; $this->timedMetadata = $input['TimedMetadata'] ?? null; $this->timedMetadataBoxVersion = $input['TimedMetadataBoxVersion'] ?? null; $this->timedMetadataSchemeIdUri = $input['TimedMetadataSchemeIdUri'] ?? null; @@ -163,11 +197,14 @@ public function __construct(array $input) * @param array{ * AccessibilityCaptionHints?: MpdAccessibilityCaptionHints::*|null, * AudioDuration?: MpdAudioDuration::*|null, + * C2paManifest?: MpdC2paManifest::*|null, * CaptionContainerType?: MpdCaptionContainerType::*|null, + * CertificateSecret?: string|null, * KlvMetadata?: MpdKlvMetadata::*|null, * ManifestMetadataSignaling?: MpdManifestMetadataSignaling::*|null, * Scte35Esam?: MpdScte35Esam::*|null, * Scte35Source?: MpdScte35Source::*|null, + * SigningKmsKey?: string|null, * TimedMetadata?: MpdTimedMetadata::*|null, * TimedMetadataBoxVersion?: MpdTimedMetadataBoxVersion::*|null, * TimedMetadataSchemeIdUri?: string|null, @@ -195,6 +232,14 @@ public function getAudioDuration(): ?string return $this->audioDuration; } + /** + * @return MpdC2paManifest::*|null + */ + public function getC2paManifest(): ?string + { + return $this->c2paManifest; + } + /** * @return MpdCaptionContainerType::*|null */ @@ -203,6 +248,11 @@ public function getCaptionContainerType(): ?string return $this->captionContainerType; } + public function getCertificateSecret(): ?string + { + return $this->certificateSecret; + } + /** * @return MpdKlvMetadata::*|null */ @@ -235,6 +285,11 @@ public function getScte35Source(): ?string return $this->scte35Source; } + public function getSigningKmsKey(): ?string + { + return $this->signingKmsKey; + } + /** * @return MpdTimedMetadata::*|null */ @@ -279,12 +334,21 @@ public function requestBody(): array } $payload['audioDuration'] = $v; } + if (null !== $v = $this->c2paManifest) { + if (!MpdC2paManifest::exists($v)) { + throw new InvalidArgument(\sprintf('Invalid parameter "c2paManifest" for "%s". The value "%s" is not a valid "MpdC2paManifest".', __CLASS__, $v)); + } + $payload['c2paManifest'] = $v; + } if (null !== $v = $this->captionContainerType) { if (!MpdCaptionContainerType::exists($v)) { throw new InvalidArgument(\sprintf('Invalid parameter "captionContainerType" for "%s". The value "%s" is not a valid "MpdCaptionContainerType".', __CLASS__, $v)); } $payload['captionContainerType'] = $v; } + if (null !== $v = $this->certificateSecret) { + $payload['certificateSecret'] = $v; + } if (null !== $v = $this->klvMetadata) { if (!MpdKlvMetadata::exists($v)) { throw new InvalidArgument(\sprintf('Invalid parameter "klvMetadata" for "%s". The value "%s" is not a valid "MpdKlvMetadata".', __CLASS__, $v)); @@ -309,6 +373,9 @@ public function requestBody(): array } $payload['scte35Source'] = $v; } + if (null !== $v = $this->signingKmsKey) { + $payload['signingKmsKey'] = $v; + } if (null !== $v = $this->timedMetadata) { if (!MpdTimedMetadata::exists($v)) { throw new InvalidArgument(\sprintf('Invalid parameter "timedMetadata" for "%s". The value "%s" is not a valid "MpdTimedMetadata".', __CLASS__, $v)); diff --git a/src/Service/MediaConvert/src/ValueObject/PassthroughSettings.php b/src/Service/MediaConvert/src/ValueObject/PassthroughSettings.php index c575d051d..ff1c0d1f2 100644 --- a/src/Service/MediaConvert/src/ValueObject/PassthroughSettings.php +++ b/src/Service/MediaConvert/src/ValueObject/PassthroughSettings.php @@ -3,6 +3,7 @@ namespace AsyncAws\MediaConvert\ValueObject; use AsyncAws\Core\Exception\InvalidArgument; +use AsyncAws\MediaConvert\Enum\FrameControl; use AsyncAws\MediaConvert\Enum\VideoSelectorMode; /** @@ -10,6 +11,19 @@ */ final class PassthroughSettings { + /** + * Choose how MediaConvert handles start and end times for input clipping with video passthrough. Your input video codec + * must be H.264 or H.265 to use IFRAME. To clip at the nearest IDR-frame: Choose Nearest IDR. If an IDR-frame is not + * found at the frame that you specify, MediaConvert uses the next compatible IDR-frame. Note that your output may be + * shorter than your input clip duration. To clip at the nearest I-frame: Choose Nearest I-frame. If an I-frame is not + * found at the frame that you specify, MediaConvert uses the next compatible I-frame. Note that your output may be + * shorter than your input clip duration. We only recommend this setting for special workflows, and when you choose this + * setting your output may not be compatible with most players. + * + * @var FrameControl::*|null + */ + private $frameControl; + /** * AUTO will select the highest bitrate input in the video selector source. REMUX_ALL will passthrough all the selected * streams in the video selector source. When selecting streams from multiple renditions (i.e. using Stream video @@ -22,16 +36,19 @@ final class PassthroughSettings /** * @param array{ + * FrameControl?: FrameControl::*|null, * VideoSelectorMode?: VideoSelectorMode::*|null, * } $input */ public function __construct(array $input) { + $this->frameControl = $input['FrameControl'] ?? null; $this->videoSelectorMode = $input['VideoSelectorMode'] ?? null; } /** * @param array{ + * FrameControl?: FrameControl::*|null, * VideoSelectorMode?: VideoSelectorMode::*|null, * }|PassthroughSettings $input */ @@ -40,6 +57,14 @@ public static function create($input): self return $input instanceof self ? $input : new self($input); } + /** + * @return FrameControl::*|null + */ + public function getFrameControl(): ?string + { + return $this->frameControl; + } + /** * @return VideoSelectorMode::*|null */ @@ -54,6 +79,12 @@ public function getVideoSelectorMode(): ?string public function requestBody(): array { $payload = []; + if (null !== $v = $this->frameControl) { + if (!FrameControl::exists($v)) { + throw new InvalidArgument(\sprintf('Invalid parameter "frameControl" for "%s". The value "%s" is not a valid "FrameControl".', __CLASS__, $v)); + } + $payload['frameControl'] = $v; + } if (null !== $v = $this->videoSelectorMode) { if (!VideoSelectorMode::exists($v)) { throw new InvalidArgument(\sprintf('Invalid parameter "videoSelectorMode" for "%s". The value "%s" is not a valid "VideoSelectorMode".', __CLASS__, $v)); From 19e26070417148aa57ea9eff6eec5affc44c16c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Deruss=C3=A9?= Date: Fri, 14 Nov 2025 09:27:09 +0100 Subject: [PATCH 2/2] fix tests --- src/Service/CloudFormation/CHANGELOG.md | 5 ++++- src/Service/CloudFormation/composer.json | 2 +- .../CloudFormation/tests/Unit/CloudFormationClientTest.php | 1 + 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Service/CloudFormation/CHANGELOG.md b/src/Service/CloudFormation/CHANGELOG.md index 554aba1cd..af4c8f524 100644 --- a/src/Service/CloudFormation/CHANGELOG.md +++ b/src/Service/CloudFormation/CHANGELOG.md @@ -2,11 +2,14 @@ ## NOT RELEASED +### BC-BREAK + +- AWS api-change: The `stackName` parameter is now required in `DescribeStackEvents` operation. + ### Added - AWS api-change: Update endpoint ruleset parameters casing - AWS apu-change: Added `us-isob-west-1` region -- AWS api-change: CloudFormation now supports GetHookResult API with annotations to retrieve structured compliance check results and remediation guidance for each evaluated resource, replacing the previous single-message limitation with detailed validation outcomes. ### Dependency bumped diff --git a/src/Service/CloudFormation/composer.json b/src/Service/CloudFormation/composer.json index c882f9245..6ddd0bfef 100644 --- a/src/Service/CloudFormation/composer.json +++ b/src/Service/CloudFormation/composer.json @@ -33,7 +33,7 @@ }, "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-master": "2.0-dev" } } } diff --git a/src/Service/CloudFormation/tests/Unit/CloudFormationClientTest.php b/src/Service/CloudFormation/tests/Unit/CloudFormationClientTest.php index a32751fb8..bce51df2b 100644 --- a/src/Service/CloudFormation/tests/Unit/CloudFormationClientTest.php +++ b/src/Service/CloudFormation/tests/Unit/CloudFormationClientTest.php @@ -33,6 +33,7 @@ public function testDescribeStackEvents(): void $client = new CloudFormationClient([], new NullProvider(), new MockHttpClient()); $input = new DescribeStackEventsInput([ + 'StackName' => 'demo', ]); $result = $client->DescribeStackEvents($input);