# coding=utf-8
# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import copy
import warnings
import sys
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
if sys.version_info >= (3, 11):
    from typing import NotRequired, TypedDict, TypeAlias
else:
    from typing_extensions import NotRequired, TypedDict, TypeAlias
from . import _utilities
from . import outputs

__all__ = [
    'ProjectApplications',
    'ProjectApplicationsOidcApplication',
    'ProjectApplicationsSamlApplication',
    'ProjectApplicationsSamlApplicationAttributeMapping',
    'ProjectApplicationsSamlApplicationDynamicConfiguration',
    'ProjectApplicationsSamlApplicationManualConfiguration',
    'ProjectAttributes',
    'ProjectAttributesTenant',
    'ProjectAttributesUser',
    'ProjectAttributesUserWidgetAuthorization',
    'ProjectAuthentication',
    'ProjectAuthenticationEmbeddedLink',
    'ProjectAuthenticationEnchantedLink',
    'ProjectAuthenticationEnchantedLinkEmailService',
    'ProjectAuthenticationEnchantedLinkEmailServiceTemplate',
    'ProjectAuthenticationMagicLink',
    'ProjectAuthenticationMagicLinkEmailService',
    'ProjectAuthenticationMagicLinkEmailServiceTemplate',
    'ProjectAuthenticationMagicLinkTextService',
    'ProjectAuthenticationMagicLinkTextServiceTemplate',
    'ProjectAuthenticationOauth',
    'ProjectAuthenticationOauthCustom',
    'ProjectAuthenticationOauthCustomProviderTokenManagement',
    'ProjectAuthenticationOauthSystem',
    'ProjectAuthenticationOauthSystemApple',
    'ProjectAuthenticationOauthSystemAppleProviderTokenManagement',
    'ProjectAuthenticationOauthSystemDiscord',
    'ProjectAuthenticationOauthSystemDiscordProviderTokenManagement',
    'ProjectAuthenticationOauthSystemFacebook',
    'ProjectAuthenticationOauthSystemFacebookProviderTokenManagement',
    'ProjectAuthenticationOauthSystemGithub',
    'ProjectAuthenticationOauthSystemGithubProviderTokenManagement',
    'ProjectAuthenticationOauthSystemGitlab',
    'ProjectAuthenticationOauthSystemGitlabProviderTokenManagement',
    'ProjectAuthenticationOauthSystemGoogle',
    'ProjectAuthenticationOauthSystemGoogleProviderTokenManagement',
    'ProjectAuthenticationOauthSystemLinkedin',
    'ProjectAuthenticationOauthSystemLinkedinProviderTokenManagement',
    'ProjectAuthenticationOauthSystemMicrosoft',
    'ProjectAuthenticationOauthSystemMicrosoftProviderTokenManagement',
    'ProjectAuthenticationOauthSystemSlack',
    'ProjectAuthenticationOauthSystemSlackProviderTokenManagement',
    'ProjectAuthenticationOtp',
    'ProjectAuthenticationOtpEmailService',
    'ProjectAuthenticationOtpEmailServiceTemplate',
    'ProjectAuthenticationOtpTextService',
    'ProjectAuthenticationOtpTextServiceTemplate',
    'ProjectAuthenticationOtpVoiceService',
    'ProjectAuthenticationOtpVoiceServiceTemplate',
    'ProjectAuthenticationPasskeys',
    'ProjectAuthenticationPassword',
    'ProjectAuthenticationPasswordEmailService',
    'ProjectAuthenticationPasswordEmailServiceTemplate',
    'ProjectAuthenticationSso',
    'ProjectAuthenticationTotp',
    'ProjectAuthorization',
    'ProjectAuthorizationPermission',
    'ProjectAuthorizationRole',
    'ProjectConnectors',
    'ProjectConnectorsAbuseipdb',
    'ProjectConnectorsAmplitude',
    'ProjectConnectorsAuditWebhook',
    'ProjectConnectorsAuditWebhookAuthentication',
    'ProjectConnectorsAuditWebhookAuthenticationApiKey',
    'ProjectConnectorsAuditWebhookAuthenticationBasic',
    'ProjectConnectorsAwsS3',
    'ProjectConnectorsAwsTranslate',
    'ProjectConnectorsClear',
    'ProjectConnectorsDatadog',
    'ProjectConnectorsDevrevGrow',
    'ProjectConnectorsDocebo',
    'ProjectConnectorsFingerprint',
    'ProjectConnectorsFingerprintDescope',
    'ProjectConnectorsForter',
    'ProjectConnectorsGoogleCloudTranslation',
    'ProjectConnectorsHibp',
    'ProjectConnectorsHttp',
    'ProjectConnectorsHttpAuthentication',
    'ProjectConnectorsHttpAuthenticationApiKey',
    'ProjectConnectorsHttpAuthenticationBasic',
    'ProjectConnectorsHttpStaticIp',
    'ProjectConnectorsHttpStaticIpAuthentication',
    'ProjectConnectorsHttpStaticIpAuthenticationApiKey',
    'ProjectConnectorsHttpStaticIpAuthenticationBasic',
    'ProjectConnectorsHubspot',
    'ProjectConnectorsIntercom',
    'ProjectConnectorsNewrelic',
    'ProjectConnectorsRecaptcha',
    'ProjectConnectorsRecaptchaEnterprise',
    'ProjectConnectorsRekognition',
    'ProjectConnectorsSalesforce',
    'ProjectConnectorsSegment',
    'ProjectConnectorsSendgrid',
    'ProjectConnectorsSendgridAuthentication',
    'ProjectConnectorsSendgridSender',
    'ProjectConnectorsSmtp',
    'ProjectConnectorsSmtpAuthentication',
    'ProjectConnectorsSmtpSender',
    'ProjectConnectorsSmtpServer',
    'ProjectConnectorsSumologic',
    'ProjectConnectorsTelesign',
    'ProjectConnectorsTraceable',
    'ProjectConnectorsTwilioCore',
    'ProjectConnectorsTwilioCoreAuthentication',
    'ProjectConnectorsTwilioCoreSenders',
    'ProjectConnectorsTwilioCoreSendersSms',
    'ProjectConnectorsTwilioCoreSendersVoice',
    'ProjectConnectorsTwilioVerify',
    'ProjectConnectorsTwilioVerifyAuthentication',
    'ProjectConnectorsVeriff',
    'ProjectFlows',
    'ProjectJwtTemplates',
    'ProjectJwtTemplatesAccessKeyTemplate',
    'ProjectJwtTemplatesUserTemplate',
    'ProjectProjectSettings',
    'ProjectStyles',
]

@pulumi.output_type
class ProjectApplications(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "oidcApplications":
            suggest = "oidc_applications"
        elif key == "samlApplications":
            suggest = "saml_applications"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectApplications. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectApplications.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectApplications.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 oidc_applications: Optional[Sequence['outputs.ProjectApplicationsOidcApplication']] = None,
                 saml_applications: Optional[Sequence['outputs.ProjectApplicationsSamlApplication']] = None):
        """
        :param Sequence['ProjectApplicationsOidcApplicationArgs'] oidc_applications: Applications using OpenID Connect (OIDC) for authentication.
        :param Sequence['ProjectApplicationsSamlApplicationArgs'] saml_applications: Applications using SAML for authentication.
        """
        if oidc_applications is not None:
            pulumi.set(__self__, "oidc_applications", oidc_applications)
        if saml_applications is not None:
            pulumi.set(__self__, "saml_applications", saml_applications)

    @property
    @pulumi.getter(name="oidcApplications")
    def oidc_applications(self) -> Optional[Sequence['outputs.ProjectApplicationsOidcApplication']]:
        """
        Applications using OpenID Connect (OIDC) for authentication.
        """
        return pulumi.get(self, "oidc_applications")

    @property
    @pulumi.getter(name="samlApplications")
    def saml_applications(self) -> Optional[Sequence['outputs.ProjectApplicationsSamlApplication']]:
        """
        Applications using SAML for authentication.
        """
        return pulumi.get(self, "saml_applications")


@pulumi.output_type
class ProjectApplicationsOidcApplication(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "loginPageUrl":
            suggest = "login_page_url"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectApplicationsOidcApplication. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectApplicationsOidcApplication.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectApplicationsOidcApplication.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 name: str,
                 claims: Optional[Sequence[str]] = None,
                 description: Optional[str] = None,
                 disabled: Optional[bool] = None,
                 id: Optional[str] = None,
                 login_page_url: Optional[str] = None,
                 logo: Optional[str] = None):
        """
        :param str name: The name of the application.
        :param Sequence[str] claims: Claims associated with JWT tokens, typically used for user information.
        :param str description: A brief description of the application.
        :param bool disabled: Indicates whether the resource or functionality is disabled.
        :param str id: An optional identifier for the application.
        :param str login_page_url: The URL of the custom login page for the application.
        :param str logo: The URL of the logo associated with the application.
        """
        pulumi.set(__self__, "name", name)
        if claims is not None:
            pulumi.set(__self__, "claims", claims)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if disabled is not None:
            pulumi.set(__self__, "disabled", disabled)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if login_page_url is not None:
            pulumi.set(__self__, "login_page_url", login_page_url)
        if logo is not None:
            pulumi.set(__self__, "logo", logo)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the application.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def claims(self) -> Optional[Sequence[str]]:
        """
        Claims associated with JWT tokens, typically used for user information.
        """
        return pulumi.get(self, "claims")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A brief description of the application.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def disabled(self) -> Optional[bool]:
        """
        Indicates whether the resource or functionality is disabled.
        """
        return pulumi.get(self, "disabled")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        """
        An optional identifier for the application.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="loginPageUrl")
    def login_page_url(self) -> Optional[str]:
        """
        The URL of the custom login page for the application.
        """
        return pulumi.get(self, "login_page_url")

    @property
    @pulumi.getter
    def logo(self) -> Optional[str]:
        """
        The URL of the logo associated with the application.
        """
        return pulumi.get(self, "logo")


@pulumi.output_type
class ProjectApplicationsSamlApplication(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "acsAllowedCallbackUrls":
            suggest = "acs_allowed_callback_urls"
        elif key == "attributeMappings":
            suggest = "attribute_mappings"
        elif key == "defaultRelayState":
            suggest = "default_relay_state"
        elif key == "dynamicConfiguration":
            suggest = "dynamic_configuration"
        elif key == "loginPageUrl":
            suggest = "login_page_url"
        elif key == "manualConfiguration":
            suggest = "manual_configuration"
        elif key == "subjectNameIdFormat":
            suggest = "subject_name_id_format"
        elif key == "subjectNameIdType":
            suggest = "subject_name_id_type"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectApplicationsSamlApplication. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectApplicationsSamlApplication.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectApplicationsSamlApplication.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 name: str,
                 acs_allowed_callback_urls: Optional[Sequence[str]] = None,
                 attribute_mappings: Optional[Sequence['outputs.ProjectApplicationsSamlApplicationAttributeMapping']] = None,
                 default_relay_state: Optional[str] = None,
                 description: Optional[str] = None,
                 disabled: Optional[bool] = None,
                 dynamic_configuration: Optional['outputs.ProjectApplicationsSamlApplicationDynamicConfiguration'] = None,
                 id: Optional[str] = None,
                 login_page_url: Optional[str] = None,
                 logo: Optional[str] = None,
                 manual_configuration: Optional['outputs.ProjectApplicationsSamlApplicationManualConfiguration'] = None,
                 subject_name_id_format: Optional[str] = None,
                 subject_name_id_type: Optional[str] = None):
        """
        :param str name: The name of the application.
        :param Sequence['ProjectApplicationsSamlApplicationAttributeMappingArgs'] attribute_mappings: Map user attributes from the third party identity provider to custom attributes in Descope.
        :param str description: A brief description of the application.
        :param bool disabled: Indicates whether the application is disabled.
        :param str id: An optional identifier for the application.
        :param str login_page_url: The URL of the custom login page for the application.
        :param str logo: The URL of the logo associated with the application.
        """
        pulumi.set(__self__, "name", name)
        if acs_allowed_callback_urls is not None:
            pulumi.set(__self__, "acs_allowed_callback_urls", acs_allowed_callback_urls)
        if attribute_mappings is not None:
            pulumi.set(__self__, "attribute_mappings", attribute_mappings)
        if default_relay_state is not None:
            pulumi.set(__self__, "default_relay_state", default_relay_state)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if disabled is not None:
            pulumi.set(__self__, "disabled", disabled)
        if dynamic_configuration is not None:
            pulumi.set(__self__, "dynamic_configuration", dynamic_configuration)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if login_page_url is not None:
            pulumi.set(__self__, "login_page_url", login_page_url)
        if logo is not None:
            pulumi.set(__self__, "logo", logo)
        if manual_configuration is not None:
            pulumi.set(__self__, "manual_configuration", manual_configuration)
        if subject_name_id_format is not None:
            pulumi.set(__self__, "subject_name_id_format", subject_name_id_format)
        if subject_name_id_type is not None:
            pulumi.set(__self__, "subject_name_id_type", subject_name_id_type)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the application.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="acsAllowedCallbackUrls")
    def acs_allowed_callback_urls(self) -> Optional[Sequence[str]]:
        return pulumi.get(self, "acs_allowed_callback_urls")

    @property
    @pulumi.getter(name="attributeMappings")
    def attribute_mappings(self) -> Optional[Sequence['outputs.ProjectApplicationsSamlApplicationAttributeMapping']]:
        """
        Map user attributes from the third party identity provider to custom attributes in Descope.
        """
        return pulumi.get(self, "attribute_mappings")

    @property
    @pulumi.getter(name="defaultRelayState")
    def default_relay_state(self) -> Optional[str]:
        return pulumi.get(self, "default_relay_state")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A brief description of the application.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def disabled(self) -> Optional[bool]:
        """
        Indicates whether the application is disabled.
        """
        return pulumi.get(self, "disabled")

    @property
    @pulumi.getter(name="dynamicConfiguration")
    def dynamic_configuration(self) -> Optional['outputs.ProjectApplicationsSamlApplicationDynamicConfiguration']:
        return pulumi.get(self, "dynamic_configuration")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        """
        An optional identifier for the application.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="loginPageUrl")
    def login_page_url(self) -> Optional[str]:
        """
        The URL of the custom login page for the application.
        """
        return pulumi.get(self, "login_page_url")

    @property
    @pulumi.getter
    def logo(self) -> Optional[str]:
        """
        The URL of the logo associated with the application.
        """
        return pulumi.get(self, "logo")

    @property
    @pulumi.getter(name="manualConfiguration")
    def manual_configuration(self) -> Optional['outputs.ProjectApplicationsSamlApplicationManualConfiguration']:
        return pulumi.get(self, "manual_configuration")

    @property
    @pulumi.getter(name="subjectNameIdFormat")
    def subject_name_id_format(self) -> Optional[str]:
        return pulumi.get(self, "subject_name_id_format")

    @property
    @pulumi.getter(name="subjectNameIdType")
    def subject_name_id_type(self) -> Optional[str]:
        return pulumi.get(self, "subject_name_id_type")


@pulumi.output_type
class ProjectApplicationsSamlApplicationAttributeMapping(dict):
    def __init__(__self__, *,
                 name: str,
                 value: str):
        """
        :param str name: The name of the user attribute in the third party identity provider.
        :param str value: The name of the user custom attribute in Descope.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the user attribute in the third party identity provider.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def value(self) -> str:
        """
        The name of the user custom attribute in Descope.
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class ProjectApplicationsSamlApplicationDynamicConfiguration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "metadataUrl":
            suggest = "metadata_url"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectApplicationsSamlApplicationDynamicConfiguration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectApplicationsSamlApplicationDynamicConfiguration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectApplicationsSamlApplicationDynamicConfiguration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 metadata_url: str):
        pulumi.set(__self__, "metadata_url", metadata_url)

    @property
    @pulumi.getter(name="metadataUrl")
    def metadata_url(self) -> str:
        return pulumi.get(self, "metadata_url")


@pulumi.output_type
class ProjectApplicationsSamlApplicationManualConfiguration(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "acsUrl":
            suggest = "acs_url"
        elif key == "entityId":
            suggest = "entity_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectApplicationsSamlApplicationManualConfiguration. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectApplicationsSamlApplicationManualConfiguration.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectApplicationsSamlApplicationManualConfiguration.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 acs_url: str,
                 certificate: str,
                 entity_id: str):
        pulumi.set(__self__, "acs_url", acs_url)
        pulumi.set(__self__, "certificate", certificate)
        pulumi.set(__self__, "entity_id", entity_id)

    @property
    @pulumi.getter(name="acsUrl")
    def acs_url(self) -> str:
        return pulumi.get(self, "acs_url")

    @property
    @pulumi.getter
    def certificate(self) -> str:
        return pulumi.get(self, "certificate")

    @property
    @pulumi.getter(name="entityId")
    def entity_id(self) -> str:
        return pulumi.get(self, "entity_id")


@pulumi.output_type
class ProjectAttributes(dict):
    def __init__(__self__, *,
                 tenants: Optional[Sequence['outputs.ProjectAttributesTenant']] = None,
                 users: Optional[Sequence['outputs.ProjectAttributesUser']] = None):
        """
        :param Sequence['ProjectAttributesTenantArgs'] tenants: Custom attributes to store additional details about your tenants.
        :param Sequence['ProjectAttributesUserArgs'] users: Custom attributes to store additional details about your users.
        """
        if tenants is not None:
            pulumi.set(__self__, "tenants", tenants)
        if users is not None:
            pulumi.set(__self__, "users", users)

    @property
    @pulumi.getter
    def tenants(self) -> Optional[Sequence['outputs.ProjectAttributesTenant']]:
        """
        Custom attributes to store additional details about your tenants.
        """
        return pulumi.get(self, "tenants")

    @property
    @pulumi.getter
    def users(self) -> Optional[Sequence['outputs.ProjectAttributesUser']]:
        """
        Custom attributes to store additional details about your users.
        """
        return pulumi.get(self, "users")


@pulumi.output_type
class ProjectAttributesTenant(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "selectOptions":
            suggest = "select_options"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAttributesTenant. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAttributesTenant.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAttributesTenant.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 name: str,
                 type: str,
                 select_options: Optional[Sequence[str]] = None):
        """
        :param str name: The name of the tenant attribute.
        :param str type: The type of the tenant attribute. Valid valus are `string`, `number`, `boolean`, `date`, `singleselect`, and `multiselect`.
        :param Sequence[str] select_options: A list of strings to define the set of options for select attributes.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "type", type)
        if select_options is not None:
            pulumi.set(__self__, "select_options", select_options)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the tenant attribute.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of the tenant attribute. Valid valus are `string`, `number`, `boolean`, `date`, `singleselect`, and `multiselect`.
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter(name="selectOptions")
    def select_options(self) -> Optional[Sequence[str]]:
        """
        A list of strings to define the set of options for select attributes.
        """
        return pulumi.get(self, "select_options")


@pulumi.output_type
class ProjectAttributesUser(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "selectOptions":
            suggest = "select_options"
        elif key == "widgetAuthorization":
            suggest = "widget_authorization"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAttributesUser. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAttributesUser.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAttributesUser.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 name: str,
                 type: str,
                 select_options: Optional[Sequence[str]] = None,
                 widget_authorization: Optional['outputs.ProjectAttributesUserWidgetAuthorization'] = None):
        """
        :param str name: The name of the user attribute.
        :param str type: The type of the user attribute. Valid valus are `string`, `number`, `boolean`, `date`, `singleselect`, and `multiselect`.
        :param Sequence[str] select_options: A list of strings to define the set of options for select attributes.
        :param 'ProjectAttributesUserWidgetAuthorizationArgs' widget_authorization: When provided, viewing and editing the attribute values in widgets will be restricted to users with the specified permissions.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "type", type)
        if select_options is not None:
            pulumi.set(__self__, "select_options", select_options)
        if widget_authorization is not None:
            pulumi.set(__self__, "widget_authorization", widget_authorization)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the user attribute.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        The type of the user attribute. Valid valus are `string`, `number`, `boolean`, `date`, `singleselect`, and `multiselect`.
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter(name="selectOptions")
    def select_options(self) -> Optional[Sequence[str]]:
        """
        A list of strings to define the set of options for select attributes.
        """
        return pulumi.get(self, "select_options")

    @property
    @pulumi.getter(name="widgetAuthorization")
    def widget_authorization(self) -> Optional['outputs.ProjectAttributesUserWidgetAuthorization']:
        """
        When provided, viewing and editing the attribute values in widgets will be restricted to users with the specified permissions.
        """
        return pulumi.get(self, "widget_authorization")


@pulumi.output_type
class ProjectAttributesUserWidgetAuthorization(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "editPermissions":
            suggest = "edit_permissions"
        elif key == "viewPermissions":
            suggest = "view_permissions"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAttributesUserWidgetAuthorization. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAttributesUserWidgetAuthorization.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAttributesUserWidgetAuthorization.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 edit_permissions: Optional[Sequence[str]] = None,
                 view_permissions: Optional[Sequence[str]] = None):
        """
        :param Sequence[str] edit_permissions: Editing the attribute value in widgets will be restricted to users with the specified permissions.
        :param Sequence[str] view_permissions: Viewing the attribute value in widgets will be restricted to users with the specified permissions.
        """
        if edit_permissions is not None:
            pulumi.set(__self__, "edit_permissions", edit_permissions)
        if view_permissions is not None:
            pulumi.set(__self__, "view_permissions", view_permissions)

    @property
    @pulumi.getter(name="editPermissions")
    def edit_permissions(self) -> Optional[Sequence[str]]:
        """
        Editing the attribute value in widgets will be restricted to users with the specified permissions.
        """
        return pulumi.get(self, "edit_permissions")

    @property
    @pulumi.getter(name="viewPermissions")
    def view_permissions(self) -> Optional[Sequence[str]]:
        """
        Viewing the attribute value in widgets will be restricted to users with the specified permissions.
        """
        return pulumi.get(self, "view_permissions")


@pulumi.output_type
class ProjectAuthentication(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "embeddedLink":
            suggest = "embedded_link"
        elif key == "enchantedLink":
            suggest = "enchanted_link"
        elif key == "magicLink":
            suggest = "magic_link"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthentication. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthentication.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthentication.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 embedded_link: Optional['outputs.ProjectAuthenticationEmbeddedLink'] = None,
                 enchanted_link: Optional['outputs.ProjectAuthenticationEnchantedLink'] = None,
                 magic_link: Optional['outputs.ProjectAuthenticationMagicLink'] = None,
                 oauth: Optional['outputs.ProjectAuthenticationOauth'] = None,
                 otp: Optional['outputs.ProjectAuthenticationOtp'] = None,
                 passkeys: Optional['outputs.ProjectAuthenticationPasskeys'] = None,
                 password: Optional['outputs.ProjectAuthenticationPassword'] = None,
                 sso: Optional['outputs.ProjectAuthenticationSso'] = None,
                 totp: Optional['outputs.ProjectAuthenticationTotp'] = None):
        """
        :param 'ProjectAuthenticationEmbeddedLinkArgs' embedded_link: Make the authentication experience smoother for the user by generating their initial token in a way that does not require the end user to initiate the process, requiring only verification.
        :param 'ProjectAuthenticationEnchantedLinkArgs' enchanted_link: An enhanced and more secure version of Magic Link, enabling users to start the authentication process on one device and execute the verification on another.
        :param 'ProjectAuthenticationMagicLinkArgs' magic_link: An authentication method where a user receives a unique link via email to log in.
        :param 'ProjectAuthenticationOauthArgs' oauth: Authentication using Open Authorization, which allows users to authenticate with various external services.
        :param 'ProjectAuthenticationOtpArgs' otp: A dynamically generated set of numbers, granting the user one-time access.
        :param 'ProjectAuthenticationPasskeysArgs' passkeys: Device-based passwordless authentication, using fingerprint, face scan, and more.
        :param 'ProjectAuthenticationPasswordArgs' password: The classic username and password combination used for authentication.
        :param 'ProjectAuthenticationSsoArgs' sso: Single Sign-On (SSO) authentication method that enables users to access multiple applications with a single set of credentials.
        :param 'ProjectAuthenticationTotpArgs' totp: A one-time code generated for the user using a shared secret and time.
        """
        if embedded_link is not None:
            pulumi.set(__self__, "embedded_link", embedded_link)
        if enchanted_link is not None:
            pulumi.set(__self__, "enchanted_link", enchanted_link)
        if magic_link is not None:
            pulumi.set(__self__, "magic_link", magic_link)
        if oauth is not None:
            pulumi.set(__self__, "oauth", oauth)
        if otp is not None:
            pulumi.set(__self__, "otp", otp)
        if passkeys is not None:
            pulumi.set(__self__, "passkeys", passkeys)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if sso is not None:
            pulumi.set(__self__, "sso", sso)
        if totp is not None:
            pulumi.set(__self__, "totp", totp)

    @property
    @pulumi.getter(name="embeddedLink")
    def embedded_link(self) -> Optional['outputs.ProjectAuthenticationEmbeddedLink']:
        """
        Make the authentication experience smoother for the user by generating their initial token in a way that does not require the end user to initiate the process, requiring only verification.
        """
        return pulumi.get(self, "embedded_link")

    @property
    @pulumi.getter(name="enchantedLink")
    def enchanted_link(self) -> Optional['outputs.ProjectAuthenticationEnchantedLink']:
        """
        An enhanced and more secure version of Magic Link, enabling users to start the authentication process on one device and execute the verification on another.
        """
        return pulumi.get(self, "enchanted_link")

    @property
    @pulumi.getter(name="magicLink")
    def magic_link(self) -> Optional['outputs.ProjectAuthenticationMagicLink']:
        """
        An authentication method where a user receives a unique link via email to log in.
        """
        return pulumi.get(self, "magic_link")

    @property
    @pulumi.getter
    def oauth(self) -> Optional['outputs.ProjectAuthenticationOauth']:
        """
        Authentication using Open Authorization, which allows users to authenticate with various external services.
        """
        return pulumi.get(self, "oauth")

    @property
    @pulumi.getter
    def otp(self) -> Optional['outputs.ProjectAuthenticationOtp']:
        """
        A dynamically generated set of numbers, granting the user one-time access.
        """
        return pulumi.get(self, "otp")

    @property
    @pulumi.getter
    def passkeys(self) -> Optional['outputs.ProjectAuthenticationPasskeys']:
        """
        Device-based passwordless authentication, using fingerprint, face scan, and more.
        """
        return pulumi.get(self, "passkeys")

    @property
    @pulumi.getter
    def password(self) -> Optional['outputs.ProjectAuthenticationPassword']:
        """
        The classic username and password combination used for authentication.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def sso(self) -> Optional['outputs.ProjectAuthenticationSso']:
        """
        Single Sign-On (SSO) authentication method that enables users to access multiple applications with a single set of credentials.
        """
        return pulumi.get(self, "sso")

    @property
    @pulumi.getter
    def totp(self) -> Optional['outputs.ProjectAuthenticationTotp']:
        """
        A one-time code generated for the user using a shared secret and time.
        """
        return pulumi.get(self, "totp")


@pulumi.output_type
class ProjectAuthenticationEmbeddedLink(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "expirationTime":
            suggest = "expiration_time"
        elif key == "expirationTimeUnit":
            suggest = "expiration_time_unit"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationEmbeddedLink. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationEmbeddedLink.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationEmbeddedLink.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 enabled: Optional[bool] = None,
                 expiration_time: Optional[int] = None,
                 expiration_time_unit: Optional[str] = None):
        """
        :param int expiration_time: The amount of time that the embedded link will be valid for.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if expiration_time is not None:
            pulumi.set(__self__, "expiration_time", expiration_time)
        if expiration_time_unit is not None:
            pulumi.set(__self__, "expiration_time_unit", expiration_time_unit)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[bool]:
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter(name="expirationTime")
    def expiration_time(self) -> Optional[int]:
        """
        The amount of time that the embedded link will be valid for.
        """
        return pulumi.get(self, "expiration_time")

    @property
    @pulumi.getter(name="expirationTimeUnit")
    def expiration_time_unit(self) -> Optional[str]:
        return pulumi.get(self, "expiration_time_unit")


@pulumi.output_type
class ProjectAuthenticationEnchantedLink(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "emailService":
            suggest = "email_service"
        elif key == "expirationTime":
            suggest = "expiration_time"
        elif key == "expirationTimeUnit":
            suggest = "expiration_time_unit"
        elif key == "redirectUrl":
            suggest = "redirect_url"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationEnchantedLink. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationEnchantedLink.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationEnchantedLink.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 email_service: Optional['outputs.ProjectAuthenticationEnchantedLinkEmailService'] = None,
                 enabled: Optional[bool] = None,
                 expiration_time: Optional[int] = None,
                 expiration_time_unit: Optional[str] = None,
                 redirect_url: Optional[str] = None):
        """
        :param 'ProjectAuthenticationEnchantedLinkEmailServiceArgs' email_service: Settings related to sending emails as part of the enchanted link authentication.
        :param str redirect_url: The URL to redirect users to after they log in using the enchanted link.
        """
        if email_service is not None:
            pulumi.set(__self__, "email_service", email_service)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if expiration_time is not None:
            pulumi.set(__self__, "expiration_time", expiration_time)
        if expiration_time_unit is not None:
            pulumi.set(__self__, "expiration_time_unit", expiration_time_unit)
        if redirect_url is not None:
            pulumi.set(__self__, "redirect_url", redirect_url)

    @property
    @pulumi.getter(name="emailService")
    def email_service(self) -> Optional['outputs.ProjectAuthenticationEnchantedLinkEmailService']:
        """
        Settings related to sending emails as part of the enchanted link authentication.
        """
        return pulumi.get(self, "email_service")

    @property
    @pulumi.getter
    def enabled(self) -> Optional[bool]:
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter(name="expirationTime")
    def expiration_time(self) -> Optional[int]:
        return pulumi.get(self, "expiration_time")

    @property
    @pulumi.getter(name="expirationTimeUnit")
    def expiration_time_unit(self) -> Optional[str]:
        return pulumi.get(self, "expiration_time_unit")

    @property
    @pulumi.getter(name="redirectUrl")
    def redirect_url(self) -> Optional[str]:
        """
        The URL to redirect users to after they log in using the enchanted link.
        """
        return pulumi.get(self, "redirect_url")


