"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
    var ownKeys = function(o) {
        ownKeys = Object.getOwnPropertyNames || function (o) {
            var ar = [];
            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
            return ar;
        };
        return ownKeys(o);
    };
    return function (mod) {
        if (mod && mod.__esModule) return mod;
        var result = {};
        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
        __setModuleDefault(result, mod);
        return result;
    };
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.CfnEncryptionConfigurationPropsMixin = exports.CfnCommandPropsMixin = exports.CfnCertificateProviderPropsMixin = exports.CfnTopicRuleDestinationPropsMixin = exports.CfnTopicRulePropsMixin = exports.CfnThingTypePropsMixin = exports.CfnThingPrincipalAttachmentPropsMixin = exports.CfnThingGroupPropsMixin = exports.CfnThingPropsMixin = exports.CfnSoftwarePackageVersionPropsMixin = exports.CfnSoftwarePackagePropsMixin = exports.CfnSecurityProfilePropsMixin = exports.CfnScheduledAuditPropsMixin = exports.CfnRoleAliasPropsMixin = exports.CfnResourceSpecificLoggingPropsMixin = exports.CfnProvisioningTemplatePropsMixin = exports.CfnPolicyPrincipalAttachmentPropsMixin = exports.CfnPolicyPropsMixin = exports.CfnMitigationActionPropsMixin = exports.CfnLoggingPropsMixin = exports.CfnJobTemplatePropsMixin = exports.CfnFleetMetricPropsMixin = exports.CfnDomainConfigurationPropsMixin = exports.CfnDimensionPropsMixin = exports.CfnCustomMetricPropsMixin = exports.CfnCertificatePropsMixin = exports.CfnCACertificatePropsMixin = exports.CfnBillingGroupPropsMixin = exports.CfnAuthorizerPropsMixin = exports.CfnAccountAuditConfigurationPropsMixin = void 0;
const jsiiDeprecationWarnings = require("../../../.warnings.jsii.js");
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
/* eslint-disable @stylistic/max-len, eol-last */
const cdk = __importStar(require("aws-cdk-lib/core"));
const service = __importStar(require("aws-cdk-lib/aws-iot"));
/**
 * Use the `AWS::IoT::AccountAuditConfiguration` resource to configure or reconfigure the Device Defender audit settings for your account.
 *
 * Settings include how audit notifications are sent and which audit checks are enabled or disabled. For API reference, see [UpdateAccountAuditConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateAccountAuditConfiguration.html) and for detailed information on all available audit checks, see [Audit checks](https://docs.aws.amazon.com/iot/latest/developerguide/device-defender-audit-checks.html) .
 *
 * @cloudformationResource AWS::IoT::AccountAuditConfiguration
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-accountauditconfiguration.html
 */
class CfnAccountAuditConfigurationPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnAccountAuditConfigurationPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["accountId", "auditCheckConfigurations", "auditNotificationTargetConfigurations", "roleArn"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::AccountAuditConfiguration`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnAccountAuditConfigurationMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnAccountAuditConfigurationPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnAccountAuditConfiguration.isCfnAccountAuditConfiguration(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnAccountAuditConfigurationPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnAccountAuditConfigurationPropsMixin = CfnAccountAuditConfigurationPropsMixin;
/**
 * Specifies an authorizer.
 *
 * @cloudformationResource AWS::IoT::Authorizer
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-authorizer.html
 */
class CfnAuthorizerPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnAuthorizerPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["authorizerFunctionArn", "authorizerName", "enableCachingForHttp", "signingDisabled", "status", "tags", "tokenKeyName", "tokenSigningPublicKeys"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::Authorizer`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnAuthorizerMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnAuthorizerPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnAuthorizer.isCfnAuthorizer(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnAuthorizerPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnAuthorizerPropsMixin = CfnAuthorizerPropsMixin;
/**
 * Creates a new billing group.
 *
 * Requires permission to access the [CreateBillingGroup](https://docs.aws.amazon.com//service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions) action.
 *
 * @cloudformationResource AWS::IoT::BillingGroup
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-billinggroup.html
 */
class CfnBillingGroupPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnBillingGroupPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["billingGroupName", "billingGroupProperties", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::BillingGroup`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnBillingGroupMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnBillingGroupPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnBillingGroup.isCfnBillingGroup(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnBillingGroupPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnBillingGroupPropsMixin = CfnBillingGroupPropsMixin;
/**
 * Specifies a CA certificate.
 *
 * @cloudformationResource AWS::IoT::CACertificate
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-cacertificate.html
 */
class CfnCACertificatePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnCACertificatePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["autoRegistrationStatus", "caCertificatePem", "certificateMode", "registrationConfig", "removeAutoRegistration", "status", "tags", "verificationCertificatePem"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::CACertificate`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnCACertificateMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnCACertificatePropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnCACertificate.isCfnCACertificate(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnCACertificatePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnCACertificatePropsMixin = CfnCACertificatePropsMixin;
/**
 * Use the `AWS::IoT::Certificate` resource to declare an AWS IoT X.509 certificate. For information about working with X.509 certificates, see [X.509 Client Certificates](https://docs.aws.amazon.com/iot/latest/developerguide/x509-client-certs.html) in the *AWS IoT Developer Guide* .
 *
 * @cloudformationResource AWS::IoT::Certificate
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-certificate.html
 */
class CfnCertificatePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnCertificatePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["caCertificatePem", "certificateMode", "certificatePem", "certificateSigningRequest", "status"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::Certificate`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnCertificateMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnCertificatePropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnCertificate.isCfnCertificate(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnCertificatePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnCertificatePropsMixin = CfnCertificatePropsMixin;
/**
 * Use the `AWS::IoT::CustomMetric` resource to define a custom metric published by your devices to Device Defender.
 *
 * For API reference, see [CreateCustomMetric](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateCustomMetric.html) and for general information, see [Custom metrics](https://docs.aws.amazon.com/iot/latest/developerguide/dd-detect-custom-metrics.html) .
 *
 * @cloudformationResource AWS::IoT::CustomMetric
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-custommetric.html
 */
class CfnCustomMetricPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnCustomMetricPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["displayName", "metricName", "metricType", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::CustomMetric`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnCustomMetricMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnCustomMetricPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnCustomMetric.isCfnCustomMetric(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnCustomMetricPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnCustomMetricPropsMixin = CfnCustomMetricPropsMixin;
/**
 * Use the `AWS::IoT::Dimension` to limit the scope of a metric used in a security profile for AWS IoT Device Defender .
 *
 * For example, using a `TOPIC_FILTER` dimension, you can narrow down the scope of the metric to only MQTT topics where the name matches the pattern specified in the dimension. For API reference, see [CreateDimension](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateDimension.html) and for general information, see [Scoping metrics in security profiles using dimensions](https://docs.aws.amazon.com/iot/latest/developerguide/scoping-security-behavior.html) .
 *
 * @cloudformationResource AWS::IoT::Dimension
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-dimension.html
 */
class CfnDimensionPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnDimensionPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["name", "stringValues", "tags", "type"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::Dimension`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnDimensionMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnDimensionPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnDimension.isCfnDimension(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnDimensionPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnDimensionPropsMixin = CfnDimensionPropsMixin;
/**
 * Specifies a domain configuration.
 *
 * @cloudformationResource AWS::IoT::DomainConfiguration
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-domainconfiguration.html
 */
class CfnDomainConfigurationPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnDomainConfigurationPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["applicationProtocol", "authenticationType", "authorizerConfig", "clientCertificateConfig", "domainConfigurationName", "domainConfigurationStatus", "domainName", "serverCertificateArns", "serverCertificateConfig", "serviceType", "tags", "tlsConfig", "validationCertificateArn"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::DomainConfiguration`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnDomainConfigurationMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnDomainConfigurationPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnDomainConfiguration.isCfnDomainConfiguration(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnDomainConfigurationPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnDomainConfigurationPropsMixin = CfnDomainConfigurationPropsMixin;
/**
 * Use the `AWS::IoT::FleetMetric` resource to declare a fleet metric.
 *
 * @cloudformationResource AWS::IoT::FleetMetric
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-fleetmetric.html
 */
class CfnFleetMetricPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnFleetMetricPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["aggregationField", "aggregationType", "description", "indexName", "metricName", "period", "queryString", "queryVersion", "tags", "unit"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::FleetMetric`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnFleetMetricMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnFleetMetricPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnFleetMetric.isCfnFleetMetric(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnFleetMetricPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnFleetMetricPropsMixin = CfnFleetMetricPropsMixin;
/**
 * Represents a job template.
 *
 * @cloudformationResource AWS::IoT::JobTemplate
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-jobtemplate.html
 */
class CfnJobTemplatePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnJobTemplatePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["abortConfig", "description", "destinationPackageVersions", "document", "documentSource", "jobArn", "jobExecutionsRetryConfig", "jobExecutionsRolloutConfig", "jobTemplateId", "maintenanceWindows", "presignedUrlConfig", "tags", "timeoutConfig"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::JobTemplate`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnJobTemplateMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnJobTemplatePropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnJobTemplate.isCfnJobTemplate(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnJobTemplatePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnJobTemplatePropsMixin = CfnJobTemplatePropsMixin;
/**
 * Configure logging.
 *
 * > If you already set the log function of AWS IoT Core , you can't deploy the Cloud Development Kit  to change the logging settings. You can change the logging settings by either:
 * >
 * > - Importing the existing logging resource into your CloudFormation stack, such as with the [infrastructure as code generator (IaC generator)](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/generate-IaC.html) .
 * > - Calling `aws iot set-v2-logging-options --disable-all-logs` before creating a new CloudFormation stack. This command disables all AWS IoT logging. As a result, no AWS IoT logs will be delivered to Amazon CloudWatch until you re-enable logging.
 *
 * @cloudformationResource AWS::IoT::Logging
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-logging.html
 */
class CfnLoggingPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnLoggingPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["accountId", "defaultLogLevel", "eventConfigurations", "roleArn"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::Logging`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnLoggingMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnLoggingPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnLoggingMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnLogging.isCfnLogging(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnLoggingPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnLoggingPropsMixin = CfnLoggingPropsMixin;
// @ts-ignore TS6133
function flattenCfnLoggingMixinProps(props) {
    const ret = {};
    if ((props.roleArn !== undefined))
        ret.roleArn = cdk.getRefProperty(props.roleArn?.roleRef, 'roleArn') ?? cdk.ensureStringOrUndefined(props.roleArn, "roleArn", "iam.IRoleRef | string");
    return ret;
}
/**
 * Defines an action that can be applied to audit findings by using StartAuditMitigationActionsTask.
 *
 * For API reference, see [CreateMitigationAction](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateMitigationAction.html) and for general information, see [Mitigation actions](https://docs.aws.amazon.com/iot/latest/developerguide/dd-mitigation-actions.html) .
 *
 * @cloudformationResource AWS::IoT::MitigationAction
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-mitigationaction.html
 */
class CfnMitigationActionPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnMitigationActionPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["actionName", "actionParams", "roleArn", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::MitigationAction`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnMitigationActionMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnMitigationActionPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnMitigationAction.isCfnMitigationAction(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnMitigationActionPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnMitigationActionPropsMixin = CfnMitigationActionPropsMixin;
/**
 * Use the `AWS::IoT::Policy` resource to declare an AWS IoT policy.
 *
 * For more information about working with AWS IoT policies, see [Authorization](https://docs.aws.amazon.com/iot/latest/developerguide/authorization.html) in the *AWS IoT Developer Guide* .
 *
 * @cloudformationResource AWS::IoT::Policy
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-policy.html
 */
class CfnPolicyPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnPolicyPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["policyDocument", "policyName", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::Policy`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnPolicyMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnPolicyPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnPolicy.isCfnPolicy(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnPolicyPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnPolicyPropsMixin = CfnPolicyPropsMixin;
/**
 * Use the `AWS::IoT::PolicyPrincipalAttachment` resource to attach an AWS IoT policy to a principal (an X.509 certificate or other credential).
 *
 * For information about working with AWS IoT policies and principals, see [Authorization](https://docs.aws.amazon.com/iot/latest/developerguide/authorization.html) in the *AWS IoT Developer Guide* .
 *
 * @cloudformationResource AWS::IoT::PolicyPrincipalAttachment
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-policyprincipalattachment.html
 */
class CfnPolicyPrincipalAttachmentPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnPolicyPrincipalAttachmentPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["policyName", "principal"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::PolicyPrincipalAttachment`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnPolicyPrincipalAttachmentMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnPolicyPrincipalAttachmentPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnPolicyPrincipalAttachment.isCfnPolicyPrincipalAttachment(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnPolicyPrincipalAttachmentPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnPolicyPrincipalAttachmentPropsMixin = CfnPolicyPrincipalAttachmentPropsMixin;
/**
 * Creates a fleet provisioning template.
 *
 * @cloudformationResource AWS::IoT::ProvisioningTemplate
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-provisioningtemplate.html
 */
class CfnProvisioningTemplatePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnProvisioningTemplatePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["description", "enabled", "preProvisioningHook", "provisioningRoleArn", "tags", "templateBody", "templateName", "templateType"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::ProvisioningTemplate`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnProvisioningTemplateMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnProvisioningTemplatePropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnProvisioningTemplateMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnProvisioningTemplate.isCfnProvisioningTemplate(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnProvisioningTemplatePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnProvisioningTemplatePropsMixin = CfnProvisioningTemplatePropsMixin;
// @ts-ignore TS6133
function flattenCfnProvisioningTemplatePropsMixinProvisioningHookProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        payloadVersion: (!props.payloadVersion ? undefined : props.payloadVersion),
        targetArn: (!props.targetArn ? undefined : cdk.getRefProperty(props.targetArn?.functionRef, 'functionArn') ?? cdk.ensureStringOrUndefined(props.targetArn, "targetArn", "lambda.IFunctionRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnProvisioningTemplateMixinProps(props) {
    const ret = {};
    if ((props.preProvisioningHook !== undefined))
        ret.preProvisioningHook = flattenCfnProvisioningTemplatePropsMixinProvisioningHookProperty(props.preProvisioningHook);
    if ((props.provisioningRoleArn !== undefined))
        ret.provisioningRoleArn = cdk.getRefProperty(props.provisioningRoleArn?.roleRef, 'roleArn') ?? cdk.ensureStringOrUndefined(props.provisioningRoleArn, "provisioningRoleArn", "iam.IRoleRef | string");
    return ret;
}
/**
 * Configure resource-specific logging.
 *
 * @cloudformationResource AWS::IoT::ResourceSpecificLogging
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-resourcespecificlogging.html
 */
class CfnResourceSpecificLoggingPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnResourceSpecificLoggingPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["logLevel", "targetName", "targetType"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::ResourceSpecificLogging`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnResourceSpecificLoggingMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnResourceSpecificLoggingPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnResourceSpecificLogging.isCfnResourceSpecificLogging(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnResourceSpecificLoggingPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnResourceSpecificLoggingPropsMixin = CfnResourceSpecificLoggingPropsMixin;
/**
 * Specifies a role alias.
 *
 * Requires permission to access the [CreateRoleAlias](https://docs.aws.amazon.com//service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions) action.
 *
 * @cloudformationResource AWS::IoT::RoleAlias
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-rolealias.html
 */
class CfnRoleAliasPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnRoleAliasPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["credentialDurationSeconds", "roleAlias", "roleArn", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::RoleAlias`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnRoleAliasMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnRoleAliasPropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnRoleAliasMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnRoleAlias.isCfnRoleAlias(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnRoleAliasPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnRoleAliasPropsMixin = CfnRoleAliasPropsMixin;
// @ts-ignore TS6133
function flattenCfnRoleAliasMixinProps(props) {
    const ret = {};
    if ((props.roleArn !== undefined))
        ret.roleArn = cdk.getRefProperty(props.roleArn?.roleRef, 'roleArn') ?? cdk.ensureStringOrUndefined(props.roleArn, "roleArn", "iam.IRoleRef | string");
    return ret;
}
/**
 * Use the `AWS::IoT::ScheduledAudit` resource to create a scheduled audit that is run at a specified time interval.
 *
 * For API reference, see [CreateScheduleAudit](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateScheduledAudit.html) and for general information, see [Audit](https://docs.aws.amazon.com/iot/latest/developerguide/device-defender-audit.html) .
 *
 * @cloudformationResource AWS::IoT::ScheduledAudit
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-scheduledaudit.html
 */
class CfnScheduledAuditPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnScheduledAuditPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["dayOfMonth", "dayOfWeek", "frequency", "scheduledAuditName", "tags", "targetCheckNames"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::ScheduledAudit`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnScheduledAuditMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnScheduledAuditPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnScheduledAudit.isCfnScheduledAudit(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnScheduledAuditPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnScheduledAuditPropsMixin = CfnScheduledAuditPropsMixin;
/**
 * Use the `AWS::IoT::SecurityProfile` resource to create a Device Defender security profile.
 *
 * For API reference, see [CreateSecurityProfile](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateSecurityProfile.html) and for general information, see [Detect](https://docs.aws.amazon.com/iot/latest/developerguide/device-defender-detect.html) .
 *
 * @cloudformationResource AWS::IoT::SecurityProfile
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-securityprofile.html
 */
class CfnSecurityProfilePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnSecurityProfilePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["additionalMetricsToRetainV2", "alertTargets", "behaviors", "metricsExportConfig", "securityProfileDescription", "securityProfileName", "tags", "targetArns"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::SecurityProfile`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnSecurityProfileMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnSecurityProfilePropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnSecurityProfile.isCfnSecurityProfile(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnSecurityProfilePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnSecurityProfilePropsMixin = CfnSecurityProfilePropsMixin;
/**
 * Use the `AWS::IoT::SoftwarePackage` resource to create a software package.
 *
 * For information about working with software packages, see [AWS IoT Device Management Software Package Catalog](https://docs.aws.amazon.com/iot/latest/developerguide/software-package-catalog.html) and [Creating a software package and package version](https://docs.aws.amazon.com/iot/latest/developerguide/creating-package-and-version.html) in the *AWS IoT Developer Guide* . See also, [CreatePackage](https://docs.aws.amazon.com/iot/latest/apireference/API_CreatePackage.html) in the *API Guide* .
 *
 * @cloudformationResource AWS::IoT::SoftwarePackage
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-softwarepackage.html
 */
class CfnSoftwarePackagePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnSoftwarePackagePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["description", "packageName", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::SoftwarePackage`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnSoftwarePackageMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnSoftwarePackagePropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnSoftwarePackage.isCfnSoftwarePackage(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnSoftwarePackagePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnSoftwarePackagePropsMixin = CfnSoftwarePackagePropsMixin;
/**
 * Use the `AWS::IoT::SoftwarePackageVersion` resource to create a software package version.
 *
 * For information about working with software package versions, see [AWS IoT Device Management Software Package Catalog](https://docs.aws.amazon.com/iot/latest/developerguide/software-package-catalog.html) and [Creating a software package and package version](https://docs.aws.amazon.com/iot/latest/developerguide/creating-package-and-version.html) in the *AWS IoT Developer Guide* . See also, [CreatePackageVersion](https://docs.aws.amazon.com/iot/latest/apireference/API_CreatePackageVersion.html) in the *API Guide* .
 *
 * > The associated software package must exist before the package version is created. If you create a software package and package version in the same CloudFormation template, set the software package as a [dependency](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html) of the package version. If they are created out of sequence, you will receive an error.
 * >
 * > Package versions and created in a `draft` state, for more information, see [Package version lifecycle](https://docs.aws.amazon.com/iot/latest/developerguide/preparing-to-use-software-package-catalog.html#package-version-lifecycle) . To change the package version state after it’s created, use the [UpdatePackageVersionAPI](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdatePackageVersion.html) command.
 *
 * @cloudformationResource AWS::IoT::SoftwarePackageVersion
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-softwarepackageversion.html
 */
class CfnSoftwarePackageVersionPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnSoftwarePackageVersionPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["artifact", "attributes", "description", "packageName", "recipe", "sbom", "tags", "versionName"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::SoftwarePackageVersion`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnSoftwarePackageVersionMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnSoftwarePackageVersionPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnSoftwarePackageVersion.isCfnSoftwarePackageVersion(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnSoftwarePackageVersionPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnSoftwarePackageVersionPropsMixin = CfnSoftwarePackageVersionPropsMixin;
/**
 * Use the `AWS::IoT::Thing` resource to declare an AWS IoT thing.
 *
 * For information about working with things, see [How AWS IoT Works](https://docs.aws.amazon.com/iot/latest/developerguide/aws-iot-how-it-works.html) and [Device Registry for AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/thing-registry.html) in the *AWS IoT Developer Guide* .
 *
 * @cloudformationResource AWS::IoT::Thing
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-thing.html
 */
class CfnThingPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnThingPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["attributePayload", "thingName"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::Thing`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnThingMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnThingPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnThing.isCfnThing(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnThingPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnThingPropsMixin = CfnThingPropsMixin;
/**
 * Creates a new thing group.
 *
 * A dynamic thing group is created if the resource template contains the `QueryString` attribute. A dynamic thing group will not contain the `ParentGroupName` attribute. A static thing group and dynamic thing group can't be converted to each other via the addition or removal of the `QueryString` attribute.
 *
 * > This is a control plane operation. See [Authorization](https://docs.aws.amazon.com/iot/latest/developerguide/iot-authorization.html) for information about authorizing control plane actions.
 *
 * Requires permission to access the [CreateThingGroup](https://docs.aws.amazon.com//service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions) action.
 *
 * @cloudformationResource AWS::IoT::ThingGroup
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-thinggroup.html
 */
class CfnThingGroupPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnThingGroupPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["parentGroupName", "queryString", "tags", "thingGroupName", "thingGroupProperties"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::ThingGroup`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnThingGroupMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnThingGroupPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnThingGroup.isCfnThingGroup(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnThingGroupPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnThingGroupPropsMixin = CfnThingGroupPropsMixin;
/**
 * Use the `AWS::IoT::ThingPrincipalAttachment` resource to attach a principal (an X.509 certificate or another credential) to a thing.
 *
 * For more information about working with AWS IoT things and principals, see [Authorization](https://docs.aws.amazon.com/iot/latest/developerguide/authorization.html) in the *AWS IoT Developer Guide* .
 *
 * @cloudformationResource AWS::IoT::ThingPrincipalAttachment
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-thingprincipalattachment.html
 */
class CfnThingPrincipalAttachmentPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnThingPrincipalAttachmentPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["principal", "thingName", "thingPrincipalType"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::ThingPrincipalAttachment`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnThingPrincipalAttachmentMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnThingPrincipalAttachmentPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnThingPrincipalAttachment.isCfnThingPrincipalAttachment(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnThingPrincipalAttachmentPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnThingPrincipalAttachmentPropsMixin = CfnThingPrincipalAttachmentPropsMixin;
/**
 * Creates a new thing type.
 *
 * @cloudformationResource AWS::IoT::ThingType
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-thingtype.html
 */
class CfnThingTypePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnThingTypePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["deprecateThingType", "tags", "thingTypeName", "thingTypeProperties"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::ThingType`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnThingTypeMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnThingTypePropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnThingType.isCfnThingType(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnThingTypePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnThingTypePropsMixin = CfnThingTypePropsMixin;
/**
 * Use the `AWS::IoT::TopicRule` resource to declare an AWS IoT rule.
 *
 * For information about working with AWS IoT rules, see [Rules for AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules.html) in the *AWS IoT Developer Guide* .
 *
 * @cloudformationResource AWS::IoT::TopicRule
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-topicrule.html
 */
class CfnTopicRulePropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnTopicRulePropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["ruleName", "tags", "topicRulePayload"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::TopicRule`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnTopicRuleMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnTopicRulePropsMixin);
            }
            throw error;
        }
        this.props = {
            ...props,
            ...flattenCfnTopicRuleMixinProps(props)
        };
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnTopicRule.isCfnTopicRule(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnTopicRulePropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnTopicRulePropsMixin = CfnTopicRulePropsMixin;
// @ts-ignore TS6133
function flattenCfnTopicRulePropsMixinS3ActionProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        bucketName: (!props.bucketName ? undefined : cdk.getRefProperty(props.bucketName?.bucketRef, 'bucketName') ?? cdk.ensureStringOrUndefined(props.bucketName, "bucketName", "s3.IBucketRef | string")),
        cannedAcl: (!props.cannedAcl ? undefined : props.cannedAcl),
        key: (!props.key ? undefined : props.key),
        roleArn: (!props.roleArn ? undefined : cdk.getRefProperty(props.roleArn?.roleRef, 'roleArn') ?? cdk.ensureStringOrUndefined(props.roleArn, "roleArn", "iam.IRoleRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnTopicRulePropsMixinIotEventsActionProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        batchMode: (!props.batchMode ? undefined : props.batchMode),
        inputName: (!props.inputName ? undefined : cdk.getRefProperty(props.inputName?.inputRef, 'inputName') ?? cdk.ensureStringOrUndefined(props.inputName, "inputName", "iotevents.IInputRef | string")),
        messageId: (!props.messageId ? undefined : props.messageId),
        roleArn: (!props.roleArn ? undefined : cdk.getRefProperty(props.roleArn?.roleRef, 'roleArn') ?? cdk.ensureStringOrUndefined(props.roleArn, "roleArn", "iam.IRoleRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnTopicRulePropsMixinFirehoseActionProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        batchMode: (!props.batchMode ? undefined : props.batchMode),
        deliveryStreamName: (!props.deliveryStreamName ? undefined : cdk.getRefProperty(props.deliveryStreamName?.deliveryStreamRef, 'deliveryStreamName') ?? cdk.ensureStringOrUndefined(props.deliveryStreamName, "deliveryStreamName", "kinesisfirehose.IDeliveryStreamRef | string")),
        roleArn: (!props.roleArn ? undefined : cdk.getRefProperty(props.roleArn?.roleRef, 'roleArn') ?? cdk.ensureStringOrUndefined(props.roleArn, "roleArn", "iam.IRoleRef | string")),
        separator: (!props.separator ? undefined : props.separator)
    };
}
// @ts-ignore TS6133
function flattenCfnTopicRulePropsMixinRepublishActionProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        headers: (!props.headers ? undefined : props.headers),
        qos: (!props.qos ? undefined : props.qos),
        roleArn: (!props.roleArn ? undefined : cdk.getRefProperty(props.roleArn?.roleRef, 'roleArn') ?? cdk.ensureStringOrUndefined(props.roleArn, "roleArn", "iam.IRoleRef | string")),
        topic: (!props.topic ? undefined : props.topic)
    };
}
// @ts-ignore TS6133
function flattenCfnTopicRulePropsMixinPutItemInputProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        tableName: (!props.tableName ? undefined : cdk.getRefProperty(props.tableName?.tableRef, 'tableName') ?? cdk.ensureStringOrUndefined(props.tableName, "tableName", "dynamodb.ITableRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnTopicRulePropsMixinDynamoDBv2ActionProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        putItem: (!props.putItem ? undefined : (!props.putItem ? undefined : flattenCfnTopicRulePropsMixinPutItemInputProperty(props.putItem))),
        roleArn: (!props.roleArn ? undefined : cdk.getRefProperty(props.roleArn?.roleRef, 'roleArn') ?? cdk.ensureStringOrUndefined(props.roleArn, "roleArn", "iam.IRoleRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnTopicRulePropsMixinSqsActionProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        queueUrl: (!props.queueUrl ? undefined : cdk.getRefProperty(props.queueUrl?.queueRef, 'queueUrl') ?? cdk.ensureStringOrUndefined(props.queueUrl, "queueUrl", "sqs.IQueueRef | string")),
        roleArn: (!props.roleArn ? undefined : cdk.getRefProperty(props.roleArn?.roleRef, 'roleArn') ?? cdk.ensureStringOrUndefined(props.roleArn, "roleArn", "iam.IRoleRef | string")),
        useBase64: (!props.useBase64 ? undefined : props.useBase64)
    };
}
// @ts-ignore TS6133
function flattenCfnTopicRulePropsMixinIotAnalyticsActionProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        batchMode: (!props.batchMode ? undefined : props.batchMode),
        channelName: (!props.channelName ? undefined : props.channelName),
        roleArn: (!props.roleArn ? undefined : cdk.getRefProperty(props.roleArn?.roleRef, 'roleArn') ?? cdk.ensureStringOrUndefined(props.roleArn, "roleArn", "iam.IRoleRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnTopicRulePropsMixinSnsActionProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        messageFormat: (!props.messageFormat ? undefined : props.messageFormat),
        roleArn: (!props.roleArn ? undefined : cdk.getRefProperty(props.roleArn?.roleRef, 'roleArn') ?? cdk.ensureStringOrUndefined(props.roleArn, "roleArn", "iam.IRoleRef | string")),
        targetArn: (!props.targetArn ? undefined : cdk.getRefProperty(props.targetArn?.topicRef, 'topicArn') ?? cdk.ensureStringOrUndefined(props.targetArn, "targetArn", "sns.ITopicRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnTopicRulePropsMixinLambdaActionProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        functionArn: (!props.functionArn ? undefined : cdk.getRefProperty(props.functionArn?.functionRef, 'functionArn') ?? cdk.ensureStringOrUndefined(props.functionArn, "functionArn", "lambda.IFunctionRef | string"))
    };
}
// @ts-ignore TS6133
function flattenCfnTopicRulePropsMixinActionProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        cloudwatchAlarm: (!props.cloudwatchAlarm ? undefined : props.cloudwatchAlarm),
        cloudwatchLogs: (!props.cloudwatchLogs ? undefined : props.cloudwatchLogs),
        cloudwatchMetric: (!props.cloudwatchMetric ? undefined : props.cloudwatchMetric),
        dynamoDb: (!props.dynamoDb ? undefined : props.dynamoDb),
        dynamoDBv2: (!props.dynamoDBv2 ? undefined : (!props.dynamoDBv2 ? undefined : flattenCfnTopicRulePropsMixinDynamoDBv2ActionProperty(props.dynamoDBv2))),
        elasticsearch: (!props.elasticsearch ? undefined : props.elasticsearch),
        firehose: (!props.firehose ? undefined : (!props.firehose ? undefined : flattenCfnTopicRulePropsMixinFirehoseActionProperty(props.firehose))),
        http: (!props.http ? undefined : props.http),
        iotAnalytics: (!props.iotAnalytics ? undefined : (!props.iotAnalytics ? undefined : flattenCfnTopicRulePropsMixinIotAnalyticsActionProperty(props.iotAnalytics))),
        iotEvents: (!props.iotEvents ? undefined : (!props.iotEvents ? undefined : flattenCfnTopicRulePropsMixinIotEventsActionProperty(props.iotEvents))),
        iotSiteWise: (!props.iotSiteWise ? undefined : props.iotSiteWise),
        kafka: (!props.kafka ? undefined : props.kafka),
        kinesis: (!props.kinesis ? undefined : props.kinesis),
        lambda: (!props.lambda ? undefined : (!props.lambda ? undefined : flattenCfnTopicRulePropsMixinLambdaActionProperty(props.lambda))),
        location: (!props.location ? undefined : props.location),
        openSearch: (!props.openSearch ? undefined : props.openSearch),
        republish: (!props.republish ? undefined : (!props.republish ? undefined : flattenCfnTopicRulePropsMixinRepublishActionProperty(props.republish))),
        s3: (!props.s3 ? undefined : (!props.s3 ? undefined : flattenCfnTopicRulePropsMixinS3ActionProperty(props.s3))),
        sns: (!props.sns ? undefined : (!props.sns ? undefined : flattenCfnTopicRulePropsMixinSnsActionProperty(props.sns))),
        sqs: (!props.sqs ? undefined : (!props.sqs ? undefined : flattenCfnTopicRulePropsMixinSqsActionProperty(props.sqs))),
        stepFunctions: (!props.stepFunctions ? undefined : props.stepFunctions),
        timestream: (!props.timestream ? undefined : props.timestream)
    };
}
// @ts-ignore TS6133
function flattenCfnTopicRulePropsMixinTopicRulePayloadProperty(props) {
    if (cdk.isResolvableObject(props))
        return props;
    return {
        actions: (!props.actions ? undefined : (cdk.isResolvableObject(props.actions) ? props.actions : cdk.mapArrayInPlace(props.actions, (item) => flattenCfnTopicRulePropsMixinActionProperty(item)))),
        awsIotSqlVersion: (!props.awsIotSqlVersion ? undefined : props.awsIotSqlVersion),
        description: (!props.description ? undefined : props.description),
        errorAction: (!props.errorAction ? undefined : (!props.errorAction ? undefined : flattenCfnTopicRulePropsMixinActionProperty(props.errorAction))),
        ruleDisabled: (!props.ruleDisabled ? undefined : props.ruleDisabled),
        sql: (!props.sql ? undefined : props.sql)
    };
}
// @ts-ignore TS6133
function flattenCfnTopicRuleMixinProps(props) {
    const ret = {};
    if ((props.topicRulePayload !== undefined))
        ret.topicRulePayload = flattenCfnTopicRulePropsMixinTopicRulePayloadProperty(props.topicRulePayload);
    return ret;
}
/**
 * A topic rule destination.
 *
 * @cloudformationResource AWS::IoT::TopicRuleDestination
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-topicruledestination.html
 */
class CfnTopicRuleDestinationPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnTopicRuleDestinationPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["httpUrlProperties", "status", "vpcProperties"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::TopicRuleDestination`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnTopicRuleDestinationMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnTopicRuleDestinationPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnTopicRuleDestination.isCfnTopicRuleDestination(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnTopicRuleDestinationPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnTopicRuleDestinationPropsMixin = CfnTopicRuleDestinationPropsMixin;
/**
 * Creates a certificate provider.
 *
 * AWS IoT Core certificate provider lets you customize how to sign a certificate signing request (CSR) in fleet provisioning. For more information, see [Self-managed certificate signing using AWS IoT Core certificate provider](https://docs.aws.amazon.com/iot/latest/developerguide/provisioning-cert-provider.html) from the *AWS IoT Core Developer Guide* .
 *
 * @cloudformationResource AWS::IoT::CertificateProvider
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-certificateprovider.html
 */
class CfnCertificateProviderPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnCertificateProviderPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["accountDefaultForOperations", "certificateProviderName", "lambdaFunctionArn", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::CertificateProvider`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnCertificateProviderMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnCertificateProviderPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnCertificateProvider.isCfnCertificateProvider(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnCertificateProviderPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnCertificateProviderPropsMixin = CfnCertificateProviderPropsMixin;
/**
 * Represents the resource definition of AWS IoT Command.
 *
 * @cloudformationResource AWS::IoT::Command
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-command.html
 */
class CfnCommandPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnCommandPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["commandId", "createdAt", "deprecated", "description", "displayName", "lastUpdatedAt", "mandatoryParameters", "namespace", "payload", "payloadTemplate", "pendingDeletion", "preprocessor", "roleArn", "tags"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::Command`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnCommandMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnCommandPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnCommand.isCfnCommand(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnCommandPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnCommandPropsMixin = CfnCommandPropsMixin;
/**
 * Retrieves the encryption configuration for resources and data of your AWS account in AWS IoT Core .
 *
 * For more information, see [Data encryption at rest](https://docs.aws.amazon.com/iot/latest/developerguide/encryption-at-rest.html) in the *AWS IoT Core Developer Guide* .
 *
 * @cloudformationResource AWS::IoT::EncryptionConfiguration
 * @mixin true
 * @stability external
 * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iot-encryptionconfiguration.html
 */
class CfnEncryptionConfigurationPropsMixin extends cdk.Mixin {
    static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/cfn-property-mixins.aws_iot.CfnEncryptionConfigurationPropsMixin", version: "2.258.1" };
    static CFN_PROPERTY_KEYS = ["encryptionType", "kmsAccessRoleArn", "kmsKeyArn"];
    props;
    strategy;
    /**
     * Create a mixin to apply properties to `AWS::IoT::EncryptionConfiguration`.
     *
     * @param props L1 properties to apply
     * @param options Mixin options
     */
    constructor(props, options = {}) {
        super();
        try {
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_aws_iot_CfnEncryptionConfigurationMixinProps(props);
            jsiiDeprecationWarnings._aws_cdk_cfn_property_mixins_CfnPropertyMixinOptions(options);
        }
        catch (error) {
            if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
                Error.captureStackTrace(error, CfnEncryptionConfigurationPropsMixin);
            }
            throw error;
        }
        this.props = props;
        this.strategy = (options.strategy ?? cdk.PropertyMergeStrategy.combine());
    }
    /**
     * Check if this mixin supports the given construct
     */
    supports(construct) {
        return (cdk.CfnResource.isCfnResource(construct) && service.CfnEncryptionConfiguration.isCfnEncryptionConfiguration(construct));
    }
    /**
     * Apply the mixin properties to the construct
     */
    applyTo(construct) {
        if (this.supports(construct)) {
            this.strategy.apply(construct, this.props, CfnEncryptionConfigurationPropsMixin.CFN_PROPERTY_KEYS);
        }
    }
}
exports.CfnEncryptionConfigurationPropsMixin = CfnEncryptionConfigurationPropsMixin;
