{"name":"twingate","displayName":"Twingate","version":"4.0.2","description":"A Pulumi package for creating and managing Twingate cloud resources.","keywords":["pulumi","twingate","category/infrastructure"],"homepage":"https://www.twingate.com","license":"Apache-2.0","attribution":"This Pulumi package is based on the [`twingate` Terraform Provider](https://github.com/Twingate/terraform-provider-twingate).","repository":"https://github.com/Twingate/pulumi-twingate","logoUrl":"https://raw.githubusercontent.com/Twingate/pulumi-twingate/main/docs/logo.png","pluginDownloadURL":"github://api.github.com/Twingate/pulumi-twingate","publisher":"Twingate","meta":{"moduleFormat":"(.*)(?:/[^/]*)"},"language":{"csharp":{"packageReferences":{"Pulumi":"3.*"},"compatibility":"tfbridge20","rootNamespace":"Twingate"},"go":{"importBasePath":"github.com/Twingate/pulumi-twingate/sdk/v4/go/twingate","generateResourceContainerTypes":true,"generateExtraInputTypes":true},"nodejs":{"packageName":"@twingate/pulumi-twingate","packageDescription":"A Pulumi package for creating and managing Twingate cloud resources.","readme":"\u003e This provider is a derived work of the [Terraform Provider](https://github.com/Twingate/terraform-provider-twingate)\n\u003e distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n\u003e first check the [`pulumi-twingate` repo](https://github.com/Twingate/pulumi-twingate/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`terraform-provider-twingate` repo](https://github.com/Twingate/terraform-provider-twingate/issues).","dependencies":{"@pulumi/pulumi":"^3.0.0"},"devDependencies":{"@types/mime":"^2.0.0","@types/node":"^10.0.0"},"compatibility":"tfbridge20","disableUnionOutputTypes":true},"python":{"packageName":"pulumi_twingate","requires":{"pulumi":"\u003e=3.0.0,\u003c4.0.0"},"readme":"\u003e This provider is a derived work of the [Terraform Provider](https://github.com/Twingate/terraform-provider-twingate)\n\u003e distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n\u003e first check the [`pulumi-twingate` repo](https://github.com/Twingate/pulumi-twingate/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`terraform-provider-twingate` repo](https://github.com/Twingate/terraform-provider-twingate/issues).","compatibility":"tfbridge20","pyproject":{}}},"config":{"variables":{"apiToken":{"type":"string","description":"The access key for API operations. You can retrieve this\nfrom the Twingate Admin Console ([documentation](https://docs.twingate.com/docs/api-overview)).\nAlternatively, this can be specified using the TWINGATE_API_TOKEN environment variable.","secret":true},"cache":{"$ref":"#/types/twingate:config/cache:cache","description":"Specifies the cache settings for the provider."},"defaultTags":{"$ref":"#/types/twingate:config/defaultTags:defaultTags","description":"A default set of tags applied globally to all resources created by the provider."},"httpMaxRetry":{"type":"integer","description":"Specifies a retry limit for the http requests made. The default value is 10.\nAlternatively, this can be specified using the TWINGATE_HTTP_MAX_RETRY environment variable"},"httpTimeout":{"type":"integer","description":"Specifies a time limit in seconds for the http requests made. The default value is 35 seconds.\nAlternatively, this can be specified using the TWINGATE_HTTP_TIMEOUT environment variable"},"network":{"type":"string","description":"Your Twingate network ID for API operations.\nYou can find it in the Admin Console URL, for example:\n`autoco.twingate.com`, where \u003cspan pulumi-lang-nodejs=\"`autoco`\" pulumi-lang-dotnet=\"`Autoco`\" pulumi-lang-go=\"`autoco`\" pulumi-lang-python=\"`autoco`\" pulumi-lang-yaml=\"`autoco`\" pulumi-lang-java=\"`autoco`\"\u003e`autoco`\u003c/span\u003e is your network ID\nAlternatively, this can be specified using the TWINGATE_NETWORK environment variable."},"url":{"type":"string","description":"The default is 'twingate.com'\nThis is optional and shouldn't be changed under normal circumstances."}}},"types":{"twingate:config/cache:cache":{"properties":{"groupsEnabled":{"type":"boolean","description":"Specifies whether the provider should cache groups. The default value is \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"groupsFilter":{"$ref":"#/types/twingate:config/cacheGroupsFilter:cacheGroupsFilter","description":"Specifies the filter for the groups to be cached.\n"},"resourceEnabled":{"type":"boolean","description":"Specifies whether the provider should cache resources. The default value is \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"resourcesFilter":{"$ref":"#/types/twingate:config/cacheResourcesFilter:cacheResourcesFilter","description":"Specifies the filter for the resources to be cached.\n"}},"type":"object"},"twingate:config/cacheGroupsFilter:cacheGroupsFilter":{"properties":{"isActive":{"type":"boolean","description":"Returns only Groups matching the specified state.\n"},"name":{"type":"string","description":"Returns only groups that exactly match this name. If no options are passed it will return all resources. Only one option can be used at a time.\n"},"nameContains":{"type":"string","description":"Match when the value exist in the name of the group.\n"},"nameExclude":{"type":"string","description":"Match when the exact value does not exist in the name of the group.\n"},"namePrefix":{"type":"string","description":"The name of the group must start with the value.\n"},"nameRegexp":{"type":"string","description":"The regular expression match of the name of the group.\n"},"nameSuffix":{"type":"string","description":"The name of the group must end with the value.\n"},"types":{"type":"array","items":{"type":"string"},"description":"Returns groups that match a list of types. valid types: `MANUAL`, `SYNCED`, `SYSTEM`.\n"}},"type":"object"},"twingate:config/cacheResourcesFilter:cacheResourcesFilter":{"properties":{"name":{"type":"string","description":"Returns only resources that exactly match this name. If no options are passed it will return all resources. Only one option can be used at a time.\n"},"nameContains":{"type":"string","description":"Match when the value exist in the name of the resource.\n"},"nameExclude":{"type":"string","description":"Match when the exact value does not exist in the name of the resource.\n"},"namePrefix":{"type":"string","description":"The name of the resource must start with the value.\n"},"nameRegexp":{"type":"string","description":"The regular expression match of the name of the resource.\n"},"nameSuffix":{"type":"string","description":"The name of the resource must end with the value.\n"},"tags":{"type":"object","additionalProperties":{"type":"string"},"description":"Returns only resources that exactly match the given tags.\n"}},"type":"object"},"twingate:config/defaultTags:defaultTags":{"properties":{"tags":{"type":"object","additionalProperties":{"type":"string"},"description":"A map of key-value pair tags to be set on all resources by default.\n"}},"type":"object"},"twingate:index/ProviderCache:ProviderCache":{"properties":{"groupsEnabled":{"type":"boolean","description":"Specifies whether the provider should cache groups. The default value is \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"groupsFilter":{"$ref":"#/types/twingate:index/ProviderCacheGroupsFilter:ProviderCacheGroupsFilter","description":"Specifies the filter for the groups to be cached.\n"},"resourceEnabled":{"type":"boolean","description":"Specifies whether the provider should cache resources. The default value is \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"resourcesFilter":{"$ref":"#/types/twingate:index/ProviderCacheResourcesFilter:ProviderCacheResourcesFilter","description":"Specifies the filter for the resources to be cached.\n"}},"type":"object"},"twingate:index/ProviderCacheGroupsFilter:ProviderCacheGroupsFilter":{"properties":{"isActive":{"type":"boolean","description":"Returns only Groups matching the specified state.\n"},"name":{"type":"string","description":"Returns only groups that exactly match this name. If no options are passed it will return all resources. Only one option can be used at a time.\n"},"nameContains":{"type":"string","description":"Match when the value exist in the name of the group.\n"},"nameExclude":{"type":"string","description":"Match when the exact value does not exist in the name of the group.\n"},"namePrefix":{"type":"string","description":"The name of the group must start with the value.\n"},"nameRegexp":{"type":"string","description":"The regular expression match of the name of the group.\n"},"nameSuffix":{"type":"string","description":"The name of the group must end with the value.\n"},"types":{"type":"array","items":{"type":"string"},"description":"Returns groups that match a list of types. valid types: `MANUAL`, `SYNCED`, `SYSTEM`.\n"}},"type":"object"},"twingate:index/ProviderCacheResourcesFilter:ProviderCacheResourcesFilter":{"properties":{"name":{"type":"string","description":"Returns only resources that exactly match this name. If no options are passed it will return all resources. Only one option can be used at a time.\n"},"nameContains":{"type":"string","description":"Match when the value exist in the name of the resource.\n"},"nameExclude":{"type":"string","description":"Match when the exact value does not exist in the name of the resource.\n"},"namePrefix":{"type":"string","description":"The name of the resource must start with the value.\n"},"nameRegexp":{"type":"string","description":"The regular expression match of the name of the resource.\n"},"nameSuffix":{"type":"string","description":"The name of the resource must end with the value.\n"},"tags":{"type":"object","additionalProperties":{"type":"string"},"description":"Returns only resources that exactly match the given tags.\n"}},"type":"object"},"twingate:index/ProviderDefaultTags:ProviderDefaultTags":{"properties":{"tags":{"type":"object","additionalProperties":{"type":"string"},"description":"A map of key-value pair tags to be set on all resources by default.\n"}},"type":"object"},"twingate:index/TwingateDNSFilteringProfileAllowedDomains:TwingateDNSFilteringProfileAllowedDomains":{"properties":{"domains":{"type":"array","items":{"type":"string"},"description":"A set of allowed domains. Defaults to an empty set.\n"},"isAuthoritative":{"type":"boolean","description":"Whether Terraform should override changes made outside of Terraform. Defaults to true.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["domains","isAuthoritative"]}}},"twingate:index/TwingateDNSFilteringProfileContentCategories:TwingateDNSFilteringProfileContentCategories":{"properties":{"blockAdultContent":{"type":"boolean","description":"Whether to block adult content. Defaults to false.\n"},"blockDating":{"type":"boolean","description":"Whether to block dating content. Defaults to false.\n"},"blockGambling":{"type":"boolean","description":"Whether to block gambling content. Defaults to false.\n"},"blockGames":{"type":"boolean","description":"Whether to block games. Defaults to false.\n"},"blockPiracy":{"type":"boolean","description":"Whether to block piracy sites. Defaults to false.\n"},"blockSocialMedia":{"type":"boolean","description":"Whether to block social media. Defaults to false.\n"},"blockStreaming":{"type":"boolean","description":"Whether to block streaming content. Defaults to false.\n"},"enableSafesearch":{"type":"boolean","description":"Whether to force safe search. Defaults to false.\n"},"enableYoutubeRestrictedMode":{"type":"boolean","description":"Whether to force YouTube to use restricted mode. Defaults to false.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["blockAdultContent","blockDating","blockGambling","blockGames","blockPiracy","blockSocialMedia","blockStreaming","enableSafesearch","enableYoutubeRestrictedMode"]}}},"twingate:index/TwingateDNSFilteringProfileDeniedDomains:TwingateDNSFilteringProfileDeniedDomains":{"properties":{"domains":{"type":"array","items":{"type":"string"},"description":"A set of denied domains. Defaults to an empty set.\n"},"isAuthoritative":{"type":"boolean","description":"Whether Terraform should override changes made outside of Terraform. Defaults to true.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["domains","isAuthoritative"]}}},"twingate:index/TwingateDNSFilteringProfilePrivacyCategories:TwingateDNSFilteringProfilePrivacyCategories":{"properties":{"blockAdsAndTrackers":{"type":"boolean","description":"Whether to block ads and trackers. Defaults to false.\n"},"blockAffiliateLinks":{"type":"boolean","description":"Whether to block affiliate links. Defaults to false.\n"},"blockDisguisedTrackers":{"type":"boolean","description":"Whether to block disguised third party trackers. Defaults to false.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["blockAdsAndTrackers","blockAffiliateLinks","blockDisguisedTrackers"]}}},"twingate:index/TwingateDNSFilteringProfileSecurityCategories:TwingateDNSFilteringProfileSecurityCategories":{"properties":{"blockCryptojacking":{"type":"boolean","description":"Whether to block cryptojacking sites. Defaults to true.\n"},"blockDnsRebinding":{"type":"boolean","description":"Blocks public DNS entries from returning private IP addresses. Defaults to true.\n"},"blockDomainGenerationAlgorithms":{"type":"boolean","description":"Blocks DGA domains. Defaults to true.\n"},"blockIdnHomoglyph":{"type":"boolean","description":"Whether to block homoglyph attacks. Defaults to true.\n"},"blockNewlyRegisteredDomains":{"type":"boolean","description":"Blocks newly registered domains. Defaults to true.\n"},"blockParkedDomains":{"type":"boolean","description":"Block parked domains. Defaults to true.\n"},"blockTyposquatting":{"type":"boolean","description":"Blocks typosquatted domains. Defaults to true.\n"},"enableGoogleSafeBrowsing":{"type":"boolean","description":"Whether to use Google Safe browsing lists to block content. Defaults to true.\n"},"enableThreatIntelligenceFeeds":{"type":"boolean","description":"Whether to filter content using threat intelligence feeds. Defaults to true.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["blockCryptojacking","blockDnsRebinding","blockDomainGenerationAlgorithms","blockIdnHomoglyph","blockNewlyRegisteredDomains","blockParkedDomains","blockTyposquatting","enableGoogleSafeBrowsing","enableThreatIntelligenceFeeds"]}}},"twingate:index/TwingateResourceAccessGroup:TwingateResourceAccessGroup":{"properties":{"accessPolicies":{"type":"array","items":{"$ref":"#/types/twingate:index/TwingateResourceAccessGroupAccessPolicy:TwingateResourceAccessGroupAccessPolicy"},"description":"Restrict access according to JIT access policy\n"},"groupId":{"type":"string","description":"Group ID that will have permission to access the Resource.\n"},"securityPolicyId":{"type":"string","description":"The ID of a \u003cspan pulumi-lang-nodejs=\"`twingate.getTwingateSecurityPolicy`\" pulumi-lang-dotnet=\"`twingate.getTwingateSecurityPolicy`\" pulumi-lang-go=\"`getTwingateSecurityPolicy`\" pulumi-lang-python=\"`get_twingate_security_policy`\" pulumi-lang-yaml=\"`twingate.getTwingateSecurityPolicy`\" pulumi-lang-java=\"`twingate.getTwingateSecurityPolicy`\"\u003e`twingate.getTwingateSecurityPolicy`\u003c/span\u003e to use as the access policy for the group IDs in the access block. Default is 'Null' which points to `Default Policy` on Admin console.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["groupId","securityPolicyId"]}}},"twingate:index/TwingateResourceAccessGroupAccessPolicy:TwingateResourceAccessGroupAccessPolicy":{"properties":{"approvalMode":{"type":"string","description":"This will set the approval model on the edge. The valid values are `AUTOMATIC` and `MANUAL`.\n"},"duration":{"type":"string","description":"This will set the access duration on the edge. Duration must be between 1 hour and 365 days. The valid values are like \u003cspan pulumi-lang-nodejs=\"`1h`\" pulumi-lang-dotnet=\"`1h`\" pulumi-lang-go=\"`1h`\" pulumi-lang-python=\"`1h`\" pulumi-lang-yaml=\"`1h`\" pulumi-lang-java=\"`1h`\"\u003e`1h`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`2d`\" pulumi-lang-dotnet=\"`2d`\" pulumi-lang-go=\"`2d`\" pulumi-lang-python=\"`2d`\" pulumi-lang-yaml=\"`2d`\" pulumi-lang-java=\"`2d`\"\u003e`2d`\u003c/span\u003e.\n"},"mode":{"type":"string","description":"This will set the\u003cspan pulumi-lang-nodejs=\" accessPolicy \" pulumi-lang-dotnet=\" AccessPolicy \" pulumi-lang-go=\" accessPolicy \" pulumi-lang-python=\" access_policy \" pulumi-lang-yaml=\" accessPolicy \" pulumi-lang-java=\" accessPolicy \"\u003e access_policy \u003c/span\u003emode on the edge. The valid values are `MANUAL`, `AUTO_LOCK` and `ACCESS_REQUEST`.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["approvalMode","duration","mode"]}}},"twingate:index/TwingateResourceAccessPolicy:TwingateResourceAccessPolicy":{"properties":{"approvalMode":{"type":"string","description":"This will set the approval model on the edge. The valid values are `AUTOMATIC` and `MANUAL`.\n"},"duration":{"type":"string","description":"This will set the access duration on the edge. Duration must be between 1 hour and 365 days. The valid values are like \u003cspan pulumi-lang-nodejs=\"`1h`\" pulumi-lang-dotnet=\"`1h`\" pulumi-lang-go=\"`1h`\" pulumi-lang-python=\"`1h`\" pulumi-lang-yaml=\"`1h`\" pulumi-lang-java=\"`1h`\"\u003e`1h`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`2d`\" pulumi-lang-dotnet=\"`2d`\" pulumi-lang-go=\"`2d`\" pulumi-lang-python=\"`2d`\" pulumi-lang-yaml=\"`2d`\" pulumi-lang-java=\"`2d`\"\u003e`2d`\u003c/span\u003e.\n"},"mode":{"type":"string","description":"This will set the\u003cspan pulumi-lang-nodejs=\" accessPolicy \" pulumi-lang-dotnet=\" AccessPolicy \" pulumi-lang-go=\" accessPolicy \" pulumi-lang-python=\" access_policy \" pulumi-lang-yaml=\" accessPolicy \" pulumi-lang-java=\" accessPolicy \"\u003e access_policy \u003c/span\u003emode on the edge. The valid values are `MANUAL`, `AUTO_LOCK` and `ACCESS_REQUEST`.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["approvalMode","duration","mode"]}}},"twingate:index/TwingateResourceAccessService:TwingateResourceAccessService":{"properties":{"serviceAccountId":{"type":"string","description":"The ID of the service account that should have access to this Resource.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["serviceAccountId"]}}},"twingate:index/TwingateResourceProtocols:TwingateResourceProtocols":{"properties":{"allowIcmp":{"type":"boolean","description":"Whether to allow ICMP (ping) traffic\n"},"tcp":{"$ref":"#/types/twingate:index/TwingateResourceProtocolsTcp:TwingateResourceProtocolsTcp"},"udp":{"$ref":"#/types/twingate:index/TwingateResourceProtocolsUdp:TwingateResourceProtocolsUdp"}},"type":"object","language":{"nodejs":{"requiredOutputs":["allowIcmp","tcp","udp"]}}},"twingate:index/TwingateResourceProtocolsTcp:TwingateResourceProtocolsTcp":{"properties":{"policy":{"type":"string","description":"Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL`\n"},"ports":{"type":"array","items":{"type":"string"},"description":"List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or \u003cspan pulumi-lang-nodejs=\"`8080`\" pulumi-lang-dotnet=\"`8080`\" pulumi-lang-go=\"`8080`\" pulumi-lang-python=\"`8080`\" pulumi-lang-yaml=\"`8080`\" pulumi-lang-java=\"`8080`\"\u003e`8080`\u003c/span\u003e for a single port\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["policy","ports"]}}},"twingate:index/TwingateResourceProtocolsUdp:TwingateResourceProtocolsUdp":{"properties":{"policy":{"type":"string","description":"Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL`\n"},"ports":{"type":"array","items":{"type":"string"},"description":"List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or \u003cspan pulumi-lang-nodejs=\"`8080`\" pulumi-lang-dotnet=\"`8080`\" pulumi-lang-go=\"`8080`\" pulumi-lang-python=\"`8080`\" pulumi-lang-yaml=\"`8080`\" pulumi-lang-java=\"`8080`\"\u003e`8080`\u003c/span\u003e for a single port\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["policy","ports"]}}},"twingate:index/getTwingateConnectorsConnector:getTwingateConnectorsConnector":{"properties":{"hostname":{"type":"string","description":"The hostname of the machine hosting the Connector.\n"},"id":{"type":"string","description":"The ID of the Connector.\n"},"name":{"type":"string","description":"The Name of the Connector.\n"},"privateIps":{"type":"array","items":{"type":"string"},"description":"The Connector's private IP addresses.\n"},"publicIp":{"type":"string","description":"The Connector's public IP address.\n"},"remoteNetworkId":{"type":"string","description":"The ID of the Remote Network attached to the Connector.\n"},"state":{"type":"string","description":"The Connector's state. One of `ALIVE`, `DEAD_NO_HEARTBEAT`, `DEAD_HEARTBEAT_TOO_OLD` or `DEAD_NO_RELAYS`.\n"},"statusUpdatesEnabled":{"type":"boolean","description":"Determines whether status notifications are enabled for the Connector.\n"},"version":{"type":"string","description":"The Connector's version.\n"}},"type":"object","required":["hostname","id","name","privateIps","publicIp","remoteNetworkId","state","statusUpdatesEnabled","version"],"language":{"nodejs":{"requiredInputs":[]}}},"twingate:index/getTwingateDNSFilteringProfileAllowedDomains:getTwingateDNSFilteringProfileAllowedDomains":{"properties":{"domains":{"type":"array","items":{"type":"string"},"description":"A set of allowed domains.\n"}},"type":"object","required":["domains"],"language":{"nodejs":{"requiredInputs":[]}}},"twingate:index/getTwingateDNSFilteringProfileContentCategories:getTwingateDNSFilteringProfileContentCategories":{"properties":{"blockAdultContent":{"type":"boolean","description":"Whether to block adult content.\n"},"blockDating":{"type":"boolean","description":"Whether to block dating content.\n"},"blockGambling":{"type":"boolean","description":"Whether to block gambling content.\n"},"blockGames":{"type":"boolean","description":"Whether to block games.\n"},"blockPiracy":{"type":"boolean","description":"Whether to block piracy sites.\n"},"blockSocialMedia":{"type":"boolean","description":"Whether to block social media.\n"},"blockStreaming":{"type":"boolean","description":"Whether to block streaming content.\n"},"enableSafesearch":{"type":"boolean","description":"Whether to force safe search.\n"},"enableYoutubeRestrictedMode":{"type":"boolean","description":"Whether to force YouTube to use restricted mode.\n"}},"type":"object","required":["blockAdultContent","blockDating","blockGambling","blockGames","blockPiracy","blockSocialMedia","blockStreaming","enableSafesearch","enableYoutubeRestrictedMode"],"language":{"nodejs":{"requiredInputs":[]}}},"twingate:index/getTwingateDNSFilteringProfileDeniedDomains:getTwingateDNSFilteringProfileDeniedDomains":{"properties":{"domains":{"type":"array","items":{"type":"string"},"description":"A set of denied domains.\n"}},"type":"object","required":["domains"],"language":{"nodejs":{"requiredInputs":[]}}},"twingate:index/getTwingateDNSFilteringProfilePrivacyCategories:getTwingateDNSFilteringProfilePrivacyCategories":{"properties":{"blockAdsAndTrackers":{"type":"boolean","description":"Whether to block ads and trackers.\n"},"blockAffiliateLinks":{"type":"boolean","description":"Whether to block affiliate links.\n"},"blockDisguisedTrackers":{"type":"boolean","description":"Whether to block disguised third party trackers.\n"}},"type":"object","required":["blockAdsAndTrackers","blockAffiliateLinks","blockDisguisedTrackers"],"language":{"nodejs":{"requiredInputs":[]}}},"twingate:index/getTwingateDNSFilteringProfileSecurityCategories:getTwingateDNSFilteringProfileSecurityCategories":{"properties":{"blockCryptojacking":{"type":"boolean","description":"Whether to block cryptojacking sites.\n"},"blockDnsRebinding":{"type":"boolean","description":"Blocks public DNS entries from returning private IP addresses.\n"},"blockDomainGenerationAlgorithms":{"type":"boolean","description":"Blocks DGA domains.\n"},"blockIdnHomoglyph":{"type":"boolean","description":"Whether to block homoglyph attacks.\n"},"blockNewlyRegisteredDomains":{"type":"boolean","description":"Blocks newly registered domains.\n"},"blockParkedDomains":{"type":"boolean","description":"Block parked domains.\n"},"blockTyposquatting":{"type":"boolean","description":"Blocks typosquatted domains.\n"},"enableGoogleSafeBrowsing":{"type":"boolean","description":"Whether to use Google Safe browsing lists to block content.\n"},"enableThreatIntelligenceFeeds":{"type":"boolean","description":"Whether to filter content using threat intelligence feeds.\n"}},"type":"object","required":["blockCryptojacking","blockDnsRebinding","blockDomainGenerationAlgorithms","blockIdnHomoglyph","blockNewlyRegisteredDomains","blockParkedDomains","blockTyposquatting","enableGoogleSafeBrowsing","enableThreatIntelligenceFeeds"],"language":{"nodejs":{"requiredInputs":[]}}},"twingate:index/getTwingateGroupsGroup:getTwingateGroupsGroup":{"properties":{"id":{"type":"string","description":"The ID of the Group\n"},"isActive":{"type":"boolean","description":"Indicates if the Group is active\n"},"name":{"type":"string","description":"The name of the Group\n"},"type":{"type":"string","description":"The type of the Group\n"}},"type":"object","required":["id","isActive","name","type"],"language":{"nodejs":{"requiredInputs":[]}}},"twingate:index/getTwingateRemoteNetworksRemoteNetwork:getTwingateRemoteNetworksRemoteNetwork":{"properties":{"id":{"type":"string","description":"The ID of the Remote Network.\n"},"location":{"type":"string","description":"The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER.\n"},"name":{"type":"string","description":"The name of the Remote Network.\n"},"type":{"type":"string","description":"The type of the Remote Network. Must be one of the following: REGULAR, EXIT.\n"}},"type":"object","required":["id","location","type"],"language":{"nodejs":{"requiredInputs":[]}}},"twingate:index/getTwingateResourceProtocols:getTwingateResourceProtocols":{"properties":{"allowIcmp":{"type":"boolean","description":"Whether to allow ICMP (ping) traffic\n"},"tcp":{"$ref":"#/types/twingate:index/getTwingateResourceProtocolsTcp:getTwingateResourceProtocolsTcp"},"udp":{"$ref":"#/types/twingate:index/getTwingateResourceProtocolsUdp:getTwingateResourceProtocolsUdp"}},"type":"object","required":["allowIcmp"],"language":{"nodejs":{"requiredInputs":[]}}},"twingate:index/getTwingateResourceProtocolsTcp:getTwingateResourceProtocolsTcp":{"properties":{"policy":{"type":"string","description":"Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL`\n"},"ports":{"type":"array","items":{"type":"string"},"description":"List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or \u003cspan pulumi-lang-nodejs=\"`8080`\" pulumi-lang-dotnet=\"`8080`\" pulumi-lang-go=\"`8080`\" pulumi-lang-python=\"`8080`\" pulumi-lang-yaml=\"`8080`\" pulumi-lang-java=\"`8080`\"\u003e`8080`\u003c/span\u003e for a single port\n"}},"type":"object","required":["policy","ports"],"language":{"nodejs":{"requiredInputs":[]}}},"twingate:index/getTwingateResourceProtocolsUdp:getTwingateResourceProtocolsUdp":{"properties":{"policy":{"type":"string","description":"Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL`\n"},"ports":{"type":"array","items":{"type":"string"},"description":"List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or \u003cspan pulumi-lang-nodejs=\"`8080`\" pulumi-lang-dotnet=\"`8080`\" pulumi-lang-go=\"`8080`\" pulumi-lang-python=\"`8080`\" pulumi-lang-yaml=\"`8080`\" pulumi-lang-java=\"`8080`\"\u003e`8080`\u003c/span\u003e for a single port\n"}},"type":"object","required":["policy","ports"],"language":{"nodejs":{"requiredInputs":[]}}},"twingate:index/getTwingateResourcesResource:getTwingateResourcesResource":{"properties":{"address":{"type":"string","description":"The Resource's IP/CIDR or FQDN/DNS zone\n"},"id":{"type":"string","description":"The id of the Resource\n"},"name":{"type":"string","description":"The name of the Resource\n"},"protocols":{"$ref":"#/types/twingate:index/getTwingateResourcesResourceProtocols:getTwingateResourcesResourceProtocols","description":"Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed.\n"},"remoteNetworkId":{"type":"string","description":"Remote Network ID where the Resource lives\n"},"tags":{"type":"object","additionalProperties":{"type":"string"},"description":"The \u003cspan pulumi-lang-nodejs=\"`tags`\" pulumi-lang-dotnet=\"`Tags`\" pulumi-lang-go=\"`tags`\" pulumi-lang-python=\"`tags`\" pulumi-lang-yaml=\"`tags`\" pulumi-lang-java=\"`tags`\"\u003e`tags`\u003c/span\u003e attribute consists of a key-value pairs that correspond with tags to be set on the resource.\n"}},"type":"object","required":["address","id","name","protocols","remoteNetworkId","tags"],"language":{"nodejs":{"requiredInputs":[]}}},"twingate:index/getTwingateResourcesResourceProtocols:getTwingateResourcesResourceProtocols":{"properties":{"allowIcmp":{"type":"boolean","description":"Whether to allow ICMP (ping) traffic\n"},"tcp":{"$ref":"#/types/twingate:index/getTwingateResourcesResourceProtocolsTcp:getTwingateResourcesResourceProtocolsTcp"},"udp":{"$ref":"#/types/twingate:index/getTwingateResourcesResourceProtocolsUdp:getTwingateResourcesResourceProtocolsUdp"}},"type":"object","required":["allowIcmp","tcp","udp"],"language":{"nodejs":{"requiredInputs":[]}}},"twingate:index/getTwingateResourcesResourceProtocolsTcp:getTwingateResourcesResourceProtocolsTcp":{"properties":{"policy":{"type":"string","description":"Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL`\n"},"ports":{"type":"array","items":{"type":"string"},"description":"List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or \u003cspan pulumi-lang-nodejs=\"`8080`\" pulumi-lang-dotnet=\"`8080`\" pulumi-lang-go=\"`8080`\" pulumi-lang-python=\"`8080`\" pulumi-lang-yaml=\"`8080`\" pulumi-lang-java=\"`8080`\"\u003e`8080`\u003c/span\u003e for a single port\n"}},"type":"object","required":["policy","ports"],"language":{"nodejs":{"requiredInputs":[]}}},"twingate:index/getTwingateResourcesResourceProtocolsUdp:getTwingateResourcesResourceProtocolsUdp":{"properties":{"policy":{"type":"string","description":"Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL`\n"},"ports":{"type":"array","items":{"type":"string"},"description":"List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or \u003cspan pulumi-lang-nodejs=\"`8080`\" pulumi-lang-dotnet=\"`8080`\" pulumi-lang-go=\"`8080`\" pulumi-lang-python=\"`8080`\" pulumi-lang-yaml=\"`8080`\" pulumi-lang-java=\"`8080`\"\u003e`8080`\u003c/span\u003e for a single port\n"}},"type":"object","required":["policy","ports"],"language":{"nodejs":{"requiredInputs":[]}}},"twingate:index/getTwingateSecurityPoliciesSecurityPolicy:getTwingateSecurityPoliciesSecurityPolicy":{"properties":{"id":{"type":"string","description":"Return a matching Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console.\n"},"name":{"type":"string","description":"Return a Security Policy that exactly matches this name.\n"}},"type":"object","required":["id","name"],"language":{"nodejs":{"requiredInputs":[]}}},"twingate:index/getTwingateServiceAccountsServiceAccount:getTwingateServiceAccountsServiceAccount":{"properties":{"id":{"type":"string","description":"ID of the Service Account resource\n"},"keyIds":{"type":"array","items":{"type":"string"},"description":"List of twingate*service*account_key IDs that are assigned to the Service Account.\n"},"name":{"type":"string","description":"Name of the Service Account\n"},"resourceIds":{"type":"array","items":{"type":"string"},"description":"List of\u003cspan pulumi-lang-nodejs=\" twingate.TwingateResource \" pulumi-lang-dotnet=\" twingate.TwingateResource \" pulumi-lang-go=\" TwingateResource \" pulumi-lang-python=\" TwingateResource \" pulumi-lang-yaml=\" twingate.TwingateResource \" pulumi-lang-java=\" twingate.TwingateResource \"\u003e twingate.TwingateResource \u003c/span\u003eIDs that the Service Account is assigned to.\n"}},"type":"object","required":["id","keyIds","name","resourceIds"],"language":{"nodejs":{"requiredInputs":[]}}},"twingate:index/getTwingateUsersUser:getTwingateUsersUser":{"properties":{"email":{"type":"string","description":"The email address of the User\n"},"firstName":{"type":"string","description":"The first name of the User\n"},"id":{"type":"string","description":"The ID of the User\n"},"lastName":{"type":"string","description":"The last name of the User\n"},"role":{"type":"string","description":"Indicates the User's role. Either ADMIN, DEVOPS, SUPPORT, MEMBER or ACCESS_REVIEWER.\n"},"type":{"type":"string","description":"Indicates the User's type. Either MANUAL or SYNCED.\n"}},"type":"object","required":["email","firstName","id","lastName","role","type"],"language":{"nodejs":{"requiredInputs":[]}}}},"provider":{"description":"The provider type for the twingate package. By default, resources use package-wide configuration\nsettings, however an explicit `Provider` instance may be created and passed during resource\nconstruction to achieve fine-grained programmatic control over provider settings. See the\n[documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information.\n","properties":{"apiToken":{"type":"string","description":"The access key for API operations. You can retrieve this\nfrom the Twingate Admin Console ([documentation](https://docs.twingate.com/docs/api-overview)).\nAlternatively, this can be specified using the TWINGATE_API_TOKEN environment variable.","secret":true},"cache":{"$ref":"#/types/twingate:index/ProviderCache:ProviderCache","description":"Specifies the cache settings for the provider."},"defaultTags":{"$ref":"#/types/twingate:index/ProviderDefaultTags:ProviderDefaultTags","description":"A default set of tags applied globally to all resources created by the provider."},"httpMaxRetry":{"type":"integer","description":"Specifies a retry limit for the http requests made. The default value is 10.\nAlternatively, this can be specified using the TWINGATE_HTTP_MAX_RETRY environment variable"},"httpTimeout":{"type":"integer","description":"Specifies a time limit in seconds for the http requests made. The default value is 35 seconds.\nAlternatively, this can be specified using the TWINGATE_HTTP_TIMEOUT environment variable"},"network":{"type":"string","description":"Your Twingate network ID for API operations.\nYou can find it in the Admin Console URL, for example:\n`autoco.twingate.com`, where \u003cspan pulumi-lang-nodejs=\"`autoco`\" pulumi-lang-dotnet=\"`Autoco`\" pulumi-lang-go=\"`autoco`\" pulumi-lang-python=\"`autoco`\" pulumi-lang-yaml=\"`autoco`\" pulumi-lang-java=\"`autoco`\"\u003e`autoco`\u003c/span\u003e is your network ID\nAlternatively, this can be specified using the TWINGATE_NETWORK environment variable."},"url":{"type":"string","description":"The default is 'twingate.com'\nThis is optional and shouldn't be changed under normal circumstances."}},"inputProperties":{"apiToken":{"type":"string","description":"The access key for API operations. You can retrieve this\nfrom the Twingate Admin Console ([documentation](https://docs.twingate.com/docs/api-overview)).\nAlternatively, this can be specified using the TWINGATE_API_TOKEN environment variable.","secret":true},"cache":{"$ref":"#/types/twingate:index/ProviderCache:ProviderCache","description":"Specifies the cache settings for the provider."},"defaultTags":{"$ref":"#/types/twingate:index/ProviderDefaultTags:ProviderDefaultTags","description":"A default set of tags applied globally to all resources created by the provider."},"httpMaxRetry":{"type":"integer","description":"Specifies a retry limit for the http requests made. The default value is 10.\nAlternatively, this can be specified using the TWINGATE_HTTP_MAX_RETRY environment variable"},"httpTimeout":{"type":"integer","description":"Specifies a time limit in seconds for the http requests made. The default value is 35 seconds.\nAlternatively, this can be specified using the TWINGATE_HTTP_TIMEOUT environment variable"},"network":{"type":"string","description":"Your Twingate network ID for API operations.\nYou can find it in the Admin Console URL, for example:\n`autoco.twingate.com`, where \u003cspan pulumi-lang-nodejs=\"`autoco`\" pulumi-lang-dotnet=\"`Autoco`\" pulumi-lang-go=\"`autoco`\" pulumi-lang-python=\"`autoco`\" pulumi-lang-yaml=\"`autoco`\" pulumi-lang-java=\"`autoco`\"\u003e`autoco`\u003c/span\u003e is your network ID\nAlternatively, this can be specified using the TWINGATE_NETWORK environment variable."},"url":{"type":"string","description":"The default is 'twingate.com'\nThis is optional and shouldn't be changed under normal circumstances."}},"methods":{"terraformConfig":"pulumi:providers:twingate/terraformConfig"}},"resources":{"twingate:index/twingateConnector:TwingateConnector":{"description":"Connectors provide connectivity to Remote Networks. This resource type will create the Connector in the Twingate Admin Console, but in order to successfully deploy it, you must also generate Connector tokens that authenticate the Connector with Twingate. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/understanding-access-nodes).\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@twingate/pulumi-twingate\";\n\nconst awsNetwork = new twingate.TwingateRemoteNetwork(\"aws_network\", {name: \"aws_remote_network\"});\nconst awsConnector = new twingate.TwingateConnector(\"aws_connector\", {\n    remoteNetworkId: awsNetwork.id,\n    statusUpdatesEnabled: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\naws_network = twingate.TwingateRemoteNetwork(\"aws_network\", name=\"aws_remote_network\")\naws_connector = twingate.TwingateConnector(\"aws_connector\",\n    remote_network_id=aws_network.id,\n    status_updates_enabled=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Twingate.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var awsNetwork = new Twingate.TwingateRemoteNetwork(\"aws_network\", new()\n    {\n        Name = \"aws_remote_network\",\n    });\n\n    var awsConnector = new Twingate.TwingateConnector(\"aws_connector\", new()\n    {\n        RemoteNetworkId = awsNetwork.Id,\n        StatusUpdatesEnabled = true,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/v4/go/twingate\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tawsNetwork, err := twingate.NewTwingateRemoteNetwork(ctx, \"aws_network\", \u0026twingate.TwingateRemoteNetworkArgs{\n\t\t\tName: pulumi.String(\"aws_remote_network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = twingate.NewTwingateConnector(ctx, \"aws_connector\", \u0026twingate.TwingateConnectorArgs{\n\t\t\tRemoteNetworkId:      awsNetwork.ID(),\n\t\t\tStatusUpdatesEnabled: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateRemoteNetwork;\nimport com.pulumi.twingate.TwingateRemoteNetworkArgs;\nimport com.pulumi.twingate.TwingateConnector;\nimport com.pulumi.twingate.TwingateConnectorArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var awsNetwork = new TwingateRemoteNetwork(\"awsNetwork\", TwingateRemoteNetworkArgs.builder()\n            .name(\"aws_remote_network\")\n            .build());\n\n        var awsConnector = new TwingateConnector(\"awsConnector\", TwingateConnectorArgs.builder()\n            .remoteNetworkId(awsNetwork.id())\n            .statusUpdatesEnabled(true)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  awsNetwork:\n    type: twingate:TwingateRemoteNetwork\n    name: aws_network\n    properties:\n      name: aws_remote_network\n  awsConnector:\n    type: twingate:TwingateConnector\n    name: aws_connector\n    properties:\n      remoteNetworkId: ${awsNetwork.id}\n      statusUpdatesEnabled: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import twingate:index/twingateConnector:TwingateConnector aws_connector Q29ubmVjdG9yOjI2NzM=\n```\n\n","properties":{"hostname":{"type":"string","description":"The hostname of the machine hosting the Connector.\n"},"name":{"type":"string","description":"Name of the Connector, if not provided one will be generated.\n"},"privateIps":{"type":"array","items":{"type":"string"},"description":"The Connector's private IP addresses.\n"},"publicIp":{"type":"string","description":"The Connector's public IP address.\n"},"remoteNetworkId":{"type":"string","description":"The ID of the Remote Network the Connector is attached to.\n"},"state":{"type":"string","description":"The Connector's state. One of `ALIVE`, `DEAD_NO_HEARTBEAT`, `DEAD_HEARTBEAT_TOO_OLD` or `DEAD_NO_RELAYS`.\n"},"statusUpdatesEnabled":{"type":"boolean","description":"Determines whether status notifications are enabled for the Connector. Default is \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"version":{"type":"string","description":"The Connector's version.\n"}},"required":["hostname","name","privateIps","publicIp","remoteNetworkId","state","statusUpdatesEnabled","version"],"inputProperties":{"name":{"type":"string","description":"Name of the Connector, if not provided one will be generated.\n"},"remoteNetworkId":{"type":"string","description":"The ID of the Remote Network the Connector is attached to.\n"},"statusUpdatesEnabled":{"type":"boolean","description":"Determines whether status notifications are enabled for the Connector. Default is \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"}},"requiredInputs":["remoteNetworkId"],"stateInputs":{"description":"Input properties used for looking up and filtering TwingateConnector resources.\n","properties":{"hostname":{"type":"string","description":"The hostname of the machine hosting the Connector.\n"},"name":{"type":"string","description":"Name of the Connector, if not provided one will be generated.\n"},"privateIps":{"type":"array","items":{"type":"string"},"description":"The Connector's private IP addresses.\n"},"publicIp":{"type":"string","description":"The Connector's public IP address.\n"},"remoteNetworkId":{"type":"string","description":"The ID of the Remote Network the Connector is attached to.\n"},"state":{"type":"string","description":"The Connector's state. One of `ALIVE`, `DEAD_NO_HEARTBEAT`, `DEAD_HEARTBEAT_TOO_OLD` or `DEAD_NO_RELAYS`.\n"},"statusUpdatesEnabled":{"type":"boolean","description":"Determines whether status notifications are enabled for the Connector. Default is \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"version":{"type":"string","description":"The Connector's version.\n"}},"type":"object"}},"twingate:index/twingateConnectorTokens:TwingateConnectorTokens":{"description":"This resource type will generate tokens for a Connector, which are needed to successfully provision one on your network. The Connector itself has its own resource type and must be created before you can provision tokens.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@twingate/pulumi-twingate\";\n\nconst awsNetwork = new twingate.TwingateRemoteNetwork(\"aws_network\", {name: \"aws_remote_network\"});\nconst awsConnector = new twingate.TwingateConnector(\"aws_connector\", {remoteNetworkId: awsNetwork.id});\nconst awsConnectorTokens = new twingate.TwingateConnectorTokens(\"aws_connector_tokens\", {connectorId: awsConnector.id});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\naws_network = twingate.TwingateRemoteNetwork(\"aws_network\", name=\"aws_remote_network\")\naws_connector = twingate.TwingateConnector(\"aws_connector\", remote_network_id=aws_network.id)\naws_connector_tokens = twingate.TwingateConnectorTokens(\"aws_connector_tokens\", connector_id=aws_connector.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Twingate.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var awsNetwork = new Twingate.TwingateRemoteNetwork(\"aws_network\", new()\n    {\n        Name = \"aws_remote_network\",\n    });\n\n    var awsConnector = new Twingate.TwingateConnector(\"aws_connector\", new()\n    {\n        RemoteNetworkId = awsNetwork.Id,\n    });\n\n    var awsConnectorTokens = new Twingate.TwingateConnectorTokens(\"aws_connector_tokens\", new()\n    {\n        ConnectorId = awsConnector.Id,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/v4/go/twingate\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tawsNetwork, err := twingate.NewTwingateRemoteNetwork(ctx, \"aws_network\", \u0026twingate.TwingateRemoteNetworkArgs{\n\t\t\tName: pulumi.String(\"aws_remote_network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tawsConnector, err := twingate.NewTwingateConnector(ctx, \"aws_connector\", \u0026twingate.TwingateConnectorArgs{\n\t\t\tRemoteNetworkId: awsNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = twingate.NewTwingateConnectorTokens(ctx, \"aws_connector_tokens\", \u0026twingate.TwingateConnectorTokensArgs{\n\t\t\tConnectorId: awsConnector.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateRemoteNetwork;\nimport com.pulumi.twingate.TwingateRemoteNetworkArgs;\nimport com.pulumi.twingate.TwingateConnector;\nimport com.pulumi.twingate.TwingateConnectorArgs;\nimport com.pulumi.twingate.TwingateConnectorTokens;\nimport com.pulumi.twingate.TwingateConnectorTokensArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var awsNetwork = new TwingateRemoteNetwork(\"awsNetwork\", TwingateRemoteNetworkArgs.builder()\n            .name(\"aws_remote_network\")\n            .build());\n\n        var awsConnector = new TwingateConnector(\"awsConnector\", TwingateConnectorArgs.builder()\n            .remoteNetworkId(awsNetwork.id())\n            .build());\n\n        var awsConnectorTokens = new TwingateConnectorTokens(\"awsConnectorTokens\", TwingateConnectorTokensArgs.builder()\n            .connectorId(awsConnector.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  awsNetwork:\n    type: twingate:TwingateRemoteNetwork\n    name: aws_network\n    properties:\n      name: aws_remote_network\n  awsConnector:\n    type: twingate:TwingateConnector\n    name: aws_connector\n    properties:\n      remoteNetworkId: ${awsNetwork.id}\n  awsConnectorTokens:\n    type: twingate:TwingateConnectorTokens\n    name: aws_connector_tokens\n    properties:\n      connectorId: ${awsConnector.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"accessToken":{"type":"string","description":"The Access Token of the parent Connector\n","secret":true},"connectorId":{"type":"string","description":"The ID of the parent Connector\n"},"keepers":{"type":"object","additionalProperties":{"type":"string"},"description":"Arbitrary map of values that, when changed, will trigger recreation of resource. Use this to automatically rotate Connector tokens on a schedule.\n"},"refreshToken":{"type":"string","description":"The Refresh Token of the parent Connector\n","secret":true}},"required":["accessToken","connectorId","refreshToken"],"inputProperties":{"connectorId":{"type":"string","description":"The ID of the parent Connector\n"},"keepers":{"type":"object","additionalProperties":{"type":"string"},"description":"Arbitrary map of values that, when changed, will trigger recreation of resource. Use this to automatically rotate Connector tokens on a schedule.\n"}},"requiredInputs":["connectorId"],"stateInputs":{"description":"Input properties used for looking up and filtering TwingateConnectorTokens resources.\n","properties":{"accessToken":{"type":"string","description":"The Access Token of the parent Connector\n","secret":true},"connectorId":{"type":"string","description":"The ID of the parent Connector\n"},"keepers":{"type":"object","additionalProperties":{"type":"string"},"description":"Arbitrary map of values that, when changed, will trigger recreation of resource. Use this to automatically rotate Connector tokens on a schedule.\n"},"refreshToken":{"type":"string","description":"The Refresh Token of the parent Connector\n","secret":true}},"type":"object"}},"twingate:index/twingateDNSFilteringProfile:TwingateDNSFilteringProfile":{"description":"DNS filtering gives you the ability to control what websites your users can access. DNS filtering is only available on certain plans. For more information, see Twingate's [documentation](https://www.twingate.com/docs/dns-filtering). DNS filtering must be enabled for this resources to work. If DNS filtering isn't enabled, the provider will throw an error.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as std from \"@pulumi/std\";\nimport * as twingate from \"@twingate/pulumi-twingate\";\n\nconst example1 = new twingate.TwingateGroup(\"example1\", {name: \"example_1\"});\nconst example2 = new twingate.TwingateGroup(\"example2\", {name: \"example_2\"});\nconst example = twingate.getTwingateGroups({\n    namePrefix: \"example\",\n});\nconst exampleTwingateDNSFilteringProfile = new twingate.TwingateDNSFilteringProfile(\"example\", {\n    name: \"Example DNS Filtering Profile\",\n    priority: 2,\n    fallbackMethod: \"AUTO\",\n    groups: example.then(example =\u003e std.toset({\n        input: example.groups.map(__item =\u003e __item.id),\n    })).then(invoke =\u003e invoke.result),\n    allowedDomains: {\n        isAuthoritative: false,\n        domains: [\n            \"twingate.com\",\n            \"zoom.us\",\n        ],\n    },\n    deniedDomains: {\n        isAuthoritative: true,\n        domains: [\"evil.example\"],\n    },\n    contentCategories: {\n        blockAdultContent: true,\n    },\n    securityCategories: {\n        blockDnsRebinding: false,\n        blockNewlyRegisteredDomains: false,\n    },\n    privacyCategories: {\n        blockDisguisedTrackers: true,\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_std as std\nimport pulumi_twingate as twingate\n\nexample1 = twingate.TwingateGroup(\"example1\", name=\"example_1\")\nexample2 = twingate.TwingateGroup(\"example2\", name=\"example_2\")\nexample = twingate.get_twingate_groups(name_prefix=\"example\")\nexample_twingate_dns_filtering_profile = twingate.TwingateDNSFilteringProfile(\"example\",\n    name=\"Example DNS Filtering Profile\",\n    priority=2,\n    fallback_method=\"AUTO\",\n    groups=std.toset(input=[__item.id for __item in example.groups]).result,\n    allowed_domains={\n        \"is_authoritative\": False,\n        \"domains\": [\n            \"twingate.com\",\n            \"zoom.us\",\n        ],\n    },\n    denied_domains={\n        \"is_authoritative\": True,\n        \"domains\": [\"evil.example\"],\n    },\n    content_categories={\n        \"block_adult_content\": True,\n    },\n    security_categories={\n        \"block_dns_rebinding\": False,\n        \"block_newly_registered_domains\": False,\n    },\n    privacy_categories={\n        \"block_disguised_trackers\": True,\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Std = Pulumi.Std;\nusing Twingate = Twingate.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example1 = new Twingate.TwingateGroup(\"example1\", new()\n    {\n        Name = \"example_1\",\n    });\n\n    var example2 = new Twingate.TwingateGroup(\"example2\", new()\n    {\n        Name = \"example_2\",\n    });\n\n    var example = Twingate.GetTwingateGroups.Invoke(new()\n    {\n        NamePrefix = \"example\",\n    });\n\n    var exampleTwingateDNSFilteringProfile = new Twingate.TwingateDNSFilteringProfile(\"example\", new()\n    {\n        Name = \"Example DNS Filtering Profile\",\n        Priority = 2,\n        FallbackMethod = \"AUTO\",\n        Groups = Std.Toset.Invoke(new()\n        {\n            Input = example.Apply(getTwingateGroupsResult =\u003e getTwingateGroupsResult.Groups).Select(__item =\u003e __item.Id).ToList(),\n        }).Apply(invoke =\u003e invoke.Result),\n        AllowedDomains = new Twingate.Inputs.TwingateDNSFilteringProfileAllowedDomainsArgs\n        {\n            IsAuthoritative = false,\n            Domains = new[]\n            {\n                \"twingate.com\",\n                \"zoom.us\",\n            },\n        },\n        DeniedDomains = new Twingate.Inputs.TwingateDNSFilteringProfileDeniedDomainsArgs\n        {\n            IsAuthoritative = true,\n            Domains = new[]\n            {\n                \"evil.example\",\n            },\n        },\n        ContentCategories = new Twingate.Inputs.TwingateDNSFilteringProfileContentCategoriesArgs\n        {\n            BlockAdultContent = true,\n        },\n        SecurityCategories = new Twingate.Inputs.TwingateDNSFilteringProfileSecurityCategoriesArgs\n        {\n            BlockDnsRebinding = false,\n            BlockNewlyRegisteredDomains = false,\n        },\n        PrivacyCategories = new Twingate.Inputs.TwingateDNSFilteringProfilePrivacyCategoriesArgs\n        {\n            BlockDisguisedTrackers = true,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/v4/go/twingate\"\n\t\"github.com/pulumi/pulumi-std/sdk/v2/go/std\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\nfunc main() {\npulumi.Run(func(ctx *pulumi.Context) error {\n_, err := twingate.NewTwingateGroup(ctx, \"example1\", \u0026twingate.TwingateGroupArgs{\nName: pulumi.String(\"example_1\"),\n})\nif err != nil {\nreturn err\n}\n_, err = twingate.NewTwingateGroup(ctx, \"example2\", \u0026twingate.TwingateGroupArgs{\nName: pulumi.String(\"example_2\"),\n})\nif err != nil {\nreturn err\n}\nexample, err := twingate.GetTwingateGroups(ctx, \u0026twingate.GetTwingateGroupsArgs{\nNamePrefix: pulumi.StringRef(\"example\"),\n}, nil);\nif err != nil {\nreturn err\n}\ninvokeToset, err := std.Toset(ctx, \u0026std.TosetArgs{\nInput: %!v(PANIC=Format method: fatal: A failure has occurred: unlowered splat expression @ example.pp:19,13-33),\n}, nil)\nif err != nil {\nreturn err\n}\n_, err = twingate.NewTwingateDNSFilteringProfile(ctx, \"example\", \u0026twingate.TwingateDNSFilteringProfileArgs{\nName: pulumi.String(\"Example DNS Filtering Profile\"),\nPriority: pulumi.Float64(2),\nFallbackMethod: pulumi.String(\"AUTO\"),\nGroups: pulumi.StringArray(invokeToset.Result),\nAllowedDomains: \u0026twingate.TwingateDNSFilteringProfileAllowedDomainsArgs{\nIsAuthoritative: pulumi.Bool(false),\nDomains: pulumi.StringArray{\npulumi.String(\"twingate.com\"),\npulumi.String(\"zoom.us\"),\n},\n},\nDeniedDomains: \u0026twingate.TwingateDNSFilteringProfileDeniedDomainsArgs{\nIsAuthoritative: pulumi.Bool(true),\nDomains: pulumi.StringArray{\npulumi.String(\"evil.example\"),\n},\n},\nContentCategories: \u0026twingate.TwingateDNSFilteringProfileContentCategoriesArgs{\nBlockAdultContent: pulumi.Bool(true),\n},\nSecurityCategories: \u0026twingate.TwingateDNSFilteringProfileSecurityCategoriesArgs{\nBlockDnsRebinding: pulumi.Bool(false),\nBlockNewlyRegisteredDomains: pulumi.Bool(false),\n},\nPrivacyCategories: \u0026twingate.TwingateDNSFilteringProfilePrivacyCategoriesArgs{\nBlockDisguisedTrackers: pulumi.Bool(true),\n},\n})\nif err != nil {\nreturn err\n}\nreturn nil\n})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateGroup;\nimport com.pulumi.twingate.TwingateGroupArgs;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateGroupsArgs;\nimport com.pulumi.twingate.TwingateDNSFilteringProfile;\nimport com.pulumi.twingate.TwingateDNSFilteringProfileArgs;\nimport com.pulumi.twingate.inputs.TwingateDNSFilteringProfileAllowedDomainsArgs;\nimport com.pulumi.twingate.inputs.TwingateDNSFilteringProfileDeniedDomainsArgs;\nimport com.pulumi.twingate.inputs.TwingateDNSFilteringProfileContentCategoriesArgs;\nimport com.pulumi.twingate.inputs.TwingateDNSFilteringProfileSecurityCategoriesArgs;\nimport com.pulumi.twingate.inputs.TwingateDNSFilteringProfilePrivacyCategoriesArgs;\nimport com.pulumi.std.StdFunctions;\nimport com.pulumi.std.inputs.TosetArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example1 = new TwingateGroup(\"example1\", TwingateGroupArgs.builder()\n            .name(\"example_1\")\n            .build());\n\n        var example2 = new TwingateGroup(\"example2\", TwingateGroupArgs.builder()\n            .name(\"example_2\")\n            .build());\n\n        final var example = TwingateFunctions.getTwingateGroups(GetTwingateGroupsArgs.builder()\n            .namePrefix(\"example\")\n            .build());\n\n        var exampleTwingateDNSFilteringProfile = new TwingateDNSFilteringProfile(\"exampleTwingateDNSFilteringProfile\", TwingateDNSFilteringProfileArgs.builder()\n            .name(\"Example DNS Filtering Profile\")\n            .priority(2.0)\n            .fallbackMethod(\"AUTO\")\n            .groups(StdFunctions.toset(TosetArgs.builder()\n                .input(example.groups().stream().map(element -\u003e element.id()).collect(toList()))\n                .build()).result())\n            .allowedDomains(TwingateDNSFilteringProfileAllowedDomainsArgs.builder()\n                .isAuthoritative(false)\n                .domains(                \n                    \"twingate.com\",\n                    \"zoom.us\")\n                .build())\n            .deniedDomains(TwingateDNSFilteringProfileDeniedDomainsArgs.builder()\n                .isAuthoritative(true)\n                .domains(\"evil.example\")\n                .build())\n            .contentCategories(TwingateDNSFilteringProfileContentCategoriesArgs.builder()\n                .blockAdultContent(true)\n                .build())\n            .securityCategories(TwingateDNSFilteringProfileSecurityCategoriesArgs.builder()\n                .blockDnsRebinding(false)\n                .blockNewlyRegisteredDomains(false)\n                .build())\n            .privacyCategories(TwingateDNSFilteringProfilePrivacyCategoriesArgs.builder()\n                .blockDisguisedTrackers(true)\n                .build())\n            .build());\n\n    }\n}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import twingate:index/twingateDNSFilteringProfile:TwingateDNSFilteringProfile example RG5zRmlsdGVyaW5nUHJvZmlsZToxY2I4YzM0YTc0\n```\n\n","properties":{"allowedDomains":{"$ref":"#/types/twingate:index/TwingateDNSFilteringProfileAllowedDomains:TwingateDNSFilteringProfileAllowedDomains","description":"A block with the following attributes.\n"},"contentCategories":{"$ref":"#/types/twingate:index/TwingateDNSFilteringProfileContentCategories:TwingateDNSFilteringProfileContentCategories","description":"A block with the following attributes.\n"},"deniedDomains":{"$ref":"#/types/twingate:index/TwingateDNSFilteringProfileDeniedDomains:TwingateDNSFilteringProfileDeniedDomains","description":"A block with the following attributes.\n"},"fallbackMethod":{"type":"string","description":"The DNS filtering profile's fallback method. One of \"AUTO\" or \"STRICT\". Defaults to \"STRICT\".\n"},"groups":{"type":"array","items":{"type":"string"},"description":"A set of group IDs that have this as their DNS filtering profile. Defaults to an empty set.\n"},"name":{"type":"string","description":"The DNS filtering profile's name.\n"},"priority":{"type":"number","description":"A floating point number representing the profile's priority.\n"},"privacyCategories":{"$ref":"#/types/twingate:index/TwingateDNSFilteringProfilePrivacyCategories:TwingateDNSFilteringProfilePrivacyCategories","description":"A block with the following attributes.\n"},"securityCategories":{"$ref":"#/types/twingate:index/TwingateDNSFilteringProfileSecurityCategories:TwingateDNSFilteringProfileSecurityCategories","description":"A block with the following attributes.\n"}},"required":["fallbackMethod","groups","name","priority"],"inputProperties":{"allowedDomains":{"$ref":"#/types/twingate:index/TwingateDNSFilteringProfileAllowedDomains:TwingateDNSFilteringProfileAllowedDomains","description":"A block with the following attributes.\n"},"contentCategories":{"$ref":"#/types/twingate:index/TwingateDNSFilteringProfileContentCategories:TwingateDNSFilteringProfileContentCategories","description":"A block with the following attributes.\n"},"deniedDomains":{"$ref":"#/types/twingate:index/TwingateDNSFilteringProfileDeniedDomains:TwingateDNSFilteringProfileDeniedDomains","description":"A block with the following attributes.\n"},"fallbackMethod":{"type":"string","description":"The DNS filtering profile's fallback method. One of \"AUTO\" or \"STRICT\". Defaults to \"STRICT\".\n"},"groups":{"type":"array","items":{"type":"string"},"description":"A set of group IDs that have this as their DNS filtering profile. Defaults to an empty set.\n"},"name":{"type":"string","description":"The DNS filtering profile's name.\n"},"priority":{"type":"number","description":"A floating point number representing the profile's priority.\n"},"privacyCategories":{"$ref":"#/types/twingate:index/TwingateDNSFilteringProfilePrivacyCategories:TwingateDNSFilteringProfilePrivacyCategories","description":"A block with the following attributes.\n"},"securityCategories":{"$ref":"#/types/twingate:index/TwingateDNSFilteringProfileSecurityCategories:TwingateDNSFilteringProfileSecurityCategories","description":"A block with the following attributes.\n"}},"requiredInputs":["priority"],"stateInputs":{"description":"Input properties used for looking up and filtering TwingateDNSFilteringProfile resources.\n","properties":{"allowedDomains":{"$ref":"#/types/twingate:index/TwingateDNSFilteringProfileAllowedDomains:TwingateDNSFilteringProfileAllowedDomains","description":"A block with the following attributes.\n"},"contentCategories":{"$ref":"#/types/twingate:index/TwingateDNSFilteringProfileContentCategories:TwingateDNSFilteringProfileContentCategories","description":"A block with the following attributes.\n"},"deniedDomains":{"$ref":"#/types/twingate:index/TwingateDNSFilteringProfileDeniedDomains:TwingateDNSFilteringProfileDeniedDomains","description":"A block with the following attributes.\n"},"fallbackMethod":{"type":"string","description":"The DNS filtering profile's fallback method. One of \"AUTO\" or \"STRICT\". Defaults to \"STRICT\".\n"},"groups":{"type":"array","items":{"type":"string"},"description":"A set of group IDs that have this as their DNS filtering profile. Defaults to an empty set.\n"},"name":{"type":"string","description":"The DNS filtering profile's name.\n"},"priority":{"type":"number","description":"A floating point number representing the profile's priority.\n"},"privacyCategories":{"$ref":"#/types/twingate:index/TwingateDNSFilteringProfilePrivacyCategories:TwingateDNSFilteringProfilePrivacyCategories","description":"A block with the following attributes.\n"},"securityCategories":{"$ref":"#/types/twingate:index/TwingateDNSFilteringProfileSecurityCategories:TwingateDNSFilteringProfileSecurityCategories","description":"A block with the following attributes.\n"}},"type":"object"}},"twingate:index/twingateGroup:TwingateGroup":{"description":"Groups are how users are authorized to access Resources. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/groups).\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@twingate/pulumi-twingate\";\n\nconst aws = new twingate.TwingateGroup(\"aws\", {name: \"aws_group\"});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\naws = twingate.TwingateGroup(\"aws\", name=\"aws_group\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Twingate.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var aws = new Twingate.TwingateGroup(\"aws\", new()\n    {\n        Name = \"aws_group\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/v4/go/twingate\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := twingate.NewTwingateGroup(ctx, \"aws\", \u0026twingate.TwingateGroupArgs{\n\t\t\tName: pulumi.String(\"aws_group\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateGroup;\nimport com.pulumi.twingate.TwingateGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var aws = new TwingateGroup(\"aws\", TwingateGroupArgs.builder()\n            .name(\"aws_group\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  aws:\n    type: twingate:TwingateGroup\n    properties:\n      name: aws_group\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import twingate:index/twingateGroup:TwingateGroup aws R3JvdXA6MzQ4OTE=\n```\n\n","properties":{"isAuthoritative":{"type":"boolean","description":"Determines whether User assignments to this Group will override any existing assignments. Default is \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. If set to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, assignments made outside of Terraform will be ignored.\n"},"name":{"type":"string","description":"The name of the group\n"},"userIds":{"type":"array","items":{"type":"string"},"description":"List of User IDs that have permission to access the Group.\n"}},"required":["isAuthoritative","name"],"inputProperties":{"isAuthoritative":{"type":"boolean","description":"Determines whether User assignments to this Group will override any existing assignments. Default is \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. If set to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, assignments made outside of Terraform will be ignored.\n"},"name":{"type":"string","description":"The name of the group\n"},"userIds":{"type":"array","items":{"type":"string"},"description":"List of User IDs that have permission to access the Group.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering TwingateGroup resources.\n","properties":{"isAuthoritative":{"type":"boolean","description":"Determines whether User assignments to this Group will override any existing assignments. Default is \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. If set to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, assignments made outside of Terraform will be ignored.\n"},"name":{"type":"string","description":"The name of the group\n"},"userIds":{"type":"array","items":{"type":"string"},"description":"List of User IDs that have permission to access the Group.\n"}},"type":"object"}},"twingate:index/twingateRemoteNetwork:TwingateRemoteNetwork":{"description":"A Remote Network represents a single private network in Twingate that can have one or more Connectors and Resources assigned to it. You must create a Remote Network before creating Resources and Connectors that belong to it. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/remote-networks).\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@twingate/pulumi-twingate\";\n\nconst awsNetwork = new twingate.TwingateRemoteNetwork(\"aws_network\", {name: \"aws_remote_network\"});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\naws_network = twingate.TwingateRemoteNetwork(\"aws_network\", name=\"aws_remote_network\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Twingate.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var awsNetwork = new Twingate.TwingateRemoteNetwork(\"aws_network\", new()\n    {\n        Name = \"aws_remote_network\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/v4/go/twingate\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := twingate.NewTwingateRemoteNetwork(ctx, \"aws_network\", \u0026twingate.TwingateRemoteNetworkArgs{\n\t\t\tName: pulumi.String(\"aws_remote_network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateRemoteNetwork;\nimport com.pulumi.twingate.TwingateRemoteNetworkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var awsNetwork = new TwingateRemoteNetwork(\"awsNetwork\", TwingateRemoteNetworkArgs.builder()\n            .name(\"aws_remote_network\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  awsNetwork:\n    type: twingate:TwingateRemoteNetwork\n    name: aws_network\n    properties:\n      name: aws_remote_network\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import twingate:index/twingateRemoteNetwork:TwingateRemoteNetwork network UmVtb3RlTmV0d29zaipgMKIkNg==\n```\n\n","properties":{"location":{"type":"string","description":"The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER.\n"},"name":{"type":"string","description":"The name of the Remote Network\n"},"type":{"type":"string","description":"The type of the Remote Network. Must be one of the following: REGULAR, EXIT. Defaults to REGULAR.\n"}},"required":["location","name","type"],"inputProperties":{"location":{"type":"string","description":"The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER.\n"},"name":{"type":"string","description":"The name of the Remote Network\n"},"type":{"type":"string","description":"The type of the Remote Network. Must be one of the following: REGULAR, EXIT. Defaults to REGULAR.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering TwingateRemoteNetwork resources.\n","properties":{"location":{"type":"string","description":"The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER.\n"},"name":{"type":"string","description":"The name of the Remote Network\n"},"type":{"type":"string","description":"The type of the Remote Network. Must be one of the following: REGULAR, EXIT. Defaults to REGULAR.\n"}},"type":"object"}},"twingate:index/twingateResource:TwingateResource":{"description":"Resources in Twingate represent servers on the private network that clients can connect to. Resources can be defined by IP, CIDR range, FQDN, or DNS zone. For more information, see the Twingate [documentation](https://docs.twingate.com/docs/resources-and-access-nodes).\n\n## Import\n\n```sh\n$ pulumi import twingate:index/twingateResource:TwingateResource resource UmVzb3VyY2U6MzQwNDQ3\n```\n\n","properties":{"accessGroups":{"type":"array","items":{"$ref":"#/types/twingate:index/TwingateResourceAccessGroup:TwingateResourceAccessGroup"},"description":"Restrict access to certain group\n"},"accessPolicies":{"type":"array","items":{"$ref":"#/types/twingate:index/TwingateResourceAccessPolicy:TwingateResourceAccessPolicy"},"description":"Restrict access according to JIT access policy\n"},"accessServices":{"type":"array","items":{"$ref":"#/types/twingate:index/TwingateResourceAccessService:TwingateResourceAccessService"},"description":"Restrict access to certain service account\n"},"address":{"type":"string","description":"The Resource's IP/CIDR or FQDN/DNS zone\n"},"alias":{"type":"string","description":"Set a DNS alias address for the Resource. Must be a DNS-valid name string.\n"},"isActive":{"type":"boolean","description":"Set the resource as active or inactive. Default is \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"isAuthoritative":{"type":"boolean","description":"Determines whether assignments in the access block will override any existing assignments. Default is \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. If set to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, assignments made outside of Terraform will be ignored.\n"},"isBrowserShortcutEnabled":{"type":"boolean","description":"Controls whether an \"Open in Browser\" shortcut will be shown for this Resource in the Twingate Client. Default is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"isVisible":{"type":"boolean","description":"Controls whether this Resource will be visible in the main Resource list in the Twingate Client. Default is \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"name":{"type":"string","description":"The name of the Resource\n"},"protocols":{"$ref":"#/types/twingate:index/TwingateResourceProtocols:TwingateResourceProtocols","description":"Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed.\n"},"remoteNetworkId":{"type":"string","description":"Remote Network ID where the Resource lives\n"},"securityPolicyId":{"type":"string","description":"The ID of a \u003cspan pulumi-lang-nodejs=\"`twingate.getTwingateSecurityPolicy`\" pulumi-lang-dotnet=\"`twingate.getTwingateSecurityPolicy`\" pulumi-lang-go=\"`getTwingateSecurityPolicy`\" pulumi-lang-python=\"`get_twingate_security_policy`\" pulumi-lang-yaml=\"`twingate.getTwingateSecurityPolicy`\" pulumi-lang-java=\"`twingate.getTwingateSecurityPolicy`\"\u003e`twingate.getTwingateSecurityPolicy`\u003c/span\u003e to set as this Resource's Security Policy. Default is 'Null' which points to `Default Policy` on Admin console.\n"},"tags":{"type":"object","additionalProperties":{"type":"string"},"description":"A map of key-value pair tags to set on this resource.\n"},"tagsAll":{"type":"object","additionalProperties":{"type":"string"},"description":"A map of key-value pairs that represents all tags on this resource, including default tags from provider configuration.\n"}},"required":["address","isActive","isAuthoritative","isBrowserShortcutEnabled","isVisible","name","protocols","remoteNetworkId","securityPolicyId","tags","tagsAll"],"inputProperties":{"accessGroups":{"type":"array","items":{"$ref":"#/types/twingate:index/TwingateResourceAccessGroup:TwingateResourceAccessGroup"},"description":"Restrict access to certain group\n"},"accessPolicies":{"type":"array","items":{"$ref":"#/types/twingate:index/TwingateResourceAccessPolicy:TwingateResourceAccessPolicy"},"description":"Restrict access according to JIT access policy\n"},"accessServices":{"type":"array","items":{"$ref":"#/types/twingate:index/TwingateResourceAccessService:TwingateResourceAccessService"},"description":"Restrict access to certain service account\n"},"address":{"type":"string","description":"The Resource's IP/CIDR or FQDN/DNS zone\n"},"alias":{"type":"string","description":"Set a DNS alias address for the Resource. Must be a DNS-valid name string.\n"},"isActive":{"type":"boolean","description":"Set the resource as active or inactive. Default is \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"isAuthoritative":{"type":"boolean","description":"Determines whether assignments in the access block will override any existing assignments. Default is \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. If set to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, assignments made outside of Terraform will be ignored.\n"},"isBrowserShortcutEnabled":{"type":"boolean","description":"Controls whether an \"Open in Browser\" shortcut will be shown for this Resource in the Twingate Client. Default is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"isVisible":{"type":"boolean","description":"Controls whether this Resource will be visible in the main Resource list in the Twingate Client. Default is \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"name":{"type":"string","description":"The name of the Resource\n"},"protocols":{"$ref":"#/types/twingate:index/TwingateResourceProtocols:TwingateResourceProtocols","description":"Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed.\n"},"remoteNetworkId":{"type":"string","description":"Remote Network ID where the Resource lives\n"},"securityPolicyId":{"type":"string","description":"The ID of a \u003cspan pulumi-lang-nodejs=\"`twingate.getTwingateSecurityPolicy`\" pulumi-lang-dotnet=\"`twingate.getTwingateSecurityPolicy`\" pulumi-lang-go=\"`getTwingateSecurityPolicy`\" pulumi-lang-python=\"`get_twingate_security_policy`\" pulumi-lang-yaml=\"`twingate.getTwingateSecurityPolicy`\" pulumi-lang-java=\"`twingate.getTwingateSecurityPolicy`\"\u003e`twingate.getTwingateSecurityPolicy`\u003c/span\u003e to set as this Resource's Security Policy. Default is 'Null' which points to `Default Policy` on Admin console.\n"},"tags":{"type":"object","additionalProperties":{"type":"string"},"description":"A map of key-value pair tags to set on this resource.\n"}},"requiredInputs":["address","remoteNetworkId"],"stateInputs":{"description":"Input properties used for looking up and filtering TwingateResource resources.\n","properties":{"accessGroups":{"type":"array","items":{"$ref":"#/types/twingate:index/TwingateResourceAccessGroup:TwingateResourceAccessGroup"},"description":"Restrict access to certain group\n"},"accessPolicies":{"type":"array","items":{"$ref":"#/types/twingate:index/TwingateResourceAccessPolicy:TwingateResourceAccessPolicy"},"description":"Restrict access according to JIT access policy\n"},"accessServices":{"type":"array","items":{"$ref":"#/types/twingate:index/TwingateResourceAccessService:TwingateResourceAccessService"},"description":"Restrict access to certain service account\n"},"address":{"type":"string","description":"The Resource's IP/CIDR or FQDN/DNS zone\n"},"alias":{"type":"string","description":"Set a DNS alias address for the Resource. Must be a DNS-valid name string.\n"},"isActive":{"type":"boolean","description":"Set the resource as active or inactive. Default is \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"isAuthoritative":{"type":"boolean","description":"Determines whether assignments in the access block will override any existing assignments. Default is \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. If set to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, assignments made outside of Terraform will be ignored.\n"},"isBrowserShortcutEnabled":{"type":"boolean","description":"Controls whether an \"Open in Browser\" shortcut will be shown for this Resource in the Twingate Client. Default is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"isVisible":{"type":"boolean","description":"Controls whether this Resource will be visible in the main Resource list in the Twingate Client. Default is \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"name":{"type":"string","description":"The name of the Resource\n"},"protocols":{"$ref":"#/types/twingate:index/TwingateResourceProtocols:TwingateResourceProtocols","description":"Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed.\n"},"remoteNetworkId":{"type":"string","description":"Remote Network ID where the Resource lives\n"},"securityPolicyId":{"type":"string","description":"The ID of a \u003cspan pulumi-lang-nodejs=\"`twingate.getTwingateSecurityPolicy`\" pulumi-lang-dotnet=\"`twingate.getTwingateSecurityPolicy`\" pulumi-lang-go=\"`getTwingateSecurityPolicy`\" pulumi-lang-python=\"`get_twingate_security_policy`\" pulumi-lang-yaml=\"`twingate.getTwingateSecurityPolicy`\" pulumi-lang-java=\"`twingate.getTwingateSecurityPolicy`\"\u003e`twingate.getTwingateSecurityPolicy`\u003c/span\u003e to set as this Resource's Security Policy. Default is 'Null' which points to `Default Policy` on Admin console.\n"},"tags":{"type":"object","additionalProperties":{"type":"string"},"description":"A map of key-value pair tags to set on this resource.\n"},"tagsAll":{"type":"object","additionalProperties":{"type":"string"},"description":"A map of key-value pairs that represents all tags on this resource, including default tags from provider configuration.\n"}},"type":"object"}},"twingate:index/twingateServiceAccount:TwingateServiceAccount":{"description":"Service Accounts offer a way to provide programmatic, centrally-controlled, and consistent access controls.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@twingate/pulumi-twingate\";\n\nconst githubActionsProd = new twingate.TwingateServiceAccount(\"github_actions_prod\", {name: \"Github Actions PROD\"});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\ngithub_actions_prod = twingate.TwingateServiceAccount(\"github_actions_prod\", name=\"Github Actions PROD\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Twingate.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var githubActionsProd = new Twingate.TwingateServiceAccount(\"github_actions_prod\", new()\n    {\n        Name = \"Github Actions PROD\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/v4/go/twingate\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := twingate.NewTwingateServiceAccount(ctx, \"github_actions_prod\", \u0026twingate.TwingateServiceAccountArgs{\n\t\t\tName: pulumi.String(\"Github Actions PROD\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateServiceAccount;\nimport com.pulumi.twingate.TwingateServiceAccountArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var githubActionsProd = new TwingateServiceAccount(\"githubActionsProd\", TwingateServiceAccountArgs.builder()\n            .name(\"Github Actions PROD\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  githubActionsProd:\n    type: twingate:TwingateServiceAccount\n    name: github_actions_prod\n    properties:\n      name: Github Actions PROD\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"name":{"type":"string","description":"The name of the Service Account in Twingate\n"}},"required":["name"],"inputProperties":{"name":{"type":"string","description":"The name of the Service Account in Twingate\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering TwingateServiceAccount resources.\n","properties":{"name":{"type":"string","description":"The name of the Service Account in Twingate\n"}},"type":"object"}},"twingate:index/twingateServiceAccountKey:TwingateServiceAccountKey":{"description":"A Service Key authorizes access to all Resources assigned to a Service Account.\n\n","properties":{"expirationTime":{"type":"integer","description":"Specifies how many days until a Service Account Key expires. This should be an integer between 0 and 365 representing the number of days until the Service Account Key will expire. Defaults to 0, meaning the key will never expire.\n"},"isActive":{"type":"boolean","description":"If the value of this attribute changes to false, Terraform will destroy and recreate the resource.\n"},"name":{"type":"string","description":"The name of the Service Key\n"},"serviceAccountId":{"type":"string","description":"The id of the Service Account\n"},"token":{"type":"string","description":"Autogenerated Service Key token. Used to configure a Twingate Client running in headless mode.\n","secret":true}},"required":["expirationTime","isActive","name","serviceAccountId","token"],"inputProperties":{"expirationTime":{"type":"integer","description":"Specifies how many days until a Service Account Key expires. This should be an integer between 0 and 365 representing the number of days until the Service Account Key will expire. Defaults to 0, meaning the key will never expire.\n"},"name":{"type":"string","description":"The name of the Service Key\n"},"serviceAccountId":{"type":"string","description":"The id of the Service Account\n"}},"requiredInputs":["serviceAccountId"],"stateInputs":{"description":"Input properties used for looking up and filtering TwingateServiceAccountKey resources.\n","properties":{"expirationTime":{"type":"integer","description":"Specifies how many days until a Service Account Key expires. This should be an integer between 0 and 365 representing the number of days until the Service Account Key will expire. Defaults to 0, meaning the key will never expire.\n"},"isActive":{"type":"boolean","description":"If the value of this attribute changes to false, Terraform will destroy and recreate the resource.\n"},"name":{"type":"string","description":"The name of the Service Key\n"},"serviceAccountId":{"type":"string","description":"The id of the Service Account\n"},"token":{"type":"string","description":"Autogenerated Service Key token. Used to configure a Twingate Client running in headless mode.\n","secret":true}},"type":"object"}},"twingate:index/twingateUser:TwingateUser":{"description":"Users provides different levels of write capabilities across the Twingate Admin Console. For more information, see Twingate's [documentation](https://www.twingate.com/docs/users).\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@twingate/pulumi-twingate\";\n\nconst user = new twingate.TwingateUser(\"user\", {\n    email: \"sample@company.com\",\n    firstName: \"Twin\",\n    lastName: \"Gate\",\n    role: \"DEVOPS\",\n});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nuser = twingate.TwingateUser(\"user\",\n    email=\"sample@company.com\",\n    first_name=\"Twin\",\n    last_name=\"Gate\",\n    role=\"DEVOPS\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Twingate.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var user = new Twingate.TwingateUser(\"user\", new()\n    {\n        Email = \"sample@company.com\",\n        FirstName = \"Twin\",\n        LastName = \"Gate\",\n        Role = \"DEVOPS\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/v4/go/twingate\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := twingate.NewTwingateUser(ctx, \"user\", \u0026twingate.TwingateUserArgs{\n\t\t\tEmail:     pulumi.String(\"sample@company.com\"),\n\t\t\tFirstName: pulumi.String(\"Twin\"),\n\t\t\tLastName:  pulumi.String(\"Gate\"),\n\t\t\tRole:      pulumi.String(\"DEVOPS\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateUser;\nimport com.pulumi.twingate.TwingateUserArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var user = new TwingateUser(\"user\", TwingateUserArgs.builder()\n            .email(\"sample@company.com\")\n            .firstName(\"Twin\")\n            .lastName(\"Gate\")\n            .role(\"DEVOPS\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  user:\n    type: twingate:TwingateUser\n    properties:\n      email: sample@company.com\n      firstName: Twin\n      lastName: Gate\n      role: DEVOPS\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import twingate:index/twingateUser:TwingateUser user VXNlcjo1ODk3MTM=\n```\n\n","properties":{"email":{"type":"string","description":"The User's email address\n"},"firstName":{"type":"string","description":"The User's first name\n"},"isActive":{"type":"boolean","description":"Determines whether the User is active or not. Inactive users will be not able to sign in.\n"},"lastName":{"type":"string","description":"The User's last name\n"},"role":{"type":"string","description":"Determines the User's role. Either ADMIN, DEVOPS, SUPPORT, MEMBER or ACCESS_REVIEWER.\n"},"sendInvite":{"type":"boolean","description":"Determines whether to send an email invitation to the User. True by default.\n","deprecationMessage":"This attribute is no longer used and will be removed in a future release."},"type":{"type":"string","description":"Indicates the User's type. Either MANUAL or SYNCED.\n"}},"required":["email","firstName","isActive","lastName","role","sendInvite","type"],"inputProperties":{"email":{"type":"string","description":"The User's email address\n"},"firstName":{"type":"string","description":"The User's first name\n"},"isActive":{"type":"boolean","description":"Determines whether the User is active or not. Inactive users will be not able to sign in.\n"},"lastName":{"type":"string","description":"The User's last name\n"},"role":{"type":"string","description":"Determines the User's role. Either ADMIN, DEVOPS, SUPPORT, MEMBER or ACCESS_REVIEWER.\n"},"sendInvite":{"type":"boolean","description":"Determines whether to send an email invitation to the User. True by default.\n","deprecationMessage":"This attribute is no longer used and will be removed in a future release."}},"requiredInputs":["email"],"stateInputs":{"description":"Input properties used for looking up and filtering TwingateUser resources.\n","properties":{"email":{"type":"string","description":"The User's email address\n"},"firstName":{"type":"string","description":"The User's first name\n"},"isActive":{"type":"boolean","description":"Determines whether the User is active or not. Inactive users will be not able to sign in.\n"},"lastName":{"type":"string","description":"The User's last name\n"},"role":{"type":"string","description":"Determines the User's role. Either ADMIN, DEVOPS, SUPPORT, MEMBER or ACCESS_REVIEWER.\n"},"sendInvite":{"type":"boolean","description":"Determines whether to send an email invitation to the User. True by default.\n","deprecationMessage":"This attribute is no longer used and will be removed in a future release."},"type":{"type":"string","description":"Indicates the User's type. Either MANUAL or SYNCED.\n"}},"type":"object"}}},"functions":{"pulumi:providers:twingate/terraformConfig":{"description":"This function returns a Terraform config object with terraform-namecased keys,to be used with the Terraform Module Provider.","inputs":{"properties":{"__self__":{"type":"ref","$ref":"#/provider"}},"type":"pulumi:providers:twingate/terraformConfig","required":["__self__"]},"outputs":{"properties":{"result":{"additionalProperties":{"$ref":"pulumi.json#/Any"},"type":"object"}},"required":["result"],"type":"object"}},"twingate:index/getTwingateConnector:getTwingateConnector":{"description":"Connectors provide connectivity to Remote Networks. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/understanding-access-nodes).\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@twingate/pulumi-twingate\";\n\nconst foo = twingate.getTwingateConnector({\n    id: \"\u003cyour connector's id\u003e\",\n});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nfoo = twingate.get_twingate_connector(id=\"\u003cyour connector's id\u003e\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Twingate.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var foo = Twingate.GetTwingateConnector.Invoke(new()\n    {\n        Id = \"\u003cyour connector's id\u003e\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/v4/go/twingate\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := twingate.LookupTwingateConnector(ctx, \u0026twingate.LookupTwingateConnectorArgs{\n\t\t\tId: \"\u003cyour connector's id\u003e\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateConnectorArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var foo = TwingateFunctions.getTwingateConnector(GetTwingateConnectorArgs.builder()\n            .id(\"\u003cyour connector's id\u003e\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  foo:\n    fn::invoke:\n      function: twingate:getTwingateConnector\n      arguments:\n        id: \u003cyour connector's id\u003e\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getTwingateConnector.\n","properties":{"id":{"type":"string","description":"The ID of the Connector. The ID for the Connector can be obtained from the Admin API or the URL string in the Admin Console.\n"}},"type":"object","required":["id"]},"outputs":{"description":"A collection of values returned by getTwingateConnector.\n","properties":{"hostname":{"description":"The hostname of the machine hosting the Connector.\n","type":"string"},"id":{"description":"The ID of the Connector. The ID for the Connector can be obtained from the Admin API or the URL string in the Admin Console.\n","type":"string"},"name":{"description":"The name of the Connector.\n","type":"string"},"privateIps":{"description":"The Connector's private IP addresses.\n","items":{"type":"string"},"type":"array"},"publicIp":{"description":"The Connector's public IP address.\n","type":"string"},"remoteNetworkId":{"description":"The ID of the Remote Network the Connector is attached to.\n","type":"string"},"state":{"description":"The Connector's state. One of `ALIVE`, `DEAD_NO_HEARTBEAT`, `DEAD_HEARTBEAT_TOO_OLD` or `DEAD_NO_RELAYS`.\n","type":"string"},"statusUpdatesEnabled":{"description":"Determines whether status notifications are enabled for the Connector.\n","type":"boolean"},"version":{"description":"The Connector's version.\n","type":"string"}},"required":["hostname","id","name","privateIps","publicIp","remoteNetworkId","state","statusUpdatesEnabled","version"],"type":"object"}},"twingate:index/getTwingateConnectors:getTwingateConnectors":{"description":"Connectors provide connectivity to Remote Networks. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/understanding-access-nodes).\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@twingate/pulumi-twingate\";\n\nconst all = twingate.getTwingateConnectors({\n    name: \"\u003cyour connector's name\u003e\",\n});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nall = twingate.get_twingate_connectors(name=\"\u003cyour connector's name\u003e\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Twingate.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var all = Twingate.GetTwingateConnectors.Invoke(new()\n    {\n        Name = \"\u003cyour connector's name\u003e\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/v4/go/twingate\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := twingate.GetTwingateConnectors(ctx, \u0026twingate.GetTwingateConnectorsArgs{\n\t\t\tName: pulumi.StringRef(\"\u003cyour connector's name\u003e\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateConnectorsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var all = TwingateFunctions.getTwingateConnectors(GetTwingateConnectorsArgs.builder()\n            .name(\"\u003cyour connector's name\u003e\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  all:\n    fn::invoke:\n      function: twingate:getTwingateConnectors\n      arguments:\n        name: \u003cyour connector's name\u003e\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getTwingateConnectors.\n","properties":{"name":{"type":"string","description":"Returns only connectors that exactly match this name. If no options are passed it will return all connectors. Only one option can be used at a time.\n"},"nameContains":{"type":"string","description":"Match when the value exist in the name of the connector.\n"},"nameExclude":{"type":"string","description":"Match when the exact value does not exist in the name of the connector.\n"},"namePrefix":{"type":"string","description":"The name of the connector must start with the value.\n"},"nameRegexp":{"type":"string","description":"The regular expression match of the name of the connector.\n"},"nameSuffix":{"type":"string","description":"The name of the connector must end with the value.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getTwingateConnectors.\n","properties":{"connectors":{"description":"List of Connectors\n","items":{"$ref":"#/types/twingate:index/getTwingateConnectorsConnector:getTwingateConnectorsConnector"},"type":"array"},"id":{"description":"The ID of this resource.\n","type":"string"},"name":{"description":"Returns only connectors that exactly match this name. If no options are passed it will return all connectors. Only one option can be used at a time.\n","type":"string"},"nameContains":{"description":"Match when the value exist in the name of the connector.\n","type":"string"},"nameExclude":{"description":"Match when the exact value does not exist in the name of the connector.\n","type":"string"},"namePrefix":{"description":"The name of the connector must start with the value.\n","type":"string"},"nameRegexp":{"description":"The regular expression match of the name of the connector.\n","type":"string"},"nameSuffix":{"description":"The name of the connector must end with the value.\n","type":"string"}},"required":["connectors","id"],"type":"object"}},"twingate:index/getTwingateDNSFilteringProfile:getTwingateDNSFilteringProfile":{"description":"DNS filtering gives you the ability to control what websites your users can access. DNS filtering is only available on certain plans. For more information, see Twingate's [documentation](https://www.twingate.com/docs/dns-filtering). DNS filtering must be enabled for this data source to work. If DNS filtering isn't enabled, the provider will throw an error.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@twingate/pulumi-twingate\";\n\nconst example = twingate.getTwingateDNSFilteringProfile({\n    id: \"\u003cyour dns profile's id\u003e\",\n});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nexample = twingate.get_twingate_dns_filtering_profile(id=\"\u003cyour dns profile's id\u003e\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Twingate.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = Twingate.GetTwingateDNSFilteringProfile.Invoke(new()\n    {\n        Id = \"\u003cyour dns profile's id\u003e\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/v4/go/twingate\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := twingate.LookupTwingateDNSFilteringProfile(ctx, \u0026twingate.LookupTwingateDNSFilteringProfileArgs{\n\t\t\tId: \"\u003cyour dns profile's id\u003e\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateDNSFilteringProfileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var example = TwingateFunctions.getTwingateDNSFilteringProfile(GetTwingateDNSFilteringProfileArgs.builder()\n            .id(\"\u003cyour dns profile's id\u003e\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  example:\n    fn::invoke:\n      function: twingate:getTwingateDNSFilteringProfile\n      arguments:\n        id: \u003cyour dns profile's id\u003e\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getTwingateDNSFilteringProfile.\n","properties":{"allowedDomains":{"$ref":"#/types/twingate:index/getTwingateDNSFilteringProfileAllowedDomains:getTwingateDNSFilteringProfileAllowedDomains","description":"A block with the following attributes.\n"},"contentCategories":{"$ref":"#/types/twingate:index/getTwingateDNSFilteringProfileContentCategories:getTwingateDNSFilteringProfileContentCategories","description":"A block with the following attributes.\n"},"deniedDomains":{"$ref":"#/types/twingate:index/getTwingateDNSFilteringProfileDeniedDomains:getTwingateDNSFilteringProfileDeniedDomains","description":"A block with the following attributes.\n"},"id":{"type":"string","description":"The DNS filtering profile's ID.\n"},"privacyCategories":{"$ref":"#/types/twingate:index/getTwingateDNSFilteringProfilePrivacyCategories:getTwingateDNSFilteringProfilePrivacyCategories","description":"A block with the following attributes.\n"},"securityCategories":{"$ref":"#/types/twingate:index/getTwingateDNSFilteringProfileSecurityCategories:getTwingateDNSFilteringProfileSecurityCategories","description":"A block with the following attributes.\n"}},"type":"object","required":["id"]},"outputs":{"description":"A collection of values returned by getTwingateDNSFilteringProfile.\n","properties":{"allowedDomains":{"$ref":"#/types/twingate:index/getTwingateDNSFilteringProfileAllowedDomains:getTwingateDNSFilteringProfileAllowedDomains","description":"A block with the following attributes.\n"},"contentCategories":{"$ref":"#/types/twingate:index/getTwingateDNSFilteringProfileContentCategories:getTwingateDNSFilteringProfileContentCategories","description":"A block with the following attributes.\n"},"deniedDomains":{"$ref":"#/types/twingate:index/getTwingateDNSFilteringProfileDeniedDomains:getTwingateDNSFilteringProfileDeniedDomains","description":"A block with the following attributes.\n"},"fallbackMethod":{"description":"The DNS filtering profile's fallback method. One of AUTOMATIC or STRICT.\n","type":"string"},"groups":{"description":"A set of group IDs that have this as their DNS filtering profile. Defaults to an empty set.\n","items":{"type":"string"},"type":"array"},"id":{"description":"The DNS filtering profile's ID.\n","type":"string"},"name":{"description":"The DNS filtering profile's name.\n","type":"string"},"priority":{"description":"A floating point number representing the profile's priority.\n","type":"number"},"privacyCategories":{"$ref":"#/types/twingate:index/getTwingateDNSFilteringProfilePrivacyCategories:getTwingateDNSFilteringProfilePrivacyCategories","description":"A block with the following attributes.\n"},"securityCategories":{"$ref":"#/types/twingate:index/getTwingateDNSFilteringProfileSecurityCategories:getTwingateDNSFilteringProfileSecurityCategories","description":"A block with the following attributes.\n"}},"required":["fallbackMethod","groups","id","name","priority"],"type":"object"}},"twingate:index/getTwingateGroup:getTwingateGroup":{"description":"Groups are how users are authorized to access Resources. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/groups).\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@twingate/pulumi-twingate\";\n\nconst foo = twingate.getTwingateGroup({\n    id: \"\u003cyour group's id\u003e\",\n});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nfoo = twingate.get_twingate_group(id=\"\u003cyour group's id\u003e\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Twingate.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var foo = Twingate.GetTwingateGroup.Invoke(new()\n    {\n        Id = \"\u003cyour group's id\u003e\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/v4/go/twingate\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := twingate.LookupTwingateGroup(ctx, \u0026twingate.LookupTwingateGroupArgs{\n\t\t\tId: \"\u003cyour group's id\u003e\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var foo = TwingateFunctions.getTwingateGroup(GetTwingateGroupArgs.builder()\n            .id(\"\u003cyour group's id\u003e\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  foo:\n    fn::invoke:\n      function: twingate:getTwingateGroup\n      arguments:\n        id: \u003cyour group's id\u003e\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getTwingateGroup.\n","properties":{"id":{"type":"string","description":"The ID of the Group. The ID for the Group can be obtained from the Admin API or the URL string in the Admin Console.\n"}},"type":"object","required":["id"]},"outputs":{"description":"A collection of values returned by getTwingateGroup.\n","properties":{"id":{"description":"The ID of the Group. The ID for the Group can be obtained from the Admin API or the URL string in the Admin Console.\n","type":"string"},"isActive":{"description":"Indicates if the Group is active\n","type":"boolean"},"name":{"description":"The name of the Group\n","type":"string"},"type":{"description":"The type of the Group\n","type":"string"}},"required":["id","isActive","name","type"],"type":"object"}},"twingate:index/getTwingateGroups:getTwingateGroups":{"description":"Groups are how users are authorized to access Resources. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/groups).\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@twingate/pulumi-twingate\";\n\nconst foo = twingate.getTwingateGroups({\n    name: \"\u003cyour group's name\u003e\",\n});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nfoo = twingate.get_twingate_groups(name=\"\u003cyour group's name\u003e\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Twingate.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var foo = Twingate.GetTwingateGroups.Invoke(new()\n    {\n        Name = \"\u003cyour group's name\u003e\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/v4/go/twingate\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := twingate.GetTwingateGroups(ctx, \u0026twingate.GetTwingateGroupsArgs{\n\t\t\tName: pulumi.StringRef(\"\u003cyour group's name\u003e\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateGroupsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var foo = TwingateFunctions.getTwingateGroups(GetTwingateGroupsArgs.builder()\n            .name(\"\u003cyour group's name\u003e\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  foo:\n    fn::invoke:\n      function: twingate:getTwingateGroups\n      arguments:\n        name: \u003cyour group's name\u003e\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getTwingateGroups.\n","properties":{"isActive":{"type":"boolean","description":"Returns only Groups matching the specified state.\n"},"name":{"type":"string","description":"Returns only groups that exactly match this name. If no options are passed it will return all resources. Only one option can be used at a time.\n"},"nameContains":{"type":"string","description":"Match when the value exist in the name of the group.\n"},"nameExclude":{"type":"string","description":"Match when the exact value does not exist in the name of the group.\n"},"namePrefix":{"type":"string","description":"The name of the group must start with the value.\n"},"nameRegexp":{"type":"string","description":"The regular expression match of the name of the group.\n"},"nameSuffix":{"type":"string","description":"The name of the group must end with the value.\n"},"types":{"type":"array","items":{"type":"string"},"description":"Returns groups that match a list of types. valid types: `MANUAL`, `SYNCED`, `SYSTEM`.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getTwingateGroups.\n","properties":{"groups":{"description":"List of Groups\n","items":{"$ref":"#/types/twingate:index/getTwingateGroupsGroup:getTwingateGroupsGroup"},"type":"array"},"id":{"description":"The ID of this resource.\n","type":"string"},"isActive":{"description":"Returns only Groups matching the specified state.\n","type":"boolean"},"name":{"description":"Returns only groups that exactly match this name. If no options are passed it will return all resources. Only one option can be used at a time.\n","type":"string"},"nameContains":{"description":"Match when the value exist in the name of the group.\n","type":"string"},"nameExclude":{"description":"Match when the exact value does not exist in the name of the group.\n","type":"string"},"namePrefix":{"description":"The name of the group must start with the value.\n","type":"string"},"nameRegexp":{"description":"The regular expression match of the name of the group.\n","type":"string"},"nameSuffix":{"description":"The name of the group must end with the value.\n","type":"string"},"types":{"description":"Returns groups that match a list of types. valid types: `MANUAL`, `SYNCED`, `SYSTEM`.\n","items":{"type":"string"},"type":"array"}},"required":["groups","id"],"type":"object"}},"twingate:index/getTwingateRemoteNetwork:getTwingateRemoteNetwork":{"description":"A Remote Network represents a single private network in Twingate that can have one or more Connectors and Resources assigned to it. You must create a Remote Network before creating Resources and Connectors that belong to it. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/remote-networks).\n\n","inputs":{"description":"A collection of arguments for invoking getTwingateRemoteNetwork.\n","properties":{"id":{"type":"string","description":"The ID of the Remote Network\n"},"name":{"type":"string","description":"The name of the Remote Network\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getTwingateRemoteNetwork.\n","properties":{"id":{"description":"The ID of the Remote Network\n","type":"string"},"location":{"description":"The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER.\n","type":"string"},"name":{"description":"The name of the Remote Network\n","type":"string"},"type":{"description":"The type of the Remote Network. Must be one of the following: REGULAR, EXIT.\n","type":"string"}},"required":["location","type"],"type":"object"}},"twingate:index/getTwingateRemoteNetworks:getTwingateRemoteNetworks":{"description":"A Remote Network represents a single private network in Twingate that can have one or more Connectors and Resources assigned to it. You must create a Remote Network before creating Resources and Connectors that belong to it. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/remote-networks).\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@twingate/pulumi-twingate\";\n\nconst all = twingate.getTwingateRemoteNetworks({\n    name: \"\u003cyour network's name\u003e\",\n});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nall = twingate.get_twingate_remote_networks(name=\"\u003cyour network's name\u003e\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Twingate.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var all = Twingate.GetTwingateRemoteNetworks.Invoke(new()\n    {\n        Name = \"\u003cyour network's name\u003e\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/v4/go/twingate\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := twingate.GetTwingateRemoteNetworks(ctx, \u0026twingate.GetTwingateRemoteNetworksArgs{\n\t\t\tName: pulumi.StringRef(\"\u003cyour network's name\u003e\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateRemoteNetworksArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var all = TwingateFunctions.getTwingateRemoteNetworks(GetTwingateRemoteNetworksArgs.builder()\n            .name(\"\u003cyour network's name\u003e\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  all:\n    fn::invoke:\n      function: twingate:getTwingateRemoteNetworks\n      arguments:\n        name: \u003cyour network's name\u003e\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getTwingateRemoteNetworks.\n","properties":{"name":{"type":"string","description":"Returns only remote networks that exactly match this name. If no options are passed it will return all remote networks. Only one option can be used at a time.\n"},"nameContains":{"type":"string","description":"Match when the value exist in the name of the remote network.\n"},"nameExclude":{"type":"string","description":"Match when the exact value does not exist in the name of the remote network.\n"},"namePrefix":{"type":"string","description":"The name of the remote network must start with the value.\n"},"nameRegexp":{"type":"string","description":"The regular expression match of the name of the remote network.\n"},"nameSuffix":{"type":"string","description":"The name of the remote network must end with the value.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getTwingateRemoteNetworks.\n","properties":{"id":{"description":"The ID of this resource.\n","type":"string"},"name":{"description":"Returns only remote networks that exactly match this name. If no options are passed it will return all remote networks. Only one option can be used at a time.\n","type":"string"},"nameContains":{"description":"Match when the value exist in the name of the remote network.\n","type":"string"},"nameExclude":{"description":"Match when the exact value does not exist in the name of the remote network.\n","type":"string"},"namePrefix":{"description":"The name of the remote network must start with the value.\n","type":"string"},"nameRegexp":{"description":"The regular expression match of the name of the remote network.\n","type":"string"},"nameSuffix":{"description":"The name of the remote network must end with the value.\n","type":"string"},"remoteNetworks":{"description":"List of Remote Networks\n","items":{"$ref":"#/types/twingate:index/getTwingateRemoteNetworksRemoteNetwork:getTwingateRemoteNetworksRemoteNetwork"},"type":"array"}},"required":["id","remoteNetworks"],"type":"object"}},"twingate:index/getTwingateResource:getTwingateResource":{"description":"Resources in Twingate represent any network destination address that you wish to provide private access to for users authorized via the Twingate Client application. Resources can be defined by either IP or DNS address, and all private DNS addresses will be automatically resolved with no client configuration changes. For more information, see the Twingate [documentation](https://docs.twingate.com/docs/resources-and-access-nodes).\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@twingate/pulumi-twingate\";\n\nconst foo = twingate.getTwingateResource({\n    id: \"\u003cyour resource's id\u003e\",\n});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nfoo = twingate.get_twingate_resource(id=\"\u003cyour resource's id\u003e\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Twingate.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var foo = Twingate.GetTwingateResource.Invoke(new()\n    {\n        Id = \"\u003cyour resource's id\u003e\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/v4/go/twingate\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := twingate.LookupTwingateResource(ctx, \u0026twingate.LookupTwingateResourceArgs{\n\t\t\tId: \"\u003cyour resource's id\u003e\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateResourceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var foo = TwingateFunctions.getTwingateResource(GetTwingateResourceArgs.builder()\n            .id(\"\u003cyour resource's id\u003e\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  foo:\n    fn::invoke:\n      function: twingate:getTwingateResource\n      arguments:\n        id: \u003cyour resource's id\u003e\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getTwingateResource.\n","properties":{"id":{"type":"string","description":"The ID of the Resource. The ID for the Resource can be obtained from the Admin API or the URL string in the Admin Console.\n"},"protocols":{"$ref":"#/types/twingate:index/getTwingateResourceProtocols:getTwingateResourceProtocols","description":"By default (when this argument is not defined) no restriction is applied, and all protocols and ports are allowed.\n"}},"type":"object","required":["id"]},"outputs":{"description":"A collection of values returned by getTwingateResource.\n","properties":{"address":{"description":"The Resource's address, which may be an IP address, CIDR range, or DNS address\n","type":"string"},"id":{"description":"The ID of the Resource. The ID for the Resource can be obtained from the Admin API or the URL string in the Admin Console.\n","type":"string"},"name":{"description":"The name of the Resource\n","type":"string"},"protocols":{"$ref":"#/types/twingate:index/getTwingateResourceProtocols:getTwingateResourceProtocols","description":"By default (when this argument is not defined) no restriction is applied, and all protocols and ports are allowed.\n"},"remoteNetworkId":{"description":"The Remote Network ID that the Resource is associated with. Resources may only be associated with a single Remote Network.\n","type":"string"},"tags":{"additionalProperties":{"type":"string"},"description":"The \u003cspan pulumi-lang-nodejs=\"`tags`\" pulumi-lang-dotnet=\"`Tags`\" pulumi-lang-go=\"`tags`\" pulumi-lang-python=\"`tags`\" pulumi-lang-yaml=\"`tags`\" pulumi-lang-java=\"`tags`\"\u003e`tags`\u003c/span\u003e attribute consists of a key-value pairs that correspond with tags to be set on the resource.\n","type":"object"}},"required":["address","id","name","remoteNetworkId","tags"],"type":"object"}},"twingate:index/getTwingateResources:getTwingateResources":{"description":"Resources in Twingate represent servers on the private network that clients can connect to. Resources can be defined by IP, CIDR range, FQDN, or DNS zone. For more information, see the Twingate [documentation](https://docs.twingate.com/docs/resources-and-access-nodes).\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@twingate/pulumi-twingate\";\n\nconst foo = twingate.getTwingateResources({\n    name: \"\u003cyour resource's name\u003e\",\n});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nfoo = twingate.get_twingate_resources(name=\"\u003cyour resource's name\u003e\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Twingate.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var foo = Twingate.GetTwingateResources.Invoke(new()\n    {\n        Name = \"\u003cyour resource's name\u003e\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/v4/go/twingate\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := twingate.GetTwingateResources(ctx, \u0026twingate.GetTwingateResourcesArgs{\n\t\t\tName: pulumi.StringRef(\"\u003cyour resource's name\u003e\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateResourcesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var foo = TwingateFunctions.getTwingateResources(GetTwingateResourcesArgs.builder()\n            .name(\"\u003cyour resource's name\u003e\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  foo:\n    fn::invoke:\n      function: twingate:getTwingateResources\n      arguments:\n        name: \u003cyour resource's name\u003e\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getTwingateResources.\n","properties":{"name":{"type":"string","description":"Returns only resources that exactly match this name. If no options are passed it will return all resources. Only one option can be used at a time.\n"},"nameContains":{"type":"string","description":"Match when the value exist in the name of the resource.\n"},"nameExclude":{"type":"string","description":"Match when the exact value does not exist in the name of the resource.\n"},"namePrefix":{"type":"string","description":"The name of the resource must start with the value.\n"},"nameRegexp":{"type":"string","description":"The regular expression match of the name of the resource.\n"},"nameSuffix":{"type":"string","description":"The name of the resource must end with the value.\n"},"tags":{"type":"object","additionalProperties":{"type":"string"},"description":"Returns only resources that exactly match the given tags.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getTwingateResources.\n","properties":{"id":{"description":"The ID of this resource.\n","type":"string"},"name":{"description":"Returns only resources that exactly match this name. If no options are passed it will return all resources. Only one option can be used at a time.\n","type":"string"},"nameContains":{"description":"Match when the value exist in the name of the resource.\n","type":"string"},"nameExclude":{"description":"Match when the exact value does not exist in the name of the resource.\n","type":"string"},"namePrefix":{"description":"The name of the resource must start with the value.\n","type":"string"},"nameRegexp":{"description":"The regular expression match of the name of the resource.\n","type":"string"},"nameSuffix":{"description":"The name of the resource must end with the value.\n","type":"string"},"resources":{"description":"List of Resources\n","items":{"$ref":"#/types/twingate:index/getTwingateResourcesResource:getTwingateResourcesResource"},"type":"array"},"tags":{"additionalProperties":{"type":"string"},"description":"Returns only resources that exactly match the given tags.\n","type":"object"}},"required":["id","resources"],"type":"object"}},"twingate:index/getTwingateSecurityPolicies:getTwingateSecurityPolicies":{"description":"Security Policies are defined in the Twingate Admin Console and determine user and device authentication requirements for Resources.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@twingate/pulumi-twingate\";\n\nconst all = twingate.getTwingateSecurityPolicies({\n    name: \"\u003cyour security policy's name\u003e\",\n});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nall = twingate.get_twingate_security_policies(name=\"\u003cyour security policy's name\u003e\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Twingate.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var all = Twingate.GetTwingateSecurityPolicies.Invoke(new()\n    {\n        Name = \"\u003cyour security policy's name\u003e\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/v4/go/twingate\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := twingate.GetTwingateSecurityPolicies(ctx, \u0026twingate.GetTwingateSecurityPoliciesArgs{\n\t\t\tName: pulumi.StringRef(\"\u003cyour security policy's name\u003e\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateSecurityPoliciesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var all = TwingateFunctions.getTwingateSecurityPolicies(GetTwingateSecurityPoliciesArgs.builder()\n            .name(\"\u003cyour security policy's name\u003e\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  all:\n    fn::invoke:\n      function: twingate:getTwingateSecurityPolicies\n      arguments:\n        name: \u003cyour security policy's name\u003e\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getTwingateSecurityPolicies.\n","properties":{"name":{"type":"string","description":"Returns only security policies that exactly match this name. If no options are passed it will return all security policies. Only one option can be used at a time.\n"},"nameContains":{"type":"string","description":"Match when the value exist in the name of the security policy.\n"},"nameExclude":{"type":"string","description":"Match when the exact value does not exist in the name of the security policy.\n"},"namePrefix":{"type":"string","description":"The name of the security policy must start with the value.\n"},"nameRegexp":{"type":"string","description":"The regular expression match of the name of the security policy.\n"},"nameSuffix":{"type":"string","description":"The name of the security policy must end with the value.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getTwingateSecurityPolicies.\n","properties":{"id":{"description":"The ID of this resource.\n","type":"string"},"name":{"description":"Returns only security policies that exactly match this name. If no options are passed it will return all security policies. Only one option can be used at a time.\n","type":"string"},"nameContains":{"description":"Match when the value exist in the name of the security policy.\n","type":"string"},"nameExclude":{"description":"Match when the exact value does not exist in the name of the security policy.\n","type":"string"},"namePrefix":{"description":"The name of the security policy must start with the value.\n","type":"string"},"nameRegexp":{"description":"The regular expression match of the name of the security policy.\n","type":"string"},"nameSuffix":{"description":"The name of the security policy must end with the value.\n","type":"string"},"securityPolicies":{"items":{"$ref":"#/types/twingate:index/getTwingateSecurityPoliciesSecurityPolicy:getTwingateSecurityPoliciesSecurityPolicy"},"type":"array"}},"required":["id","securityPolicies"],"type":"object"}},"twingate:index/getTwingateSecurityPolicy:getTwingateSecurityPolicy":{"description":"Security Policies are defined in the Twingate Admin Console and determine user and device authentication requirements for Resources.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@twingate/pulumi-twingate\";\n\nconst foo = twingate.getTwingateSecurityPolicy({\n    name: \"\u003cyour security policy name\u003e\",\n});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nfoo = twingate.get_twingate_security_policy(name=\"\u003cyour security policy name\u003e\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Twingate.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var foo = Twingate.GetTwingateSecurityPolicy.Invoke(new()\n    {\n        Name = \"\u003cyour security policy name\u003e\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/v4/go/twingate\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := twingate.GetTwingateSecurityPolicy(ctx, \u0026twingate.GetTwingateSecurityPolicyArgs{\n\t\t\tName: pulumi.StringRef(\"\u003cyour security policy name\u003e\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateSecurityPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var foo = TwingateFunctions.getTwingateSecurityPolicy(GetTwingateSecurityPolicyArgs.builder()\n            .name(\"\u003cyour security policy name\u003e\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  foo:\n    fn::invoke:\n      function: twingate:getTwingateSecurityPolicy\n      arguments:\n        name: \u003cyour security policy name\u003e\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getTwingateSecurityPolicy.\n","properties":{"id":{"type":"string","description":"Return a Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console.\n"},"name":{"type":"string","description":"Return a Security Policy that exactly matches this name.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getTwingateSecurityPolicy.\n","properties":{"id":{"description":"Return a Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console.\n","type":"string"},"name":{"description":"Return a Security Policy that exactly matches this name.\n","type":"string"}},"type":"object"}},"twingate:index/getTwingateServiceAccounts:getTwingateServiceAccounts":{"description":"Service Accounts offer a way to provide programmatic, centrally-controlled, and consistent access controls.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@twingate/pulumi-twingate\";\n\nconst foo = twingate.getTwingateServiceAccounts({\n    name: \"\u003cyour service account's name\u003e\",\n});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nfoo = twingate.get_twingate_service_accounts(name=\"\u003cyour service account's name\u003e\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Twingate.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var foo = Twingate.GetTwingateServiceAccounts.Invoke(new()\n    {\n        Name = \"\u003cyour service account's name\u003e\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/v4/go/twingate\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := twingate.GetTwingateServiceAccounts(ctx, \u0026twingate.GetTwingateServiceAccountsArgs{\n\t\t\tName: pulumi.StringRef(\"\u003cyour service account's name\u003e\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateServiceAccountsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var foo = TwingateFunctions.getTwingateServiceAccounts(GetTwingateServiceAccountsArgs.builder()\n            .name(\"\u003cyour service account's name\u003e\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  foo:\n    fn::invoke:\n      function: twingate:getTwingateServiceAccounts\n      arguments:\n        name: \u003cyour service account's name\u003e\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getTwingateServiceAccounts.\n","properties":{"name":{"type":"string","description":"Returns only service accounts that exactly match this name. If no options are passed it will return all service accounts. Only one option can be used at a time.\n"},"nameContains":{"type":"string","description":"Match when the value exist in the name of the service account.\n"},"nameExclude":{"type":"string","description":"Match when the exact value does not exist in the name of the service account.\n"},"namePrefix":{"type":"string","description":"The name of the service account must start with the value.\n"},"nameRegexp":{"type":"string","description":"The regular expression match of the name of the service account.\n"},"nameSuffix":{"type":"string","description":"The name of the service account must end with the value.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getTwingateServiceAccounts.\n","properties":{"id":{"description":"The ID of this resource.\n","type":"string"},"name":{"description":"Returns only service accounts that exactly match this name. If no options are passed it will return all service accounts. Only one option can be used at a time.\n","type":"string"},"nameContains":{"description":"Match when the value exist in the name of the service account.\n","type":"string"},"nameExclude":{"description":"Match when the exact value does not exist in the name of the service account.\n","type":"string"},"namePrefix":{"description":"The name of the service account must start with the value.\n","type":"string"},"nameRegexp":{"description":"The regular expression match of the name of the service account.\n","type":"string"},"nameSuffix":{"description":"The name of the service account must end with the value.\n","type":"string"},"serviceAccounts":{"description":"List of Service Accounts\n","items":{"$ref":"#/types/twingate:index/getTwingateServiceAccountsServiceAccount:getTwingateServiceAccountsServiceAccount"},"type":"array"}},"required":["id","serviceAccounts"],"type":"object"}},"twingate:index/getTwingateUser:getTwingateUser":{"description":"Users in Twingate can be given access to Twingate Resources and may either be added manually or automatically synchronized with a 3rd party identity provider. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/users).\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@twingate/pulumi-twingate\";\n\nconst foo = twingate.getTwingateUser({\n    id: \"\u003cyour user's id\u003e\",\n});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nfoo = twingate.get_twingate_user(id=\"\u003cyour user's id\u003e\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Twingate.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var foo = Twingate.GetTwingateUser.Invoke(new()\n    {\n        Id = \"\u003cyour user's id\u003e\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/v4/go/twingate\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := twingate.LookupTwingateUser(ctx, \u0026twingate.LookupTwingateUserArgs{\n\t\t\tId: \"\u003cyour user's id\u003e\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateUserArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var foo = TwingateFunctions.getTwingateUser(GetTwingateUserArgs.builder()\n            .id(\"\u003cyour user's id\u003e\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  foo:\n    fn::invoke:\n      function: twingate:getTwingateUser\n      arguments:\n        id: \u003cyour user's id\u003e\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getTwingateUser.\n","properties":{"id":{"type":"string","description":"The ID of the User. The ID for the User can be obtained from the Admin API or the URL string in the Admin Console.\n"}},"type":"object","required":["id"]},"outputs":{"description":"A collection of values returned by getTwingateUser.\n","properties":{"email":{"description":"The email address of the User\n","type":"string"},"firstName":{"description":"The first name of the User\n","type":"string"},"id":{"description":"The ID of the User. The ID for the User can be obtained from the Admin API or the URL string in the Admin Console.\n","type":"string"},"lastName":{"description":"The last name of the User\n","type":"string"},"role":{"description":"Indicates the User's role. Either ADMIN, DEVOPS, SUPPORT, MEMBER or ACCESS_REVIEWER.\n","type":"string"},"type":{"description":"Indicates the User's type. Either MANUAL or SYNCED.\n","type":"string"}},"required":["email","firstName","id","lastName","role","type"],"type":"object"}},"twingate:index/getTwingateUsers:getTwingateUsers":{"description":"Users in Twingate can be given access to Twingate Resources and may either be added manually or automatically synchronized with a 3rd party identity provider. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/users).\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@twingate/pulumi-twingate\";\n\nconst all = twingate.getTwingateUsers({});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nall = twingate.get_twingate_users()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Twingate.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var all = Twingate.GetTwingateUsers.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/v4/go/twingate\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := twingate.GetTwingateUsers(ctx, \u0026twingate.GetTwingateUsersArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateUsersArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var all = TwingateFunctions.getTwingateUsers(GetTwingateUsersArgs.builder()\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  all:\n    fn::invoke:\n      function: twingate:getTwingateUsers\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getTwingateUsers.\n","properties":{"email":{"type":"string","description":"Returns only users that exactly match this email.\n"},"emailContains":{"type":"string","description":"Match when the value exist in the email of the user.\n"},"emailExclude":{"type":"string","description":"Match when the value does not exist in the email of the user.\n"},"emailPrefix":{"type":"string","description":"The email of the user must start with the value.\n"},"emailRegexp":{"type":"string","description":"The regular expression match of the email of the user.\n"},"emailSuffix":{"type":"string","description":"The email of the user must end with the value.\n"},"firstName":{"type":"string","description":"Returns only users that exactly match the first name.\n"},"firstNameContains":{"type":"string","description":"Match when the value exist in the first name of the user.\n"},"firstNameExclude":{"type":"string","description":"Match when the value does not exist in the first name of the user.\n"},"firstNamePrefix":{"type":"string","description":"The first name of the user must start with the value.\n"},"firstNameRegexp":{"type":"string","description":"The regular expression match of the first name of the user.\n"},"firstNameSuffix":{"type":"string","description":"The first name of the user must end with the value.\n"},"lastName":{"type":"string","description":"Returns only users that exactly match the last name.\n"},"lastNameContains":{"type":"string","description":"Match when the value exist in the last name of the user.\n"},"lastNameExclude":{"type":"string","description":"Match when the value does not exist in the last name of the user.\n"},"lastNamePrefix":{"type":"string","description":"The last name of the user must start with the value.\n"},"lastNameRegexp":{"type":"string","description":"The regular expression match of the last name of the user.\n"},"lastNameSuffix":{"type":"string","description":"The last name of the user must end with the value.\n"},"roles":{"type":"array","items":{"type":"string"},"description":"Returns users that match a list of roles. Valid roles: `ADMIN`, `DEVOPS`, `SUPPORT`, `MEMBER`.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getTwingateUsers.\n","properties":{"email":{"description":"Returns only users that exactly match this email.\n","type":"string"},"emailContains":{"description":"Match when the value exist in the email of the user.\n","type":"string"},"emailExclude":{"description":"Match when the value does not exist in the email of the user.\n","type":"string"},"emailPrefix":{"description":"The email of the user must start with the value.\n","type":"string"},"emailRegexp":{"description":"The regular expression match of the email of the user.\n","type":"string"},"emailSuffix":{"description":"The email of the user must end with the value.\n","type":"string"},"firstName":{"description":"Returns only users that exactly match the first name.\n","type":"string"},"firstNameContains":{"description":"Match when the value exist in the first name of the user.\n","type":"string"},"firstNameExclude":{"description":"Match when the value does not exist in the first name of the user.\n","type":"string"},"firstNamePrefix":{"description":"The first name of the user must start with the value.\n","type":"string"},"firstNameRegexp":{"description":"The regular expression match of the first name of the user.\n","type":"string"},"firstNameSuffix":{"description":"The first name of the user must end with the value.\n","type":"string"},"id":{"description":"The ID of this resource.\n","type":"string"},"lastName":{"description":"Returns only users that exactly match the last name.\n","type":"string"},"lastNameContains":{"description":"Match when the value exist in the last name of the user.\n","type":"string"},"lastNameExclude":{"description":"Match when the value does not exist in the last name of the user.\n","type":"string"},"lastNamePrefix":{"description":"The last name of the user must start with the value.\n","type":"string"},"lastNameRegexp":{"description":"The regular expression match of the last name of the user.\n","type":"string"},"lastNameSuffix":{"description":"The last name of the user must end with the value.\n","type":"string"},"roles":{"description":"Returns users that match a list of roles. Valid roles: `ADMIN`, `DEVOPS`, `SUPPORT`, `MEMBER`.\n","items":{"type":"string"},"type":"array"},"users":{"items":{"$ref":"#/types/twingate:index/getTwingateUsersUser:getTwingateUsersUser"},"type":"array"}},"required":["id","users"],"type":"object"}}}}