@pulumi.output_type
class ProjectAuthenticationEnchantedLinkEmailService(dict):
    def __init__(__self__, *,
                 connector: str,
                 templates: Optional[Sequence['outputs.ProjectAuthenticationEnchantedLinkEmailServiceTemplate']] = None):
        pulumi.set(__self__, "connector", connector)
        if templates is not None:
            pulumi.set(__self__, "templates", templates)

    @property
    @pulumi.getter
    def connector(self) -> str:
        return pulumi.get(self, "connector")

    @property
    @pulumi.getter
    def templates(self) -> Optional[Sequence['outputs.ProjectAuthenticationEnchantedLinkEmailServiceTemplate']]:
        return pulumi.get(self, "templates")


@pulumi.output_type
class ProjectAuthenticationEnchantedLinkEmailServiceTemplate(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "htmlBody":
            suggest = "html_body"
        elif key == "plainTextBody":
            suggest = "plain_text_body"
        elif key == "usePlainTextBody":
            suggest = "use_plain_text_body"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationEnchantedLinkEmailServiceTemplate. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationEnchantedLinkEmailServiceTemplate.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationEnchantedLinkEmailServiceTemplate.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 name: str,
                 subject: str,
                 active: Optional[bool] = None,
                 html_body: Optional[str] = None,
                 id: Optional[str] = None,
                 plain_text_body: Optional[str] = None,
                 use_plain_text_body: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "subject", subject)
        if active is not None:
            pulumi.set(__self__, "active", active)
        if html_body is not None:
            pulumi.set(__self__, "html_body", html_body)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if plain_text_body is not None:
            pulumi.set(__self__, "plain_text_body", plain_text_body)
        if use_plain_text_body is not None:
            pulumi.set(__self__, "use_plain_text_body", use_plain_text_body)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def subject(self) -> str:
        return pulumi.get(self, "subject")

    @property
    @pulumi.getter
    def active(self) -> Optional[bool]:
        return pulumi.get(self, "active")

    @property
    @pulumi.getter(name="htmlBody")
    def html_body(self) -> Optional[str]:
        return pulumi.get(self, "html_body")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="plainTextBody")
    def plain_text_body(self) -> Optional[str]:
        return pulumi.get(self, "plain_text_body")

    @property
    @pulumi.getter(name="usePlainTextBody")
    def use_plain_text_body(self) -> Optional[bool]:
        return pulumi.get(self, "use_plain_text_body")


@pulumi.output_type
class ProjectAuthenticationMagicLink(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "emailService":
            suggest = "email_service"
        elif key == "expirationTime":
            suggest = "expiration_time"
        elif key == "expirationTimeUnit":
            suggest = "expiration_time_unit"
        elif key == "redirectUrl":
            suggest = "redirect_url"
        elif key == "textService":
            suggest = "text_service"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationMagicLink. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationMagicLink.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationMagicLink.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 email_service: Optional['outputs.ProjectAuthenticationMagicLinkEmailService'] = None,
                 enabled: Optional[bool] = None,
                 expiration_time: Optional[int] = None,
                 expiration_time_unit: Optional[str] = None,
                 redirect_url: Optional[str] = None,
                 text_service: Optional['outputs.ProjectAuthenticationMagicLinkTextService'] = None):
        """
        :param 'ProjectAuthenticationMagicLinkEmailServiceArgs' email_service: Settings related to sending emails as part of the magic link authentication.
        :param str redirect_url: The URL to redirect users to after they log in using the magic link.
        :param 'ProjectAuthenticationMagicLinkTextServiceArgs' text_service: Settings related to sending SMS messages as part of the magic link authentication.
        """
        if email_service is not None:
            pulumi.set(__self__, "email_service", email_service)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if expiration_time is not None:
            pulumi.set(__self__, "expiration_time", expiration_time)
        if expiration_time_unit is not None:
            pulumi.set(__self__, "expiration_time_unit", expiration_time_unit)
        if redirect_url is not None:
            pulumi.set(__self__, "redirect_url", redirect_url)
        if text_service is not None:
            pulumi.set(__self__, "text_service", text_service)

    @property
    @pulumi.getter(name="emailService")
    def email_service(self) -> Optional['outputs.ProjectAuthenticationMagicLinkEmailService']:
        """
        Settings related to sending emails as part of the magic link authentication.
        """
        return pulumi.get(self, "email_service")

    @property
    @pulumi.getter
    def enabled(self) -> Optional[bool]:
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter(name="expirationTime")
    def expiration_time(self) -> Optional[int]:
        return pulumi.get(self, "expiration_time")

    @property
    @pulumi.getter(name="expirationTimeUnit")
    def expiration_time_unit(self) -> Optional[str]:
        return pulumi.get(self, "expiration_time_unit")

    @property
    @pulumi.getter(name="redirectUrl")
    def redirect_url(self) -> Optional[str]:
        """
        The URL to redirect users to after they log in using the magic link.
        """
        return pulumi.get(self, "redirect_url")

    @property
    @pulumi.getter(name="textService")
    def text_service(self) -> Optional['outputs.ProjectAuthenticationMagicLinkTextService']:
        """
        Settings related to sending SMS messages as part of the magic link authentication.
        """
        return pulumi.get(self, "text_service")


@pulumi.output_type
class ProjectAuthenticationMagicLinkEmailService(dict):
    def __init__(__self__, *,
                 connector: str,
                 templates: Optional[Sequence['outputs.ProjectAuthenticationMagicLinkEmailServiceTemplate']] = None):
        pulumi.set(__self__, "connector", connector)
        if templates is not None:
            pulumi.set(__self__, "templates", templates)

    @property
    @pulumi.getter
    def connector(self) -> str:
        return pulumi.get(self, "connector")

    @property
    @pulumi.getter
    def templates(self) -> Optional[Sequence['outputs.ProjectAuthenticationMagicLinkEmailServiceTemplate']]:
        return pulumi.get(self, "templates")


@pulumi.output_type
class ProjectAuthenticationMagicLinkEmailServiceTemplate(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "htmlBody":
            suggest = "html_body"
        elif key == "plainTextBody":
            suggest = "plain_text_body"
        elif key == "usePlainTextBody":
            suggest = "use_plain_text_body"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationMagicLinkEmailServiceTemplate. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationMagicLinkEmailServiceTemplate.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationMagicLinkEmailServiceTemplate.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 name: str,
                 subject: str,
                 active: Optional[bool] = None,
                 html_body: Optional[str] = None,
                 id: Optional[str] = None,
                 plain_text_body: Optional[str] = None,
                 use_plain_text_body: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "subject", subject)
        if active is not None:
            pulumi.set(__self__, "active", active)
        if html_body is not None:
            pulumi.set(__self__, "html_body", html_body)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if plain_text_body is not None:
            pulumi.set(__self__, "plain_text_body", plain_text_body)
        if use_plain_text_body is not None:
            pulumi.set(__self__, "use_plain_text_body", use_plain_text_body)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def subject(self) -> str:
        return pulumi.get(self, "subject")

    @property
    @pulumi.getter
    def active(self) -> Optional[bool]:
        return pulumi.get(self, "active")

    @property
    @pulumi.getter(name="htmlBody")
    def html_body(self) -> Optional[str]:
        return pulumi.get(self, "html_body")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="plainTextBody")
    def plain_text_body(self) -> Optional[str]:
        return pulumi.get(self, "plain_text_body")

    @property
    @pulumi.getter(name="usePlainTextBody")
    def use_plain_text_body(self) -> Optional[bool]:
        return pulumi.get(self, "use_plain_text_body")


@pulumi.output_type
class ProjectAuthenticationMagicLinkTextService(dict):
    def __init__(__self__, *,
                 connector: str,
                 templates: Optional[Sequence['outputs.ProjectAuthenticationMagicLinkTextServiceTemplate']] = None):
        pulumi.set(__self__, "connector", connector)
        if templates is not None:
            pulumi.set(__self__, "templates", templates)

    @property
    @pulumi.getter
    def connector(self) -> str:
        return pulumi.get(self, "connector")

    @property
    @pulumi.getter
    def templates(self) -> Optional[Sequence['outputs.ProjectAuthenticationMagicLinkTextServiceTemplate']]:
        return pulumi.get(self, "templates")


@pulumi.output_type
class ProjectAuthenticationMagicLinkTextServiceTemplate(dict):
    def __init__(__self__, *,
                 body: str,
                 name: str,
                 active: Optional[bool] = None,
                 id: Optional[str] = None):
        pulumi.set(__self__, "body", body)
        pulumi.set(__self__, "name", name)
        if active is not None:
            pulumi.set(__self__, "active", active)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def body(self) -> str:
        return pulumi.get(self, "body")

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def active(self) -> Optional[bool]:
        return pulumi.get(self, "active")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")


@pulumi.output_type
class ProjectAuthenticationOauth(dict):
    def __init__(__self__, *,
                 custom: Optional[Mapping[str, 'outputs.ProjectAuthenticationOauthCustom']] = None,
                 disabled: Optional[bool] = None,
                 system: Optional['outputs.ProjectAuthenticationOauthSystem'] = None):
        """
        :param Mapping[str, 'ProjectAuthenticationOauthCustomArgs'] custom: Custom OAuth providers configured for this project.
        :param 'ProjectAuthenticationOauthSystemArgs' system: Custom configurations for builtin OAuth providers such as Apple, Google, GitHub, Facebook, etc.
        """
        if custom is not None:
            pulumi.set(__self__, "custom", custom)
        if disabled is not None:
            pulumi.set(__self__, "disabled", disabled)
        if system is not None:
            pulumi.set(__self__, "system", system)

    @property
    @pulumi.getter
    def custom(self) -> Optional[Mapping[str, 'outputs.ProjectAuthenticationOauthCustom']]:
        """
        Custom OAuth providers configured for this project.
        """
        return pulumi.get(self, "custom")

    @property
    @pulumi.getter
    def disabled(self) -> Optional[bool]:
        return pulumi.get(self, "disabled")

    @property
    @pulumi.getter
    def system(self) -> Optional['outputs.ProjectAuthenticationOauthSystem']:
        """
        Custom configurations for builtin OAuth providers such as Apple, Google, GitHub, Facebook, etc.
        """
        return pulumi.get(self, "system")


@pulumi.output_type
class ProjectAuthenticationOauthCustom(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "authorizationEndpoint":
            suggest = "authorization_endpoint"
        elif key == "claimMapping":
            suggest = "claim_mapping"
        elif key == "clientId":
            suggest = "client_id"
        elif key == "clientSecret":
            suggest = "client_secret"
        elif key == "grantType":
            suggest = "grant_type"
        elif key == "jwksEndpoint":
            suggest = "jwks_endpoint"
        elif key == "mergeUserAccounts":
            suggest = "merge_user_accounts"
        elif key == "providerTokenManagement":
            suggest = "provider_token_management"
        elif key == "tokenEndpoint":
            suggest = "token_endpoint"
        elif key == "userInfoEndpoint":
            suggest = "user_info_endpoint"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationOauthCustom. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationOauthCustom.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationOauthCustom.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 authorization_endpoint: Optional[str] = None,
                 claim_mapping: Optional[Mapping[str, str]] = None,
                 client_id: Optional[str] = None,
                 client_secret: Optional[str] = None,
                 description: Optional[str] = None,
                 disabled: Optional[bool] = None,
                 grant_type: Optional[str] = None,
                 issuer: Optional[str] = None,
                 jwks_endpoint: Optional[str] = None,
                 logo: Optional[str] = None,
                 merge_user_accounts: Optional[bool] = None,
                 prompts: Optional[Sequence[str]] = None,
                 provider_token_management: Optional['outputs.ProjectAuthenticationOauthCustomProviderTokenManagement'] = None,
                 scopes: Optional[Sequence[str]] = None,
                 token_endpoint: Optional[str] = None,
                 user_info_endpoint: Optional[str] = None):
        """
        :param str authorization_endpoint: The URL that users are redirected to for authorization with the OAuth provider.
        :param str client_id: The client ID for the OAuth provider, used to identify the application to the provider.
        :param str client_secret: The client secret for the OAuth provider, used to authenticate the application with the provider.
        :param str description: A brief description of the OAuth provider.
        :param str grant_type: The type of grant (`authorization_code` or `implicit`) to use when requesting access tokens from the OAuth provider.
        :param str jwks_endpoint: The URL where the application can retrieve JSON Web Key Sets (JWKS) for the OAuth provider.
        :param str logo: The URL of the logo associated with the OAuth provider.
        :param bool merge_user_accounts: Whether to merge existing user accounts with new ones created through OAuth authentication.
        :param Sequence[str] prompts: Custom prompts or consent screens that users may see during OAuth authentication.
        :param 'ProjectAuthenticationOauthCustomProviderTokenManagementArgs' provider_token_management: Settings related to token management for the OAuth provider.
        :param Sequence[str] scopes: Scopes of access that the application requests from the user's account on the OAuth provider.
        :param str token_endpoint: The URL where the application requests an access token from the OAuth provider.
        :param str user_info_endpoint: The URL where the application retrieves user information from the OAuth provider.
        """
        if authorization_endpoint is not None:
            pulumi.set(__self__, "authorization_endpoint", authorization_endpoint)
        if claim_mapping is not None:
            pulumi.set(__self__, "claim_mapping", claim_mapping)
        if client_id is not None:
            pulumi.set(__self__, "client_id", client_id)
        if client_secret is not None:
            pulumi.set(__self__, "client_secret", client_secret)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if disabled is not None:
            pulumi.set(__self__, "disabled", disabled)
        if grant_type is not None:
            pulumi.set(__self__, "grant_type", grant_type)
        if issuer is not None:
            pulumi.set(__self__, "issuer", issuer)
        if jwks_endpoint is not None:
            pulumi.set(__self__, "jwks_endpoint", jwks_endpoint)
        if logo is not None:
            pulumi.set(__self__, "logo", logo)
        if merge_user_accounts is not None:
            pulumi.set(__self__, "merge_user_accounts", merge_user_accounts)
        if prompts is not None:
            pulumi.set(__self__, "prompts", prompts)
        if provider_token_management is not None:
            pulumi.set(__self__, "provider_token_management", provider_token_management)
        if scopes is not None:
            pulumi.set(__self__, "scopes", scopes)
        if token_endpoint is not None:
            pulumi.set(__self__, "token_endpoint", token_endpoint)
        if user_info_endpoint is not None:
            pulumi.set(__self__, "user_info_endpoint", user_info_endpoint)

    @property
    @pulumi.getter(name="authorizationEndpoint")
    def authorization_endpoint(self) -> Optional[str]:
        """
        The URL that users are redirected to for authorization with the OAuth provider.
        """
        return pulumi.get(self, "authorization_endpoint")

    @property
    @pulumi.getter(name="claimMapping")
    def claim_mapping(self) -> Optional[Mapping[str, str]]:
        return pulumi.get(self, "claim_mapping")

    @property
    @pulumi.getter(name="clientId")
    def client_id(self) -> Optional[str]:
        """
        The client ID for the OAuth provider, used to identify the application to the provider.
        """
        return pulumi.get(self, "client_id")

    @property
    @pulumi.getter(name="clientSecret")
    def client_secret(self) -> Optional[str]:
        """
        The client secret for the OAuth provider, used to authenticate the application with the provider.
        """
        return pulumi.get(self, "client_secret")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A brief description of the OAuth provider.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def disabled(self) -> Optional[bool]:
        return pulumi.get(self, "disabled")

    @property
    @pulumi.getter(name="grantType")
    def grant_type(self) -> Optional[str]:
        """
        The type of grant (`authorization_code` or `implicit`) to use when requesting access tokens from the OAuth provider.
        """
        return pulumi.get(self, "grant_type")

    @property
    @pulumi.getter
    def issuer(self) -> Optional[str]:
        return pulumi.get(self, "issuer")

    @property
    @pulumi.getter(name="jwksEndpoint")
    def jwks_endpoint(self) -> Optional[str]:
        """
        The URL where the application can retrieve JSON Web Key Sets (JWKS) for the OAuth provider.
        """
        return pulumi.get(self, "jwks_endpoint")

    @property
    @pulumi.getter
    def logo(self) -> Optional[str]:
        """
        The URL of the logo associated with the OAuth provider.
        """
        return pulumi.get(self, "logo")

    @property
    @pulumi.getter(name="mergeUserAccounts")
    def merge_user_accounts(self) -> Optional[bool]:
        """
        Whether to merge existing user accounts with new ones created through OAuth authentication.
        """
        return pulumi.get(self, "merge_user_accounts")

    @property
    @pulumi.getter
    def prompts(self) -> Optional[Sequence[str]]:
        """
        Custom prompts or consent screens that users may see during OAuth authentication.
        """
        return pulumi.get(self, "prompts")

    @property
    @pulumi.getter(name="providerTokenManagement")
    def provider_token_management(self) -> Optional['outputs.ProjectAuthenticationOauthCustomProviderTokenManagement']:
        """
        Settings related to token management for the OAuth provider.
        """
        return pulumi.get(self, "provider_token_management")

    @property
    @pulumi.getter
    def scopes(self) -> Optional[Sequence[str]]:
        """
        Scopes of access that the application requests from the user's account on the OAuth provider.
        """
        return pulumi.get(self, "scopes")

    @property
    @pulumi.getter(name="tokenEndpoint")
    def token_endpoint(self) -> Optional[str]:
        """
        The URL where the application requests an access token from the OAuth provider.
        """
        return pulumi.get(self, "token_endpoint")

    @property
    @pulumi.getter(name="userInfoEndpoint")
    def user_info_endpoint(self) -> Optional[str]:
        """
        The URL where the application retrieves user information from the OAuth provider.
        """
        return pulumi.get(self, "user_info_endpoint")


@pulumi.output_type
class ProjectAuthenticationOauthCustomProviderTokenManagement(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "callbackDomain":
            suggest = "callback_domain"
        elif key == "redirectUrl":
            suggest = "redirect_url"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationOauthCustomProviderTokenManagement. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationOauthCustomProviderTokenManagement.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationOauthCustomProviderTokenManagement.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 callback_domain: Optional[str] = None,
                 redirect_url: Optional[str] = None):
        if callback_domain is not None:
            pulumi.set(__self__, "callback_domain", callback_domain)
        if redirect_url is not None:
            pulumi.set(__self__, "redirect_url", redirect_url)

    @property
    @pulumi.getter(name="callbackDomain")
    def callback_domain(self) -> Optional[str]:
        return pulumi.get(self, "callback_domain")

    @property
    @pulumi.getter(name="redirectUrl")
    def redirect_url(self) -> Optional[str]:
        return pulumi.get(self, "redirect_url")


@pulumi.output_type
class ProjectAuthenticationOauthSystem(dict):
    def __init__(__self__, *,
                 apple: Optional['outputs.ProjectAuthenticationOauthSystemApple'] = None,
                 discord: Optional['outputs.ProjectAuthenticationOauthSystemDiscord'] = None,
                 facebook: Optional['outputs.ProjectAuthenticationOauthSystemFacebook'] = None,
                 github: Optional['outputs.ProjectAuthenticationOauthSystemGithub'] = None,
                 gitlab: Optional['outputs.ProjectAuthenticationOauthSystemGitlab'] = None,
                 google: Optional['outputs.ProjectAuthenticationOauthSystemGoogle'] = None,
                 linkedin: Optional['outputs.ProjectAuthenticationOauthSystemLinkedin'] = None,
                 microsoft: Optional['outputs.ProjectAuthenticationOauthSystemMicrosoft'] = None,
                 slack: Optional['outputs.ProjectAuthenticationOauthSystemSlack'] = None):
        """
        :param 'ProjectAuthenticationOauthSystemAppleArgs' apple: Apple's OAuth provider, allowing users to authenticate with their Apple Account.
        :param 'ProjectAuthenticationOauthSystemDiscordArgs' discord: Discord's OAuth provider, allowing users to authenticate with their Discord account.
        :param 'ProjectAuthenticationOauthSystemFacebookArgs' facebook: Facebook's OAuth provider, allowing users to authenticate with their Facebook account.
        :param 'ProjectAuthenticationOauthSystemGithubArgs' github: GitHub's OAuth provider, allowing users to authenticate with their GitHub account.
        :param 'ProjectAuthenticationOauthSystemGitlabArgs' gitlab: GitLab's OAuth provider, allowing users to authenticate with their GitLab account.
        :param 'ProjectAuthenticationOauthSystemGoogleArgs' google: Google's OAuth provider, allowing users to authenticate with their Google account.
        :param 'ProjectAuthenticationOauthSystemLinkedinArgs' linkedin: LinkedIn's OAuth provider, allowing users to authenticate with their LinkedIn account.
        :param 'ProjectAuthenticationOauthSystemMicrosoftArgs' microsoft: Microsoft's OAuth provider, allowing users to authenticate with their Microsoft account.
        :param 'ProjectAuthenticationOauthSystemSlackArgs' slack: Slack's OAuth provider, allowing users to authenticate with their Slack account.
        """
        if apple is not None:
            pulumi.set(__self__, "apple", apple)
        if discord is not None:
            pulumi.set(__self__, "discord", discord)
        if facebook is not None:
            pulumi.set(__self__, "facebook", facebook)
        if github is not None:
            pulumi.set(__self__, "github", github)
        if gitlab is not None:
            pulumi.set(__self__, "gitlab", gitlab)
        if google is not None:
            pulumi.set(__self__, "google", google)
        if linkedin is not None:
            pulumi.set(__self__, "linkedin", linkedin)
        if microsoft is not None:
            pulumi.set(__self__, "microsoft", microsoft)
        if slack is not None:
            pulumi.set(__self__, "slack", slack)

    @property
    @pulumi.getter
    def apple(self) -> Optional['outputs.ProjectAuthenticationOauthSystemApple']:
        """
        Apple's OAuth provider, allowing users to authenticate with their Apple Account.
        """
        return pulumi.get(self, "apple")

    @property
    @pulumi.getter
    def discord(self) -> Optional['outputs.ProjectAuthenticationOauthSystemDiscord']:
        """
        Discord's OAuth provider, allowing users to authenticate with their Discord account.
        """
        return pulumi.get(self, "discord")

    @property
    @pulumi.getter
    def facebook(self) -> Optional['outputs.ProjectAuthenticationOauthSystemFacebook']:
        """
        Facebook's OAuth provider, allowing users to authenticate with their Facebook account.
        """
        return pulumi.get(self, "facebook")

    @property
    @pulumi.getter
    def github(self) -> Optional['outputs.ProjectAuthenticationOauthSystemGithub']:
        """
        GitHub's OAuth provider, allowing users to authenticate with their GitHub account.
        """
        return pulumi.get(self, "github")

    @property
    @pulumi.getter
    def gitlab(self) -> Optional['outputs.ProjectAuthenticationOauthSystemGitlab']:
        """
        GitLab's OAuth provider, allowing users to authenticate with their GitLab account.
        """
        return pulumi.get(self, "gitlab")

    @property
    @pulumi.getter
    def google(self) -> Optional['outputs.ProjectAuthenticationOauthSystemGoogle']:
        """
        Google's OAuth provider, allowing users to authenticate with their Google account.
        """
        return pulumi.get(self, "google")

    @property
    @pulumi.getter
    def linkedin(self) -> Optional['outputs.ProjectAuthenticationOauthSystemLinkedin']:
        """
        LinkedIn's OAuth provider, allowing users to authenticate with their LinkedIn account.
        """
        return pulumi.get(self, "linkedin")

    @property
    @pulumi.getter
    def microsoft(self) -> Optional['outputs.ProjectAuthenticationOauthSystemMicrosoft']:
        """
        Microsoft's OAuth provider, allowing users to authenticate with their Microsoft account.
        """
        return pulumi.get(self, "microsoft")

    @property
    @pulumi.getter
    def slack(self) -> Optional['outputs.ProjectAuthenticationOauthSystemSlack']:
        """
        Slack's OAuth provider, allowing users to authenticate with their Slack account.
        """
        return pulumi.get(self, "slack")


@pulumi.output_type
class ProjectAuthenticationOauthSystemApple(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "authorizationEndpoint":
            suggest = "authorization_endpoint"
        elif key == "claimMapping":
            suggest = "claim_mapping"
        elif key == "clientId":
            suggest = "client_id"
        elif key == "clientSecret":
            suggest = "client_secret"
        elif key == "grantType":
            suggest = "grant_type"
        elif key == "jwksEndpoint":
            suggest = "jwks_endpoint"
        elif key == "mergeUserAccounts":
            suggest = "merge_user_accounts"
        elif key == "providerTokenManagement":
            suggest = "provider_token_management"
        elif key == "tokenEndpoint":
            suggest = "token_endpoint"
        elif key == "userInfoEndpoint":
            suggest = "user_info_endpoint"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationOauthSystemApple. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationOauthSystemApple.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationOauthSystemApple.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 authorization_endpoint: Optional[str] = None,
                 claim_mapping: Optional[Mapping[str, str]] = None,
                 client_id: Optional[str] = None,
                 client_secret: Optional[str] = None,
                 description: Optional[str] = None,
                 disabled: Optional[bool] = None,
                 grant_type: Optional[str] = None,
                 issuer: Optional[str] = None,
                 jwks_endpoint: Optional[str] = None,
                 logo: Optional[str] = None,
                 merge_user_accounts: Optional[bool] = None,
                 prompts: Optional[Sequence[str]] = None,
                 provider_token_management: Optional['outputs.ProjectAuthenticationOauthSystemAppleProviderTokenManagement'] = None,
                 scopes: Optional[Sequence[str]] = None,
                 token_endpoint: Optional[str] = None,
                 user_info_endpoint: Optional[str] = None):
        """
        :param str authorization_endpoint: The URL that users are redirected to for authorization with the OAuth provider.
        :param str client_id: The client ID for the OAuth provider, used to identify the application to the provider.
        :param str client_secret: The client secret for the OAuth provider, used to authenticate the application with the provider.
        :param str description: A brief description of the OAuth provider.
        :param str grant_type: The type of grant (`authorization_code` or `implicit`) to use when requesting access tokens from the OAuth provider.
        :param str jwks_endpoint: The URL where the application can retrieve JSON Web Key Sets (JWKS) for the OAuth provider.
        :param str logo: The URL of the logo associated with the OAuth provider.
        :param bool merge_user_accounts: Whether to merge existing user accounts with new ones created through OAuth authentication.
        :param Sequence[str] prompts: Custom prompts or consent screens that users may see during OAuth authentication.
        :param 'ProjectAuthenticationOauthSystemAppleProviderTokenManagementArgs' provider_token_management: Settings related to token management for the OAuth provider.
        :param Sequence[str] scopes: Scopes of access that the application requests from the user's account on the OAuth provider.
        :param str token_endpoint: The URL where the application requests an access token from the OAuth provider.
        :param str user_info_endpoint: The URL where the application retrieves user information from the OAuth provider.
        """
        if authorization_endpoint is not None:
            pulumi.set(__self__, "authorization_endpoint", authorization_endpoint)
        if claim_mapping is not None:
            pulumi.set(__self__, "claim_mapping", claim_mapping)
        if client_id is not None:
            pulumi.set(__self__, "client_id", client_id)
        if client_secret is not None:
            pulumi.set(__self__, "client_secret", client_secret)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if disabled is not None:
            pulumi.set(__self__, "disabled", disabled)
        if grant_type is not None:
            pulumi.set(__self__, "grant_type", grant_type)
        if issuer is not None:
            pulumi.set(__self__, "issuer", issuer)
        if jwks_endpoint is not None:
            pulumi.set(__self__, "jwks_endpoint", jwks_endpoint)
        if logo is not None:
            pulumi.set(__self__, "logo", logo)
        if merge_user_accounts is not None:
            pulumi.set(__self__, "merge_user_accounts", merge_user_accounts)
        if prompts is not None:
            pulumi.set(__self__, "prompts", prompts)
        if provider_token_management is not None:
            pulumi.set(__self__, "provider_token_management", provider_token_management)
        if scopes is not None:
            pulumi.set(__self__, "scopes", scopes)
        if token_endpoint is not None:
            pulumi.set(__self__, "token_endpoint", token_endpoint)
        if user_info_endpoint is not None:
            pulumi.set(__self__, "user_info_endpoint", user_info_endpoint)

    @property
    @pulumi.getter(name="authorizationEndpoint")
    def authorization_endpoint(self) -> Optional[str]:
        """
        The URL that users are redirected to for authorization with the OAuth provider.
        """
        return pulumi.get(self, "authorization_endpoint")

    @property
    @pulumi.getter(name="claimMapping")
    def claim_mapping(self) -> Optional[Mapping[str, str]]:
        return pulumi.get(self, "claim_mapping")

    @property
    @pulumi.getter(name="clientId")
    def client_id(self) -> Optional[str]:
        """
        The client ID for the OAuth provider, used to identify the application to the provider.
        """
        return pulumi.get(self, "client_id")

    @property
    @pulumi.getter(name="clientSecret")
    def client_secret(self) -> Optional[str]:
        """
        The client secret for the OAuth provider, used to authenticate the application with the provider.
        """
        return pulumi.get(self, "client_secret")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A brief description of the OAuth provider.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def disabled(self) -> Optional[bool]:
        return pulumi.get(self, "disabled")

    @property
    @pulumi.getter(name="grantType")
    def grant_type(self) -> Optional[str]:
        """
        The type of grant (`authorization_code` or `implicit`) to use when requesting access tokens from the OAuth provider.
        """
        return pulumi.get(self, "grant_type")

    @property
    @pulumi.getter
    def issuer(self) -> Optional[str]:
        return pulumi.get(self, "issuer")

    @property
    @pulumi.getter(name="jwksEndpoint")
    def jwks_endpoint(self) -> Optional[str]:
        """
        The URL where the application can retrieve JSON Web Key Sets (JWKS) for the OAuth provider.
        """
        return pulumi.get(self, "jwks_endpoint")

    @property
    @pulumi.getter
    def logo(self) -> Optional[str]:
        """
        The URL of the logo associated with the OAuth provider.
        """
        return pulumi.get(self, "logo")

    @property
    @pulumi.getter(name="mergeUserAccounts")
    def merge_user_accounts(self) -> Optional[bool]:
        """
        Whether to merge existing user accounts with new ones created through OAuth authentication.
        """
        return pulumi.get(self, "merge_user_accounts")

    @property
    @pulumi.getter
    def prompts(self) -> Optional[Sequence[str]]:
        """
        Custom prompts or consent screens that users may see during OAuth authentication.
        """
        return pulumi.get(self, "prompts")

    @property
    @pulumi.getter(name="providerTokenManagement")
    def provider_token_management(self) -> Optional['outputs.ProjectAuthenticationOauthSystemAppleProviderTokenManagement']:
        """
        Settings related to token management for the OAuth provider.
        """
        return pulumi.get(self, "provider_token_management")

    @property
    @pulumi.getter
    def scopes(self) -> Optional[Sequence[str]]:
        """
        Scopes of access that the application requests from the user's account on the OAuth provider.
        """
        return pulumi.get(self, "scopes")

    @property
    @pulumi.getter(name="tokenEndpoint")
    def token_endpoint(self) -> Optional[str]:
        """
        The URL where the application requests an access token from the OAuth provider.
        """
        return pulumi.get(self, "token_endpoint")

    @property
    @pulumi.getter(name="userInfoEndpoint")
    def user_info_endpoint(self) -> Optional[str]:
        """
        The URL where the application retrieves user information from the OAuth provider.
        """
        return pulumi.get(self, "user_info_endpoint")


