@aws-cdk/aws-mediaconnect-alpha 2.263.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,86 @@
1
+ import type { IResource } from 'aws-cdk-lib';
2
+ import type { IFlowEntitlementRef } from 'aws-cdk-lib/aws-mediaconnect';
3
+ import type { Construct } from 'constructs';
4
+ import type { IFlow } from './flow';
5
+ import type { StaticKeyEncryption } from './shared';
6
+ /**
7
+ * Interface for FlowEntitlement
8
+ */
9
+ export interface IFlowEntitlement extends IResource, IFlowEntitlementRef {
10
+ /**
11
+ * The Amazon Resource Name (ARN) of the entitlement.
12
+ *
13
+ * @attribute
14
+ */
15
+ readonly entitlementArn: string;
16
+ }
17
+ /**
18
+ * Options for entitlement status
19
+ */
20
+ export declare enum EntitlementStatus {
21
+ /**
22
+ * Option for enabled
23
+ */
24
+ ENABLED = "ENABLED",
25
+ /**
26
+ * Option for disabled
27
+ */
28
+ DISABLED = "DISABLED"
29
+ }
30
+ /**
31
+ * Properties for the Flow entitlement
32
+ */
33
+ export interface FlowEntitlementProps {
34
+ /**
35
+ * The name of the entitlement. This value must be unique within the current flow.
36
+ *
37
+ * @default autogenerated
38
+ */
39
+ readonly flowEntitlementName?: string;
40
+ /**
41
+ * The percentage of the entitlement data transfer fee that you want the subscriber to be responsible for.
42
+ *
43
+ * @default - the MediaConnect service default
44
+ */
45
+ readonly dataTransferSubscriberFeePercent?: number;
46
+ /**
47
+ * A description of the entitlement. This description appears only on the MediaConnect console
48
+ * and is not visible outside of the current AWS account.
49
+ */
50
+ readonly description: string;
51
+ /**
52
+ * Options for encrypting the entitlement.
53
+ * Only static key encryption is supported for entitlements.
54
+ *
55
+ * @default - no encryption
56
+ */
57
+ readonly encryption?: StaticKeyEncryption;
58
+ /**
59
+ * The flow to set the entitlement from.
60
+ */
61
+ readonly flow: IFlow;
62
+ /**
63
+ * The AWS account IDs that you want to share your content with. The receiving accounts (subscribers)
64
+ * will be allowed to create their own flows using your content as the source.
65
+ */
66
+ readonly subscribers: string[];
67
+ /**
68
+ * An indication of whether the new entitlement should be enabled or disabled as soon as it is created.
69
+ *
70
+ * @default - undefined; when omitted, MediaConnect enables the entitlement (ENABLED) at deploy time
71
+ */
72
+ readonly entitlementStatus?: EntitlementStatus;
73
+ }
74
+ /**
75
+ * Resource defines the permission that an AWS account grants to another AWS account to allow access to the content in a specific AWS Elemental MediaConnect flow.
76
+ */
77
+ export declare class FlowEntitlement extends FlowEntitlementBase {
78
+ /** Uniquely identifies this class. */
79
+ static readonly PROPERTY_INJECTION_ID: string;
80
+ /**
81
+ * Creates a FlowEntitlement construct that represents an external (imported) FlowEntitlement.
82
+ */
83
+ static fromFlowEntitlementArn(scope: Construct, id: string, flowEntitlementArn: string): IFlowEntitlement;
84
+ readonly entitlementArn: string;
85
+ constructor(scope: Construct, id: string, props: FlowEntitlementProps);
86
+ }
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
3
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
4
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
5
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
6
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
7
+ var _, done = false;
8
+ for (var i = decorators.length - 1; i >= 0; i--) {
9
+ var context = {};
10
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
11
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
12
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
13
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
14
+ if (kind === "accessor") {
15
+ if (result === void 0) continue;
16
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
17
+ if (_ = accept(result.get)) descriptor.get = _;
18
+ if (_ = accept(result.set)) descriptor.set = _;
19
+ if (_ = accept(result.init)) initializers.unshift(_);
20
+ }
21
+ else if (_ = accept(result)) {
22
+ if (kind === "field") initializers.unshift(_);
23
+ else descriptor[key] = _;
24
+ }
25
+ }
26
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
27
+ done = true;
28
+ };
29
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
30
+ var useValue = arguments.length > 2;
31
+ for (var i = 0; i < initializers.length; i++) {
32
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
33
+ }
34
+ return useValue ? value : void 0;
35
+ };
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.FlowEntitlement = exports.EntitlementStatus = void 0;
38
+ const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
39
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
40
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
41
+ const aws_mediaconnect_1 = require("aws-cdk-lib/aws-mediaconnect");
42
+ const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
43
+ const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
44
+ const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable");
45
+ const shared_1 = require("./shared");
46
+ /**
47
+ * Options for entitlement status
48
+ */
49
+ var EntitlementStatus;
50
+ (function (EntitlementStatus) {
51
+ /**
52
+ * Option for enabled
53
+ */
54
+ EntitlementStatus["ENABLED"] = "ENABLED";
55
+ /**
56
+ * Option for disabled
57
+ */
58
+ EntitlementStatus["DISABLED"] = "DISABLED";
59
+ })(EntitlementStatus || (exports.EntitlementStatus = EntitlementStatus = {}));
60
+ /**
61
+ * Shared base for both real and imported flow entitlements.
62
+ * @internal
63
+ */
64
+ class FlowEntitlementBase extends aws_cdk_lib_1.Resource {
65
+ get flowEntitlementRef() {
66
+ return { entitlementArn: this.entitlementArn };
67
+ }
68
+ }
69
+ /**
70
+ * Resource defines the permission that an AWS account grants to another AWS account to allow access to the content in a specific AWS Elemental MediaConnect flow.
71
+ */
72
+ let FlowEntitlement = (() => {
73
+ let _classDecorators = [prop_injectable_1.propertyInjectable];
74
+ let _classDescriptor;
75
+ let _classExtraInitializers = [];
76
+ let _classThis;
77
+ let _classSuper = FlowEntitlementBase;
78
+ var FlowEntitlement = class extends _classSuper {
79
+ static { _classThis = this; }
80
+ static {
81
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
82
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
83
+ FlowEntitlement = _classThis = _classDescriptor.value;
84
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
85
+ }
86
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediaconnect-alpha.FlowEntitlement", version: "2.263.0-alpha.0" };
87
+ /** Uniquely identifies this class. */
88
+ static PROPERTY_INJECTION_ID = '@aws-cdk.aws-mediaconnect-alpha.FlowEntitlement';
89
+ /**
90
+ * Creates a FlowEntitlement construct that represents an external (imported) FlowEntitlement.
91
+ */
92
+ static fromFlowEntitlementArn(scope, id, flowEntitlementArn) {
93
+ class Import extends FlowEntitlementBase {
94
+ entitlementArn = flowEntitlementArn;
95
+ }
96
+ return new Import(scope, id);
97
+ }
98
+ entitlementArn;
99
+ constructor(scope, id, props) {
100
+ super(scope, id, {
101
+ physicalName: props?.flowEntitlementName ?? aws_cdk_lib_1.Lazy.string({ produce: () => aws_cdk_lib_1.Names.uniqueResourceName(this, { maxLength: 64 }) }),
102
+ });
103
+ try {
104
+ jsiiDeprecationWarnings._aws_cdk_aws_mediaconnect_alpha_FlowEntitlementProps(props);
105
+ }
106
+ catch (error) {
107
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
108
+ Error.captureStackTrace(error, FlowEntitlement);
109
+ }
110
+ throw error;
111
+ }
112
+ // Validate flow entitlement name if provided
113
+ if (props.flowEntitlementName != null && props.flowEntitlementName !== '' && !aws_cdk_lib_1.Token.isUnresolved(props.flowEntitlementName)) {
114
+ if (props.flowEntitlementName.length > 64) {
115
+ throw new aws_cdk_lib_1.ValidationError((0, helpers_internal_1.lit) `FlowEntitlementNameLength`, `Flow entitlement name must be between 1 and 64 characters, got ${props.flowEntitlementName.length}`, this);
116
+ }
117
+ if (!/^[a-zA-Z0-9_-]+$/.test(props.flowEntitlementName)) {
118
+ throw new aws_cdk_lib_1.ValidationError((0, helpers_internal_1.lit) `FlowEntitlementNameFormat`, `Flow entitlement name must contain only alphanumeric characters, hyphens, and underscores, got '${props.flowEntitlementName}'`, this);
119
+ }
120
+ }
121
+ // Validate description length if provided
122
+ if (props.description != null && !aws_cdk_lib_1.Token.isUnresolved(props.description) && props.description.length > 1024) {
123
+ throw new aws_cdk_lib_1.ValidationError((0, helpers_internal_1.lit) `FlowEntitlementDescriptionLength`, `Flow entitlement description must not exceed 1024 characters, got ${props.description.length}`, this);
124
+ }
125
+ // Validate dataTransferSubscriberFeePercent range — service rejects values outside 0-100 at deploy time
126
+ if (props.dataTransferSubscriberFeePercent !== undefined && !aws_cdk_lib_1.Token.isUnresolved(props.dataTransferSubscriberFeePercent)) {
127
+ const pct = props.dataTransferSubscriberFeePercent;
128
+ if (!Number.isInteger(pct) || pct < 0 || pct > 100) {
129
+ throw new aws_cdk_lib_1.ValidationError((0, helpers_internal_1.lit) `FlowEntitlementSubscriberFeePercentRange`, `dataTransferSubscriberFeePercent must be an integer between 0 and 100, got ${pct}`, this);
130
+ }
131
+ }
132
+ // Enhanced CDK Analytics Telemetry
133
+ (0, metadata_resource_1.addConstructMetadata)(this, props);
134
+ const resource = new aws_mediaconnect_1.CfnFlowEntitlement(this, 'Resource', {
135
+ name: this.physicalName,
136
+ flowArn: props.flow.flowArn,
137
+ description: props.description,
138
+ subscribers: props.subscribers,
139
+ dataTransferSubscriberFeePercent: props.dataTransferSubscriberFeePercent,
140
+ entitlementStatus: props.entitlementStatus,
141
+ encryption: props.encryption ? (0, shared_1.renderStaticKeyEncryption)(this, props.encryption, props.flow.flowArn) : undefined,
142
+ });
143
+ this.entitlementArn = resource.attrEntitlementArn;
144
+ }
145
+ static {
146
+ __runInitializers(_classThis, _classExtraInitializers);
147
+ }
148
+ };
149
+ return FlowEntitlement = _classThis;
150
+ })();
151
+ exports.FlowEntitlement = FlowEntitlement;
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1lbnRpdGxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZsb3ctZW50aXRsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsNkNBQTRFO0FBQzVFLG1FQUFrRTtBQUVsRSw0RUFBNEQ7QUFDNUQsOEVBQThFO0FBQzlFLDBFQUEwRTtBQUkxRSxxQ0FBcUQ7QUFjckQ7O0dBRUc7QUFDSCxJQUFZLGlCQVNYO0FBVEQsV0FBWSxpQkFBaUI7SUFDM0I7O09BRUc7SUFDSCx3Q0FBaUIsQ0FBQTtJQUNqQjs7T0FFRztJQUNILDBDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFUVyxpQkFBaUIsaUNBQWpCLGlCQUFpQixRQVM1QjtBQXFERDs7O0dBR0c7QUFDSCxNQUFlLG1CQUFvQixTQUFRLHNCQUFRO0lBR2pELElBQVcsa0JBQWtCO1FBQzNCLE9BQU8sRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0tBQ2hEO0NBQ0Y7QUFFRDs7R0FFRztJQUVVLGVBQWU7NEJBRDNCLG9DQUFrQjs7OztzQkFDa0IsbUJBQW1COytCQUEzQixTQUFRLFdBQW1COzs7O1lBQXhELDZLQWdFQzs7Ozs7UUEvREMsc0NBQXNDO1FBQy9CLE1BQU0sQ0FBVSxxQkFBcUIsR0FBVyxpREFBaUQsQ0FBQztRQUV6Rzs7V0FFRztRQUNJLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxrQkFBMEI7WUFDM0YsTUFBTSxNQUFPLFNBQVEsbUJBQW1CO2dCQUN0QixjQUFjLEdBQUcsa0JBQWtCLENBQUM7YUFDckQ7WUFFRCxPQUFPLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztTQUM5QjtRQUVlLGNBQWMsQ0FBUztRQUV2QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTJCO1lBQ25FLEtBQUssQ0FBQyxLQUFL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VUFBVSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7YUFDakgsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsa0JBQWtCLENBQUM7U0FDbkQ7O1lBL0RVLHVEQUFlOzs7OztBQUFmLDBDQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBJUmVzb3VyY2UgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBSZXNvdXJjZSwgTGF6eSwgTmFtZXMsIFRva2VuLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDZm5GbG93RW50aXRsZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbWVkaWFjb25uZWN0JztcbmltcG9ydCB0eXBlIHsgSUZsb3dFbnRpdGxlbWVudFJlZiwgRmxvd0VudGl0bGVtZW50UmVmZXJlbmNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLW1lZGlhY29ubmVjdCc7XG5pbXBvcnQgeyBsaXQgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9oZWxwZXJzLWludGVybmFsJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgdHlwZSB7IElGbG93IH0gZnJvbSAnLi9mbG93JztcbmltcG9ydCB0eXBlIHsgU3RhdGljS2V5RW5jcnlwdGlvbiB9IGZyb20gJy4vc2hhcmVkJztcbmltcG9ydCB7IHJlbmRlclN0YXRpY0tleUVuY3J5cHRpb24gfSBmcm9tICcuL3NoYXJlZCc7XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBGbG93RW50aXRsZW1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRmxvd0VudGl0bGVtZW50IGV4dGVuZHMgSVJlc291cmNlLCBJRmxvd0VudGl0bGVtZW50UmVmIHtcbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgZW50aXRsZW1lbnQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGVudGl0bGVtZW50QXJuOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgZW50aXRsZW1lbnQgc3RhdHVzXG4gKi9cbmV4cG9ydCBlbnVtIEVudGl0bGVtZW50U3RhdHVzIHtcbiAgLyoqXG4gICAqIE9wdGlvbiBmb3IgZW5hYmxlZFxuICAgKi9cbiAgRU5BQkxFRD0nRU5BQkxFRCcsXG4gIC8qKlxuICAgKiBPcHRpb24gZm9yIGRpc2FibGVkXG4gICAqL1xuICBESVNBQkxFRD0nRElTQUJMRUQnLFxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHRoZSBGbG93IGVudGl0bGVtZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0VudGl0bGVtZW50UHJvcHMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGVudGl0bGVtZW50LiBUaGlzIHZhbHVlIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgY3VycmVudCBmbG93LlxuICAgKlxuICAgKiBAZGVmYXVsdCBhdXRvZ2VuZXJhdGVkXG4gICAqL1xuICByZWFkb25seSBmbG93RW50aXRsZW1lbnROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0aGUgZW50aXRsZW1lbnQgZGF0YSB0cmFuc2ZlciBmZWUgdGhhdCB5b3Ugd2FudCB0aGUgc3Vic2NyaWJlciB0byBiZSByZXNwb25zaWJsZSBmb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIE1lZGlhQ29ubmVjdCBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFUcmFuc2ZlclN1YnNjcmliZXJGZWVQZXJjZW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBlbnRpdGxlbWVudC4gVGhpcyBkZXNjcmlwdGlvbiBhcHBlYXJzIG9ubHkgb24gdGhlIE1lZGlhQ29ubmVjdCBjb25zb2xlXG4gICAqIGFuZCBpcyBub3QgdmlzaWJsZSBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IEFXUyBhY2NvdW50LlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgZW5jcnlwdGluZyB0aGUgZW50aXRsZW1lbnQuXG4gICAqIE9ubHkgc3RhdGljIGtleSBlbmNyeXB0aW9uIGlzIHN1cHBvcnRlZCBmb3IgZW50aXRsZW1lbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGVuY3J5cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb24/OiBTdGF0aWNLZXlFbmNyeXB0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgZmxvdyB0byBzZXQgdGhlIGVudGl0bGVtZW50IGZyb20uXG4gICAqL1xuICByZWFkb25seSBmbG93OiBJRmxvdztcblxuICAvKipcbiAgICogVGhlIEFXUyBhY2NvdW50IElEcyB0aGF0IHlvdSB3YW50IHRvIHNoYXJlIHlvdXIgY29udGVudCB3aXRoLiBUaGUgcmVjZWl2aW5nIGFjY291bnRzIChzdWJzY3JpYmVycylcbiAgICogd2lsbCBiZSBhbGxvd2VkIHRvIGNyZWF0ZSB0aGVpciBvd24gZmxvd3MgdXNpbmcgeW91ciBjb250ZW50IGFzIHRoZSBzb3VyY2UuXG4gICAqL1xuICByZWFkb25seSBzdWJzY3JpYmVyczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFuIGluZGljYXRpb24gb2Ygd2hldGhlciB0aGUgbmV3IGVudGl0bGVtZW50IHNob3VsZCBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGFzIHNvb24gYXMgaXQgaXMgY3JlYXRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWQ7IHdoZW4gb21pdHRlZCwgTWVkaWFDb25uZWN0IGVuYWJsZXMgdGhlIGVudGl0bGVtZW50IChFTkFCTEVEKSBhdCBkZXBsb3kgdGltZVxuICAgKi9cbiAgcmVhZG9ubHkgZW50aXRsZW1lbnRTdGF0dXM/OiBFbnRpdGxlbWVudFN0YXR1cztcbn1cblxuLyoqXG4gKiBTaGFyZWQgYmFzZSBmb3IgYm90aCByZWFsIGFuZCBpbXBvcnRlZCBmbG93IGVudGl0bGVtZW50cy5cbiAqIEBpbnRlcm5hbFxuICovXG5hYnN0cmFjdCBjbGFzcyBGbG93RW50aXRsZW1lbnRCYXNlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJRmxvd0VudGl0bGVtZW50IHtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGVudGl0bGVtZW50QXJuOiBzdHJpbmc7XG5cbiAgcHVibGljIGdldCBmbG93RW50aXRsZW1lbnRSZWYoKTogRmxvd0VudGl0bGVtZW50UmVmZXJlbmNlIHtcbiAgICByZXR1cm4geyBlbnRpdGxlbWVudEFybjogdGhpcy5lbnRpdGxlbWVudEFybiB9O1xuICB9XG59XG5cbi8qKlxuICogUmVzb3VyY2UgZGVmaW5lcyB0aGUgcGVybWlzc2lvbiB0aGF0IGFuIEFXUyBhY2NvdW50IGdyYW50cyB0byBhbm90aGVyIEFXUyBhY2NvdW50IHRvIGFsbG93IGFjY2VzcyB0byB0aGUgY29udGVudCBpbiBhIHNwZWNpZmljIEFXUyBFbGVtZW50YWwgTWVkaWFDb25uZWN0IGZsb3cuXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBGbG93RW50aXRsZW1lbnQgZXh0ZW5kcyBGbG93RW50aXRsZW1lbnRCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtbWVkaWFjb25uZWN0LWFscGhhLkZsb3dFbnRpdGxlbWVudCc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBGbG93RW50aXRsZW1lbnQgY29uc3RydWN0IHRoYXQgcmVwcmVzZW50cyBhbiBleHRlcm5hbCAoaW1wb3J0ZWQpIEZsb3dFbnRpdGxlbWVudC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUZsb3dFbnRpdGxlbWVudEFybihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBmbG93RW50aXRsZW1lbnRBcm46IHN0cmluZyk6IElGbG93RW50aXRsZW1lbnQge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIEZsb3dFbnRpdGxlbWVudEJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGVudGl0bGVtZW50QXJuID0gZmxvd0VudGl0bGVtZW50QXJuO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgZW50aXRsZW1lbnRBcm46IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRmxvd0VudGl0bGVtZW50UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHM/LmZsb3dFbnRpdGxlbWVudE5hbWUgPz8gTGF6eS5zdHJpbmcoeyBwcm9kdWNlOiAoKSA9PiBOYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywgeyBtYXhMZW5ndGg6IDY0IH0pIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gVmFsaWRhdGUgZmxvdyBlbnRpdGxlbWVudCBuYW1lIGlmIHByb3ZpZGVkXG4gICAgaWYgKHByb3BzLmZsb3dFbnRpdGxlbWVudE5hbWUgIT0gbnVsbCAmJiBwcm9wcy5mbG93RW50aXRsZW1lbnROYW1lICE9PSAnJyAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLmZsb3dFbnRpdGxlbWVudE5hbWUpKSB7XG4gICAgICBpZiAocHJvcHMuZmxvd0VudGl0bGVtZW50TmFtZS5sZW5ndGggPiA2NCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBGbG93RW50aXRsZW1lbnROYW1lTGVuZ3RoYCwgYEZsb3cgZW50aXRsZW1lbnQgbmFtZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNjQgY2hhcmFjdGVycywgZ290ICR7cHJvcHMuZmxvd0VudGl0bGVtZW50TmFtZS5sZW5ndGh9YCwgdGhpcyk7XG4gICAgICB9XG4gICAgICBpZiAoIS9eW2EtekEtWjAtOV8tXSskLy50ZXN0KHByb3BzLmZsb3dFbnRpdGxlbWVudE5hbWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YEZsb3dFbnRpdGxlbWVudE5hbWVGb3JtYXRgLCBgRmxvdyBlbnRpdGxlbWVudCBuYW1lIG11c3QgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCBoeXBoZW5zLCBhbmQgdW5kZXJzY29yZXMsIGdvdCAnJHtwcm9wcy5mbG93RW50aXRsZW1lbnROYW1lfSdgLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBkZXNjcmlwdGlvbiBsZW5ndGggaWYgcHJvdmlkZWRcbiAgICBpZiAocHJvcHMuZGVzY3JpcHRpb24gIT0gbnVsbCAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLmRlc2NyaXB0aW9uKSAmJiBwcm9wcy5kZXNjcmlwdGlvbi5sZW5ndGggPiAxMDI0KSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBGbG93RW50aXRsZW1lbnREZXNjcmlwdGlvbkxlbmd0aGAsIGBGbG93IGVudGl0bGVtZW50IGRlc2NyaXB0aW9uIG11c3Qgbm90IGV4Y2VlZCAxMDI0IGNoYXJhY3RlcnMsIGdvdCAke3Byb3BzLmRlc2NyaXB0aW9uLmxlbmd0aH1gLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBkYXRhVHJhbnNmZXJTdWJzY3JpYmVyRmVlUGVyY2VudCByYW5nZSDigJQgc2VydmljZSByZWplY3RzIHZhbHVlcyBvdXRzaWRlIDAtMTAwIGF0IGRlcGxveSB0aW1lXG4gICAgaWYgKHByb3BzLmRhdGFUcmFuc2ZlclN1YnNjcmliZXJGZWVQZXJjZW50ICE9PSB1bmRlZmluZWQgJiYgIVRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5kYXRhVHJhbnNmZXJTdWJzY3JpYmVyRmVlUGVyY2VudCkpIHtcbiAgICAgIGNvbnN0IHBjdCA9IHByb3BzLmRhdGFUcmFuc2ZlclN1YnNjcmliZXJGZWVQZXJjZW50O1xuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHBjdCkgfHwgcGN0IDwgMCB8fCBwY3QgPiAxMDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBsaXRgRmxvd0VudGl0bGVtZW50U3Vic2NyaWJlckZlZVBlcmNlbnRSYW5nZWAsXG4gICAgICAgICAgYGRhdGFUcmFuc2ZlclN1YnNjcmliZXJGZWVQZXJjZW50IG11c3QgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDEwMCwgZ290ICR7cGN0fWAsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIGNvbnN0IHJlc291cmNlID0gbmV3IENmbkZsb3dFbnRpdGxlbWVudCh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBuYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICAgIGZsb3dBcm46IHByb3BzLmZsb3cuZmxvd0FybixcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIHN1YnNjcmliZXJzOiBwcm9wcy5zdWJzY3JpYmVycyxcbiAgICAgIGRhdGFUcmFuc2ZlclN1YnNjcmliZXJGZWVQZXJjZW50OiBwcm9wcy5kYXRhVHJhbnNmZXJTdWJzY3JpYmVyRmVlUGVyY2VudCxcbiAgICAgIGVudGl0bGVtZW50U3RhdHVzOiBwcm9wcy5lbnRpdGxlbWVudFN0YXR1cyxcbiAgICAgIGVuY3J5cHRpb246IHByb3BzLmVuY3J5cHRpb24gPyByZW5kZXJTdGF0aWNLZXlFbmNyeXB0aW9uKHRoaXMsIHByb3BzLmVuY3J5cHRpb24sIHByb3BzLmZsb3cuZmxvd0FybikgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLmVudGl0bGVtZW50QXJuID0gcmVzb3VyY2UuYXR0ckVudGl0bGVtZW50QXJuO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,329 @@
1
+ import type { Duration, IResource } from 'aws-cdk-lib';
2
+ import type { IFlowOutputRef } from 'aws-cdk-lib/aws-mediaconnect';
3
+ import type { Construct } from 'constructs';
4
+ import type { IFlow } from './flow';
5
+ import type { SrtPasswordEncryption, StaticKeyEncryption, TransitEncryption, VpcInterfaceConfig } from './shared';
6
+ import { State } from './shared';
7
+ /**
8
+ * Interface for Flow Output
9
+ */
10
+ export interface IFlowOutput extends IResource, IFlowOutputRef {
11
+ /**
12
+ * The Amazon Resource Name (ARN) of the flow output.
13
+ *
14
+ * @attribute
15
+ */
16
+ readonly flowOutputArn: string;
17
+ }
18
+ /**
19
+ * Properties for flow output
20
+ */
21
+ export interface FlowOutputProps {
22
+ /**
23
+ * The name of the output.
24
+ *
25
+ * @default - auto-generated
26
+ */
27
+ readonly flowOutputName?: string;
28
+ /**
29
+ * A description of the output.
30
+ *
31
+ * This description appears only on the MediaConnect console and will not be seen by the end user.
32
+ *
33
+ * @default - no description
34
+ */
35
+ readonly description?: string;
36
+ /**
37
+ * An indication of whether the output should transmit data or not.
38
+ *
39
+ * @default - undefined; when omitted, MediaConnect enables the output (ENABLED) at deploy time
40
+ */
41
+ readonly outputStatus?: State;
42
+ /**
43
+ * The flow this output is attached to.
44
+ */
45
+ readonly flow: IFlow;
46
+ /**
47
+ * Output configuration
48
+ */
49
+ readonly output: OutputConfiguration;
50
+ }
51
+ /**
52
+ * Configuration options for RTP outputs.
53
+ */
54
+ export interface RtpOutputConfig {
55
+ /**
56
+ * The smoothing latency for RIST, RTP, and RTP-FEC streams.
57
+ *
58
+ * @default - no smoothing latency
59
+ */
60
+ readonly smoothingLatency?: Duration;
61
+ /**
62
+ * The IP address where you want to send the output.
63
+ */
64
+ readonly destination: string;
65
+ /**
66
+ * The port to use when content is distributed to this output.
67
+ */
68
+ readonly port: number;
69
+ /**
70
+ * The name of the VPC interface attachment to use for this output.
71
+ *
72
+ * @default - no VPC interface attachment
73
+ */
74
+ readonly vpcInterfaceAttachment?: VpcInterfaceConfig;
75
+ }
76
+ /**
77
+ * Configuration options for RTP-FEC outputs.
78
+ */
79
+ export interface RtpFecOutputConfig extends RtpOutputConfig {
80
+ }
81
+ /**
82
+ * Configuration options for RIST outputs.
83
+ */
84
+ export interface RistOutputConfig extends RtpOutputConfig {
85
+ }
86
+ /**
87
+ * Configuration options for Zixi Pull outputs.
88
+ */
89
+ export interface ZixiPullOutputConfig {
90
+ /**
91
+ * The stream ID that you want to use for this transport.
92
+ */
93
+ readonly streamId: string;
94
+ /**
95
+ * The remote ID for the Zixi-pull stream.
96
+ */
97
+ readonly remoteId: string;
98
+ /**
99
+ * The maximum latency for Zixi-based streams.
100
+ */
101
+ readonly maxLatency: Duration;
102
+ /**
103
+ * The range of IP addresses that should be allowed to initiate output requests to this flow.
104
+ * These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16.
105
+ *
106
+ * Required by the MediaConnect service for Zixi Pull outputs.
107
+ */
108
+ readonly cidrAllowList: string[];
109
+ /**
110
+ * Static key encryption for this output.
111
+ *
112
+ * @default - no encryption
113
+ */
114
+ readonly encryption?: StaticKeyEncryption;
115
+ /**
116
+ * The VPC interface attachment to use for this output.
117
+ *
118
+ * @default - no VPC interface attachment
119
+ */
120
+ readonly vpcInterfaceAttachment?: VpcInterfaceConfig;
121
+ }
122
+ /**
123
+ * Configuration options for Zixi Push outputs.
124
+ */
125
+ export interface ZixiPushOutputConfig {
126
+ /**
127
+ * The stream ID that you want to use for this transport.
128
+ */
129
+ readonly streamId: string;
130
+ /**
131
+ * The maximum latency for Zixi-based streams.
132
+ */
133
+ readonly maxLatency: Duration;
134
+ /**
135
+ * The range of IP addresses that should be allowed to initiate output requests to this flow.
136
+ * These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16.
137
+ *
138
+ * @default - no CIDR allow list
139
+ */
140
+ readonly cidrAllowList?: string[];
141
+ /**
142
+ * Static key encryption for this output.
143
+ *
144
+ * @default - no encryption
145
+ */
146
+ readonly encryption?: StaticKeyEncryption;
147
+ /**
148
+ * The IP address where you want to send the output.
149
+ */
150
+ readonly destination: string;
151
+ /**
152
+ * The port to use when content is distributed to this output.
153
+ */
154
+ readonly port: number;
155
+ /**
156
+ * The VPC interface attachment to use for this output.
157
+ *
158
+ * @default - no VPC interface attachment
159
+ */
160
+ readonly vpcInterfaceAttachment?: VpcInterfaceConfig;
161
+ }
162
+ /**
163
+ * Configuration options for SRT Caller outputs.
164
+ */
165
+ export interface SrtCallerOutputConfig {
166
+ /**
167
+ * The minimum latency in milliseconds for SRT-based streams. The value you set on your
168
+ * MediaConnect output represents the minimal potential latency of that connection. The
169
+ * latency of the stream is set to the higher of the sender's minimum latency and the
170
+ * receiver's minimum latency.
171
+ *
172
+ * @default - no minimum latency
173
+ */
174
+ readonly minLatency?: Duration;
175
+ /**
176
+ * The stream ID that you want to use for this transport.
177
+ *
178
+ * @default - no stream ID
179
+ */
180
+ readonly streamId?: string;
181
+ /**
182
+ * The IP address where you want to send the output.
183
+ */
184
+ readonly destination: string;
185
+ /**
186
+ * The port to use when content is distributed to this output.
187
+ */
188
+ readonly port: number;
189
+ /**
190
+ * SRT password encryption for this output.
191
+ *
192
+ * @default - no encryption
193
+ */
194
+ readonly encryption?: SrtPasswordEncryption;
195
+ /**
196
+ * The VPC interface attachment to use for this output.
197
+ *
198
+ * @default - no VPC interface attachment
199
+ */
200
+ readonly vpcInterfaceAttachment?: VpcInterfaceConfig;
201
+ }
202
+ /**
203
+ * Configuration options for SRT Listener outputs.
204
+ */
205
+ export interface SrtListenerOutputConfig {
206
+ /**
207
+ * The minimum latency in milliseconds for SRT-based streams. The value you set on your
208
+ * MediaConnect output represents the minimal potential latency of that connection. The
209
+ * latency of the stream is set to the higher of the sender's minimum latency and the
210
+ * receiver's minimum latency.
211
+ *
212
+ * @default - no minimum latency
213
+ */
214
+ readonly minLatency?: Duration;
215
+ /**
216
+ * The port to use when content is distributed to this output.
217
+ */
218
+ readonly port: number;
219
+ /**
220
+ * The range of IP addresses that should be allowed to initiate output requests to this flow.
221
+ * These IP addresses should be in the form of a Classless Inter-Domain Routing (CIDR) block; for example, 10.0.0.0/16.
222
+ *
223
+ * @default - no CIDR allow list
224
+ */
225
+ readonly cidrAllowList?: string[];
226
+ /**
227
+ * SRT password encryption for this output.
228
+ *
229
+ * @default - no encryption
230
+ */
231
+ readonly encryption?: SrtPasswordEncryption;
232
+ /**
233
+ * The VPC interface attachment to use for this output.
234
+ *
235
+ * @default - no VPC interface attachment
236
+ */
237
+ readonly vpcInterfaceAttachment?: VpcInterfaceConfig;
238
+ }
239
+ /**
240
+ * Configuration options for NDI outputs.
241
+ */
242
+ export interface NdiOutputConfig {
243
+ /**
244
+ * A suffix for the names of the NDI sources that the flow creates.
245
+ *
246
+ * @default - the output name is used
247
+ */
248
+ readonly ndiProgramName?: string;
249
+ /**
250
+ * A quality setting for the NDI Speed HQ encoder, expressed as a percentage.
251
+ *
252
+ * Valid range: 100-200. Higher values produce higher quality and larger bitrate.
253
+ *
254
+ * @see https://aws.amazon.com/about-aws/whats-new/2025/03/aws-elemental-mediaconnect-support-ndi-outputs/
255
+ * @default - the MediaConnect service default
256
+ */
257
+ readonly ndiSpeedHqQuality?: number;
258
+ }
259
+ /**
260
+ * Output configuration to Router
261
+ */
262
+ export interface RouterTransitConfig {
263
+ /**
264
+ * Specifies whether encryption is to be used.
265
+ *
266
+ * @default no encryption
267
+ */
268
+ readonly encryption?: TransitEncryption;
269
+ }
270
+ /**
271
+ * Configuration options to define a FlowOutput by protocol.
272
+ */
273
+ export declare class OutputConfiguration {
274
+ private readonly _output;
275
+ /**
276
+ * The source configuration for flows receiving a stream from router.
277
+ */
278
+ static router(input?: RouterTransitConfig): OutputConfiguration;
279
+ /**
280
+ * Option for RTP configuration
281
+ */
282
+ static rtp(input: RtpOutputConfig): OutputConfiguration;
283
+ /**
284
+ * Option for RTP-FEC configuration
285
+ */
286
+ static rtpFec(input: RtpFecOutputConfig): OutputConfiguration;
287
+ /**
288
+ * Option for RIST configuration
289
+ */
290
+ static rist(input: RistOutputConfig): OutputConfiguration;
291
+ /**
292
+ * Option for Zixi Push configuration
293
+ */
294
+ static zixiPush(input: ZixiPushOutputConfig): OutputConfiguration;
295
+ /**
296
+ * Option for Zixi Pull configuration
297
+ */
298
+ static zixiPull(input: ZixiPullOutputConfig): OutputConfiguration;
299
+ /**
300
+ * Option for SRT Caller configuration
301
+ */
302
+ static srtCaller(input: SrtCallerOutputConfig): OutputConfiguration;
303
+ /**
304
+ * Option for SRT Listener configuration
305
+ */
306
+ static srtListener(input: SrtListenerOutputConfig): OutputConfiguration;
307
+ /**
308
+ * Option for NDI configuration
309
+ */
310
+ static ndi(input?: NdiOutputConfig): OutputConfiguration;
311
+ /**
312
+ * @param output - Configuration for outputs in output
313
+ */
314
+ private constructor();
315
+ }
316
+ /**
317
+ * Resource defines the destination address, protocol, and port that
318
+ * AWS Elemental MediaConnect sends the ingested video to.
319
+ */
320
+ export declare class FlowOutput extends FlowOutputBase {
321
+ /** Uniquely identifies this class. */
322
+ static readonly PROPERTY_INJECTION_ID: string;
323
+ /**
324
+ * Creates a Flow Ouput construct that represents an external (imported) Flow Output.
325
+ */
326
+ static fromFlowOutputArn(scope: Construct, id: string, flowOutputArn: string): IFlowOutput;
327
+ readonly flowOutputArn: string;
328
+ constructor(scope: Construct, id: string, props: FlowOutputProps);
329
+ }