@pulumi.output_type
class ProjectAuthenticationOauthSystemAppleProviderTokenManagement(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "callbackDomain":
            suggest = "callback_domain"
        elif key == "redirectUrl":
            suggest = "redirect_url"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationOauthSystemAppleProviderTokenManagement. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationOauthSystemAppleProviderTokenManagement.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationOauthSystemAppleProviderTokenManagement.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 callback_domain: Optional[str] = None,
                 redirect_url: Optional[str] = None):
        if callback_domain is not None:
            pulumi.set(__self__, "callback_domain", callback_domain)
        if redirect_url is not None:
            pulumi.set(__self__, "redirect_url", redirect_url)

    @property
    @pulumi.getter(name="callbackDomain")
    def callback_domain(self) -> Optional[str]:
        return pulumi.get(self, "callback_domain")

    @property
    @pulumi.getter(name="redirectUrl")
    def redirect_url(self) -> Optional[str]:
        return pulumi.get(self, "redirect_url")


@pulumi.output_type
class ProjectAuthenticationOauthSystemDiscord(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "authorizationEndpoint":
            suggest = "authorization_endpoint"
        elif key == "claimMapping":
            suggest = "claim_mapping"
        elif key == "clientId":
            suggest = "client_id"
        elif key == "clientSecret":
            suggest = "client_secret"
        elif key == "grantType":
            suggest = "grant_type"
        elif key == "jwksEndpoint":
            suggest = "jwks_endpoint"
        elif key == "mergeUserAccounts":
            suggest = "merge_user_accounts"
        elif key == "providerTokenManagement":
            suggest = "provider_token_management"
        elif key == "tokenEndpoint":
            suggest = "token_endpoint"
        elif key == "userInfoEndpoint":
            suggest = "user_info_endpoint"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationOauthSystemDiscord. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationOauthSystemDiscord.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationOauthSystemDiscord.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 authorization_endpoint: Optional[str] = None,
                 claim_mapping: Optional[Mapping[str, str]] = None,
                 client_id: Optional[str] = None,
                 client_secret: Optional[str] = None,
                 description: Optional[str] = None,
                 disabled: Optional[bool] = None,
                 grant_type: Optional[str] = None,
                 issuer: Optional[str] = None,
                 jwks_endpoint: Optional[str] = None,
                 logo: Optional[str] = None,
                 merge_user_accounts: Optional[bool] = None,
                 prompts: Optional[Sequence[str]] = None,
                 provider_token_management: Optional['outputs.ProjectAuthenticationOauthSystemDiscordProviderTokenManagement'] = None,
                 scopes: Optional[Sequence[str]] = None,
                 token_endpoint: Optional[str] = None,
                 user_info_endpoint: Optional[str] = None):
        """
        :param str authorization_endpoint: The URL that users are redirected to for authorization with the OAuth provider.
        :param str client_id: The client ID for the OAuth provider, used to identify the application to the provider.
        :param str client_secret: The client secret for the OAuth provider, used to authenticate the application with the provider.
        :param str description: A brief description of the OAuth provider.
        :param str grant_type: The type of grant (`authorization_code` or `implicit`) to use when requesting access tokens from the OAuth provider.
        :param str jwks_endpoint: The URL where the application can retrieve JSON Web Key Sets (JWKS) for the OAuth provider.
        :param str logo: The URL of the logo associated with the OAuth provider.
        :param bool merge_user_accounts: Whether to merge existing user accounts with new ones created through OAuth authentication.
        :param Sequence[str] prompts: Custom prompts or consent screens that users may see during OAuth authentication.
        :param 'ProjectAuthenticationOauthSystemDiscordProviderTokenManagementArgs' provider_token_management: Settings related to token management for the OAuth provider.
        :param Sequence[str] scopes: Scopes of access that the application requests from the user's account on the OAuth provider.
        :param str token_endpoint: The URL where the application requests an access token from the OAuth provider.
        :param str user_info_endpoint: The URL where the application retrieves user information from the OAuth provider.
        """
        if authorization_endpoint is not None:
            pulumi.set(__self__, "authorization_endpoint", authorization_endpoint)
        if claim_mapping is not None:
            pulumi.set(__self__, "claim_mapping", claim_mapping)
        if client_id is not None:
            pulumi.set(__self__, "client_id", client_id)
        if client_secret is not None:
            pulumi.set(__self__, "client_secret", client_secret)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if disabled is not None:
            pulumi.set(__self__, "disabled", disabled)
        if grant_type is not None:
            pulumi.set(__self__, "grant_type", grant_type)
        if issuer is not None:
            pulumi.set(__self__, "issuer", issuer)
        if jwks_endpoint is not None:
            pulumi.set(__self__, "jwks_endpoint", jwks_endpoint)
        if logo is not None:
            pulumi.set(__self__, "logo", logo)
        if merge_user_accounts is not None:
            pulumi.set(__self__, "merge_user_accounts", merge_user_accounts)
        if prompts is not None:
            pulumi.set(__self__, "prompts", prompts)
        if provider_token_management is not None:
            pulumi.set(__self__, "provider_token_management", provider_token_management)
        if scopes is not None:
            pulumi.set(__self__, "scopes", scopes)
        if token_endpoint is not None:
            pulumi.set(__self__, "token_endpoint", token_endpoint)
        if user_info_endpoint is not None:
            pulumi.set(__self__, "user_info_endpoint", user_info_endpoint)

    @property
    @pulumi.getter(name="authorizationEndpoint")
    def authorization_endpoint(self) -> Optional[str]:
        """
        The URL that users are redirected to for authorization with the OAuth provider.
        """
        return pulumi.get(self, "authorization_endpoint")

    @property
    @pulumi.getter(name="claimMapping")
    def claim_mapping(self) -> Optional[Mapping[str, str]]:
        return pulumi.get(self, "claim_mapping")

    @property
    @pulumi.getter(name="clientId")
    def client_id(self) -> Optional[str]:
        """
        The client ID for the OAuth provider, used to identify the application to the provider.
        """
        return pulumi.get(self, "client_id")

    @property
    @pulumi.getter(name="clientSecret")
    def client_secret(self) -> Optional[str]:
        """
        The client secret for the OAuth provider, used to authenticate the application with the provider.
        """
        return pulumi.get(self, "client_secret")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A brief description of the OAuth provider.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def disabled(self) -> Optional[bool]:
        return pulumi.get(self, "disabled")

    @property
    @pulumi.getter(name="grantType")
    def grant_type(self) -> Optional[str]:
        """
        The type of grant (`authorization_code` or `implicit`) to use when requesting access tokens from the OAuth provider.
        """
        return pulumi.get(self, "grant_type")

    @property
    @pulumi.getter
    def issuer(self) -> Optional[str]:
        return pulumi.get(self, "issuer")

    @property
    @pulumi.getter(name="jwksEndpoint")
    def jwks_endpoint(self) -> Optional[str]:
        """
        The URL where the application can retrieve JSON Web Key Sets (JWKS) for the OAuth provider.
        """
        return pulumi.get(self, "jwks_endpoint")

    @property
    @pulumi.getter
    def logo(self) -> Optional[str]:
        """
        The URL of the logo associated with the OAuth provider.
        """
        return pulumi.get(self, "logo")

    @property
    @pulumi.getter(name="mergeUserAccounts")
    def merge_user_accounts(self) -> Optional[bool]:
        """
        Whether to merge existing user accounts with new ones created through OAuth authentication.
        """
        return pulumi.get(self, "merge_user_accounts")

    @property
    @pulumi.getter
    def prompts(self) -> Optional[Sequence[str]]:
        """
        Custom prompts or consent screens that users may see during OAuth authentication.
        """
        return pulumi.get(self, "prompts")

    @property
    @pulumi.getter(name="providerTokenManagement")
    def provider_token_management(self) -> Optional['outputs.ProjectAuthenticationOauthSystemDiscordProviderTokenManagement']:
        """
        Settings related to token management for the OAuth provider.
        """
        return pulumi.get(self, "provider_token_management")

    @property
    @pulumi.getter
    def scopes(self) -> Optional[Sequence[str]]:
        """
        Scopes of access that the application requests from the user's account on the OAuth provider.
        """
        return pulumi.get(self, "scopes")

    @property
    @pulumi.getter(name="tokenEndpoint")
    def token_endpoint(self) -> Optional[str]:
        """
        The URL where the application requests an access token from the OAuth provider.
        """
        return pulumi.get(self, "token_endpoint")

    @property
    @pulumi.getter(name="userInfoEndpoint")
    def user_info_endpoint(self) -> Optional[str]:
        """
        The URL where the application retrieves user information from the OAuth provider.
        """
        return pulumi.get(self, "user_info_endpoint")


@pulumi.output_type
class ProjectAuthenticationOauthSystemDiscordProviderTokenManagement(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "callbackDomain":
            suggest = "callback_domain"
        elif key == "redirectUrl":
            suggest = "redirect_url"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationOauthSystemDiscordProviderTokenManagement. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationOauthSystemDiscordProviderTokenManagement.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationOauthSystemDiscordProviderTokenManagement.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 callback_domain: Optional[str] = None,
                 redirect_url: Optional[str] = None):
        if callback_domain is not None:
            pulumi.set(__self__, "callback_domain", callback_domain)
        if redirect_url is not None:
            pulumi.set(__self__, "redirect_url", redirect_url)

    @property
    @pulumi.getter(name="callbackDomain")
    def callback_domain(self) -> Optional[str]:
        return pulumi.get(self, "callback_domain")

    @property
    @pulumi.getter(name="redirectUrl")
    def redirect_url(self) -> Optional[str]:
        return pulumi.get(self, "redirect_url")


@pulumi.output_type
class ProjectAuthenticationOauthSystemFacebook(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "authorizationEndpoint":
            suggest = "authorization_endpoint"
        elif key == "claimMapping":
            suggest = "claim_mapping"
        elif key == "clientId":
            suggest = "client_id"
        elif key == "clientSecret":
            suggest = "client_secret"
        elif key == "grantType":
            suggest = "grant_type"
        elif key == "jwksEndpoint":
            suggest = "jwks_endpoint"
        elif key == "mergeUserAccounts":
            suggest = "merge_user_accounts"
        elif key == "providerTokenManagement":
            suggest = "provider_token_management"
        elif key == "tokenEndpoint":
            suggest = "token_endpoint"
        elif key == "userInfoEndpoint":
            suggest = "user_info_endpoint"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationOauthSystemFacebook. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationOauthSystemFacebook.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationOauthSystemFacebook.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 authorization_endpoint: Optional[str] = None,
                 claim_mapping: Optional[Mapping[str, str]] = None,
                 client_id: Optional[str] = None,
                 client_secret: Optional[str] = None,
                 description: Optional[str] = None,
                 disabled: Optional[bool] = None,
                 grant_type: Optional[str] = None,
                 issuer: Optional[str] = None,
                 jwks_endpoint: Optional[str] = None,
                 logo: Optional[str] = None,
                 merge_user_accounts: Optional[bool] = None,
                 prompts: Optional[Sequence[str]] = None,
                 provider_token_management: Optional['outputs.ProjectAuthenticationOauthSystemFacebookProviderTokenManagement'] = None,
                 scopes: Optional[Sequence[str]] = None,
                 token_endpoint: Optional[str] = None,
                 user_info_endpoint: Optional[str] = None):
        """
        :param str authorization_endpoint: The URL that users are redirected to for authorization with the OAuth provider.
        :param str client_id: The client ID for the OAuth provider, used to identify the application to the provider.
        :param str client_secret: The client secret for the OAuth provider, used to authenticate the application with the provider.
        :param str description: A brief description of the OAuth provider.
        :param str grant_type: The type of grant (`authorization_code` or `implicit`) to use when requesting access tokens from the OAuth provider.
        :param str jwks_endpoint: The URL where the application can retrieve JSON Web Key Sets (JWKS) for the OAuth provider.
        :param str logo: The URL of the logo associated with the OAuth provider.
        :param bool merge_user_accounts: Whether to merge existing user accounts with new ones created through OAuth authentication.
        :param Sequence[str] prompts: Custom prompts or consent screens that users may see during OAuth authentication.
        :param 'ProjectAuthenticationOauthSystemFacebookProviderTokenManagementArgs' provider_token_management: Settings related to token management for the OAuth provider.
        :param Sequence[str] scopes: Scopes of access that the application requests from the user's account on the OAuth provider.
        :param str token_endpoint: The URL where the application requests an access token from the OAuth provider.
        :param str user_info_endpoint: The URL where the application retrieves user information from the OAuth provider.
        """
        if authorization_endpoint is not None:
            pulumi.set(__self__, "authorization_endpoint", authorization_endpoint)
        if claim_mapping is not None:
            pulumi.set(__self__, "claim_mapping", claim_mapping)
        if client_id is not None:
            pulumi.set(__self__, "client_id", client_id)
        if client_secret is not None:
            pulumi.set(__self__, "client_secret", client_secret)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if disabled is not None:
            pulumi.set(__self__, "disabled", disabled)
        if grant_type is not None:
            pulumi.set(__self__, "grant_type", grant_type)
        if issuer is not None:
            pulumi.set(__self__, "issuer", issuer)
        if jwks_endpoint is not None:
            pulumi.set(__self__, "jwks_endpoint", jwks_endpoint)
        if logo is not None:
            pulumi.set(__self__, "logo", logo)
        if merge_user_accounts is not None:
            pulumi.set(__self__, "merge_user_accounts", merge_user_accounts)
        if prompts is not None:
            pulumi.set(__self__, "prompts", prompts)
        if provider_token_management is not None:
            pulumi.set(__self__, "provider_token_management", provider_token_management)
        if scopes is not None:
            pulumi.set(__self__, "scopes", scopes)
        if token_endpoint is not None:
            pulumi.set(__self__, "token_endpoint", token_endpoint)
        if user_info_endpoint is not None:
            pulumi.set(__self__, "user_info_endpoint", user_info_endpoint)

    @property
    @pulumi.getter(name="authorizationEndpoint")
    def authorization_endpoint(self) -> Optional[str]:
        """
        The URL that users are redirected to for authorization with the OAuth provider.
        """
        return pulumi.get(self, "authorization_endpoint")

    @property
    @pulumi.getter(name="claimMapping")
    def claim_mapping(self) -> Optional[Mapping[str, str]]:
        return pulumi.get(self, "claim_mapping")

    @property
    @pulumi.getter(name="clientId")
    def client_id(self) -> Optional[str]:
        """
        The client ID for the OAuth provider, used to identify the application to the provider.
        """
        return pulumi.get(self, "client_id")

    @property
    @pulumi.getter(name="clientSecret")
    def client_secret(self) -> Optional[str]:
        """
        The client secret for the OAuth provider, used to authenticate the application with the provider.
        """
        return pulumi.get(self, "client_secret")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A brief description of the OAuth provider.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def disabled(self) -> Optional[bool]:
        return pulumi.get(self, "disabled")

    @property
    @pulumi.getter(name="grantType")
    def grant_type(self) -> Optional[str]:
        """
        The type of grant (`authorization_code` or `implicit`) to use when requesting access tokens from the OAuth provider.
        """
        return pulumi.get(self, "grant_type")

    @property
    @pulumi.getter
    def issuer(self) -> Optional[str]:
        return pulumi.get(self, "issuer")

    @property
    @pulumi.getter(name="jwksEndpoint")
    def jwks_endpoint(self) -> Optional[str]:
        """
        The URL where the application can retrieve JSON Web Key Sets (JWKS) for the OAuth provider.
        """
        return pulumi.get(self, "jwks_endpoint")

    @property
    @pulumi.getter
    def logo(self) -> Optional[str]:
        """
        The URL of the logo associated with the OAuth provider.
        """
        return pulumi.get(self, "logo")

    @property
    @pulumi.getter(name="mergeUserAccounts")
    def merge_user_accounts(self) -> Optional[bool]:
        """
        Whether to merge existing user accounts with new ones created through OAuth authentication.
        """
        return pulumi.get(self, "merge_user_accounts")

    @property
    @pulumi.getter
    def prompts(self) -> Optional[Sequence[str]]:
        """
        Custom prompts or consent screens that users may see during OAuth authentication.
        """
        return pulumi.get(self, "prompts")

    @property
    @pulumi.getter(name="providerTokenManagement")
    def provider_token_management(self) -> Optional['outputs.ProjectAuthenticationOauthSystemFacebookProviderTokenManagement']:
        """
        Settings related to token management for the OAuth provider.
        """
        return pulumi.get(self, "provider_token_management")

    @property
    @pulumi.getter
    def scopes(self) -> Optional[Sequence[str]]:
        """
        Scopes of access that the application requests from the user's account on the OAuth provider.
        """
        return pulumi.get(self, "scopes")

    @property
    @pulumi.getter(name="tokenEndpoint")
    def token_endpoint(self) -> Optional[str]:
        """
        The URL where the application requests an access token from the OAuth provider.
        """
        return pulumi.get(self, "token_endpoint")

    @property
    @pulumi.getter(name="userInfoEndpoint")
    def user_info_endpoint(self) -> Optional[str]:
        """
        The URL where the application retrieves user information from the OAuth provider.
        """
        return pulumi.get(self, "user_info_endpoint")


@pulumi.output_type
class ProjectAuthenticationOauthSystemFacebookProviderTokenManagement(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "callbackDomain":
            suggest = "callback_domain"
        elif key == "redirectUrl":
            suggest = "redirect_url"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationOauthSystemFacebookProviderTokenManagement. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationOauthSystemFacebookProviderTokenManagement.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationOauthSystemFacebookProviderTokenManagement.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 callback_domain: Optional[str] = None,
                 redirect_url: Optional[str] = None):
        if callback_domain is not None:
            pulumi.set(__self__, "callback_domain", callback_domain)
        if redirect_url is not None:
            pulumi.set(__self__, "redirect_url", redirect_url)

    @property
    @pulumi.getter(name="callbackDomain")
    def callback_domain(self) -> Optional[str]:
        return pulumi.get(self, "callback_domain")

    @property
    @pulumi.getter(name="redirectUrl")
    def redirect_url(self) -> Optional[str]:
        return pulumi.get(self, "redirect_url")


@pulumi.output_type
class ProjectAuthenticationOauthSystemGithub(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "authorizationEndpoint":
            suggest = "authorization_endpoint"
        elif key == "claimMapping":
            suggest = "claim_mapping"
        elif key == "clientId":
            suggest = "client_id"
        elif key == "clientSecret":
            suggest = "client_secret"
        elif key == "grantType":
            suggest = "grant_type"
        elif key == "jwksEndpoint":
            suggest = "jwks_endpoint"
        elif key == "mergeUserAccounts":
            suggest = "merge_user_accounts"
        elif key == "providerTokenManagement":
            suggest = "provider_token_management"
        elif key == "tokenEndpoint":
            suggest = "token_endpoint"
        elif key == "userInfoEndpoint":
            suggest = "user_info_endpoint"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationOauthSystemGithub. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationOauthSystemGithub.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationOauthSystemGithub.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 authorization_endpoint: Optional[str] = None,
                 claim_mapping: Optional[Mapping[str, str]] = None,
                 client_id: Optional[str] = None,
                 client_secret: Optional[str] = None,
                 description: Optional[str] = None,
                 disabled: Optional[bool] = None,
                 grant_type: Optional[str] = None,
                 issuer: Optional[str] = None,
                 jwks_endpoint: Optional[str] = None,
                 logo: Optional[str] = None,
                 merge_user_accounts: Optional[bool] = None,
                 prompts: Optional[Sequence[str]] = None,
                 provider_token_management: Optional['outputs.ProjectAuthenticationOauthSystemGithubProviderTokenManagement'] = None,
                 scopes: Optional[Sequence[str]] = None,
                 token_endpoint: Optional[str] = None,
                 user_info_endpoint: Optional[str] = None):
        """
        :param str authorization_endpoint: The URL that users are redirected to for authorization with the OAuth provider.
        :param str client_id: The client ID for the OAuth provider, used to identify the application to the provider.
        :param str client_secret: The client secret for the OAuth provider, used to authenticate the application with the provider.
        :param str description: A brief description of the OAuth provider.
        :param str grant_type: The type of grant (`authorization_code` or `implicit`) to use when requesting access tokens from the OAuth provider.
        :param str jwks_endpoint: The URL where the application can retrieve JSON Web Key Sets (JWKS) for the OAuth provider.
        :param str logo: The URL of the logo associated with the OAuth provider.
        :param bool merge_user_accounts: Whether to merge existing user accounts with new ones created through OAuth authentication.
        :param Sequence[str] prompts: Custom prompts or consent screens that users may see during OAuth authentication.
        :param 'ProjectAuthenticationOauthSystemGithubProviderTokenManagementArgs' provider_token_management: Settings related to token management for the OAuth provider.
        :param Sequence[str] scopes: Scopes of access that the application requests from the user's account on the OAuth provider.
        :param str token_endpoint: The URL where the application requests an access token from the OAuth provider.
        :param str user_info_endpoint: The URL where the application retrieves user information from the OAuth provider.
        """
        if authorization_endpoint is not None:
            pulumi.set(__self__, "authorization_endpoint", authorization_endpoint)
        if claim_mapping is not None:
            pulumi.set(__self__, "claim_mapping", claim_mapping)
        if client_id is not None:
            pulumi.set(__self__, "client_id", client_id)
        if client_secret is not None:
            pulumi.set(__self__, "client_secret", client_secret)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if disabled is not None:
            pulumi.set(__self__, "disabled", disabled)
        if grant_type is not None:
            pulumi.set(__self__, "grant_type", grant_type)
        if issuer is not None:
            pulumi.set(__self__, "issuer", issuer)
        if jwks_endpoint is not None:
            pulumi.set(__self__, "jwks_endpoint", jwks_endpoint)
        if logo is not None:
            pulumi.set(__self__, "logo", logo)
        if merge_user_accounts is not None:
            pulumi.set(__self__, "merge_user_accounts", merge_user_accounts)
        if prompts is not None:
            pulumi.set(__self__, "prompts", prompts)
        if provider_token_management is not None:
            pulumi.set(__self__, "provider_token_management", provider_token_management)
        if scopes is not None:
            pulumi.set(__self__, "scopes", scopes)
        if token_endpoint is not None:
            pulumi.set(__self__, "token_endpoint", token_endpoint)
        if user_info_endpoint is not None:
            pulumi.set(__self__, "user_info_endpoint", user_info_endpoint)

    @property
    @pulumi.getter(name="authorizationEndpoint")
    def authorization_endpoint(self) -> Optional[str]:
        """
        The URL that users are redirected to for authorization with the OAuth provider.
        """
        return pulumi.get(self, "authorization_endpoint")

    @property
    @pulumi.getter(name="claimMapping")
    def claim_mapping(self) -> Optional[Mapping[str, str]]:
        return pulumi.get(self, "claim_mapping")

    @property
    @pulumi.getter(name="clientId")
    def client_id(self) -> Optional[str]:
        """
        The client ID for the OAuth provider, used to identify the application to the provider.
        """
        return pulumi.get(self, "client_id")

    @property
    @pulumi.getter(name="clientSecret")
    def client_secret(self) -> Optional[str]:
        """
        The client secret for the OAuth provider, used to authenticate the application with the provider.
        """
        return pulumi.get(self, "client_secret")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A brief description of the OAuth provider.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def disabled(self) -> Optional[bool]:
        return pulumi.get(self, "disabled")

    @property
    @pulumi.getter(name="grantType")
    def grant_type(self) -> Optional[str]:
        """
        The type of grant (`authorization_code` or `implicit`) to use when requesting access tokens from the OAuth provider.
        """
        return pulumi.get(self, "grant_type")

    @property
    @pulumi.getter
    def issuer(self) -> Optional[str]:
        return pulumi.get(self, "issuer")

    @property
    @pulumi.getter(name="jwksEndpoint")
    def jwks_endpoint(self) -> Optional[str]:
        """
        The URL where the application can retrieve JSON Web Key Sets (JWKS) for the OAuth provider.
        """
        return pulumi.get(self, "jwks_endpoint")

    @property
    @pulumi.getter
    def logo(self) -> Optional[str]:
        """
        The URL of the logo associated with the OAuth provider.
        """
        return pulumi.get(self, "logo")

    @property
    @pulumi.getter(name="mergeUserAccounts")
    def merge_user_accounts(self) -> Optional[bool]:
        """
        Whether to merge existing user accounts with new ones created through OAuth authentication.
        """
        return pulumi.get(self, "merge_user_accounts")

    @property
    @pulumi.getter
    def prompts(self) -> Optional[Sequence[str]]:
        """
        Custom prompts or consent screens that users may see during OAuth authentication.
        """
        return pulumi.get(self, "prompts")

    @property
    @pulumi.getter(name="providerTokenManagement")
    def provider_token_management(self) -> Optional['outputs.ProjectAuthenticationOauthSystemGithubProviderTokenManagement']:
        """
        Settings related to token management for the OAuth provider.
        """
        return pulumi.get(self, "provider_token_management")

    @property
    @pulumi.getter
    def scopes(self) -> Optional[Sequence[str]]:
        """
        Scopes of access that the application requests from the user's account on the OAuth provider.
        """
        return pulumi.get(self, "scopes")

    @property
    @pulumi.getter(name="tokenEndpoint")
    def token_endpoint(self) -> Optional[str]:
        """
        The URL where the application requests an access token from the OAuth provider.
        """
        return pulumi.get(self, "token_endpoint")

    @property
    @pulumi.getter(name="userInfoEndpoint")
    def user_info_endpoint(self) -> Optional[str]:
        """
        The URL where the application retrieves user information from the OAuth provider.
        """
        return pulumi.get(self, "user_info_endpoint")


@pulumi.output_type
class ProjectAuthenticationOauthSystemGithubProviderTokenManagement(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "callbackDomain":
            suggest = "callback_domain"
        elif key == "redirectUrl":
            suggest = "redirect_url"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationOauthSystemGithubProviderTokenManagement. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationOauthSystemGithubProviderTokenManagement.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationOauthSystemGithubProviderTokenManagement.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 callback_domain: Optional[str] = None,
                 redirect_url: Optional[str] = None):
        if callback_domain is not None:
            pulumi.set(__self__, "callback_domain", callback_domain)
        if redirect_url is not None:
            pulumi.set(__self__, "redirect_url", redirect_url)

    @property
    @pulumi.getter(name="callbackDomain")
    def callback_domain(self) -> Optional[str]:
        return pulumi.get(self, "callback_domain")

    @property
    @pulumi.getter(name="redirectUrl")
    def redirect_url(self) -> Optional[str]:
        return pulumi.get(self, "redirect_url")


@pulumi.output_type
class ProjectAuthenticationOauthSystemGitlab(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "authorizationEndpoint":
            suggest = "authorization_endpoint"
        elif key == "claimMapping":
            suggest = "claim_mapping"
        elif key == "clientId":
            suggest = "client_id"
        elif key == "clientSecret":
            suggest = "client_secret"
        elif key == "grantType":
            suggest = "grant_type"
        elif key == "jwksEndpoint":
            suggest = "jwks_endpoint"
        elif key == "mergeUserAccounts":
            suggest = "merge_user_accounts"
        elif key == "providerTokenManagement":
            suggest = "provider_token_management"
        elif key == "tokenEndpoint":
            suggest = "token_endpoint"
        elif key == "userInfoEndpoint":
            suggest = "user_info_endpoint"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationOauthSystemGitlab. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationOauthSystemGitlab.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationOauthSystemGitlab.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 authorization_endpoint: Optional[str] = None,
                 claim_mapping: Optional[Mapping[str, str]] = None,
                 client_id: Optional[str] = None,
                 client_secret: Optional[str] = None,
                 description: Optional[str] = None,
                 disabled: Optional[bool] = None,
                 grant_type: Optional[str] = None,
                 issuer: Optional[str] = None,
                 jwks_endpoint: Optional[str] = None,
                 logo: Optional[str] = None,
                 merge_user_accounts: Optional[bool] = None,
                 prompts: Optional[Sequence[str]] = None,
                 provider_token_management: Optional['outputs.ProjectAuthenticationOauthSystemGitlabProviderTokenManagement'] = None,
                 scopes: Optional[Sequence[str]] = None,
                 token_endpoint: Optional[str] = None,
                 user_info_endpoint: Optional[str] = None):
        """
        :param str authorization_endpoint: The URL that users are redirected to for authorization with the OAuth provider.
        :param str client_id: The client ID for the OAuth provider, used to identify the application to the provider.
        :param str client_secret: The client secret for the OAuth provider, used to authenticate the application with the provider.
        :param str description: A brief description of the OAuth provider.
        :param str grant_type: The type of grant (`authorization_code` or `implicit`) to use when requesting access tokens from the OAuth provider.
        :param str jwks_endpoint: The URL where the application can retrieve JSON Web Key Sets (JWKS) for the OAuth provider.
        :param str logo: The URL of the logo associated with the OAuth provider.
        :param bool merge_user_accounts: Whether to merge existing user accounts with new ones created through OAuth authentication.
        :param Sequence[str] prompts: Custom prompts or consent screens that users may see during OAuth authentication.
        :param 'ProjectAuthenticationOauthSystemGitlabProviderTokenManagementArgs' provider_token_management: Settings related to token management for the OAuth provider.
        :param Sequence[str] scopes: Scopes of access that the application requests from the user's account on the OAuth provider.
        :param str token_endpoint: The URL where the application requests an access token from the OAuth provider.
        :param str user_info_endpoint: The URL where the application retrieves user information from the OAuth provider.
        """
        if authorization_endpoint is not None:
            pulumi.set(__self__, "authorization_endpoint", authorization_endpoint)
        if claim_mapping is not None:
            pulumi.set(__self__, "claim_mapping", claim_mapping)
        if client_id is not None:
            pulumi.set(__self__, "client_id", client_id)
        if client_secret is not None:
            pulumi.set(__self__, "client_secret", client_secret)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if disabled is not None:
            pulumi.set(__self__, "disabled", disabled)
        if grant_type is not None:
            pulumi.set(__self__, "grant_type", grant_type)
        if issuer is not None:
            pulumi.set(__self__, "issuer", issuer)
        if jwks_endpoint is not None:
            pulumi.set(__self__, "jwks_endpoint", jwks_endpoint)
        if logo is not None:
            pulumi.set(__self__, "logo", logo)
        if merge_user_accounts is not None:
            pulumi.set(__self__, "merge_user_accounts", merge_user_accounts)
        if prompts is not None:
            pulumi.set(__self__, "prompts", prompts)
        if provider_token_management is not None:
            pulumi.set(__self__, "provider_token_management", provider_token_management)
        if scopes is not None:
            pulumi.set(__self__, "scopes", scopes)
        if token_endpoint is not None:
            pulumi.set(__self__, "token_endpoint", token_endpoint)
        if user_info_endpoint is not None:
            pulumi.set(__self__, "user_info_endpoint", user_info_endpoint)

    @property
    @pulumi.getter(name="authorizationEndpoint")
    def authorization_endpoint(self) -> Optional[str]:
        """
        The URL that users are redirected to for authorization with the OAuth provider.
        """
        return pulumi.get(self, "authorization_endpoint")

    @property
    @pulumi.getter(name="claimMapping")
    def claim_mapping(self) -> Optional[Mapping[str, str]]:
        return pulumi.get(self, "claim_mapping")

    @property
    @pulumi.getter(name="clientId")
    def client_id(self) -> Optional[str]:
        """
        The client ID for the OAuth provider, used to identify the application to the provider.
        """
        return pulumi.get(self, "client_id")

    @property
    @pulumi.getter(name="clientSecret")
    def client_secret(self) -> Optional[str]:
        """
        The client secret for the OAuth provider, used to authenticate the application with the provider.
        """
        return pulumi.get(self, "client_secret")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A brief description of the OAuth provider.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def disabled(self) -> Optional[bool]:
        return pulumi.get(self, "disabled")

    @property
    @pulumi.getter(name="grantType")
    def grant_type(self) -> Optional[str]:
        """
        The type of grant (`authorization_code` or `implicit`) to use when requesting access tokens from the OAuth provider.
        """
        return pulumi.get(self, "grant_type")

    @property
    @pulumi.getter
    def issuer(self) -> Optional[str]:
        return pulumi.get(self, "issuer")

    @property
    @pulumi.getter(name="jwksEndpoint")
    def jwks_endpoint(self) -> Optional[str]:
        """
        The URL where the application can retrieve JSON Web Key Sets (JWKS) for the OAuth provider.
        """
        return pulumi.get(self, "jwks_endpoint")

    @property
    @pulumi.getter
    def logo(self) -> Optional[str]:
        """
        The URL of the logo associated with the OAuth provider.
        """
        return pulumi.get(self, "logo")

    @property
    @pulumi.getter(name="mergeUserAccounts")
    def merge_user_accounts(self) -> Optional[bool]:
        """
        Whether to merge existing user accounts with new ones created through OAuth authentication.
        """
        return pulumi.get(self, "merge_user_accounts")

    @property
    @pulumi.getter
    def prompts(self) -> Optional[Sequence[str]]:
        """
        Custom prompts or consent screens that users may see during OAuth authentication.
        """
        return pulumi.get(self, "prompts")

    @property
    @pulumi.getter(name="providerTokenManagement")
    def provider_token_management(self) -> Optional['outputs.ProjectAuthenticationOauthSystemGitlabProviderTokenManagement']:
        """
        Settings related to token management for the OAuth provider.
        """
        return pulumi.get(self, "provider_token_management")

    @property
    @pulumi.getter
    def scopes(self) -> Optional[Sequence[str]]:
        """
        Scopes of access that the application requests from the user's account on the OAuth provider.
        """
        return pulumi.get(self, "scopes")

    @property
    @pulumi.getter(name="tokenEndpoint")
    def token_endpoint(self) -> Optional[str]:
        """
        The URL where the application requests an access token from the OAuth provider.
        """
        return pulumi.get(self, "token_endpoint")

    @property
    @pulumi.getter(name="userInfoEndpoint")
    def user_info_endpoint(self) -> Optional[str]:
        """
        The URL where the application retrieves user information from the OAuth provider.
        """
        return pulumi.get(self, "user_info_endpoint")


@pulumi.output_type
class ProjectAuthenticationOauthSystemGitlabProviderTokenManagement(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "callbackDomain":
            suggest = "callback_domain"
        elif key == "redirectUrl":
            suggest = "redirect_url"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationOauthSystemGitlabProviderTokenManagement. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationOauthSystemGitlabProviderTokenManagement.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationOauthSystemGitlabProviderTokenManagement.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 callback_domain: Optional[str] = None,
                 redirect_url: Optional[str] = None):
        if callback_domain is not None:
            pulumi.set(__self__, "callback_domain", callback_domain)
        if redirect_url is not None:
            pulumi.set(__self__, "redirect_url", redirect_url)

    @property
    @pulumi.getter(name="callbackDomain")
    def callback_domain(self) -> Optional[str]:
        return pulumi.get(self, "callback_domain")

    @property
    @pulumi.getter(name="redirectUrl")
    def redirect_url(self) -> Optional[str]:
        return pulumi.get(self, "redirect_url")


@pulumi.output_type
class ProjectAuthenticationOauthSystemGoogle(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "authorizationEndpoint":
            suggest = "authorization_endpoint"
        elif key == "claimMapping":
            suggest = "claim_mapping"
        elif key == "clientId":
            suggest = "client_id"
        elif key == "clientSecret":
            suggest = "client_secret"
        elif key == "grantType":
            suggest = "grant_type"
        elif key == "jwksEndpoint":
            suggest = "jwks_endpoint"
        elif key == "mergeUserAccounts":
            suggest = "merge_user_accounts"
        elif key == "providerTokenManagement":
            suggest = "provider_token_management"
        elif key == "tokenEndpoint":
            suggest = "token_endpoint"
        elif key == "userInfoEndpoint":
            suggest = "user_info_endpoint"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationOauthSystemGoogle. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationOauthSystemGoogle.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationOauthSystemGoogle.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 authorization_endpoint: Optional[str] = None,
                 claim_mapping: Optional[Mapping[str, str]] = None,
                 client_id: Optional[str] = None,
                 client_secret: Optional[str] = None,
                 description: Optional[str] = None,
                 disabled: Optional[bool] = None,
                 grant_type: Optional[str] = None,
                 issuer: Optional[str] = None,
                 jwks_endpoint: Optional[str] = None,
                 logo: Optional[str] = None,
                 merge_user_accounts: Optional[bool] = None,
                 prompts: Optional[Sequence[str]] = None,
                 provider_token_management: Optional['outputs.ProjectAuthenticationOauthSystemGoogleProviderTokenManagement'] = None,
                 scopes: Optional[Sequence[str]] = None,
                 token_endpoint: Optional[str] = None,
                 user_info_endpoint: Optional[str] = None):
        """
        :param str authorization_endpoint: The URL that users are redirected to for authorization with the OAuth provider.
        :param str client_id: The client ID for the OAuth provider, used to identify the application to the provider.
        :param str client_secret: The client secret for the OAuth provider, used to authenticate the application with the provider.
        :param str description: A brief description of the OAuth provider.
        :param str grant_type: The type of grant (`authorization_code` or `implicit`) to use when requesting access tokens from the OAuth provider.
        :param str jwks_endpoint: The URL where the application can retrieve JSON Web Key Sets (JWKS) for the OAuth provider.
        :param str logo: The URL of the logo associated with the OAuth provider.
        :param bool merge_user_accounts: Whether to merge existing user accounts with new ones created through OAuth authentication.
        :param Sequence[str] prompts: Custom prompts or consent screens that users may see during OAuth authentication.
        :param 'ProjectAuthenticationOauthSystemGoogleProviderTokenManagementArgs' provider_token_management: Settings related to token management for the OAuth provider.
        :param Sequence[str] scopes: Scopes of access that the application requests from the user's account on the OAuth provider.
        :param str token_endpoint: The URL where the application requests an access token from the OAuth provider.
        :param str user_info_endpoint: The URL where the application retrieves user information from the OAuth provider.
        """
        if authorization_endpoint is not None:
            pulumi.set(__self__, "authorization_endpoint", authorization_endpoint)
        if claim_mapping is not None:
            pulumi.set(__self__, "claim_mapping", claim_mapping)
        if client_id is not None:
            pulumi.set(__self__, "client_id", client_id)
        if client_secret is not None:
            pulumi.set(__self__, "client_secret", client_secret)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if disabled is not None:
            pulumi.set(__self__, "disabled", disabled)
        if grant_type is not None:
            pulumi.set(__self__, "grant_type", grant_type)
        if issuer is not None:
            pulumi.set(__self__, "issuer", issuer)
        if jwks_endpoint is not None:
            pulumi.set(__self__, "jwks_endpoint", jwks_endpoint)
        if logo is not None:
            pulumi.set(__self__, "logo", logo)
        if merge_user_accounts is not None:
            pulumi.set(__self__, "merge_user_accounts", merge_user_accounts)
        if prompts is not None:
            pulumi.set(__self__, "prompts", prompts)
        if provider_token_management is not None:
            pulumi.set(__self__, "provider_token_management", provider_token_management)
        if scopes is not None:
            pulumi.set(__self__, "scopes", scopes)
        if token_endpoint is not None:
            pulumi.set(__self__, "token_endpoint", token_endpoint)
        if user_info_endpoint is not None:
            pulumi.set(__self__, "user_info_endpoint", user_info_endpoint)

    @property
    @pulumi.getter(name="authorizationEndpoint")
    def authorization_endpoint(self) -> Optional[str]:
        """
        The URL that users are redirected to for authorization with the OAuth provider.
        """
        return pulumi.get(self, "authorization_endpoint")

    @property
    @pulumi.getter(name="claimMapping")
    def claim_mapping(self) -> Optional[Mapping[str, str]]:
        return pulumi.get(self, "claim_mapping")

    @property
    @pulumi.getter(name="clientId")
    def client_id(self) -> Optional[str]:
        """
        The client ID for the OAuth provider, used to identify the application to the provider.
        """
        return pulumi.get(self, "client_id")

    @property
    @pulumi.getter(name="clientSecret")
    def client_secret(self) -> Optional[str]:
        """
        The client secret for the OAuth provider, used to authenticate the application with the provider.
        """
        return pulumi.get(self, "client_secret")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A brief description of the OAuth provider.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def disabled(self) -> Optional[bool]:
        return pulumi.get(self, "disabled")

    @property
    @pulumi.getter(name="grantType")
    def grant_type(self) -> Optional[str]:
        """
        The type of grant (`authorization_code` or `implicit`) to use when requesting access tokens from the OAuth provider.
        """
        return pulumi.get(self, "grant_type")

    @property
    @pulumi.getter
    def issuer(self) -> Optional[str]:
        return pulumi.get(self, "issuer")

    @property
    @pulumi.getter(name="jwksEndpoint")
    def jwks_endpoint(self) -> Optional[str]:
        """
        The URL where the application can retrieve JSON Web Key Sets (JWKS) for the OAuth provider.
        """
        return pulumi.get(self, "jwks_endpoint")

    @property
    @pulumi.getter
    def logo(self) -> Optional[str]:
        """
        The URL of the logo associated with the OAuth provider.
        """
        return pulumi.get(self, "logo")

    @property
    @pulumi.getter(name="mergeUserAccounts")
    def merge_user_accounts(self) -> Optional[bool]:
        """
        Whether to merge existing user accounts with new ones created through OAuth authentication.
        """
        return pulumi.get(self, "merge_user_accounts")

    @property
    @pulumi.getter
    def prompts(self) -> Optional[Sequence[str]]:
        """
        Custom prompts or consent screens that users may see during OAuth authentication.
        """
        return pulumi.get(self, "prompts")

    @property
    @pulumi.getter(name="providerTokenManagement")
    def provider_token_management(self) -> Optional['outputs.ProjectAuthenticationOauthSystemGoogleProviderTokenManagement']:
        """
        Settings related to token management for the OAuth provider.
        """
        return pulumi.get(self, "provider_token_management")

    @property
    @pulumi.getter
    def scopes(self) -> Optional[Sequence[str]]:
        """
        Scopes of access that the application requests from the user's account on the OAuth provider.
        """
        return pulumi.get(self, "scopes")

    @property
    @pulumi.getter(name="tokenEndpoint")
    def token_endpoint(self) -> Optional[str]:
        """
        The URL where the application requests an access token from the OAuth provider.
        """
        return pulumi.get(self, "token_endpoint")

    @property
    @pulumi.getter(name="userInfoEndpoint")
    def user_info_endpoint(self) -> Optional[str]:
        """
        The URL where the application retrieves user information from the OAuth provider.
        """
        return pulumi.get(self, "user_info_endpoint")


@pulumi.output_type
class ProjectAuthenticationOauthSystemGoogleProviderTokenManagement(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "callbackDomain":
            suggest = "callback_domain"
        elif key == "redirectUrl":
            suggest = "redirect_url"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationOauthSystemGoogleProviderTokenManagement. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationOauthSystemGoogleProviderTokenManagement.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationOauthSystemGoogleProviderTokenManagement.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 callback_domain: Optional[str] = None,
                 redirect_url: Optional[str] = None):
        if callback_domain is not None:
            pulumi.set(__self__, "callback_domain", callback_domain)
        if redirect_url is not None:
            pulumi.set(__self__, "redirect_url", redirect_url)

    @property
    @pulumi.getter(name="callbackDomain")
    def callback_domain(self) -> Optional[str]:
        return pulumi.get(self, "callback_domain")

    @property
    @pulumi.getter(name="redirectUrl")
    def redirect_url(self) -> Optional[str]:
        return pulumi.get(self, "redirect_url")


@pulumi.output_type
class ProjectAuthenticationOauthSystemLinkedin(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "authorizationEndpoint":
            suggest = "authorization_endpoint"
        elif key == "claimMapping":
            suggest = "claim_mapping"
        elif key == "clientId":
            suggest = "client_id"
        elif key == "clientSecret":
            suggest = "client_secret"
        elif key == "grantType":
            suggest = "grant_type"
        elif key == "jwksEndpoint":
            suggest = "jwks_endpoint"
        elif key == "mergeUserAccounts":
            suggest = "merge_user_accounts"
        elif key == "providerTokenManagement":
            suggest = "provider_token_management"
        elif key == "tokenEndpoint":
            suggest = "token_endpoint"
        elif key == "userInfoEndpoint":
            suggest = "user_info_endpoint"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationOauthSystemLinkedin. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationOauthSystemLinkedin.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationOauthSystemLinkedin.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 authorization_endpoint: Optional[str] = None,
                 claim_mapping: Optional[Mapping[str, str]] = None,
                 client_id: Optional[str] = None,
                 client_secret: Optional[str] = None,
                 description: Optional[str] = None,
                 disabled: Optional[bool] = None,
                 grant_type: Optional[str] = None,
                 issuer: Optional[str] = None,
                 jwks_endpoint: Optional[str] = None,
                 logo: Optional[str] = None,
                 merge_user_accounts: Optional[bool] = None,
                 prompts: Optional[Sequence[str]] = None,
                 provider_token_management: Optional['outputs.ProjectAuthenticationOauthSystemLinkedinProviderTokenManagement'] = None,
                 scopes: Optional[Sequence[str]] = None,
                 token_endpoint: Optional[str] = None,
                 user_info_endpoint: Optional[str] = None):
        """
        :param str authorization_endpoint: The URL that users are redirected to for authorization with the OAuth provider.
        :param str client_id: The client ID for the OAuth provider, used to identify the application to the provider.
        :param str client_secret: The client secret for the OAuth provider, used to authenticate the application with the provider.
        :param str description: A brief description of the OAuth provider.
        :param str grant_type: The type of grant (`authorization_code` or `implicit`) to use when requesting access tokens from the OAuth provider.
        :param str jwks_endpoint: The URL where the application can retrieve JSON Web Key Sets (JWKS) for the OAuth provider.
        :param str logo: The URL of the logo associated with the OAuth provider.
        :param bool merge_user_accounts: Whether to merge existing user accounts with new ones created through OAuth authentication.
        :param Sequence[str] prompts: Custom prompts or consent screens that users may see during OAuth authentication.
        :param 'ProjectAuthenticationOauthSystemLinkedinProviderTokenManagementArgs' provider_token_management: Settings related to token management for the OAuth provider.
        :param Sequence[str] scopes: Scopes of access that the application requests from the user's account on the OAuth provider.
        :param str token_endpoint: The URL where the application requests an access token from the OAuth provider.
        :param str user_info_endpoint: The URL where the application retrieves user information from the OAuth provider.
        """
        if authorization_endpoint is not None:
            pulumi.set(__self__, "authorization_endpoint", authorization_endpoint)
        if claim_mapping is not None:
            pulumi.set(__self__, "claim_mapping", claim_mapping)
        if client_id is not None:
            pulumi.set(__self__, "client_id", client_id)
        if client_secret is not None:
            pulumi.set(__self__, "client_secret", client_secret)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if disabled is not None:
            pulumi.set(__self__, "disabled", disabled)
        if grant_type is not None:
            pulumi.set(__self__, "grant_type", grant_type)
        if issuer is not None:
            pulumi.set(__self__, "issuer", issuer)
        if jwks_endpoint is not None:
            pulumi.set(__self__, "jwks_endpoint", jwks_endpoint)
        if logo is not None:
            pulumi.set(__self__, "logo", logo)
        if merge_user_accounts is not None:
            pulumi.set(__self__, "merge_user_accounts", merge_user_accounts)
        if prompts is not None:
            pulumi.set(__self__, "prompts", prompts)
        if provider_token_management is not None:
            pulumi.set(__self__, "provider_token_management", provider_token_management)
        if scopes is not None:
            pulumi.set(__self__, "scopes", scopes)
        if token_endpoint is not None:
            pulumi.set(__self__, "token_endpoint", token_endpoint)
        if user_info_endpoint is not None:
            pulumi.set(__self__, "user_info_endpoint", user_info_endpoint)

    @property
    @pulumi.getter(name="authorizationEndpoint")
    def authorization_endpoint(self) -> Optional[str]:
        """
        The URL that users are redirected to for authorization with the OAuth provider.
        """
        return pulumi.get(self, "authorization_endpoint")

    @property
    @pulumi.getter(name="claimMapping")
    def claim_mapping(self) -> Optional[Mapping[str, str]]:
        return pulumi.get(self, "claim_mapping")

    @property
    @pulumi.getter(name="clientId")
    def client_id(self) -> Optional[str]:
        """
        The client ID for the OAuth provider, used to identify the application to the provider.
        """
        return pulumi.get(self, "client_id")

    @property
    @pulumi.getter(name="clientSecret")
    def client_secret(self) -> Optional[str]:
        """
        The client secret for the OAuth provider, used to authenticate the application with the provider.
        """
        return pulumi.get(self, "client_secret")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A brief description of the OAuth provider.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def disabled(self) -> Optional[bool]:
        return pulumi.get(self, "disabled")

    @property
    @pulumi.getter(name="grantType")
    def grant_type(self) -> Optional[str]:
        """
        The type of grant (`authorization_code` or `implicit`) to use when requesting access tokens from the OAuth provider.
        """
        return pulumi.get(self, "grant_type")

    @property
    @pulumi.getter
    def issuer(self) -> Optional[str]:
        return pulumi.get(self, "issuer")

    @property
    @pulumi.getter(name="jwksEndpoint")
    def jwks_endpoint(self) -> Optional[str]:
        """
        The URL where the application can retrieve JSON Web Key Sets (JWKS) for the OAuth provider.
        """
        return pulumi.get(self, "jwks_endpoint")

    @property
    @pulumi.getter
    def logo(self) -> Optional[str]:
        """
        The URL of the logo associated with the OAuth provider.
        """
        return pulumi.get(self, "logo")

    @property
    @pulumi.getter(name="mergeUserAccounts")
    def merge_user_accounts(self) -> Optional[bool]:
        """
        Whether to merge existing user accounts with new ones created through OAuth authentication.
        """
        return pulumi.get(self, "merge_user_accounts")

    @property
    @pulumi.getter
    def prompts(self) -> Optional[Sequence[str]]:
        """
        Custom prompts or consent screens that users may see during OAuth authentication.
        """
        return pulumi.get(self, "prompts")

    @property
    @pulumi.getter(name="providerTokenManagement")
    def provider_token_management(self) -> Optional['outputs.ProjectAuthenticationOauthSystemLinkedinProviderTokenManagement']:
        """
        Settings related to token management for the OAuth provider.
        """
        return pulumi.get(self, "provider_token_management")

    @property
    @pulumi.getter
    def scopes(self) -> Optional[Sequence[str]]:
        """
        Scopes of access that the application requests from the user's account on the OAuth provider.
        """
        return pulumi.get(self, "scopes")

    @property
    @pulumi.getter(name="tokenEndpoint")
    def token_endpoint(self) -> Optional[str]:
        """
        The URL where the application requests an access token from the OAuth provider.
        """
        return pulumi.get(self, "token_endpoint")

    @property
    @pulumi.getter(name="userInfoEndpoint")
    def user_info_endpoint(self) -> Optional[str]:
        """
        The URL where the application retrieves user information from the OAuth provider.
        """
        return pulumi.get(self, "user_info_endpoint")


@pulumi.output_type
class ProjectAuthenticationOauthSystemLinkedinProviderTokenManagement(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "callbackDomain":
            suggest = "callback_domain"
        elif key == "redirectUrl":
            suggest = "redirect_url"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationOauthSystemLinkedinProviderTokenManagement. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationOauthSystemLinkedinProviderTokenManagement.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationOauthSystemLinkedinProviderTokenManagement.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 callback_domain: Optional[str] = None,
                 redirect_url: Optional[str] = None):
        if callback_domain is not None:
            pulumi.set(__self__, "callback_domain", callback_domain)
        if redirect_url is not None:
            pulumi.set(__self__, "redirect_url", redirect_url)

    @property
    @pulumi.getter(name="callbackDomain")
    def callback_domain(self) -> Optional[str]:
        return pulumi.get(self, "callback_domain")

    @property
    @pulumi.getter(name="redirectUrl")
    def redirect_url(self) -> Optional[str]:
        return pulumi.get(self, "redirect_url")


@pulumi.output_type
class ProjectAuthenticationOauthSystemMicrosoft(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "authorizationEndpoint":
            suggest = "authorization_endpoint"
        elif key == "claimMapping":
            suggest = "claim_mapping"
        elif key == "clientId":
            suggest = "client_id"
        elif key == "clientSecret":
            suggest = "client_secret"
        elif key == "grantType":
            suggest = "grant_type"
        elif key == "jwksEndpoint":
            suggest = "jwks_endpoint"
        elif key == "mergeUserAccounts":
            suggest = "merge_user_accounts"
        elif key == "providerTokenManagement":
            suggest = "provider_token_management"
        elif key == "tokenEndpoint":
            suggest = "token_endpoint"
        elif key == "userInfoEndpoint":
            suggest = "user_info_endpoint"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationOauthSystemMicrosoft. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationOauthSystemMicrosoft.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationOauthSystemMicrosoft.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 authorization_endpoint: Optional[str] = None,
                 claim_mapping: Optional[Mapping[str, str]] = None,
                 client_id: Optional[str] = None,
                 client_secret: Optional[str] = None,
                 description: Optional[str] = None,
                 disabled: Optional[bool] = None,
                 grant_type: Optional[str] = None,
                 issuer: Optional[str] = None,
                 jwks_endpoint: Optional[str] = None,
                 logo: Optional[str] = None,
                 merge_user_accounts: Optional[bool] = None,
                 prompts: Optional[Sequence[str]] = None,
                 provider_token_management: Optional['outputs.ProjectAuthenticationOauthSystemMicrosoftProviderTokenManagement'] = None,
                 scopes: Optional[Sequence[str]] = None,
                 token_endpoint: Optional[str] = None,
                 user_info_endpoint: Optional[str] = None):
        """
        :param str authorization_endpoint: The URL that users are redirected to for authorization with the OAuth provider.
        :param str client_id: The client ID for the OAuth provider, used to identify the application to the provider.
        :param str client_secret: The client secret for the OAuth provider, used to authenticate the application with the provider.
        :param str description: A brief description of the OAuth provider.
        :param str grant_type: The type of grant (`authorization_code` or `implicit`) to use when requesting access tokens from the OAuth provider.
        :param str jwks_endpoint: The URL where the application can retrieve JSON Web Key Sets (JWKS) for the OAuth provider.
        :param str logo: The URL of the logo associated with the OAuth provider.
        :param bool merge_user_accounts: Whether to merge existing user accounts with new ones created through OAuth authentication.
        :param Sequence[str] prompts: Custom prompts or consent screens that users may see during OAuth authentication.
        :param 'ProjectAuthenticationOauthSystemMicrosoftProviderTokenManagementArgs' provider_token_management: Settings related to token management for the OAuth provider.
        :param Sequence[str] scopes: Scopes of access that the application requests from the user's account on the OAuth provider.
        :param str token_endpoint: The URL where the application requests an access token from the OAuth provider.
        :param str user_info_endpoint: The URL where the application retrieves user information from the OAuth provider.
        """
        if authorization_endpoint is not None:
            pulumi.set(__self__, "authorization_endpoint", authorization_endpoint)
        if claim_mapping is not None:
            pulumi.set(__self__, "claim_mapping", claim_mapping)
        if client_id is not None:
            pulumi.set(__self__, "client_id", client_id)
        if client_secret is not None:
            pulumi.set(__self__, "client_secret", client_secret)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if disabled is not None:
            pulumi.set(__self__, "disabled", disabled)
        if grant_type is not None:
            pulumi.set(__self__, "grant_type", grant_type)
        if issuer is not None:
            pulumi.set(__self__, "issuer", issuer)
        if jwks_endpoint is not None:
            pulumi.set(__self__, "jwks_endpoint", jwks_endpoint)
        if logo is not None:
            pulumi.set(__self__, "logo", logo)
        if merge_user_accounts is not None:
            pulumi.set(__self__, "merge_user_accounts", merge_user_accounts)
        if prompts is not None:
            pulumi.set(__self__, "prompts", prompts)
        if provider_token_management is not None:
            pulumi.set(__self__, "provider_token_management", provider_token_management)
        if scopes is not None:
            pulumi.set(__self__, "scopes", scopes)
        if token_endpoint is not None:
            pulumi.set(__self__, "token_endpoint", token_endpoint)
        if user_info_endpoint is not None:
            pulumi.set(__self__, "user_info_endpoint", user_info_endpoint)

    @property
    @pulumi.getter(name="authorizationEndpoint")
    def authorization_endpoint(self) -> Optional[str]:
        """
        The URL that users are redirected to for authorization with the OAuth provider.
        """
        return pulumi.get(self, "authorization_endpoint")

    @property
    @pulumi.getter(name="claimMapping")
    def claim_mapping(self) -> Optional[Mapping[str, str]]:
        return pulumi.get(self, "claim_mapping")

    @property
    @pulumi.getter(name="clientId")
    def client_id(self) -> Optional[str]:
        """
        The client ID for the OAuth provider, used to identify the application to the provider.
        """
        return pulumi.get(self, "client_id")

    @property
    @pulumi.getter(name="clientSecret")
    def client_secret(self) -> Optional[str]:
        """
        The client secret for the OAuth provider, used to authenticate the application with the provider.
        """
        return pulumi.get(self, "client_secret")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A brief description of the OAuth provider.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def disabled(self) -> Optional[bool]:
        return pulumi.get(self, "disabled")

    @property
    @pulumi.getter(name="grantType")
    def grant_type(self) -> Optional[str]:
        """
        The type of grant (`authorization_code` or `implicit`) to use when requesting access tokens from the OAuth provider.
        """
        return pulumi.get(self, "grant_type")

    @property
    @pulumi.getter
    def issuer(self) -> Optional[str]:
        return pulumi.get(self, "issuer")

    @property
    @pulumi.getter(name="jwksEndpoint")
    def jwks_endpoint(self) -> Optional[str]:
        """
        The URL where the application can retrieve JSON Web Key Sets (JWKS) for the OAuth provider.
        """
        return pulumi.get(self, "jwks_endpoint")

    @property
    @pulumi.getter
    def logo(self) -> Optional[str]:
        """
        The URL of the logo associated with the OAuth provider.
        """
        return pulumi.get(self, "logo")

    @property
    @pulumi.getter(name="mergeUserAccounts")
    def merge_user_accounts(self) -> Optional[bool]:
        """
        Whether to merge existing user accounts with new ones created through OAuth authentication.
        """
        return pulumi.get(self, "merge_user_accounts")

    @property
    @pulumi.getter
    def prompts(self) -> Optional[Sequence[str]]:
        """
        Custom prompts or consent screens that users may see during OAuth authentication.
        """
        return pulumi.get(self, "prompts")

    @property
    @pulumi.getter(name="providerTokenManagement")
    def provider_token_management(self) -> Optional['outputs.ProjectAuthenticationOauthSystemMicrosoftProviderTokenManagement']:
        """
        Settings related to token management for the OAuth provider.
        """
        return pulumi.get(self, "provider_token_management")

    @property
    @pulumi.getter
    def scopes(self) -> Optional[Sequence[str]]:
        """
        Scopes of access that the application requests from the user's account on the OAuth provider.
        """
        return pulumi.get(self, "scopes")

    @property
    @pulumi.getter(name="tokenEndpoint")
    def token_endpoint(self) -> Optional[str]:
        """
        The URL where the application requests an access token from the OAuth provider.
        """
        return pulumi.get(self, "token_endpoint")

    @property
    @pulumi.getter(name="userInfoEndpoint")
    def user_info_endpoint(self) -> Optional[str]:
        """
        The URL where the application retrieves user information from the OAuth provider.
        """
        return pulumi.get(self, "user_info_endpoint")


@pulumi.output_type
class ProjectAuthenticationOauthSystemMicrosoftProviderTokenManagement(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "callbackDomain":
            suggest = "callback_domain"
        elif key == "redirectUrl":
            suggest = "redirect_url"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationOauthSystemMicrosoftProviderTokenManagement. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationOauthSystemMicrosoftProviderTokenManagement.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationOauthSystemMicrosoftProviderTokenManagement.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 callback_domain: Optional[str] = None,
                 redirect_url: Optional[str] = None):
        if callback_domain is not None:
            pulumi.set(__self__, "callback_domain", callback_domain)
        if redirect_url is not None:
            pulumi.set(__self__, "redirect_url", redirect_url)

    @property
    @pulumi.getter(name="callbackDomain")
    def callback_domain(self) -> Optional[str]:
        return pulumi.get(self, "callback_domain")

    @property
    @pulumi.getter(name="redirectUrl")
    def redirect_url(self) -> Optional[str]:
        return pulumi.get(self, "redirect_url")


@pulumi.output_type
class ProjectAuthenticationOauthSystemSlack(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "authorizationEndpoint":
            suggest = "authorization_endpoint"
        elif key == "claimMapping":
            suggest = "claim_mapping"
        elif key == "clientId":
            suggest = "client_id"
        elif key == "clientSecret":
            suggest = "client_secret"
        elif key == "grantType":
            suggest = "grant_type"
        elif key == "jwksEndpoint":
            suggest = "jwks_endpoint"
        elif key == "mergeUserAccounts":
            suggest = "merge_user_accounts"
        elif key == "providerTokenManagement":
            suggest = "provider_token_management"
        elif key == "tokenEndpoint":
            suggest = "token_endpoint"
        elif key == "userInfoEndpoint":
            suggest = "user_info_endpoint"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationOauthSystemSlack. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationOauthSystemSlack.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationOauthSystemSlack.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 authorization_endpoint: Optional[str] = None,
                 claim_mapping: Optional[Mapping[str, str]] = None,
                 client_id: Optional[str] = None,
                 client_secret: Optional[str] = None,
                 description: Optional[str] = None,
                 disabled: Optional[bool] = None,
                 grant_type: Optional[str] = None,
                 issuer: Optional[str] = None,
                 jwks_endpoint: Optional[str] = None,
                 logo: Optional[str] = None,
                 merge_user_accounts: Optional[bool] = None,
                 prompts: Optional[Sequence[str]] = None,
                 provider_token_management: Optional['outputs.ProjectAuthenticationOauthSystemSlackProviderTokenManagement'] = None,
                 scopes: Optional[Sequence[str]] = None,
                 token_endpoint: Optional[str] = None,
                 user_info_endpoint: Optional[str] = None):
        """
        :param str authorization_endpoint: The URL that users are redirected to for authorization with the OAuth provider.
        :param str client_id: The client ID for the OAuth provider, used to identify the application to the provider.
        :param str client_secret: The client secret for the OAuth provider, used to authenticate the application with the provider.
        :param str description: A brief description of the OAuth provider.
        :param str grant_type: The type of grant (`authorization_code` or `implicit`) to use when requesting access tokens from the OAuth provider.
        :param str jwks_endpoint: The URL where the application can retrieve JSON Web Key Sets (JWKS) for the OAuth provider.
        :param str logo: The URL of the logo associated with the OAuth provider.
        :param bool merge_user_accounts: Whether to merge existing user accounts with new ones created through OAuth authentication.
        :param Sequence[str] prompts: Custom prompts or consent screens that users may see during OAuth authentication.
        :param 'ProjectAuthenticationOauthSystemSlackProviderTokenManagementArgs' provider_token_management: Settings related to token management for the OAuth provider.
        :param Sequence[str] scopes: Scopes of access that the application requests from the user's account on the OAuth provider.
        :param str token_endpoint: The URL where the application requests an access token from the OAuth provider.
        :param str user_info_endpoint: The URL where the application retrieves user information from the OAuth provider.
        """
        if authorization_endpoint is not None:
            pulumi.set(__self__, "authorization_endpoint", authorization_endpoint)
        if claim_mapping is not None:
            pulumi.set(__self__, "claim_mapping", claim_mapping)
        if client_id is not None:
            pulumi.set(__self__, "client_id", client_id)
        if client_secret is not None:
            pulumi.set(__self__, "client_secret", client_secret)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if disabled is not None:
            pulumi.set(__self__, "disabled", disabled)
        if grant_type is not None:
            pulumi.set(__self__, "grant_type", grant_type)
        if issuer is not None:
            pulumi.set(__self__, "issuer", issuer)
        if jwks_endpoint is not None:
            pulumi.set(__self__, "jwks_endpoint", jwks_endpoint)
        if logo is not None:
            pulumi.set(__self__, "logo", logo)
        if merge_user_accounts is not None:
            pulumi.set(__self__, "merge_user_accounts", merge_user_accounts)
        if prompts is not None:
            pulumi.set(__self__, "prompts", prompts)
        if provider_token_management is not None:
            pulumi.set(__self__, "provider_token_management", provider_token_management)
        if scopes is not None:
            pulumi.set(__self__, "scopes", scopes)
        if token_endpoint is not None:
            pulumi.set(__self__, "token_endpoint", token_endpoint)
        if user_info_endpoint is not None:
            pulumi.set(__self__, "user_info_endpoint", user_info_endpoint)

    @property
    @pulumi.getter(name="authorizationEndpoint")
    def authorization_endpoint(self) -> Optional[str]:
        """
        The URL that users are redirected to for authorization with the OAuth provider.
        """
        return pulumi.get(self, "authorization_endpoint")

    @property
    @pulumi.getter(name="claimMapping")
    def claim_mapping(self) -> Optional[Mapping[str, str]]:
        return pulumi.get(self, "claim_mapping")

    @property
    @pulumi.getter(name="clientId")
    def client_id(self) -> Optional[str]:
        """
        The client ID for the OAuth provider, used to identify the application to the provider.
        """
        return pulumi.get(self, "client_id")

    @property
    @pulumi.getter(name="clientSecret")
    def client_secret(self) -> Optional[str]:
        """
        The client secret for the OAuth provider, used to authenticate the application with the provider.
        """
        return pulumi.get(self, "client_secret")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A brief description of the OAuth provider.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def disabled(self) -> Optional[bool]:
        return pulumi.get(self, "disabled")

    @property
    @pulumi.getter(name="grantType")
    def grant_type(self) -> Optional[str]:
        """
        The type of grant (`authorization_code` or `implicit`) to use when requesting access tokens from the OAuth provider.
        """
        return pulumi.get(self, "grant_type")

    @property
    @pulumi.getter
    def issuer(self) -> Optional[str]:
        return pulumi.get(self, "issuer")

    @property
    @pulumi.getter(name="jwksEndpoint")
    def jwks_endpoint(self) -> Optional[str]:
        """
        The URL where the application can retrieve JSON Web Key Sets (JWKS) for the OAuth provider.
        """
        return pulumi.get(self, "jwks_endpoint")

    @property
    @pulumi.getter
    def logo(self) -> Optional[str]:
        """
        The URL of the logo associated with the OAuth provider.
        """
        return pulumi.get(self, "logo")

    @property
    @pulumi.getter(name="mergeUserAccounts")
    def merge_user_accounts(self) -> Optional[bool]:
        """
        Whether to merge existing user accounts with new ones created through OAuth authentication.
        """
        return pulumi.get(self, "merge_user_accounts")

    @property
    @pulumi.getter
    def prompts(self) -> Optional[Sequence[str]]:
        """
        Custom prompts or consent screens that users may see during OAuth authentication.
        """
        return pulumi.get(self, "prompts")

    @property
    @pulumi.getter(name="providerTokenManagement")
    def provider_token_management(self) -> Optional['outputs.ProjectAuthenticationOauthSystemSlackProviderTokenManagement']:
        """
        Settings related to token management for the OAuth provider.
        """
        return pulumi.get(self, "provider_token_management")

    @property
    @pulumi.getter
    def scopes(self) -> Optional[Sequence[str]]:
        """
        Scopes of access that the application requests from the user's account on the OAuth provider.
        """
        return pulumi.get(self, "scopes")

    @property
    @pulumi.getter(name="tokenEndpoint")
    def token_endpoint(self) -> Optional[str]:
        """
        The URL where the application requests an access token from the OAuth provider.
        """
        return pulumi.get(self, "token_endpoint")

    @property
    @pulumi.getter(name="userInfoEndpoint")
    def user_info_endpoint(self) -> Optional[str]:
        """
        The URL where the application retrieves user information from the OAuth provider.
        """
        return pulumi.get(self, "user_info_endpoint")


@pulumi.output_type
class ProjectAuthenticationOauthSystemSlackProviderTokenManagement(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "callbackDomain":
            suggest = "callback_domain"
        elif key == "redirectUrl":
            suggest = "redirect_url"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationOauthSystemSlackProviderTokenManagement. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationOauthSystemSlackProviderTokenManagement.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationOauthSystemSlackProviderTokenManagement.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 callback_domain: Optional[str] = None,
                 redirect_url: Optional[str] = None):
        if callback_domain is not None:
            pulumi.set(__self__, "callback_domain", callback_domain)
        if redirect_url is not None:
            pulumi.set(__self__, "redirect_url", redirect_url)

    @property
    @pulumi.getter(name="callbackDomain")
    def callback_domain(self) -> Optional[str]:
        return pulumi.get(self, "callback_domain")

    @property
    @pulumi.getter(name="redirectUrl")
    def redirect_url(self) -> Optional[str]:
        return pulumi.get(self, "redirect_url")


@pulumi.output_type
class ProjectAuthenticationOtp(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "emailService":
            suggest = "email_service"
        elif key == "expirationTime":
            suggest = "expiration_time"
        elif key == "expirationTimeUnit":
            suggest = "expiration_time_unit"
        elif key == "textService":
            suggest = "text_service"
        elif key == "voiceService":
            suggest = "voice_service"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationOtp. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationOtp.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationOtp.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 domain: Optional[str] = None,
                 email_service: Optional['outputs.ProjectAuthenticationOtpEmailService'] = None,
                 enabled: Optional[bool] = None,
                 expiration_time: Optional[int] = None,
                 expiration_time_unit: Optional[str] = None,
                 text_service: Optional['outputs.ProjectAuthenticationOtpTextService'] = None,
                 voice_service: Optional['outputs.ProjectAuthenticationOtpVoiceService'] = None):
        """
        :param str domain: The domain to embed in OTP messages.
        :param 'ProjectAuthenticationOtpEmailServiceArgs' email_service: Settings related to sending emails with OTP codes.
        :param int expiration_time: The amount of time that an OTP code will be valid for.
        :param 'ProjectAuthenticationOtpTextServiceArgs' text_service: Settings related to sending SMS messages with OTP codes.
        :param 'ProjectAuthenticationOtpVoiceServiceArgs' voice_service: Settings related to voice calls with OTP codes.
        """
        if domain is not None:
            pulumi.set(__self__, "domain", domain)
        if email_service is not None:
            pulumi.set(__self__, "email_service", email_service)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if expiration_time is not None:
            pulumi.set(__self__, "expiration_time", expiration_time)
        if expiration_time_unit is not None:
            pulumi.set(__self__, "expiration_time_unit", expiration_time_unit)
        if text_service is not None:
            pulumi.set(__self__, "text_service", text_service)
        if voice_service is not None:
            pulumi.set(__self__, "voice_service", voice_service)

    @property
    @pulumi.getter
    def domain(self) -> Optional[str]:
        """
        The domain to embed in OTP messages.
        """
        return pulumi.get(self, "domain")

    @property
    @pulumi.getter(name="emailService")
    def email_service(self) -> Optional['outputs.ProjectAuthenticationOtpEmailService']:
        """
        Settings related to sending emails with OTP codes.
        """
        return pulumi.get(self, "email_service")

    @property
    @pulumi.getter
    def enabled(self) -> Optional[bool]:
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter(name="expirationTime")
    def expiration_time(self) -> Optional[int]:
        """
        The amount of time that an OTP code will be valid for.
        """
        return pulumi.get(self, "expiration_time")

    @property
    @pulumi.getter(name="expirationTimeUnit")
    def expiration_time_unit(self) -> Optional[str]:
        return pulumi.get(self, "expiration_time_unit")

    @property
    @pulumi.getter(name="textService")
    def text_service(self) -> Optional['outputs.ProjectAuthenticationOtpTextService']:
        """
        Settings related to sending SMS messages with OTP codes.
        """
        return pulumi.get(self, "text_service")

    @property
    @pulumi.getter(name="voiceService")
    def voice_service(self) -> Optional['outputs.ProjectAuthenticationOtpVoiceService']:
        """
        Settings related to voice calls with OTP codes.
        """
        return pulumi.get(self, "voice_service")


@pulumi.output_type
class ProjectAuthenticationOtpEmailService(dict):
    def __init__(__self__, *,
                 connector: str,
                 templates: Optional[Sequence['outputs.ProjectAuthenticationOtpEmailServiceTemplate']] = None):
        pulumi.set(__self__, "connector", connector)
        if templates is not None:
            pulumi.set(__self__, "templates", templates)

    @property
    @pulumi.getter
    def connector(self) -> str:
        return pulumi.get(self, "connector")

    @property
    @pulumi.getter
    def templates(self) -> Optional[Sequence['outputs.ProjectAuthenticationOtpEmailServiceTemplate']]:
        return pulumi.get(self, "templates")


@pulumi.output_type
class ProjectAuthenticationOtpEmailServiceTemplate(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "htmlBody":
            suggest = "html_body"
        elif key == "plainTextBody":
            suggest = "plain_text_body"
        elif key == "usePlainTextBody":
            suggest = "use_plain_text_body"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationOtpEmailServiceTemplate. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationOtpEmailServiceTemplate.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationOtpEmailServiceTemplate.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 name: str,
                 subject: str,
                 active: Optional[bool] = None,
                 html_body: Optional[str] = None,
                 id: Optional[str] = None,
                 plain_text_body: Optional[str] = None,
                 use_plain_text_body: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "subject", subject)
        if active is not None:
            pulumi.set(__self__, "active", active)
        if html_body is not None:
            pulumi.set(__self__, "html_body", html_body)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if plain_text_body is not None:
            pulumi.set(__self__, "plain_text_body", plain_text_body)
        if use_plain_text_body is not None:
            pulumi.set(__self__, "use_plain_text_body", use_plain_text_body)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def subject(self) -> str:
        return pulumi.get(self, "subject")

    @property
    @pulumi.getter
    def active(self) -> Optional[bool]:
        return pulumi.get(self, "active")

    @property
    @pulumi.getter(name="htmlBody")
    def html_body(self) -> Optional[str]:
        return pulumi.get(self, "html_body")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="plainTextBody")
    def plain_text_body(self) -> Optional[str]:
        return pulumi.get(self, "plain_text_body")

    @property
    @pulumi.getter(name="usePlainTextBody")
    def use_plain_text_body(self) -> Optional[bool]:
        return pulumi.get(self, "use_plain_text_body")


@pulumi.output_type
class ProjectAuthenticationOtpTextService(dict):
    def __init__(__self__, *,
                 connector: str,
                 templates: Optional[Sequence['outputs.ProjectAuthenticationOtpTextServiceTemplate']] = None):
        pulumi.set(__self__, "connector", connector)
        if templates is not None:
            pulumi.set(__self__, "templates", templates)

    @property
    @pulumi.getter
    def connector(self) -> str:
        return pulumi.get(self, "connector")

    @property
    @pulumi.getter
    def templates(self) -> Optional[Sequence['outputs.ProjectAuthenticationOtpTextServiceTemplate']]:
        return pulumi.get(self, "templates")


@pulumi.output_type
class ProjectAuthenticationOtpTextServiceTemplate(dict):
    def __init__(__self__, *,
                 body: str,
                 name: str,
                 active: Optional[bool] = None,
                 id: Optional[str] = None):
        pulumi.set(__self__, "body", body)
        pulumi.set(__self__, "name", name)
        if active is not None:
            pulumi.set(__self__, "active", active)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def body(self) -> str:
        return pulumi.get(self, "body")

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def active(self) -> Optional[bool]:
        return pulumi.get(self, "active")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")


@pulumi.output_type
class ProjectAuthenticationOtpVoiceService(dict):
    def __init__(__self__, *,
                 connector: str,
                 templates: Optional[Sequence['outputs.ProjectAuthenticationOtpVoiceServiceTemplate']] = None):
        pulumi.set(__self__, "connector", connector)
        if templates is not None:
            pulumi.set(__self__, "templates", templates)

    @property
    @pulumi.getter
    def connector(self) -> str:
        return pulumi.get(self, "connector")

    @property
    @pulumi.getter
    def templates(self) -> Optional[Sequence['outputs.ProjectAuthenticationOtpVoiceServiceTemplate']]:
        return pulumi.get(self, "templates")


@pulumi.output_type
class ProjectAuthenticationOtpVoiceServiceTemplate(dict):
    def __init__(__self__, *,
                 body: str,
                 name: str,
                 active: Optional[bool] = None,
                 id: Optional[str] = None):
        pulumi.set(__self__, "body", body)
        pulumi.set(__self__, "name", name)
        if active is not None:
            pulumi.set(__self__, "active", active)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def body(self) -> str:
        return pulumi.get(self, "body")

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def active(self) -> Optional[bool]:
        return pulumi.get(self, "active")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")


@pulumi.output_type
class ProjectAuthenticationPasskeys(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "topLevelDomain":
            suggest = "top_level_domain"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationPasskeys. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationPasskeys.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationPasskeys.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 enabled: Optional[bool] = None,
                 top_level_domain: Optional[str] = None):
        """
        :param str top_level_domain: Passkeys will be usable in the following domain and all its subdomains.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if top_level_domain is not None:
            pulumi.set(__self__, "top_level_domain", top_level_domain)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[bool]:
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter(name="topLevelDomain")
    def top_level_domain(self) -> Optional[str]:
        """
        Passkeys will be usable in the following domain and all its subdomains.
        """
        return pulumi.get(self, "top_level_domain")


@pulumi.output_type
class ProjectAuthenticationPassword(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "emailService":
            suggest = "email_service"
        elif key == "expirationWeeks":
            suggest = "expiration_weeks"
        elif key == "lockAttempts":
            suggest = "lock_attempts"
        elif key == "minLength":
            suggest = "min_length"
        elif key == "nonAlphanumeric":
            suggest = "non_alphanumeric"
        elif key == "reuseAmount":
            suggest = "reuse_amount"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationPassword. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationPassword.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationPassword.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 email_service: Optional['outputs.ProjectAuthenticationPasswordEmailService'] = None,
                 enabled: Optional[bool] = None,
                 expiration: Optional[bool] = None,
                 expiration_weeks: Optional[int] = None,
                 lock: Optional[bool] = None,
                 lock_attempts: Optional[int] = None,
                 lowercase: Optional[bool] = None,
                 min_length: Optional[int] = None,
                 non_alphanumeric: Optional[bool] = None,
                 number: Optional[bool] = None,
                 reuse: Optional[bool] = None,
                 reuse_amount: Optional[int] = None,
                 uppercase: Optional[bool] = None):
        """
        :param 'ProjectAuthenticationPasswordEmailServiceArgs' email_service: Settings related to sending password reset emails as part of the password feature.
        :param bool expiration: Whether users are required to change their password periodically.
        :param int expiration_weeks: The number of weeks after which a user's password expires and they need to replace it.
        :param bool lock: Whether the user account should be locked after a specified number of failed login attempts.
        :param int lock_attempts: The number of failed login attempts allowed before an account is locked.
        :param bool lowercase: Whether passwords must contain at least one lowercase letter.
        :param int min_length: The minimum length of the password that users are required to use. The maximum length is always `64`.
        :param bool non_alphanumeric: Whether passwords must contain at least one non-alphanumeric character (e.g. `!`, `@`, `#`).
        :param bool number: Whether passwords must contain at least one number.
        :param bool reuse: Whether to forbid password reuse when users change their password.
        :param bool uppercase: Whether passwords must contain at least one uppercase letter.
        """
        if email_service is not None:
            pulumi.set(__self__, "email_service", email_service)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if expiration is not None:
            pulumi.set(__self__, "expiration", expiration)
        if expiration_weeks is not None:
            pulumi.set(__self__, "expiration_weeks", expiration_weeks)
        if lock is not None:
            pulumi.set(__self__, "lock", lock)
        if lock_attempts is not None:
            pulumi.set(__self__, "lock_attempts", lock_attempts)
        if lowercase is not None:
            pulumi.set(__self__, "lowercase", lowercase)
        if min_length is not None:
            pulumi.set(__self__, "min_length", min_length)
        if non_alphanumeric is not None:
            pulumi.set(__self__, "non_alphanumeric", non_alphanumeric)
        if number is not None:
            pulumi.set(__self__, "number", number)
        if reuse is not None:
            pulumi.set(__self__, "reuse", reuse)
        if reuse_amount is not None:
            pulumi.set(__self__, "reuse_amount", reuse_amount)
        if uppercase is not None:
            pulumi.set(__self__, "uppercase", uppercase)

    @property
    @pulumi.getter(name="emailService")
    def email_service(self) -> Optional['outputs.ProjectAuthenticationPasswordEmailService']:
        """
        Settings related to sending password reset emails as part of the password feature.
        """
        return pulumi.get(self, "email_service")

    @property
    @pulumi.getter
    def enabled(self) -> Optional[bool]:
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter
    def expiration(self) -> Optional[bool]:
        """
        Whether users are required to change their password periodically.
        """
        return pulumi.get(self, "expiration")

    @property
    @pulumi.getter(name="expirationWeeks")
    def expiration_weeks(self) -> Optional[int]:
        """
        The number of weeks after which a user's password expires and they need to replace it.
        """
        return pulumi.get(self, "expiration_weeks")

    @property
    @pulumi.getter
    def lock(self) -> Optional[bool]:
        """
        Whether the user account should be locked after a specified number of failed login attempts.
        """
        return pulumi.get(self, "lock")

    @property
    @pulumi.getter(name="lockAttempts")
    def lock_attempts(self) -> Optional[int]:
        """
        The number of failed login attempts allowed before an account is locked.
        """
        return pulumi.get(self, "lock_attempts")

    @property
    @pulumi.getter
    def lowercase(self) -> Optional[bool]:
        """
        Whether passwords must contain at least one lowercase letter.
        """
        return pulumi.get(self, "lowercase")

    @property
    @pulumi.getter(name="minLength")
    def min_length(self) -> Optional[int]:
        """
        The minimum length of the password that users are required to use. The maximum length is always `64`.
        """
        return pulumi.get(self, "min_length")

    @property
    @pulumi.getter(name="nonAlphanumeric")
    def non_alphanumeric(self) -> Optional[bool]:
        """
        Whether passwords must contain at least one non-alphanumeric character (e.g. `!`, `@`, `#`).
        """
        return pulumi.get(self, "non_alphanumeric")

    @property
    @pulumi.getter
    def number(self) -> Optional[bool]:
        """
        Whether passwords must contain at least one number.
        """
        return pulumi.get(self, "number")

    @property
    @pulumi.getter
    def reuse(self) -> Optional[bool]:
        """
        Whether to forbid password reuse when users change their password.
        """
        return pulumi.get(self, "reuse")

    @property
    @pulumi.getter(name="reuseAmount")
    def reuse_amount(self) -> Optional[int]:
        return pulumi.get(self, "reuse_amount")

    @property
    @pulumi.getter
    def uppercase(self) -> Optional[bool]:
        """
        Whether passwords must contain at least one uppercase letter.
        """
        return pulumi.get(self, "uppercase")


@pulumi.output_type
class ProjectAuthenticationPasswordEmailService(dict):
    def __init__(__self__, *,
                 connector: str,
                 templates: Optional[Sequence['outputs.ProjectAuthenticationPasswordEmailServiceTemplate']] = None):
        pulumi.set(__self__, "connector", connector)
        if templates is not None:
            pulumi.set(__self__, "templates", templates)

    @property
    @pulumi.getter
    def connector(self) -> str:
        return pulumi.get(self, "connector")

    @property
    @pulumi.getter
    def templates(self) -> Optional[Sequence['outputs.ProjectAuthenticationPasswordEmailServiceTemplate']]:
        return pulumi.get(self, "templates")


@pulumi.output_type
class ProjectAuthenticationPasswordEmailServiceTemplate(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "htmlBody":
            suggest = "html_body"
        elif key == "plainTextBody":
            suggest = "plain_text_body"
        elif key == "usePlainTextBody":
            suggest = "use_plain_text_body"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationPasswordEmailServiceTemplate. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationPasswordEmailServiceTemplate.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationPasswordEmailServiceTemplate.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 name: str,
                 subject: str,
                 active: Optional[bool] = None,
                 html_body: Optional[str] = None,
                 id: Optional[str] = None,
                 plain_text_body: Optional[str] = None,
                 use_plain_text_body: Optional[bool] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "subject", subject)
        if active is not None:
            pulumi.set(__self__, "active", active)
        if html_body is not None:
            pulumi.set(__self__, "html_body", html_body)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if plain_text_body is not None:
            pulumi.set(__self__, "plain_text_body", plain_text_body)
        if use_plain_text_body is not None:
            pulumi.set(__self__, "use_plain_text_body", use_plain_text_body)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def subject(self) -> str:
        return pulumi.get(self, "subject")

    @property
    @pulumi.getter
    def active(self) -> Optional[bool]:
        return pulumi.get(self, "active")

    @property
    @pulumi.getter(name="htmlBody")
    def html_body(self) -> Optional[str]:
        return pulumi.get(self, "html_body")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="plainTextBody")
    def plain_text_body(self) -> Optional[str]:
        return pulumi.get(self, "plain_text_body")

    @property
    @pulumi.getter(name="usePlainTextBody")
    def use_plain_text_body(self) -> Optional[bool]:
        return pulumi.get(self, "use_plain_text_body")


@pulumi.output_type
class ProjectAuthenticationSso(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "mergeUsers":
            suggest = "merge_users"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectAuthenticationSso. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectAuthenticationSso.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectAuthenticationSso.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 enabled: Optional[bool] = None,
                 merge_users: Optional[bool] = None):
        """
        :param bool merge_users: Whether to merge existing user accounts with new ones created through SSO authentication.
        """
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if merge_users is not None:
            pulumi.set(__self__, "merge_users", merge_users)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[bool]:
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter(name="mergeUsers")
    def merge_users(self) -> Optional[bool]:
        """
        Whether to merge existing user accounts with new ones created through SSO authentication.
        """
        return pulumi.get(self, "merge_users")


@pulumi.output_type
class ProjectAuthenticationTotp(dict):
    def __init__(__self__, *,
                 enabled: Optional[bool] = None):
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

    @property
    @pulumi.getter
    def enabled(self) -> Optional[bool]:
        return pulumi.get(self, "enabled")


@pulumi.output_type
class ProjectAuthorization(dict):
    def __init__(__self__, *,
                 permissions: Optional[Sequence['outputs.ProjectAuthorizationPermission']] = None,
                 roles: Optional[Sequence['outputs.ProjectAuthorizationRole']] = None):
        if permissions is not None:
            pulumi.set(__self__, "permissions", permissions)
        if roles is not None:
            pulumi.set(__self__, "roles", roles)

    @property
    @pulumi.getter
    def permissions(self) -> Optional[Sequence['outputs.ProjectAuthorizationPermission']]:
        return pulumi.get(self, "permissions")

    @property
    @pulumi.getter
    def roles(self) -> Optional[Sequence['outputs.ProjectAuthorizationRole']]:
        return pulumi.get(self, "roles")


@pulumi.output_type
class ProjectAuthorizationPermission(dict):
    def __init__(__self__, *,
                 name: str,
                 description: Optional[str] = None,
                 id: Optional[str] = None):
        pulumi.set(__self__, "name", name)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")


@pulumi.output_type
class ProjectAuthorizationRole(dict):
    def __init__(__self__, *,
                 name: str,
                 description: Optional[str] = None,
                 id: Optional[str] = None,
                 permissions: Optional[Sequence[str]] = None):
        pulumi.set(__self__, "name", name)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if permissions is not None:
            pulumi.set(__self__, "permissions", permissions)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")

    @property
    @pulumi.getter
    def permissions(self) -> Optional[Sequence[str]]:
        return pulumi.get(self, "permissions")


@pulumi.output_type
class ProjectConnectors(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "auditWebhooks":
            suggest = "audit_webhooks"
        elif key == "awsS3s":
            suggest = "aws_s3s"
        elif key == "awsTranslates":
            suggest = "aws_translates"
        elif key == "devrevGrows":
            suggest = "devrev_grows"
        elif key == "fingerprintDescopes":
            suggest = "fingerprint_descopes"
        elif key == "googleCloudTranslations":
            suggest = "google_cloud_translations"
        elif key == "httpStaticIps":
            suggest = "http_static_ips"
        elif key == "recaptchaEnterprises":
            suggest = "recaptcha_enterprises"
        elif key == "twilioCores":
            suggest = "twilio_cores"
        elif key == "twilioVerifies":
            suggest = "twilio_verifies"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectors. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectors.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectors.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 abuseipdbs: Optional[Sequence['outputs.ProjectConnectorsAbuseipdb']] = None,
                 amplitudes: Optional[Sequence['outputs.ProjectConnectorsAmplitude']] = None,
                 audit_webhooks: Optional[Sequence['outputs.ProjectConnectorsAuditWebhook']] = None,
                 aws_s3s: Optional[Sequence['outputs.ProjectConnectorsAwsS3']] = None,
                 aws_translates: Optional[Sequence['outputs.ProjectConnectorsAwsTranslate']] = None,
                 clears: Optional[Sequence['outputs.ProjectConnectorsClear']] = None,
                 datadogs: Optional[Sequence['outputs.ProjectConnectorsDatadog']] = None,
                 devrev_grows: Optional[Sequence['outputs.ProjectConnectorsDevrevGrow']] = None,
                 docebos: Optional[Sequence['outputs.ProjectConnectorsDocebo']] = None,
                 fingerprint_descopes: Optional[Sequence['outputs.ProjectConnectorsFingerprintDescope']] = None,
                 fingerprints: Optional[Sequence['outputs.ProjectConnectorsFingerprint']] = None,
                 forters: Optional[Sequence['outputs.ProjectConnectorsForter']] = None,
                 google_cloud_translations: Optional[Sequence['outputs.ProjectConnectorsGoogleCloudTranslation']] = None,
                 hibps: Optional[Sequence['outputs.ProjectConnectorsHibp']] = None,
                 http_static_ips: Optional[Sequence['outputs.ProjectConnectorsHttpStaticIp']] = None,
                 https: Optional[Sequence['outputs.ProjectConnectorsHttp']] = None,
                 hubspots: Optional[Sequence['outputs.ProjectConnectorsHubspot']] = None,
                 intercoms: Optional[Sequence['outputs.ProjectConnectorsIntercom']] = None,
                 newrelics: Optional[Sequence['outputs.ProjectConnectorsNewrelic']] = None,
                 recaptcha_enterprises: Optional[Sequence['outputs.ProjectConnectorsRecaptchaEnterprise']] = None,
                 recaptchas: Optional[Sequence['outputs.ProjectConnectorsRecaptcha']] = None,
                 rekognitions: Optional[Sequence['outputs.ProjectConnectorsRekognition']] = None,
                 salesforces: Optional[Sequence['outputs.ProjectConnectorsSalesforce']] = None,
                 segments: Optional[Sequence['outputs.ProjectConnectorsSegment']] = None,
                 sendgrids: Optional[Sequence['outputs.ProjectConnectorsSendgrid']] = None,
                 smtps: Optional[Sequence['outputs.ProjectConnectorsSmtp']] = None,
                 sumologics: Optional[Sequence['outputs.ProjectConnectorsSumologic']] = None,
                 telesigns: Optional[Sequence['outputs.ProjectConnectorsTelesign']] = None,
                 traceables: Optional[Sequence['outputs.ProjectConnectorsTraceable']] = None,
                 twilio_cores: Optional[Sequence['outputs.ProjectConnectorsTwilioCore']] = None,
                 twilio_verifies: Optional[Sequence['outputs.ProjectConnectorsTwilioVerify']] = None,
                 veriffs: Optional[Sequence['outputs.ProjectConnectorsVeriff']] = None):
        """
        :param Sequence['ProjectConnectorsAbuseipdbArgs'] abuseipdbs: AbuseIPDB provides an API to identify if an IP address has been associated with malicious activities online.
        :param Sequence['ProjectConnectorsAmplitudeArgs'] amplitudes: Amplitude, an analytics product that allows you to collects events from web and mobile apps, unify those and use those to better understand your customers needs.
        :param Sequence['ProjectConnectorsClearArgs'] clears: An identity verification platform that allow customers to digitally verify their identity from anywhere.
        :param Sequence['ProjectConnectorsDatadogArgs'] datadogs: Datadog, an observability service for cloud-scale applications, providing monitoring of servers, databases, tools, and services, through a SaaS-based data analytics platform.
        :param Sequence['ProjectConnectorsDoceboArgs'] docebos: Docebo is a cloud-based Learning Management System (LMS) designed to increase performance and learning engagement.
        :param Sequence['ProjectConnectorsFingerprintArgs'] fingerprints: Use the Fingerprint (formerly FingerprintJS) connector to add device intelligence and prevent fraud.
        :param Sequence['ProjectConnectorsForterArgs'] forters: Use the Forter connector for account fraud prevention.
        :param Sequence['ProjectConnectorsHibpArgs'] hibps: API to check if password appeared previously exposed in data breaches.
        :param Sequence['ProjectConnectorsHttpArgs'] https: A general purpose HTTP client
        :param Sequence['ProjectConnectorsHubspotArgs'] hubspots: HubSpot is a CRM platform with software, integrations, and resources needed to connect marketing, sales, content management, and customer service.
        :param Sequence['ProjectConnectorsIntercomArgs'] intercoms: Intercom is a Conversational Relationship Platform (CRP).
        :param Sequence['ProjectConnectorsNewrelicArgs'] newrelics: Use this connector to send audit events and troubleshooting logs to New Relic.
        :param Sequence['ProjectConnectorsRecaptchaArgs'] recaptchas: reCAPTCHA is a free google service that protects your site from spam and abuse. It uses advanced risk analysis techniques to tell humans and bots apart.
        :param Sequence['ProjectConnectorsRekognitionArgs'] rekognitions: AWS Rekognition, cloud-based AI service that offers computer vision capabilities for analyzing and processing images. Useful for registration and verification processes, and can be used to detect fraud and prevent identity theft.
        :param Sequence['ProjectConnectorsSalesforceArgs'] salesforces: Salesforce is a leading cloud-based Customer Relationship Management (CRM) platform that helps businesses streamline their sales, service, and marketing operations.
        :param Sequence['ProjectConnectorsSegmentArgs'] segments: Segment, an analytics product that allows you to collects events from web and mobile apps, unify those and use those to better understand your customers needs.
        :param Sequence['ProjectConnectorsSumologicArgs'] sumologics: Sumo Logic, fast troubleshooting and investigation with AI/ML-powered log analytics
        :param Sequence['ProjectConnectorsTelesignArgs'] telesigns: Telesign Phone number intelligence API provides risk score for phone numbers.
        :param Sequence['ProjectConnectorsTraceableArgs'] traceables: API security for a cloud-first, API-driven world.
        :param Sequence['ProjectConnectorsVeriffArgs'] veriffs: AI-powered identity verification solution for identity fraud prevention, Know Your Customer compliance, and fast conversions of valuable customers.
        """
        if abuseipdbs is not None:
            pulumi.set(__self__, "abuseipdbs", abuseipdbs)
        if amplitudes is not None:
            pulumi.set(__self__, "amplitudes", amplitudes)
        if audit_webhooks is not None:
            pulumi.set(__self__, "audit_webhooks", audit_webhooks)
        if aws_s3s is not None:
            pulumi.set(__self__, "aws_s3s", aws_s3s)
        if aws_translates is not None:
            pulumi.set(__self__, "aws_translates", aws_translates)
        if clears is not None:
            pulumi.set(__self__, "clears", clears)
        if datadogs is not None:
            pulumi.set(__self__, "datadogs", datadogs)
        if devrev_grows is not None:
            pulumi.set(__self__, "devrev_grows", devrev_grows)
        if docebos is not None:
            pulumi.set(__self__, "docebos", docebos)
        if fingerprint_descopes is not None:
            pulumi.set(__self__, "fingerprint_descopes", fingerprint_descopes)
        if fingerprints is not None:
            pulumi.set(__self__, "fingerprints", fingerprints)
        if forters is not None:
            pulumi.set(__self__, "forters", forters)
        if google_cloud_translations is not None:
            pulumi.set(__self__, "google_cloud_translations", google_cloud_translations)
        if hibps is not None:
            pulumi.set(__self__, "hibps", hibps)
        if http_static_ips is not None:
            pulumi.set(__self__, "http_static_ips", http_static_ips)
        if https is not None:
            pulumi.set(__self__, "https", https)
        if hubspots is not None:
            pulumi.set(__self__, "hubspots", hubspots)
        if intercoms is not None:
            pulumi.set(__self__, "intercoms", intercoms)
        if newrelics is not None:
            pulumi.set(__self__, "newrelics", newrelics)
        if recaptcha_enterprises is not None:
            pulumi.set(__self__, "recaptcha_enterprises", recaptcha_enterprises)
        if recaptchas is not None:
            pulumi.set(__self__, "recaptchas", recaptchas)
        if rekognitions is not None:
            pulumi.set(__self__, "rekognitions", rekognitions)
        if salesforces is not None:
            pulumi.set(__self__, "salesforces", salesforces)
        if segments is not None:
            pulumi.set(__self__, "segments", segments)
        if sendgrids is not None:
            pulumi.set(__self__, "sendgrids", sendgrids)
        if smtps is not None:
            pulumi.set(__self__, "smtps", smtps)
        if sumologics is not None:
            pulumi.set(__self__, "sumologics", sumologics)
        if telesigns is not None:
            pulumi.set(__self__, "telesigns", telesigns)
        if traceables is not None:
            pulumi.set(__self__, "traceables", traceables)
        if twilio_cores is not None:
            pulumi.set(__self__, "twilio_cores", twilio_cores)
        if twilio_verifies is not None:
            pulumi.set(__self__, "twilio_verifies", twilio_verifies)
        if veriffs is not None:
            pulumi.set(__self__, "veriffs", veriffs)

    @property
    @pulumi.getter
    def abuseipdbs(self) -> Optional[Sequence['outputs.ProjectConnectorsAbuseipdb']]:
        """
        AbuseIPDB provides an API to identify if an IP address has been associated with malicious activities online.
        """
        return pulumi.get(self, "abuseipdbs")

    @property
    @pulumi.getter
    def amplitudes(self) -> Optional[Sequence['outputs.ProjectConnectorsAmplitude']]:
        """
        Amplitude, an analytics product that allows you to collects events from web and mobile apps, unify those and use those to better understand your customers needs.
        """
        return pulumi.get(self, "amplitudes")

    @property
    @pulumi.getter(name="auditWebhooks")
    def audit_webhooks(self) -> Optional[Sequence['outputs.ProjectConnectorsAuditWebhook']]:
        return pulumi.get(self, "audit_webhooks")

    @property
    @pulumi.getter(name="awsS3s")
    def aws_s3s(self) -> Optional[Sequence['outputs.ProjectConnectorsAwsS3']]:
        return pulumi.get(self, "aws_s3s")

    @property
    @pulumi.getter(name="awsTranslates")
    def aws_translates(self) -> Optional[Sequence['outputs.ProjectConnectorsAwsTranslate']]:
        return pulumi.get(self, "aws_translates")

    @property
    @pulumi.getter
    def clears(self) -> Optional[Sequence['outputs.ProjectConnectorsClear']]:
        """
        An identity verification platform that allow customers to digitally verify their identity from anywhere.
        """
        return pulumi.get(self, "clears")

    @property
    @pulumi.getter
    def datadogs(self) -> Optional[Sequence['outputs.ProjectConnectorsDatadog']]:
        """
        Datadog, an observability service for cloud-scale applications, providing monitoring of servers, databases, tools, and services, through a SaaS-based data analytics platform.
        """
        return pulumi.get(self, "datadogs")

    @property
    @pulumi.getter(name="devrevGrows")
    def devrev_grows(self) -> Optional[Sequence['outputs.ProjectConnectorsDevrevGrow']]:
        return pulumi.get(self, "devrev_grows")

    @property
    @pulumi.getter
    def docebos(self) -> Optional[Sequence['outputs.ProjectConnectorsDocebo']]:
        """
        Docebo is a cloud-based Learning Management System (LMS) designed to increase performance and learning engagement.
        """
        return pulumi.get(self, "docebos")

    @property
    @pulumi.getter(name="fingerprintDescopes")
    def fingerprint_descopes(self) -> Optional[Sequence['outputs.ProjectConnectorsFingerprintDescope']]:
        return pulumi.get(self, "fingerprint_descopes")

    @property
    @pulumi.getter
    def fingerprints(self) -> Optional[Sequence['outputs.ProjectConnectorsFingerprint']]:
        """
        Use the Fingerprint (formerly FingerprintJS) connector to add device intelligence and prevent fraud.
        """
        return pulumi.get(self, "fingerprints")

    @property
    @pulumi.getter
    def forters(self) -> Optional[Sequence['outputs.ProjectConnectorsForter']]:
        """
        Use the Forter connector for account fraud prevention.
        """
        return pulumi.get(self, "forters")

    @property
    @pulumi.getter(name="googleCloudTranslations")
    def google_cloud_translations(self) -> Optional[Sequence['outputs.ProjectConnectorsGoogleCloudTranslation']]:
        return pulumi.get(self, "google_cloud_translations")

    @property
    @pulumi.getter
    def hibps(self) -> Optional[Sequence['outputs.ProjectConnectorsHibp']]:
        """
        API to check if password appeared previously exposed in data breaches.
        """
        return pulumi.get(self, "hibps")

    @property
    @pulumi.getter(name="httpStaticIps")
    def http_static_ips(self) -> Optional[Sequence['outputs.ProjectConnectorsHttpStaticIp']]:
        return pulumi.get(self, "http_static_ips")

    @property
    @pulumi.getter
    def https(self) -> Optional[Sequence['outputs.ProjectConnectorsHttp']]:
        """
        A general purpose HTTP client
        """
        return pulumi.get(self, "https")

    @property
    @pulumi.getter
    def hubspots(self) -> Optional[Sequence['outputs.ProjectConnectorsHubspot']]:
        """
        HubSpot is a CRM platform with software, integrations, and resources needed to connect marketing, sales, content management, and customer service.
        """
        return pulumi.get(self, "hubspots")

    @property
    @pulumi.getter
    def intercoms(self) -> Optional[Sequence['outputs.ProjectConnectorsIntercom']]:
        """
        Intercom is a Conversational Relationship Platform (CRP).
        """
        return pulumi.get(self, "intercoms")

    @property
    @pulumi.getter
    def newrelics(self) -> Optional[Sequence['outputs.ProjectConnectorsNewrelic']]:
        """
        Use this connector to send audit events and troubleshooting logs to New Relic.
        """
        return pulumi.get(self, "newrelics")

    @property
    @pulumi.getter(name="recaptchaEnterprises")
    def recaptcha_enterprises(self) -> Optional[Sequence['outputs.ProjectConnectorsRecaptchaEnterprise']]:
        return pulumi.get(self, "recaptcha_enterprises")

    @property
    @pulumi.getter
    def recaptchas(self) -> Optional[Sequence['outputs.ProjectConnectorsRecaptcha']]:
        """
        reCAPTCHA is a free google service that protects your site from spam and abuse. It uses advanced risk analysis techniques to tell humans and bots apart.
        """
        return pulumi.get(self, "recaptchas")

    @property
    @pulumi.getter
    def rekognitions(self) -> Optional[Sequence['outputs.ProjectConnectorsRekognition']]:
        """
        AWS Rekognition, cloud-based AI service that offers computer vision capabilities for analyzing and processing images. Useful for registration and verification processes, and can be used to detect fraud and prevent identity theft.
        """
        return pulumi.get(self, "rekognitions")

    @property
    @pulumi.getter
    def salesforces(self) -> Optional[Sequence['outputs.ProjectConnectorsSalesforce']]:
        """
        Salesforce is a leading cloud-based Customer Relationship Management (CRM) platform that helps businesses streamline their sales, service, and marketing operations.
        """
        return pulumi.get(self, "salesforces")

    @property
    @pulumi.getter
    def segments(self) -> Optional[Sequence['outputs.ProjectConnectorsSegment']]:
        """
        Segment, an analytics product that allows you to collects events from web and mobile apps, unify those and use those to better understand your customers needs.
        """
        return pulumi.get(self, "segments")

    @property
    @pulumi.getter
    def sendgrids(self) -> Optional[Sequence['outputs.ProjectConnectorsSendgrid']]:
        return pulumi.get(self, "sendgrids")

    @property
    @pulumi.getter
    def smtps(self) -> Optional[Sequence['outputs.ProjectConnectorsSmtp']]:
        return pulumi.get(self, "smtps")

    @property
    @pulumi.getter
    def sumologics(self) -> Optional[Sequence['outputs.ProjectConnectorsSumologic']]:
        """
        Sumo Logic, fast troubleshooting and investigation with AI/ML-powered log analytics
        """
        return pulumi.get(self, "sumologics")

    @property
    @pulumi.getter
    def telesigns(self) -> Optional[Sequence['outputs.ProjectConnectorsTelesign']]:
        """
        Telesign Phone number intelligence API provides risk score for phone numbers.
        """
        return pulumi.get(self, "telesigns")

    @property
    @pulumi.getter
    def traceables(self) -> Optional[Sequence['outputs.ProjectConnectorsTraceable']]:
        """
        API security for a cloud-first, API-driven world.
        """
        return pulumi.get(self, "traceables")

    @property
    @pulumi.getter(name="twilioCores")
    def twilio_cores(self) -> Optional[Sequence['outputs.ProjectConnectorsTwilioCore']]:
        return pulumi.get(self, "twilio_cores")

    @property
    @pulumi.getter(name="twilioVerifies")
    def twilio_verifies(self) -> Optional[Sequence['outputs.ProjectConnectorsTwilioVerify']]:
        return pulumi.get(self, "twilio_verifies")

    @property
    @pulumi.getter
    def veriffs(self) -> Optional[Sequence['outputs.ProjectConnectorsVeriff']]:
        """
        AI-powered identity verification solution for identity fraud prevention, Know Your Customer compliance, and fast conversions of valuable customers.
        """
        return pulumi.get(self, "veriffs")


@pulumi.output_type
class ProjectConnectorsAbuseipdb(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "apiKey":
            suggest = "api_key"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsAbuseipdb. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsAbuseipdb.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsAbuseipdb.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 api_key: str,
                 name: str,
                 description: Optional[str] = None,
                 id: Optional[str] = None):
        """
        :param str api_key: The unique AbuseIPDB API key.
        :param str name: A custom name for your connector.
        :param str description: A description of what your connector is used for.
        """
        pulumi.set(__self__, "api_key", api_key)
        pulumi.set(__self__, "name", name)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter(name="apiKey")
    def api_key(self) -> str:
        """
        The unique AbuseIPDB API key.
        """
        return pulumi.get(self, "api_key")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")


@pulumi.output_type
class ProjectConnectorsAmplitude(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "apiKey":
            suggest = "api_key"
        elif key == "serverUrl":
            suggest = "server_url"
        elif key == "serverZone":
            suggest = "server_zone"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsAmplitude. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsAmplitude.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsAmplitude.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 api_key: str,
                 name: str,
                 description: Optional[str] = None,
                 id: Optional[str] = None,
                 server_url: Optional[str] = None,
                 server_zone: Optional[str] = None):
        """
        :param str api_key: The Amplitude API Key generated for the Descope service.
        :param str name: A custom name for your connector.
        :param str description: A description of what your connector is used for.
        :param str server_url: The server URL of the Amplitude API, when using different api or a custom domain in Amplitude.
        :param str server_zone: `EU` or `US`. Sets the Amplitude server zone. Set this to `EU` for Amplitude projects created in `EU` data center. Default is `US`.
        """
        pulumi.set(__self__, "api_key", api_key)
        pulumi.set(__self__, "name", name)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if server_url is not None:
            pulumi.set(__self__, "server_url", server_url)
        if server_zone is not None:
            pulumi.set(__self__, "server_zone", server_zone)

    @property
    @pulumi.getter(name="apiKey")
    def api_key(self) -> str:
        """
        The Amplitude API Key generated for the Descope service.
        """
        return pulumi.get(self, "api_key")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="serverUrl")
    def server_url(self) -> Optional[str]:
        """
        The server URL of the Amplitude API, when using different api or a custom domain in Amplitude.
        """
        return pulumi.get(self, "server_url")

    @property
    @pulumi.getter(name="serverZone")
    def server_zone(self) -> Optional[str]:
        """
        `EU` or `US`. Sets the Amplitude server zone. Set this to `EU` for Amplitude projects created in `EU` data center. Default is `US`.
        """
        return pulumi.get(self, "server_zone")


@pulumi.output_type
class ProjectConnectorsAuditWebhook(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "baseUrl":
            suggest = "base_url"
        elif key == "auditFilters":
            suggest = "audit_filters"
        elif key == "hmacSecret":
            suggest = "hmac_secret"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsAuditWebhook. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsAuditWebhook.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsAuditWebhook.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 base_url: str,
                 name: str,
                 audit_filters: Optional[str] = None,
                 authentication: Optional['outputs.ProjectConnectorsAuditWebhookAuthentication'] = None,
                 description: Optional[str] = None,
                 headers: Optional[Mapping[str, str]] = None,
                 hmac_secret: Optional[str] = None,
                 id: Optional[str] = None,
                 insecure: Optional[bool] = None):
        """
        :param str base_url: The base URL to fetch
        :param str name: A custom name for your connector.
        :param str audit_filters: Specify which events will be sent to the external audit service (including tenant selection).
        :param 'ProjectConnectorsAuditWebhookAuthenticationArgs' authentication: Authentication Information
        :param str description: A description of what your connector is used for.
        :param Mapping[str, str] headers: The headers to send with the request
        :param str hmac_secret: HMAC is a method for message signing with a symmetrical key. This secret will be used to sign the payload, and the resulting signature will be sent in the `x-descope-webhook-s256` header. The receiving service should use this secret to verify the integrity and authenticity of the payload by checking the provided signature
        :param bool insecure: Will ignore certificate errors raised by the client
        """
        pulumi.set(__self__, "base_url", base_url)
        pulumi.set(__self__, "name", name)
        if audit_filters is not None:
            pulumi.set(__self__, "audit_filters", audit_filters)
        if authentication is not None:
            pulumi.set(__self__, "authentication", authentication)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if headers is not None:
            pulumi.set(__self__, "headers", headers)
        if hmac_secret is not None:
            pulumi.set(__self__, "hmac_secret", hmac_secret)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if insecure is not None:
            pulumi.set(__self__, "insecure", insecure)

    @property
    @pulumi.getter(name="baseUrl")
    def base_url(self) -> str:
        """
        The base URL to fetch
        """
        return pulumi.get(self, "base_url")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="auditFilters")
    def audit_filters(self) -> Optional[str]:
        """
        Specify which events will be sent to the external audit service (including tenant selection).
        """
        return pulumi.get(self, "audit_filters")

    @property
    @pulumi.getter
    def authentication(self) -> Optional['outputs.ProjectConnectorsAuditWebhookAuthentication']:
        """
        Authentication Information
        """
        return pulumi.get(self, "authentication")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def headers(self) -> Optional[Mapping[str, str]]:
        """
        The headers to send with the request
        """
        return pulumi.get(self, "headers")

    @property
    @pulumi.getter(name="hmacSecret")
    def hmac_secret(self) -> Optional[str]:
        """
        HMAC is a method for message signing with a symmetrical key. This secret will be used to sign the payload, and the resulting signature will be sent in the `x-descope-webhook-s256` header. The receiving service should use this secret to verify the integrity and authenticity of the payload by checking the provided signature
        """
        return pulumi.get(self, "hmac_secret")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")

    @property
    @pulumi.getter
    def insecure(self) -> Optional[bool]:
        """
        Will ignore certificate errors raised by the client
        """
        return pulumi.get(self, "insecure")


@pulumi.output_type
class ProjectConnectorsAuditWebhookAuthentication(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "apiKey":
            suggest = "api_key"
        elif key == "bearerToken":
            suggest = "bearer_token"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsAuditWebhookAuthentication. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsAuditWebhookAuthentication.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsAuditWebhookAuthentication.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 api_key: Optional['outputs.ProjectConnectorsAuditWebhookAuthenticationApiKey'] = None,
                 basic: Optional['outputs.ProjectConnectorsAuditWebhookAuthenticationBasic'] = None,
                 bearer_token: Optional[str] = None):
        if api_key is not None:
            pulumi.set(__self__, "api_key", api_key)
        if basic is not None:
            pulumi.set(__self__, "basic", basic)
        if bearer_token is not None:
            pulumi.set(__self__, "bearer_token", bearer_token)

    @property
    @pulumi.getter(name="apiKey")
    def api_key(self) -> Optional['outputs.ProjectConnectorsAuditWebhookAuthenticationApiKey']:
        return pulumi.get(self, "api_key")

    @property
    @pulumi.getter
    def basic(self) -> Optional['outputs.ProjectConnectorsAuditWebhookAuthenticationBasic']:
        return pulumi.get(self, "basic")

    @property
    @pulumi.getter(name="bearerToken")
    def bearer_token(self) -> Optional[str]:
        return pulumi.get(self, "bearer_token")


@pulumi.output_type
class ProjectConnectorsAuditWebhookAuthenticationApiKey(dict):
    def __init__(__self__, *,
                 key: str,
                 token: str):
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "token", token)

    @property
    @pulumi.getter
    def key(self) -> str:
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def token(self) -> str:
        return pulumi.get(self, "token")


@pulumi.output_type
class ProjectConnectorsAuditWebhookAuthenticationBasic(dict):
    def __init__(__self__, *,
                 password: str,
                 username: str):
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def password(self) -> str:
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def username(self) -> str:
        return pulumi.get(self, "username")


@pulumi.output_type
class ProjectConnectorsAwsS3(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "accessKeyId":
            suggest = "access_key_id"
        elif key == "secretAccessKey":
            suggest = "secret_access_key"
        elif key == "auditEnabled":
            suggest = "audit_enabled"
        elif key == "auditFilters":
            suggest = "audit_filters"
        elif key == "troubleshootLogEnabled":
            suggest = "troubleshoot_log_enabled"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsAwsS3. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsAwsS3.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsAwsS3.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 access_key_id: str,
                 bucket: str,
                 name: str,
                 region: str,
                 secret_access_key: str,
                 audit_enabled: Optional[bool] = None,
                 audit_filters: Optional[str] = None,
                 description: Optional[str] = None,
                 id: Optional[str] = None,
                 troubleshoot_log_enabled: Optional[bool] = None):
        """
        :param str access_key_id: The unique AWS access key ID.
        :param str bucket: The AWS S3 bucket. This bucket should already exist for the connector to work.
        :param str name: A custom name for your connector.
        :param str region: The AWS S3 region, e.g. `us-east-1`.
        :param str secret_access_key: The secret AWS access key.
        :param str description: A description of what your connector is used for.
        """
        pulumi.set(__self__, "access_key_id", access_key_id)
        pulumi.set(__self__, "bucket", bucket)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "secret_access_key", secret_access_key)
        if audit_enabled is not None:
            pulumi.set(__self__, "audit_enabled", audit_enabled)
        if audit_filters is not None:
            pulumi.set(__self__, "audit_filters", audit_filters)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if troubleshoot_log_enabled is not None:
            pulumi.set(__self__, "troubleshoot_log_enabled", troubleshoot_log_enabled)

    @property
    @pulumi.getter(name="accessKeyId")
    def access_key_id(self) -> str:
        """
        The unique AWS access key ID.
        """
        return pulumi.get(self, "access_key_id")

    @property
    @pulumi.getter
    def bucket(self) -> str:
        """
        The AWS S3 bucket. This bucket should already exist for the connector to work.
        """
        return pulumi.get(self, "bucket")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def region(self) -> str:
        """
        The AWS S3 region, e.g. `us-east-1`.
        """
        return pulumi.get(self, "region")

    @property
    @pulumi.getter(name="secretAccessKey")
    def secret_access_key(self) -> str:
        """
        The secret AWS access key.
        """
        return pulumi.get(self, "secret_access_key")

    @property
    @pulumi.getter(name="auditEnabled")
    def audit_enabled(self) -> Optional[bool]:
        return pulumi.get(self, "audit_enabled")

    @property
    @pulumi.getter(name="auditFilters")
    def audit_filters(self) -> Optional[str]:
        return pulumi.get(self, "audit_filters")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="troubleshootLogEnabled")
    def troubleshoot_log_enabled(self) -> Optional[bool]:
        return pulumi.get(self, "troubleshoot_log_enabled")


@pulumi.output_type
class ProjectConnectorsAwsTranslate(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "accessKeyId":
            suggest = "access_key_id"
        elif key == "secretAccessKey":
            suggest = "secret_access_key"
        elif key == "sessionToken":
            suggest = "session_token"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsAwsTranslate. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsAwsTranslate.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsAwsTranslate.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 access_key_id: str,
                 name: str,
                 region: str,
                 secret_access_key: str,
                 description: Optional[str] = None,
                 id: Optional[str] = None,
                 session_token: Optional[str] = None):
        """
        :param str access_key_id: AWS access key ID.
        :param str name: A custom name for your connector.
        :param str region: The AWS region to which this client will send requests. (e.g. us-east-1.)
        :param str secret_access_key: AWS secret access key.
        :param str description: A description of what your connector is used for.
        :param str session_token: (Optional) A security or session token to use with these credentials. Usually present for temporary credentials.
        """
        pulumi.set(__self__, "access_key_id", access_key_id)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "region", region)
        pulumi.set(__self__, "secret_access_key", secret_access_key)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if session_token is not None:
            pulumi.set(__self__, "session_token", session_token)

    @property
    @pulumi.getter(name="accessKeyId")
    def access_key_id(self) -> str:
        """
        AWS access key ID.
        """
        return pulumi.get(self, "access_key_id")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def region(self) -> str:
        """
        The AWS region to which this client will send requests. (e.g. us-east-1.)
        """
        return pulumi.get(self, "region")

    @property
    @pulumi.getter(name="secretAccessKey")
    def secret_access_key(self) -> str:
        """
        AWS secret access key.
        """
        return pulumi.get(self, "secret_access_key")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="sessionToken")
    def session_token(self) -> Optional[str]:
        """
        (Optional) A security or session token to use with these credentials. Usually present for temporary credentials.
        """
        return pulumi.get(self, "session_token")


@pulumi.output_type
class ProjectConnectorsClear(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "apiKey":
            suggest = "api_key"
        elif key == "projectId":
            suggest = "project_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsClear. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsClear.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsClear.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 api_key: str,
                 name: str,
                 project_id: str,
                 description: Optional[str] = None,
                 id: Optional[str] = None):
        """
        :param str api_key: Your CLEAR API key.
        :param str name: A custom name for your connector.
        :param str project_id: Your CLEAR project ID.
        :param str description: A description of what your connector is used for.
        """
        pulumi.set(__self__, "api_key", api_key)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "project_id", project_id)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter(name="apiKey")
    def api_key(self) -> str:
        """
        Your CLEAR API key.
        """
        return pulumi.get(self, "api_key")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="projectId")
    def project_id(self) -> str:
        """
        Your CLEAR project ID.
        """
        return pulumi.get(self, "project_id")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")


@pulumi.output_type
class ProjectConnectorsDatadog(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "apiKey":
            suggest = "api_key"
        elif key == "auditEnabled":
            suggest = "audit_enabled"
        elif key == "auditFilters":
            suggest = "audit_filters"
        elif key == "troubleshootLogEnabled":
            suggest = "troubleshoot_log_enabled"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsDatadog. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsDatadog.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsDatadog.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 api_key: str,
                 name: str,
                 audit_enabled: Optional[bool] = None,
                 audit_filters: Optional[str] = None,
                 description: Optional[str] = None,
                 id: Optional[str] = None,
                 site: Optional[str] = None,
                 troubleshoot_log_enabled: Optional[bool] = None):
        """
        :param str api_key: The unique Datadog organization key.
        :param str name: A custom name for your connector.
        :param str description: A description of what your connector is used for.
        :param str site: The Datadog site to send logs to. Default is `datadoghq.com`. European, free tier and other customers should set their site accordingly.
        """
        pulumi.set(__self__, "api_key", api_key)
        pulumi.set(__self__, "name", name)
        if audit_enabled is not None:
            pulumi.set(__self__, "audit_enabled", audit_enabled)
        if audit_filters is not None:
            pulumi.set(__self__, "audit_filters", audit_filters)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if site is not None:
            pulumi.set(__self__, "site", site)
        if troubleshoot_log_enabled is not None:
            pulumi.set(__self__, "troubleshoot_log_enabled", troubleshoot_log_enabled)

    @property
    @pulumi.getter(name="apiKey")
    def api_key(self) -> str:
        """
        The unique Datadog organization key.
        """
        return pulumi.get(self, "api_key")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="auditEnabled")
    def audit_enabled(self) -> Optional[bool]:
        return pulumi.get(self, "audit_enabled")

    @property
    @pulumi.getter(name="auditFilters")
    def audit_filters(self) -> Optional[str]:
        return pulumi.get(self, "audit_filters")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")

    @property
    @pulumi.getter
    def site(self) -> Optional[str]:
        """
        The Datadog site to send logs to. Default is `datadoghq.com`. European, free tier and other customers should set their site accordingly.
        """
        return pulumi.get(self, "site")

    @property
    @pulumi.getter(name="troubleshootLogEnabled")
    def troubleshoot_log_enabled(self) -> Optional[bool]:
        return pulumi.get(self, "troubleshoot_log_enabled")


@pulumi.output_type
class ProjectConnectorsDevrevGrow(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "apiKey":
            suggest = "api_key"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsDevrevGrow. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsDevrevGrow.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsDevrevGrow.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 api_key: str,
                 name: str,
                 description: Optional[str] = None,
                 id: Optional[str] = None):
        """
        :param str api_key: Authentication to DevRev APIs requires a personal access token (PAT).
        :param str name: A custom name for your connector.
        :param str description: A description of what your connector is used for.
        """
        pulumi.set(__self__, "api_key", api_key)
        pulumi.set(__self__, "name", name)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter(name="apiKey")
    def api_key(self) -> str:
        """
        Authentication to DevRev APIs requires a personal access token (PAT).
        """
        return pulumi.get(self, "api_key")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")


@pulumi.output_type
class ProjectConnectorsDocebo(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "baseUrl":
            suggest = "base_url"
        elif key == "clientId":
            suggest = "client_id"
        elif key == "clientSecret":
            suggest = "client_secret"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsDocebo. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsDocebo.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsDocebo.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 base_url: str,
                 client_id: str,
                 client_secret: str,
                 name: str,
                 password: str,
                 username: str,
                 description: Optional[str] = None,
                 id: Optional[str] = None):
        """
        :param str base_url: The Docebo api base url.
        :param str client_id: The Docebo OAuth 2.0 app client ID.
        :param str client_secret: The Docebo OAuth 2.0 app client secret.
        :param str name: A custom name for your connector.
        :param str password: The Docebo user's password.
        :param str username: The Docebo username.
        :param str description: A description of what your connector is used for.
        """
        pulumi.set(__self__, "base_url", base_url)
        pulumi.set(__self__, "client_id", client_id)
        pulumi.set(__self__, "client_secret", client_secret)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "username", username)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter(name="baseUrl")
    def base_url(self) -> str:
        """
        The Docebo api base url.
        """
        return pulumi.get(self, "base_url")

    @property
    @pulumi.getter(name="clientId")
    def client_id(self) -> str:
        """
        The Docebo OAuth 2.0 app client ID.
        """
        return pulumi.get(self, "client_id")

    @property
    @pulumi.getter(name="clientSecret")
    def client_secret(self) -> str:
        """
        The Docebo OAuth 2.0 app client secret.
        """
        return pulumi.get(self, "client_secret")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def password(self) -> str:
        """
        The Docebo user's password.
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def username(self) -> str:
        """
        The Docebo username.
        """
        return pulumi.get(self, "username")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")


@pulumi.output_type
class ProjectConnectorsFingerprint(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "publicApiKey":
            suggest = "public_api_key"
        elif key == "secretApiKey":
            suggest = "secret_api_key"
        elif key == "cloudflareEndpointUrl":
            suggest = "cloudflare_endpoint_url"
        elif key == "cloudflareScriptUrl":
            suggest = "cloudflare_script_url"
        elif key == "useCloudflareIntegration":
            suggest = "use_cloudflare_integration"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsFingerprint. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsFingerprint.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsFingerprint.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 name: str,
                 public_api_key: str,
                 secret_api_key: str,
                 cloudflare_endpoint_url: Optional[str] = None,
                 cloudflare_script_url: Optional[str] = None,
                 description: Optional[str] = None,
                 id: Optional[str] = None,
                 use_cloudflare_integration: Optional[bool] = None):
        """
        :param str name: A custom name for your connector.
        :param str public_api_key: The Fingerprint public API key.
        :param str secret_api_key: The Fingerprint secret API key.
        :param str cloudflare_endpoint_url: The Cloudflare integration Endpoint URL.
        :param str cloudflare_script_url: The Cloudflare integration Script URL.
        :param str description: A description of what your connector is used for.
        :param bool use_cloudflare_integration: Enable to configure the relevant Cloudflare integration parameters if Cloudflare integration is set in your Fingerprint account.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "public_api_key", public_api_key)
        pulumi.set(__self__, "secret_api_key", secret_api_key)
        if cloudflare_endpoint_url is not None:
            pulumi.set(__self__, "cloudflare_endpoint_url", cloudflare_endpoint_url)
        if cloudflare_script_url is not None:
            pulumi.set(__self__, "cloudflare_script_url", cloudflare_script_url)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if use_cloudflare_integration is not None:
            pulumi.set(__self__, "use_cloudflare_integration", use_cloudflare_integration)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="publicApiKey")
    def public_api_key(self) -> str:
        """
        The Fingerprint public API key.
        """
        return pulumi.get(self, "public_api_key")

    @property
    @pulumi.getter(name="secretApiKey")
    def secret_api_key(self) -> str:
        """
        The Fingerprint secret API key.
        """
        return pulumi.get(self, "secret_api_key")

    @property
    @pulumi.getter(name="cloudflareEndpointUrl")
    def cloudflare_endpoint_url(self) -> Optional[str]:
        """
        The Cloudflare integration Endpoint URL.
        """
        return pulumi.get(self, "cloudflare_endpoint_url")

    @property
    @pulumi.getter(name="cloudflareScriptUrl")
    def cloudflare_script_url(self) -> Optional[str]:
        """
        The Cloudflare integration Script URL.
        """
        return pulumi.get(self, "cloudflare_script_url")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="useCloudflareIntegration")
    def use_cloudflare_integration(self) -> Optional[bool]:
        """
        Enable to configure the relevant Cloudflare integration parameters if Cloudflare integration is set in your Fingerprint account.
        """
        return pulumi.get(self, "use_cloudflare_integration")


@pulumi.output_type
class ProjectConnectorsFingerprintDescope(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "customDomain":
            suggest = "custom_domain"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsFingerprintDescope. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsFingerprintDescope.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsFingerprintDescope.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 name: str,
                 custom_domain: Optional[str] = None,
                 description: Optional[str] = None,
                 id: Optional[str] = None):
        """
        :param str name: A custom name for your connector.
        :param str custom_domain: The custom domain to fetch
        :param str description: A description of what your connector is used for.
        """
        pulumi.set(__self__, "name", name)
        if custom_domain is not None:
            pulumi.set(__self__, "custom_domain", custom_domain)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="customDomain")
    def custom_domain(self) -> Optional[str]:
        """
        The custom domain to fetch
        """
        return pulumi.get(self, "custom_domain")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")


@pulumi.output_type
class ProjectConnectorsForter(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "secretKey":
            suggest = "secret_key"
        elif key == "siteId":
            suggest = "site_id"
        elif key == "overrideIpAddress":
            suggest = "override_ip_address"
        elif key == "overrideUserEmail":
            suggest = "override_user_email"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsForter. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsForter.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsForter.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 name: str,
                 secret_key: str,
                 site_id: str,
                 description: Optional[str] = None,
                 id: Optional[str] = None,
                 override_ip_address: Optional[str] = None,
                 override_user_email: Optional[str] = None,
                 overrides: Optional[bool] = None):
        """
        :param str name: A custom name for your connector.
        :param str secret_key: The Forter secret key.
        :param str site_id: The Forter site ID.
        :param str description: A description of what your connector is used for.
        :param str override_ip_address: Override the user IP address.
        :param str override_user_email: Override the user email.
        :param bool overrides: Override the user's IP address or email so that Forter can provide a specific decision or recommendation. Contact the Forter team for further details. Note: Overriding the user IP address or email is intended for testing purpose and should not be utilized in production environments.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "secret_key", secret_key)
        pulumi.set(__self__, "site_id", site_id)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if override_ip_address is not None:
            pulumi.set(__self__, "override_ip_address", override_ip_address)
        if override_user_email is not None:
            pulumi.set(__self__, "override_user_email", override_user_email)
        if overrides is not None:
            pulumi.set(__self__, "overrides", overrides)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="secretKey")
    def secret_key(self) -> str:
        """
        The Forter secret key.
        """
        return pulumi.get(self, "secret_key")

    @property
    @pulumi.getter(name="siteId")
    def site_id(self) -> str:
        """
        The Forter site ID.
        """
        return pulumi.get(self, "site_id")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="overrideIpAddress")
    def override_ip_address(self) -> Optional[str]:
        """
        Override the user IP address.
        """
        return pulumi.get(self, "override_ip_address")

    @property
    @pulumi.getter(name="overrideUserEmail")
    def override_user_email(self) -> Optional[str]:
        """
        Override the user email.
        """
        return pulumi.get(self, "override_user_email")

    @property
    @pulumi.getter
    def overrides(self) -> Optional[bool]:
        """
        Override the user's IP address or email so that Forter can provide a specific decision or recommendation. Contact the Forter team for further details. Note: Overriding the user IP address or email is intended for testing purpose and should not be utilized in production environments.
        """
        return pulumi.get(self, "overrides")


@pulumi.output_type
class ProjectConnectorsGoogleCloudTranslation(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "projectId":
            suggest = "project_id"
        elif key == "serviceAccountJson":
            suggest = "service_account_json"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsGoogleCloudTranslation. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsGoogleCloudTranslation.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsGoogleCloudTranslation.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 name: str,
                 project_id: str,
                 service_account_json: str,
                 description: Optional[str] = None,
                 id: Optional[str] = None):
        """
        :param str name: A custom name for your connector.
        :param str project_id: The Google Cloud project ID where the Google Cloud Translation is managed.
        :param str service_account_json: Service Account JSON associated with the current project.
        :param str description: A description of what your connector is used for.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "project_id", project_id)
        pulumi.set(__self__, "service_account_json", service_account_json)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="projectId")
    def project_id(self) -> str:
        """
        The Google Cloud project ID where the Google Cloud Translation is managed.
        """
        return pulumi.get(self, "project_id")

    @property
    @pulumi.getter(name="serviceAccountJson")
    def service_account_json(self) -> str:
        """
        Service Account JSON associated with the current project.
        """
        return pulumi.get(self, "service_account_json")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")


@pulumi.output_type
class ProjectConnectorsHibp(dict):
    def __init__(__self__, *,
                 name: str,
                 description: Optional[str] = None,
                 id: Optional[str] = None):
        """
        :param str name: A custom name for your connector.
        :param str description: A description of what your connector is used for.
        """
        pulumi.set(__self__, "name", name)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")


@pulumi.output_type
class ProjectConnectorsHttp(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "baseUrl":
            suggest = "base_url"
        elif key == "hmacSecret":
            suggest = "hmac_secret"
        elif key == "includeHeadersInContext":
            suggest = "include_headers_in_context"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsHttp. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsHttp.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsHttp.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 base_url: str,
                 name: str,
                 authentication: Optional['outputs.ProjectConnectorsHttpAuthentication'] = None,
                 description: Optional[str] = None,
                 headers: Optional[Mapping[str, str]] = None,
                 hmac_secret: Optional[str] = None,
                 id: Optional[str] = None,
                 include_headers_in_context: Optional[bool] = None,
                 insecure: Optional[bool] = None):
        """
        :param str base_url: The base URL to fetch
        :param str name: A custom name for your connector.
        :param 'ProjectConnectorsHttpAuthenticationArgs' authentication: Authentication Information
        :param str description: A description of what your connector is used for.
        :param Mapping[str, str] headers: The headers to send with the request
        :param str hmac_secret: HMAC is a method for message signing with a symmetrical key. This secret will be used to sign the base64 encoded payload, and the resulting signature will be sent in the `x-descope-webhook-s256` header. The receiving service should use this secret to verify the integrity and authenticity of the payload by checking the provided signature
        :param bool include_headers_in_context: The connector response context will also include the headers. The context will have a "body" attribute and a "headers" attribute. See more details in the help guide
        :param bool insecure: Will ignore certificate errors raised by the client
        """
        pulumi.set(__self__, "base_url", base_url)
        pulumi.set(__self__, "name", name)
        if authentication is not None:
            pulumi.set(__self__, "authentication", authentication)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if headers is not None:
            pulumi.set(__self__, "headers", headers)
        if hmac_secret is not None:
            pulumi.set(__self__, "hmac_secret", hmac_secret)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if include_headers_in_context is not None:
            pulumi.set(__self__, "include_headers_in_context", include_headers_in_context)
        if insecure is not None:
            pulumi.set(__self__, "insecure", insecure)

    @property
    @pulumi.getter(name="baseUrl")
    def base_url(self) -> str:
        """
        The base URL to fetch
        """
        return pulumi.get(self, "base_url")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def authentication(self) -> Optional['outputs.ProjectConnectorsHttpAuthentication']:
        """
        Authentication Information
        """
        return pulumi.get(self, "authentication")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def headers(self) -> Optional[Mapping[str, str]]:
        """
        The headers to send with the request
        """
        return pulumi.get(self, "headers")

    @property
    @pulumi.getter(name="hmacSecret")
    def hmac_secret(self) -> Optional[str]:
        """
        HMAC is a method for message signing with a symmetrical key. This secret will be used to sign the base64 encoded payload, and the resulting signature will be sent in the `x-descope-webhook-s256` header. The receiving service should use this secret to verify the integrity and authenticity of the payload by checking the provided signature
        """
        return pulumi.get(self, "hmac_secret")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="includeHeadersInContext")
    def include_headers_in_context(self) -> Optional[bool]:
        """
        The connector response context will also include the headers. The context will have a "body" attribute and a "headers" attribute. See more details in the help guide
        """
        return pulumi.get(self, "include_headers_in_context")

    @property
    @pulumi.getter
    def insecure(self) -> Optional[bool]:
        """
        Will ignore certificate errors raised by the client
        """
        return pulumi.get(self, "insecure")


@pulumi.output_type
class ProjectConnectorsHttpAuthentication(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "apiKey":
            suggest = "api_key"
        elif key == "bearerToken":
            suggest = "bearer_token"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsHttpAuthentication. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsHttpAuthentication.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsHttpAuthentication.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 api_key: Optional['outputs.ProjectConnectorsHttpAuthenticationApiKey'] = None,
                 basic: Optional['outputs.ProjectConnectorsHttpAuthenticationBasic'] = None,
                 bearer_token: Optional[str] = None):
        if api_key is not None:
            pulumi.set(__self__, "api_key", api_key)
        if basic is not None:
            pulumi.set(__self__, "basic", basic)
        if bearer_token is not None:
            pulumi.set(__self__, "bearer_token", bearer_token)

    @property
    @pulumi.getter(name="apiKey")
    def api_key(self) -> Optional['outputs.ProjectConnectorsHttpAuthenticationApiKey']:
        return pulumi.get(self, "api_key")

    @property
    @pulumi.getter
    def basic(self) -> Optional['outputs.ProjectConnectorsHttpAuthenticationBasic']:
        return pulumi.get(self, "basic")

    @property
    @pulumi.getter(name="bearerToken")
    def bearer_token(self) -> Optional[str]:
        return pulumi.get(self, "bearer_token")


@pulumi.output_type
class ProjectConnectorsHttpAuthenticationApiKey(dict):
    def __init__(__self__, *,
                 key: str,
                 token: str):
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "token", token)

    @property
    @pulumi.getter
    def key(self) -> str:
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def token(self) -> str:
        return pulumi.get(self, "token")


@pulumi.output_type
class ProjectConnectorsHttpAuthenticationBasic(dict):
    def __init__(__self__, *,
                 password: str,
                 username: str):
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def password(self) -> str:
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def username(self) -> str:
        return pulumi.get(self, "username")


@pulumi.output_type
class ProjectConnectorsHttpStaticIp(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "baseUrl":
            suggest = "base_url"
        elif key == "hmacSecret":
            suggest = "hmac_secret"
        elif key == "includeHeadersInContext":
            suggest = "include_headers_in_context"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsHttpStaticIp. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsHttpStaticIp.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsHttpStaticIp.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 base_url: str,
                 name: str,
                 authentication: Optional['outputs.ProjectConnectorsHttpStaticIpAuthentication'] = None,
                 description: Optional[str] = None,
                 headers: Optional[Mapping[str, str]] = None,
                 hmac_secret: Optional[str] = None,
                 id: Optional[str] = None,
                 include_headers_in_context: Optional[bool] = None,
                 insecure: Optional[bool] = None):
        """
        :param str base_url: The base URL to fetch
        :param str name: A custom name for your connector.
        :param 'ProjectConnectorsHttpStaticIpAuthenticationArgs' authentication: Authentication Information
        :param str description: A description of what your connector is used for.
        :param Mapping[str, str] headers: The headers to send with the request
        :param str hmac_secret: HMAC is a method for message signing with a symmetrical key. This secret will be used to sign the base64 encoded payload, and the resulting signature will be sent in the `x-descope-webhook-s256` header. The receiving service should use this secret to verify the integrity and authenticity of the payload by checking the provided signature
        :param bool include_headers_in_context: The connector response context will also include the headers. The context will have a "body" attribute and a "headers" attribute. See more details in the help guide
        :param bool insecure: Will ignore certificate errors raised by the client
        """
        pulumi.set(__self__, "base_url", base_url)
        pulumi.set(__self__, "name", name)
        if authentication is not None:
            pulumi.set(__self__, "authentication", authentication)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if headers is not None:
            pulumi.set(__self__, "headers", headers)
        if hmac_secret is not None:
            pulumi.set(__self__, "hmac_secret", hmac_secret)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if include_headers_in_context is not None:
            pulumi.set(__self__, "include_headers_in_context", include_headers_in_context)
        if insecure is not None:
            pulumi.set(__self__, "insecure", insecure)

    @property
    @pulumi.getter(name="baseUrl")
    def base_url(self) -> str:
        """
        The base URL to fetch
        """
        return pulumi.get(self, "base_url")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def authentication(self) -> Optional['outputs.ProjectConnectorsHttpStaticIpAuthentication']:
        """
        Authentication Information
        """
        return pulumi.get(self, "authentication")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def headers(self) -> Optional[Mapping[str, str]]:
        """
        The headers to send with the request
        """
        return pulumi.get(self, "headers")

    @property
    @pulumi.getter(name="hmacSecret")
    def hmac_secret(self) -> Optional[str]:
        """
        HMAC is a method for message signing with a symmetrical key. This secret will be used to sign the base64 encoded payload, and the resulting signature will be sent in the `x-descope-webhook-s256` header. The receiving service should use this secret to verify the integrity and authenticity of the payload by checking the provided signature
        """
        return pulumi.get(self, "hmac_secret")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="includeHeadersInContext")
    def include_headers_in_context(self) -> Optional[bool]:
        """
        The connector response context will also include the headers. The context will have a "body" attribute and a "headers" attribute. See more details in the help guide
        """
        return pulumi.get(self, "include_headers_in_context")

    @property
    @pulumi.getter
    def insecure(self) -> Optional[bool]:
        """
        Will ignore certificate errors raised by the client
        """
        return pulumi.get(self, "insecure")


@pulumi.output_type
class ProjectConnectorsHttpStaticIpAuthentication(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "apiKey":
            suggest = "api_key"
        elif key == "bearerToken":
            suggest = "bearer_token"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsHttpStaticIpAuthentication. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsHttpStaticIpAuthentication.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsHttpStaticIpAuthentication.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 api_key: Optional['outputs.ProjectConnectorsHttpStaticIpAuthenticationApiKey'] = None,
                 basic: Optional['outputs.ProjectConnectorsHttpStaticIpAuthenticationBasic'] = None,
                 bearer_token: Optional[str] = None):
        if api_key is not None:
            pulumi.set(__self__, "api_key", api_key)
        if basic is not None:
            pulumi.set(__self__, "basic", basic)
        if bearer_token is not None:
            pulumi.set(__self__, "bearer_token", bearer_token)

    @property
    @pulumi.getter(name="apiKey")
    def api_key(self) -> Optional['outputs.ProjectConnectorsHttpStaticIpAuthenticationApiKey']:
        return pulumi.get(self, "api_key")

    @property
    @pulumi.getter
    def basic(self) -> Optional['outputs.ProjectConnectorsHttpStaticIpAuthenticationBasic']:
        return pulumi.get(self, "basic")

    @property
    @pulumi.getter(name="bearerToken")
    def bearer_token(self) -> Optional[str]:
        return pulumi.get(self, "bearer_token")


@pulumi.output_type
class ProjectConnectorsHttpStaticIpAuthenticationApiKey(dict):
    def __init__(__self__, *,
                 key: str,
                 token: str):
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "token", token)

    @property
    @pulumi.getter
    def key(self) -> str:
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def token(self) -> str:
        return pulumi.get(self, "token")


@pulumi.output_type
class ProjectConnectorsHttpStaticIpAuthenticationBasic(dict):
    def __init__(__self__, *,
                 password: str,
                 username: str):
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "username", username)

    @property
    @pulumi.getter
    def password(self) -> str:
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def username(self) -> str:
        return pulumi.get(self, "username")


@pulumi.output_type
class ProjectConnectorsHubspot(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "accessToken":
            suggest = "access_token"
        elif key == "baseUrl":
            suggest = "base_url"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsHubspot. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsHubspot.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsHubspot.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 access_token: str,
                 name: str,
                 base_url: Optional[str] = None,
                 description: Optional[str] = None,
                 id: Optional[str] = None):
        """
        :param str access_token: The HubSpot private API access token generated for the Descope service.
        :param str name: A custom name for your connector.
        :param str base_url: The base URL of the HubSpot API, when using a custom domain in HubSpot, default value is https://api.hubapi.com .
        :param str description: A description of what your connector is used for.
        """
        pulumi.set(__self__, "access_token", access_token)
        pulumi.set(__self__, "name", name)
        if base_url is not None:
            pulumi.set(__self__, "base_url", base_url)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter(name="accessToken")
    def access_token(self) -> str:
        """
        The HubSpot private API access token generated for the Descope service.
        """
        return pulumi.get(self, "access_token")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="baseUrl")
    def base_url(self) -> Optional[str]:
        """
        The base URL of the HubSpot API, when using a custom domain in HubSpot, default value is https://api.hubapi.com .
        """
        return pulumi.get(self, "base_url")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")


@pulumi.output_type
class ProjectConnectorsIntercom(dict):
    def __init__(__self__, *,
                 name: str,
                 token: str,
                 description: Optional[str] = None,
                 id: Optional[str] = None,
                 region: Optional[str] = None):
        """
        :param str name: A custom name for your connector.
        :param str token: The Intercom access token.
        :param str description: A description of what your connector is used for.
        :param str region: Regional Hosting - US, EU, or AU. default: US
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "token", token)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if region is not None:
            pulumi.set(__self__, "region", region)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def token(self) -> str:
        """
        The Intercom access token.
        """
        return pulumi.get(self, "token")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")

    @property
    @pulumi.getter
    def region(self) -> Optional[str]:
        """
        Regional Hosting - US, EU, or AU. default: US
        """
        return pulumi.get(self, "region")


@pulumi.output_type
class ProjectConnectorsNewrelic(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "apiKey":
            suggest = "api_key"
        elif key == "auditEnabled":
            suggest = "audit_enabled"
        elif key == "auditFilters":
            suggest = "audit_filters"
        elif key == "dataCenter":
            suggest = "data_center"
        elif key == "logsPrefix":
            suggest = "logs_prefix"
        elif key == "overrideLogsPrefix":
            suggest = "override_logs_prefix"
        elif key == "troubleshootLogEnabled":
            suggest = "troubleshoot_log_enabled"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsNewrelic. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsNewrelic.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsNewrelic.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 api_key: str,
                 name: str,
                 audit_enabled: Optional[bool] = None,
                 audit_filters: Optional[str] = None,
                 data_center: Optional[str] = None,
                 description: Optional[str] = None,
                 id: Optional[str] = None,
                 logs_prefix: Optional[str] = None,
                 override_logs_prefix: Optional[bool] = None,
                 troubleshoot_log_enabled: Optional[bool] = None):
        """
        :param str api_key: Ingest License Key of the account you want to report data to.
        :param str name: A custom name for your connector.
        :param str data_center: The New Relic data center the account belongs to. Possible values are: `US`, `EU`, `FedRAMP`. Default is `US`.
        :param str description: A description of what your connector is used for.
        :param str logs_prefix: Specify a custom prefix for all log fields. The default prefix is `descope.`.
        :param bool override_logs_prefix: Enable this option to use a custom prefix for log fields.
        """
        pulumi.set(__self__, "api_key", api_key)
        pulumi.set(__self__, "name", name)
        if audit_enabled is not None:
            pulumi.set(__self__, "audit_enabled", audit_enabled)
        if audit_filters is not None:
            pulumi.set(__self__, "audit_filters", audit_filters)
        if data_center is not None:
            pulumi.set(__self__, "data_center", data_center)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if logs_prefix is not None:
            pulumi.set(__self__, "logs_prefix", logs_prefix)
        if override_logs_prefix is not None:
            pulumi.set(__self__, "override_logs_prefix", override_logs_prefix)
        if troubleshoot_log_enabled is not None:
            pulumi.set(__self__, "troubleshoot_log_enabled", troubleshoot_log_enabled)

    @property
    @pulumi.getter(name="apiKey")
    def api_key(self) -> str:
        """
        Ingest License Key of the account you want to report data to.
        """
        return pulumi.get(self, "api_key")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="auditEnabled")
    def audit_enabled(self) -> Optional[bool]:
        return pulumi.get(self, "audit_enabled")

    @property
    @pulumi.getter(name="auditFilters")
    def audit_filters(self) -> Optional[str]:
        return pulumi.get(self, "audit_filters")

    @property
    @pulumi.getter(name="dataCenter")
    def data_center(self) -> Optional[str]:
        """
        The New Relic data center the account belongs to. Possible values are: `US`, `EU`, `FedRAMP`. Default is `US`.
        """
        return pulumi.get(self, "data_center")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="logsPrefix")
    def logs_prefix(self) -> Optional[str]:
        """
        Specify a custom prefix for all log fields. The default prefix is `descope.`.
        """
        return pulumi.get(self, "logs_prefix")

    @property
    @pulumi.getter(name="overrideLogsPrefix")
    def override_logs_prefix(self) -> Optional[bool]:
        """
        Enable this option to use a custom prefix for log fields.
        """
        return pulumi.get(self, "override_logs_prefix")

    @property
    @pulumi.getter(name="troubleshootLogEnabled")
    def troubleshoot_log_enabled(self) -> Optional[bool]:
        return pulumi.get(self, "troubleshoot_log_enabled")


@pulumi.output_type
class ProjectConnectorsRecaptcha(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "secretKey":
            suggest = "secret_key"
        elif key == "siteKey":
            suggest = "site_key"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsRecaptcha. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsRecaptcha.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsRecaptcha.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 name: str,
                 secret_key: str,
                 site_key: str,
                 description: Optional[str] = None,
                 id: Optional[str] = None):
        """
        :param str name: A custom name for your connector.
        :param str secret_key: The secret key authorizes communication between Descope backend and the reCAPTCHA server to verify the user's response.
        :param str site_key: The site key is used to invoke reCAPTCHA service on your site or mobile application.
        :param str description: A description of what your connector is used for.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "secret_key", secret_key)
        pulumi.set(__self__, "site_key", site_key)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="secretKey")
    def secret_key(self) -> str:
        """
        The secret key authorizes communication between Descope backend and the reCAPTCHA server to verify the user's response.
        """
        return pulumi.get(self, "secret_key")

    @property
    @pulumi.getter(name="siteKey")
    def site_key(self) -> str:
        """
        The site key is used to invoke reCAPTCHA service on your site or mobile application.
        """
        return pulumi.get(self, "site_key")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")


@pulumi.output_type
class ProjectConnectorsRecaptchaEnterprise(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "apiKey":
            suggest = "api_key"
        elif key == "projectId":
            suggest = "project_id"
        elif key == "siteKey":
            suggest = "site_key"
        elif key == "assessmentScore":
            suggest = "assessment_score"
        elif key == "overrideAssessment":
            suggest = "override_assessment"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsRecaptchaEnterprise. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsRecaptchaEnterprise.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsRecaptchaEnterprise.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 api_key: str,
                 name: str,
                 project_id: str,
                 site_key: str,
                 assessment_score: Optional[float] = None,
                 description: Optional[str] = None,
                 id: Optional[str] = None,
                 override_assessment: Optional[bool] = None):
        """
        :param str api_key: API key associated with the current project.
        :param str name: A custom name for your connector.
        :param str project_id: The Google Cloud project ID where the reCAPTCHA Enterprise is managed.
        :param str site_key: The site key is used to invoke reCAPTCHA Enterprise service on your site or mobile application.
        :param float assessment_score: When configured, the Recaptcha action will return the score without assessing the request. The score ranges between 0 and 1, where 1 is a human interaction and 0 is a bot.
        :param str description: A description of what your connector is used for.
        :param bool override_assessment: Override the default assessment model. Note: Overriding assessment is intended for automated testing and should not be utilized in production environments.
        """
        pulumi.set(__self__, "api_key", api_key)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "project_id", project_id)
        pulumi.set(__self__, "site_key", site_key)
        if assessment_score is not None:
            pulumi.set(__self__, "assessment_score", assessment_score)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if override_assessment is not None:
            pulumi.set(__self__, "override_assessment", override_assessment)

    @property
    @pulumi.getter(name="apiKey")
    def api_key(self) -> str:
        """
        API key associated with the current project.
        """
        return pulumi.get(self, "api_key")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="projectId")
    def project_id(self) -> str:
        """
        The Google Cloud project ID where the reCAPTCHA Enterprise is managed.
        """
        return pulumi.get(self, "project_id")

    @property
    @pulumi.getter(name="siteKey")
    def site_key(self) -> str:
        """
        The site key is used to invoke reCAPTCHA Enterprise service on your site or mobile application.
        """
        return pulumi.get(self, "site_key")

    @property
    @pulumi.getter(name="assessmentScore")
    def assessment_score(self) -> Optional[float]:
        """
        When configured, the Recaptcha action will return the score without assessing the request. The score ranges between 0 and 1, where 1 is a human interaction and 0 is a bot.
        """
        return pulumi.get(self, "assessment_score")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="overrideAssessment")
    def override_assessment(self) -> Optional[bool]:
        """
        Override the default assessment model. Note: Overriding assessment is intended for automated testing and should not be utilized in production environments.
        """
        return pulumi.get(self, "override_assessment")


@pulumi.output_type
class ProjectConnectorsRekognition(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "accessKeyId":
            suggest = "access_key_id"
        elif key == "collectionId":
            suggest = "collection_id"
        elif key == "secretAccessKey":
            suggest = "secret_access_key"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsRekognition. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsRekognition.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsRekognition.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 access_key_id: str,
                 collection_id: str,
                 name: str,
                 secret_access_key: str,
                 description: Optional[str] = None,
                 id: Optional[str] = None):
        """
        :param str access_key_id: The AWS access key ID
        :param str collection_id: The collection to store registered users in. Should match `[a-zA-Z0-9_.-]+` pattern. Changing this will cause losing existing users.
        :param str name: A custom name for your connector.
        :param str secret_access_key: The AWS secret access key
        :param str description: A description of what your connector is used for.
        """
        pulumi.set(__self__, "access_key_id", access_key_id)
        pulumi.set(__self__, "collection_id", collection_id)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "secret_access_key", secret_access_key)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter(name="accessKeyId")
    def access_key_id(self) -> str:
        """
        The AWS access key ID
        """
        return pulumi.get(self, "access_key_id")

    @property
    @pulumi.getter(name="collectionId")
    def collection_id(self) -> str:
        """
        The collection to store registered users in. Should match `[a-zA-Z0-9_.-]+` pattern. Changing this will cause losing existing users.
        """
        return pulumi.get(self, "collection_id")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="secretAccessKey")
    def secret_access_key(self) -> str:
        """
        The AWS secret access key
        """
        return pulumi.get(self, "secret_access_key")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")


@pulumi.output_type
class ProjectConnectorsSalesforce(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "baseUrl":
            suggest = "base_url"
        elif key == "clientId":
            suggest = "client_id"
        elif key == "clientSecret":
            suggest = "client_secret"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsSalesforce. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsSalesforce.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsSalesforce.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 base_url: str,
                 client_id: str,
                 client_secret: str,
                 name: str,
                 version: str,
                 description: Optional[str] = None,
                 id: Optional[str] = None):
        """
        :param str base_url: The Salesforce API base URL.
        :param str client_id: The consumer key of the connected app.
        :param str client_secret: The consumer secret of the connected app.
        :param str name: A custom name for your connector.
        :param str version: REST API Version.
        :param str description: A description of what your connector is used for.
        """
        pulumi.set(__self__, "base_url", base_url)
        pulumi.set(__self__, "client_id", client_id)
        pulumi.set(__self__, "client_secret", client_secret)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "version", version)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter(name="baseUrl")
    def base_url(self) -> str:
        """
        The Salesforce API base URL.
        """
        return pulumi.get(self, "base_url")

    @property
    @pulumi.getter(name="clientId")
    def client_id(self) -> str:
        """
        The consumer key of the connected app.
        """
        return pulumi.get(self, "client_id")

    @property
    @pulumi.getter(name="clientSecret")
    def client_secret(self) -> str:
        """
        The consumer secret of the connected app.
        """
        return pulumi.get(self, "client_secret")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def version(self) -> str:
        """
        REST API Version.
        """
        return pulumi.get(self, "version")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")


@pulumi.output_type
class ProjectConnectorsSegment(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "writeKey":
            suggest = "write_key"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsSegment. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsSegment.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsSegment.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 name: str,
                 write_key: str,
                 description: Optional[str] = None,
                 host: Optional[str] = None,
                 id: Optional[str] = None):
        """
        :param str name: A custom name for your connector.
        :param str write_key: The Segment Write Key generated for the Descope service.
        :param str description: A description of what your connector is used for.
        :param str host: The base URL of the Segment API, when using a custom domain in Segment.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "write_key", write_key)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if host is not None:
            pulumi.set(__self__, "host", host)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="writeKey")
    def write_key(self) -> str:
        """
        The Segment Write Key generated for the Descope service.
        """
        return pulumi.get(self, "write_key")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def host(self) -> Optional[str]:
        """
        The base URL of the Segment API, when using a custom domain in Segment.
        """
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")


@pulumi.output_type
class ProjectConnectorsSendgrid(dict):
    def __init__(__self__, *,
                 authentication: 'outputs.ProjectConnectorsSendgridAuthentication',
                 name: str,
                 sender: 'outputs.ProjectConnectorsSendgridSender',
                 description: Optional[str] = None,
                 id: Optional[str] = None):
        """
        :param str name: A custom name for your connector.
        :param str description: A description of what your connector is used for.
        """
        pulumi.set(__self__, "authentication", authentication)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "sender", sender)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def authentication(self) -> 'outputs.ProjectConnectorsSendgridAuthentication':
        return pulumi.get(self, "authentication")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def sender(self) -> 'outputs.ProjectConnectorsSendgridSender':
        return pulumi.get(self, "sender")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")


@pulumi.output_type
class ProjectConnectorsSendgridAuthentication(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "apiKey":
            suggest = "api_key"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsSendgridAuthentication. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsSendgridAuthentication.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsSendgridAuthentication.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 api_key: str):
        pulumi.set(__self__, "api_key", api_key)

    @property
    @pulumi.getter(name="apiKey")
    def api_key(self) -> str:
        return pulumi.get(self, "api_key")


@pulumi.output_type
class ProjectConnectorsSendgridSender(dict):
    def __init__(__self__, *,
                 email: str,
                 name: Optional[str] = None):
        pulumi.set(__self__, "email", email)
        if name is not None:
            pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter
    def email(self) -> str:
        return pulumi.get(self, "email")

    @property
    @pulumi.getter
    def name(self) -> Optional[str]:
        return pulumi.get(self, "name")


@pulumi.output_type
class ProjectConnectorsSmtp(dict):
    def __init__(__self__, *,
                 authentication: 'outputs.ProjectConnectorsSmtpAuthentication',
                 name: str,
                 sender: 'outputs.ProjectConnectorsSmtpSender',
                 server: 'outputs.ProjectConnectorsSmtpServer',
                 description: Optional[str] = None,
                 id: Optional[str] = None):
        """
        :param str name: A custom name for your connector.
        :param str description: A description of what your connector is used for.
        """
        pulumi.set(__self__, "authentication", authentication)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "sender", sender)
        pulumi.set(__self__, "server", server)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def authentication(self) -> 'outputs.ProjectConnectorsSmtpAuthentication':
        return pulumi.get(self, "authentication")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def sender(self) -> 'outputs.ProjectConnectorsSmtpSender':
        return pulumi.get(self, "sender")

    @property
    @pulumi.getter
    def server(self) -> 'outputs.ProjectConnectorsSmtpServer':
        return pulumi.get(self, "server")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")


@pulumi.output_type
class ProjectConnectorsSmtpAuthentication(dict):
    def __init__(__self__, *,
                 password: str,
                 username: str,
                 method: Optional[str] = None):
        pulumi.set(__self__, "password", password)
        pulumi.set(__self__, "username", username)
        if method is not None:
            pulumi.set(__self__, "method", method)

    @property
    @pulumi.getter
    def password(self) -> str:
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def username(self) -> str:
        return pulumi.get(self, "username")

    @property
    @pulumi.getter
    def method(self) -> Optional[str]:
        return pulumi.get(self, "method")


@pulumi.output_type
class ProjectConnectorsSmtpSender(dict):
    def __init__(__self__, *,
                 email: str,
                 name: Optional[str] = None):
        pulumi.set(__self__, "email", email)
        if name is not None:
            pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter
    def email(self) -> str:
        return pulumi.get(self, "email")

    @property
    @pulumi.getter
    def name(self) -> Optional[str]:
        return pulumi.get(self, "name")


@pulumi.output_type
class ProjectConnectorsSmtpServer(dict):
    def __init__(__self__, *,
                 host: str,
                 port: Optional[int] = None):
        pulumi.set(__self__, "host", host)
        if port is not None:
            pulumi.set(__self__, "port", port)

    @property
    @pulumi.getter
    def host(self) -> str:
        return pulumi.get(self, "host")

    @property
    @pulumi.getter
    def port(self) -> Optional[int]:
        return pulumi.get(self, "port")


@pulumi.output_type
class ProjectConnectorsSumologic(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "httpSourceUrl":
            suggest = "http_source_url"
        elif key == "auditEnabled":
            suggest = "audit_enabled"
        elif key == "auditFilters":
            suggest = "audit_filters"
        elif key == "troubleshootLogEnabled":
            suggest = "troubleshoot_log_enabled"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsSumologic. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsSumologic.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsSumologic.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 http_source_url: str,
                 name: str,
                 audit_enabled: Optional[bool] = None,
                 audit_filters: Optional[str] = None,
                 description: Optional[str] = None,
                 id: Optional[str] = None,
                 troubleshoot_log_enabled: Optional[bool] = None):
        """
        :param str http_source_url: The URL associated with an HTTP Hosted collector
        :param str name: A custom name for your connector.
        :param str description: A description of what your connector is used for.
        """
        pulumi.set(__self__, "http_source_url", http_source_url)
        pulumi.set(__self__, "name", name)
        if audit_enabled is not None:
            pulumi.set(__self__, "audit_enabled", audit_enabled)
        if audit_filters is not None:
            pulumi.set(__self__, "audit_filters", audit_filters)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if troubleshoot_log_enabled is not None:
            pulumi.set(__self__, "troubleshoot_log_enabled", troubleshoot_log_enabled)

    @property
    @pulumi.getter(name="httpSourceUrl")
    def http_source_url(self) -> str:
        """
        The URL associated with an HTTP Hosted collector
        """
        return pulumi.get(self, "http_source_url")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="auditEnabled")
    def audit_enabled(self) -> Optional[bool]:
        return pulumi.get(self, "audit_enabled")

    @property
    @pulumi.getter(name="auditFilters")
    def audit_filters(self) -> Optional[str]:
        return pulumi.get(self, "audit_filters")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="troubleshootLogEnabled")
    def troubleshoot_log_enabled(self) -> Optional[bool]:
        return pulumi.get(self, "troubleshoot_log_enabled")


@pulumi.output_type
class ProjectConnectorsTelesign(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "apiKey":
            suggest = "api_key"
        elif key == "customerId":
            suggest = "customer_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsTelesign. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsTelesign.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsTelesign.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 api_key: str,
                 customer_id: str,
                 name: str,
                 description: Optional[str] = None,
                 id: Optional[str] = None):
        """
        :param str api_key: The unique Telesign API key
        :param str customer_id: The unique Telesign account Customer ID
        :param str name: A custom name for your connector.
        :param str description: A description of what your connector is used for.
        """
        pulumi.set(__self__, "api_key", api_key)
        pulumi.set(__self__, "customer_id", customer_id)
        pulumi.set(__self__, "name", name)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter(name="apiKey")
    def api_key(self) -> str:
        """
        The unique Telesign API key
        """
        return pulumi.get(self, "api_key")

    @property
    @pulumi.getter(name="customerId")
    def customer_id(self) -> str:
        """
        The unique Telesign account Customer ID
        """
        return pulumi.get(self, "customer_id")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")


@pulumi.output_type
class ProjectConnectorsTraceable(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "secretKey":
            suggest = "secret_key"
        elif key == "euRegion":
            suggest = "eu_region"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsTraceable. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsTraceable.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsTraceable.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 name: str,
                 secret_key: str,
                 description: Optional[str] = None,
                 eu_region: Optional[bool] = None,
                 id: Optional[str] = None):
        """
        :param str name: A custom name for your connector.
        :param str secret_key: The Traceable secret key.
        :param str description: A description of what your connector is used for.
        :param bool eu_region: EU(Europe) Region deployment of Traceable platform.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "secret_key", secret_key)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if eu_region is not None:
            pulumi.set(__self__, "eu_region", eu_region)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="secretKey")
    def secret_key(self) -> str:
        """
        The Traceable secret key.
        """
        return pulumi.get(self, "secret_key")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter(name="euRegion")
    def eu_region(self) -> Optional[bool]:
        """
        EU(Europe) Region deployment of Traceable platform.
        """
        return pulumi.get(self, "eu_region")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")


@pulumi.output_type
class ProjectConnectorsTwilioCore(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "accountSid":
            suggest = "account_sid"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsTwilioCore. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsTwilioCore.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsTwilioCore.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 account_sid: str,
                 authentication: 'outputs.ProjectConnectorsTwilioCoreAuthentication',
                 name: str,
                 senders: 'outputs.ProjectConnectorsTwilioCoreSenders',
                 description: Optional[str] = None,
                 id: Optional[str] = None):
        """
        :param str name: A custom name for your connector.
        :param str description: A description of what your connector is used for.
        """
        pulumi.set(__self__, "account_sid", account_sid)
        pulumi.set(__self__, "authentication", authentication)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "senders", senders)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter(name="accountSid")
    def account_sid(self) -> str:
        return pulumi.get(self, "account_sid")

    @property
    @pulumi.getter
    def authentication(self) -> 'outputs.ProjectConnectorsTwilioCoreAuthentication':
        return pulumi.get(self, "authentication")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def senders(self) -> 'outputs.ProjectConnectorsTwilioCoreSenders':
        return pulumi.get(self, "senders")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")


@pulumi.output_type
class ProjectConnectorsTwilioCoreAuthentication(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "apiKey":
            suggest = "api_key"
        elif key == "apiSecret":
            suggest = "api_secret"
        elif key == "authToken":
            suggest = "auth_token"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsTwilioCoreAuthentication. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsTwilioCoreAuthentication.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsTwilioCoreAuthentication.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 api_key: Optional[str] = None,
                 api_secret: Optional[str] = None,
                 auth_token: Optional[str] = None):
        if api_key is not None:
            pulumi.set(__self__, "api_key", api_key)
        if api_secret is not None:
            pulumi.set(__self__, "api_secret", api_secret)
        if auth_token is not None:
            pulumi.set(__self__, "auth_token", auth_token)

    @property
    @pulumi.getter(name="apiKey")
    def api_key(self) -> Optional[str]:
        return pulumi.get(self, "api_key")

    @property
    @pulumi.getter(name="apiSecret")
    def api_secret(self) -> Optional[str]:
        return pulumi.get(self, "api_secret")

    @property
    @pulumi.getter(name="authToken")
    def auth_token(self) -> Optional[str]:
        return pulumi.get(self, "auth_token")


@pulumi.output_type
class ProjectConnectorsTwilioCoreSenders(dict):
    def __init__(__self__, *,
                 sms: 'outputs.ProjectConnectorsTwilioCoreSendersSms',
                 voice: Optional['outputs.ProjectConnectorsTwilioCoreSendersVoice'] = None):
        pulumi.set(__self__, "sms", sms)
        if voice is not None:
            pulumi.set(__self__, "voice", voice)

    @property
    @pulumi.getter
    def sms(self) -> 'outputs.ProjectConnectorsTwilioCoreSendersSms':
        return pulumi.get(self, "sms")

    @property
    @pulumi.getter
    def voice(self) -> Optional['outputs.ProjectConnectorsTwilioCoreSendersVoice']:
        return pulumi.get(self, "voice")


@pulumi.output_type
class ProjectConnectorsTwilioCoreSendersSms(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "messagingServiceSid":
            suggest = "messaging_service_sid"
        elif key == "phoneNumber":
            suggest = "phone_number"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsTwilioCoreSendersSms. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsTwilioCoreSendersSms.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsTwilioCoreSendersSms.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 messaging_service_sid: Optional[str] = None,
                 phone_number: Optional[str] = None):
        if messaging_service_sid is not None:
            pulumi.set(__self__, "messaging_service_sid", messaging_service_sid)
        if phone_number is not None:
            pulumi.set(__self__, "phone_number", phone_number)

    @property
    @pulumi.getter(name="messagingServiceSid")
    def messaging_service_sid(self) -> Optional[str]:
        return pulumi.get(self, "messaging_service_sid")

    @property
    @pulumi.getter(name="phoneNumber")
    def phone_number(self) -> Optional[str]:
        return pulumi.get(self, "phone_number")


@pulumi.output_type
class ProjectConnectorsTwilioCoreSendersVoice(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "phoneNumber":
            suggest = "phone_number"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsTwilioCoreSendersVoice. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsTwilioCoreSendersVoice.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsTwilioCoreSendersVoice.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 phone_number: str):
        pulumi.set(__self__, "phone_number", phone_number)

    @property
    @pulumi.getter(name="phoneNumber")
    def phone_number(self) -> str:
        return pulumi.get(self, "phone_number")


@pulumi.output_type
class ProjectConnectorsTwilioVerify(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "accountSid":
            suggest = "account_sid"
        elif key == "serviceSid":
            suggest = "service_sid"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsTwilioVerify. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsTwilioVerify.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsTwilioVerify.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 account_sid: str,
                 authentication: 'outputs.ProjectConnectorsTwilioVerifyAuthentication',
                 name: str,
                 service_sid: str,
                 description: Optional[str] = None,
                 id: Optional[str] = None,
                 sender: Optional[str] = None):
        """
        :param str name: A custom name for your connector.
        :param str description: A description of what your connector is used for.
        """
        pulumi.set(__self__, "account_sid", account_sid)
        pulumi.set(__self__, "authentication", authentication)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "service_sid", service_sid)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)
        if sender is not None:
            pulumi.set(__self__, "sender", sender)

    @property
    @pulumi.getter(name="accountSid")
    def account_sid(self) -> str:
        return pulumi.get(self, "account_sid")

    @property
    @pulumi.getter
    def authentication(self) -> 'outputs.ProjectConnectorsTwilioVerifyAuthentication':
        return pulumi.get(self, "authentication")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="serviceSid")
    def service_sid(self) -> str:
        return pulumi.get(self, "service_sid")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")

    @property
    @pulumi.getter
    def sender(self) -> Optional[str]:
        return pulumi.get(self, "sender")


@pulumi.output_type
class ProjectConnectorsTwilioVerifyAuthentication(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "apiKey":
            suggest = "api_key"
        elif key == "apiSecret":
            suggest = "api_secret"
        elif key == "authToken":
            suggest = "auth_token"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsTwilioVerifyAuthentication. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsTwilioVerifyAuthentication.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsTwilioVerifyAuthentication.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 api_key: Optional[str] = None,
                 api_secret: Optional[str] = None,
                 auth_token: Optional[str] = None):
        if api_key is not None:
            pulumi.set(__self__, "api_key", api_key)
        if api_secret is not None:
            pulumi.set(__self__, "api_secret", api_secret)
        if auth_token is not None:
            pulumi.set(__self__, "auth_token", auth_token)

    @property
    @pulumi.getter(name="apiKey")
    def api_key(self) -> Optional[str]:
        return pulumi.get(self, "api_key")

    @property
    @pulumi.getter(name="apiSecret")
    def api_secret(self) -> Optional[str]:
        return pulumi.get(self, "api_secret")

    @property
    @pulumi.getter(name="authToken")
    def auth_token(self) -> Optional[str]:
        return pulumi.get(self, "auth_token")


@pulumi.output_type
class ProjectConnectorsVeriff(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "apiKey":
            suggest = "api_key"
        elif key == "secretKey":
            suggest = "secret_key"
        elif key == "baseUrl":
            suggest = "base_url"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectConnectorsVeriff. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectConnectorsVeriff.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectConnectorsVeriff.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 api_key: str,
                 name: str,
                 secret_key: str,
                 base_url: Optional[str] = None,
                 description: Optional[str] = None,
                 id: Optional[str] = None):
        """
        :param str api_key: The Veriff Public API Key, you can find under Veriff Station - Integrations.
        :param str name: A custom name for your connector.
        :param str secret_key: The Veriff Shared secret key, you can find under Veriff Station - Integrations.
        :param str base_url: The base URL of the Veriff API, default value is https://stationapi.veriff.com.
        :param str description: A description of what your connector is used for.
        """
        pulumi.set(__self__, "api_key", api_key)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "secret_key", secret_key)
        if base_url is not None:
            pulumi.set(__self__, "base_url", base_url)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter(name="apiKey")
    def api_key(self) -> str:
        """
        The Veriff Public API Key, you can find under Veriff Station - Integrations.
        """
        return pulumi.get(self, "api_key")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A custom name for your connector.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="secretKey")
    def secret_key(self) -> str:
        """
        The Veriff Shared secret key, you can find under Veriff Station - Integrations.
        """
        return pulumi.get(self, "secret_key")

    @property
    @pulumi.getter(name="baseUrl")
    def base_url(self) -> Optional[str]:
        """
        The base URL of the Veriff API, default value is https://stationapi.veriff.com.
        """
        return pulumi.get(self, "base_url")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        """
        A description of what your connector is used for.
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")


@pulumi.output_type
class ProjectFlows(dict):
    def __init__(__self__, *,
                 data: str):
        pulumi.set(__self__, "data", data)

    @property
    @pulumi.getter
    def data(self) -> str:
        return pulumi.get(self, "data")


@pulumi.output_type
class ProjectJwtTemplates(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "accessKeyTemplates":
            suggest = "access_key_templates"
        elif key == "userTemplates":
            suggest = "user_templates"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectJwtTemplates. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectJwtTemplates.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectJwtTemplates.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 access_key_templates: Optional[Sequence['outputs.ProjectJwtTemplatesAccessKeyTemplate']] = None,
                 user_templates: Optional[Sequence['outputs.ProjectJwtTemplatesUserTemplate']] = None):
        if access_key_templates is not None:
            pulumi.set(__self__, "access_key_templates", access_key_templates)
        if user_templates is not None:
            pulumi.set(__self__, "user_templates", user_templates)

    @property
    @pulumi.getter(name="accessKeyTemplates")
    def access_key_templates(self) -> Optional[Sequence['outputs.ProjectJwtTemplatesAccessKeyTemplate']]:
        return pulumi.get(self, "access_key_templates")

    @property
    @pulumi.getter(name="userTemplates")
    def user_templates(self) -> Optional[Sequence['outputs.ProjectJwtTemplatesUserTemplate']]:
        return pulumi.get(self, "user_templates")


@pulumi.output_type
class ProjectJwtTemplatesAccessKeyTemplate(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "authSchema":
            suggest = "auth_schema"
        elif key == "conformanceIssuer":
            suggest = "conformance_issuer"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectJwtTemplatesAccessKeyTemplate. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectJwtTemplatesAccessKeyTemplate.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectJwtTemplatesAccessKeyTemplate.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 name: str,
                 template: str,
                 auth_schema: Optional[str] = None,
                 conformance_issuer: Optional[bool] = None,
                 description: Optional[str] = None,
                 id: Optional[str] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "template", template)
        if auth_schema is not None:
            pulumi.set(__self__, "auth_schema", auth_schema)
        if conformance_issuer is not None:
            pulumi.set(__self__, "conformance_issuer", conformance_issuer)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def template(self) -> str:
        return pulumi.get(self, "template")

    @property
    @pulumi.getter(name="authSchema")
    def auth_schema(self) -> Optional[str]:
        return pulumi.get(self, "auth_schema")

    @property
    @pulumi.getter(name="conformanceIssuer")
    def conformance_issuer(self) -> Optional[bool]:
        return pulumi.get(self, "conformance_issuer")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")


@pulumi.output_type
class ProjectJwtTemplatesUserTemplate(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "authSchema":
            suggest = "auth_schema"
        elif key == "conformanceIssuer":
            suggest = "conformance_issuer"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectJwtTemplatesUserTemplate. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectJwtTemplatesUserTemplate.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectJwtTemplatesUserTemplate.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 name: str,
                 template: str,
                 auth_schema: Optional[str] = None,
                 conformance_issuer: Optional[bool] = None,
                 description: Optional[str] = None,
                 id: Optional[str] = None):
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "template", template)
        if auth_schema is not None:
            pulumi.set(__self__, "auth_schema", auth_schema)
        if conformance_issuer is not None:
            pulumi.set(__self__, "conformance_issuer", conformance_issuer)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if id is not None:
            pulumi.set(__self__, "id", id)

    @property
    @pulumi.getter
    def name(self) -> str:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def template(self) -> str:
        return pulumi.get(self, "template")

    @property
    @pulumi.getter(name="authSchema")
    def auth_schema(self) -> Optional[str]:
        return pulumi.get(self, "auth_schema")

    @property
    @pulumi.getter(name="conformanceIssuer")
    def conformance_issuer(self) -> Optional[bool]:
        return pulumi.get(self, "conformance_issuer")

    @property
    @pulumi.getter
    def description(self) -> Optional[str]:
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def id(self) -> Optional[str]:
        return pulumi.get(self, "id")


@pulumi.output_type
class ProjectProjectSettings(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "accessKeyJwtTemplate":
            suggest = "access_key_jwt_template"
        elif key == "cookiePolicy":
            suggest = "cookie_policy"
        elif key == "enableInactivity":
            suggest = "enable_inactivity"
        elif key == "inactivityTime":
            suggest = "inactivity_time"
        elif key == "refreshTokenExpiration":
            suggest = "refresh_token_expiration"
        elif key == "userJwtTemplate":
            suggest = "user_jwt_template"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ProjectProjectSettings. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ProjectProjectSettings.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ProjectProjectSettings.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 access_key_jwt_template: Optional[str] = None,
                 cookie_policy: Optional[str] = None,
                 domain: Optional[str] = None,
                 enable_inactivity: Optional[bool] = None,
                 inactivity_time: Optional[str] = None,
                 refresh_token_expiration: Optional[str] = None,
                 user_jwt_template: Optional[str] = None):
        if access_key_jwt_template is not None:
            pulumi.set(__self__, "access_key_jwt_template", access_key_jwt_template)
        if cookie_policy is not None:
            pulumi.set(__self__, "cookie_policy", cookie_policy)
        if domain is not None:
            pulumi.set(__self__, "domain", domain)
        if enable_inactivity is not None:
            pulumi.set(__self__, "enable_inactivity", enable_inactivity)
        if inactivity_time is not None:
            pulumi.set(__self__, "inactivity_time", inactivity_time)
        if refresh_token_expiration is not None:
            pulumi.set(__self__, "refresh_token_expiration", refresh_token_expiration)
        if user_jwt_template is not None:
            pulumi.set(__self__, "user_jwt_template", user_jwt_template)

    @property
    @pulumi.getter(name="accessKeyJwtTemplate")
    def access_key_jwt_template(self) -> Optional[str]:
        return pulumi.get(self, "access_key_jwt_template")

    @property
    @pulumi.getter(name="cookiePolicy")
    def cookie_policy(self) -> Optional[str]:
        return pulumi.get(self, "cookie_policy")

    @property
    @pulumi.getter
    def domain(self) -> Optional[str]:
        return pulumi.get(self, "domain")

    @property
    @pulumi.getter(name="enableInactivity")
    def enable_inactivity(self) -> Optional[bool]:
        return pulumi.get(self, "enable_inactivity")

    @property
    @pulumi.getter(name="inactivityTime")
    def inactivity_time(self) -> Optional[str]:
        return pulumi.get(self, "inactivity_time")

    @property
    @pulumi.getter(name="refreshTokenExpiration")
    def refresh_token_expiration(self) -> Optional[str]:
        return pulumi.get(self, "refresh_token_expiration")

    @property
    @pulumi.getter(name="userJwtTemplate")
    def user_jwt_template(self) -> Optional[str]:
        return pulumi.get(self, "user_jwt_template")


@pulumi.output_type
class ProjectStyles(dict):
    def __init__(__self__, *,
                 data: str):
        pulumi.set(__self__, "data", data)

    @property
    @pulumi.getter
    def data(self) -> str:
        return pulumi.get(self, "data")


