@drunk-pulumi/azure 0.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Aks/Helper.d.ts +43 -0
- package/Aks/Helper.js +72 -0
- package/Aks/Identity.d.ts +14 -0
- package/Aks/Identity.js +32 -0
- package/Aks/VmSetAutoScale/index.d.ts +16 -0
- package/Aks/VmSetAutoScale/index.js +132 -0
- package/Aks/VmSetMonitor/index.d.ts +12 -0
- package/Aks/VmSetMonitor/index.js +67 -0
- package/Aks/index.d.ts +100 -0
- package/Aks/index.js +558 -0
- package/Apim/ApiProduct/Api.d.ts +35 -0
- package/Apim/ApiProduct/Api.js +131 -0
- package/Apim/ApiProduct/OpenApi.d.ts +85 -0
- package/Apim/ApiProduct/OpenApi.js +3 -0
- package/Apim/ApiProduct/PolicyBuilder.d.ts +79 -0
- package/Apim/ApiProduct/PolicyBuilder.js +361 -0
- package/Apim/ApiProduct/Product.d.ts +8 -0
- package/Apim/ApiProduct/Product.js +63 -0
- package/Apim/ApiProduct/SwaggerHelper.d.ts +6 -0
- package/Apim/ApiProduct/SwaggerHelper.js +44 -0
- package/Apim/ApiProduct/index.d.ts +9 -0
- package/Apim/ApiProduct/index.js +22 -0
- package/Apim/Helpers.d.ts +0 -0
- package/Apim/Helpers.js +2 -0
- package/Apim/HookProxy/index.d.ts +20 -0
- package/Apim/HookProxy/index.js +27 -0
- package/Apim/index.d.ts +22 -0
- package/Apim/index.js +118 -0
- package/Apps/LogicApp.d.ts +12 -0
- package/Apps/LogicApp.js +19 -0
- package/Automation/AutoAccount.d.ts +5 -0
- package/Automation/AutoAccount.js +20 -0
- package/AzAd/B2C.d.ts +9 -0
- package/AzAd/B2C.js +38 -0
- package/AzAd/ConditionalPolicies/index.d.ts +0 -0
- package/AzAd/ConditionalPolicies/index.js +2 -0
- package/AzAd/EnvRoles.d.ts +12 -0
- package/AzAd/EnvRoles.js +62 -0
- package/AzAd/GraphDefinition.d.ts +14 -0
- package/AzAd/GraphDefinition.js +5136 -0
- package/AzAd/Group.d.ts +29 -0
- package/AzAd/Group.js +70 -0
- package/AzAd/Helper.d.ts +18 -0
- package/AzAd/Helper.js +37 -0
- package/AzAd/Identities/AzDevOps.d.ts +23 -0
- package/AzAd/Identities/AzDevOps.js +61 -0
- package/AzAd/Identities/AzUserAdRevertSync.d.ts +14 -0
- package/AzAd/Identities/AzUserAdRevertSync.js +18 -0
- package/AzAd/Identity.d.ts +51 -0
- package/AzAd/Identity.js +133 -0
- package/AzAd/ManagedIdentity.d.ts +6 -0
- package/AzAd/ManagedIdentity.js +23 -0
- package/AzAd/Role.d.ts +19 -0
- package/AzAd/Role.js +25 -0
- package/AzAd/RoleAssignment.d.ts +79 -0
- package/AzAd/RoleAssignment.js +48 -0
- package/AzAd/RolesBuiltIn.d.ts +62 -0
- package/AzAd/RolesBuiltIn.js +13841 -0
- package/Cdn/index.d.ts +11 -0
- package/Cdn/index.js +47 -0
- package/Certificate/index.d.ts +41 -0
- package/Certificate/index.js +156 -0
- package/Certificate/p12.d.ts +5 -0
- package/Certificate/p12.js +37 -0
- package/Common/AppConfigs/dotnetConfig.d.ts +15 -0
- package/Common/AppConfigs/dotnetConfig.js +20 -0
- package/Common/AutoTags.d.ts +1 -0
- package/Common/AutoTags.js +24 -0
- package/Common/AzureEnv.d.ts +37 -0
- package/Common/AzureEnv.js +94 -0
- package/Common/ConfigHelper.d.ts +5 -0
- package/Common/ConfigHelper.js +14 -0
- package/Common/GlobalEnv.d.ts +14 -0
- package/Common/GlobalEnv.js +38 -0
- package/Common/Helpers.d.ts +10 -0
- package/Common/Helpers.js +30 -0
- package/Common/Location.d.ts +4 -0
- package/Common/Location.js +23 -0
- package/Common/LocationBuiltIn.d.ts +81 -0
- package/Common/LocationBuiltIn.js +1925 -0
- package/Common/Naming/index.d.ts +62 -0
- package/Common/Naming/index.js +146 -0
- package/Common/ResourceEnv.d.ts +16 -0
- package/Common/ResourceEnv.js +29 -0
- package/Common/StackEnv.d.ts +4 -0
- package/Common/StackEnv.js +22 -0
- package/Common/index.d.ts +5 -0
- package/Common/index.js +9 -0
- package/ContainerRegistry/Helper.d.ts +23 -0
- package/ContainerRegistry/Helper.js +47 -0
- package/ContainerRegistry/index.d.ts +28 -0
- package/ContainerRegistry/index.js +103 -0
- package/Core/Helper.d.ts +16 -0
- package/Core/Helper.js +37 -0
- package/Core/KeyGenetators.d.ts +33 -0
- package/Core/KeyGenetators.js +66 -0
- package/Core/Locker.d.ts +13 -0
- package/Core/Locker.js +14 -0
- package/Core/Random.d.ts +40 -0
- package/Core/Random.js +83 -0
- package/Core/ResourceCreator.d.ts +17 -0
- package/Core/ResourceCreator.js +48 -0
- package/Core/ResourceGroup.d.ts +13 -0
- package/Core/ResourceGroup.js +45 -0
- package/CosmosDb/index.d.ts +33 -0
- package/CosmosDb/index.js +129 -0
- package/CustomRoles/index.d.ts +5 -0
- package/CustomRoles/index.js +27 -0
- package/IOT/Hub/index.d.ts +32 -0
- package/IOT/Hub/index.js +208 -0
- package/KeyVault/CustomHelper.d.ts +35 -0
- package/KeyVault/CustomHelper.js +40 -0
- package/KeyVault/Helper.d.ts +33 -0
- package/KeyVault/Helper.js +58 -0
- package/KeyVault/VaultAccess.d.ts +15 -0
- package/KeyVault/VaultAccess.js +47 -0
- package/KeyVault/VaultPermissions.d.ts +26 -0
- package/KeyVault/VaultPermissions.js +169 -0
- package/KeyVault/index.d.ts +28 -0
- package/KeyVault/index.js +136 -0
- package/KubeX/AcrSecret.d.ts +15 -0
- package/KubeX/AcrSecret.js +31 -0
- package/KubeX/Apps/AstroPage.d.ts +12 -0
- package/KubeX/Apps/AstroPage.js +33 -0
- package/KubeX/Apps/KafKa.d.ts +6 -0
- package/KubeX/Apps/KafKa.js +13 -0
- package/KubeX/Apps/Nobelium.d.ts +13 -0
- package/KubeX/Apps/Nobelium.js +37 -0
- package/KubeX/Apps/Wikijs.d.ts +30 -0
- package/KubeX/Apps/Wikijs.js +54 -0
- package/KubeX/Apps/WordPress.d.ts +24 -0
- package/KubeX/Apps/WordPress.js +55 -0
- package/KubeX/Apps/YarpProxy/index.d.ts +17 -0
- package/KubeX/Apps/YarpProxy/index.js +107 -0
- package/KubeX/Apps/YarpProxy/type.d.ts +55 -0
- package/KubeX/Apps/YarpProxy/type.js +3 -0
- package/KubeX/CertHelper.d.ts +1 -0
- package/KubeX/CertHelper.js +9 -0
- package/KubeX/CertImports.d.ts +19 -0
- package/KubeX/CertImports.js +70 -0
- package/KubeX/CloudFlare/CertCreator.d.ts +19 -0
- package/KubeX/CloudFlare/CertCreator.js +90 -0
- package/KubeX/CloudFlare/CertImports.d.ts +17 -0
- package/KubeX/CloudFlare/CertImports.js +34 -0
- package/KubeX/CloudFlare/DynamicDns.d.ts +21 -0
- package/KubeX/CloudFlare/DynamicDns.js +39 -0
- package/KubeX/CloudFlare/Tunnel-Helm.d.ts +17 -0
- package/KubeX/CloudFlare/Tunnel-Helm.js +12 -0
- package/KubeX/CloudFlare/Tunnel.d.ts +23 -0
- package/KubeX/CloudFlare/Tunnel.js +54 -0
- package/KubeX/CloudFlare/index.d.ts +13 -0
- package/KubeX/CloudFlare/index.js +36 -0
- package/KubeX/Clusters/K3s/AutoUpgradeController/index.d.ts +6 -0
- package/KubeX/Clusters/K3s/AutoUpgradeController/index.js +60 -0
- package/KubeX/ConfigSecret.d.ts +24 -0
- package/KubeX/ConfigSecret.js +38 -0
- package/KubeX/Core/CertManager/index.d.ts +24 -0
- package/KubeX/Core/CertManager/index.js +96 -0
- package/KubeX/Core/KsCertSecret.d.ts +12 -0
- package/KubeX/Core/KsCertSecret.js +22 -0
- package/KubeX/Core/KsSecret.d.ts +9 -0
- package/KubeX/Core/KsSecret.js +12 -0
- package/KubeX/Core/LoadBalancer/MetalLB.d.ts +7 -0
- package/KubeX/Core/LoadBalancer/MetalLB.js +21 -0
- package/KubeX/Core/Monitoring/index.d.ts +22 -0
- package/KubeX/Core/Monitoring/index.js +322 -0
- package/KubeX/Core/Namespace.d.ts +12 -0
- package/KubeX/Core/Namespace.js +41 -0
- package/KubeX/Core/Nginx/index.d.ts +60 -0
- package/KubeX/Core/Nginx/index.js +109 -0
- package/KubeX/Core/OAuthProxy/index.d.ts +0 -0
- package/KubeX/Core/OAuthProxy/index.js +3 -0
- package/KubeX/Core/ResourceQuota.d.ts +12 -0
- package/KubeX/Core/ResourceQuota.js +13 -0
- package/KubeX/Core/SecurityRules.d.ts +34 -0
- package/KubeX/Core/SecurityRules.js +93 -0
- package/KubeX/Core/StorageClass/azureBlob.d.ts +20 -0
- package/KubeX/Core/StorageClass/azureBlob.js +77 -0
- package/KubeX/Core/StorageClass/azureFile.d.ts +17 -0
- package/KubeX/Core/StorageClass/azureFile.js +45 -0
- package/KubeX/Core/StorageClass/index.d.ts +13 -0
- package/KubeX/Core/StorageClass/index.js +25 -0
- package/KubeX/Core/index.d.ts +57 -0
- package/KubeX/Core/index.js +94 -0
- package/KubeX/Databases/MariaDb.d.ts +11 -0
- package/KubeX/Databases/MariaDb.js +39 -0
- package/KubeX/Databases/MySql.V2.d.ts +11 -0
- package/KubeX/Databases/MySql.V2.js +40 -0
- package/KubeX/Databases/MySql.d.ts +13 -0
- package/KubeX/Databases/MySql.js +55 -0
- package/KubeX/Databases/PostgreSql/PostgreSQL-HA.d.ts +10 -0
- package/KubeX/Databases/PostgreSql/PostgreSQL-HA.js +47 -0
- package/KubeX/Databases/PostgreSql/PostgreSQL.d.ts +10 -0
- package/KubeX/Databases/PostgreSql/PostgreSQL.js +51 -0
- package/KubeX/Databases/PostgreSql/PostgreSql.v1.d.ts +13 -0
- package/KubeX/Databases/PostgreSql/PostgreSql.v1.js +56 -0
- package/KubeX/Databases/PostgreSql/index.d.ts +17 -0
- package/KubeX/Databases/PostgreSql/index.js +6 -0
- package/KubeX/Databases/RedisCache.d.ts +14 -0
- package/KubeX/Databases/RedisCache.js +65 -0
- package/KubeX/Databases/SqlServer.d.ts +15 -0
- package/KubeX/Databases/SqlServer.js +77 -0
- package/KubeX/Deployment/PodAutoscaler.d.ts +14 -0
- package/KubeX/Deployment/PodAutoscaler.js +51 -0
- package/KubeX/Deployment/index.d.ts +136 -0
- package/KubeX/Deployment/index.js +306 -0
- package/KubeX/Helpers.d.ts +4 -0
- package/KubeX/Helpers.js +17 -0
- package/KubeX/Ingress/AppGatewayIngress.d.ts +2 -0
- package/KubeX/Ingress/AppGatewayIngress.js +4 -0
- package/KubeX/Ingress/Conts.d.ts +13 -0
- package/KubeX/Ingress/Conts.js +18 -0
- package/KubeX/Ingress/NginxIngress.d.ts +3 -0
- package/KubeX/Ingress/NginxIngress.js +186 -0
- package/KubeX/Ingress/NginxProxy.d.ts +21 -0
- package/KubeX/Ingress/NginxProxy.js +43 -0
- package/KubeX/Ingress/TraefikIngress/CustomHeader.d.ts +15 -0
- package/KubeX/Ingress/TraefikIngress/CustomHeader.js +15 -0
- package/KubeX/Ingress/TraefikIngress/index.d.ts +11 -0
- package/KubeX/Ingress/TraefikIngress/index.js +95 -0
- package/KubeX/Ingress/index.d.ts +5 -0
- package/KubeX/Ingress/index.js +12 -0
- package/KubeX/Ingress/type.d.ts +82 -0
- package/KubeX/Ingress/type.js +3 -0
- package/KubeX/Providers/index.d.ts +8 -0
- package/KubeX/Providers/index.js +15 -0
- package/KubeX/Storage/Longhorn/index.d.ts +15 -0
- package/KubeX/Storage/Longhorn/index.js +54 -0
- package/KubeX/Storage/index.d.ts +25 -0
- package/KubeX/Storage/index.js +79 -0
- package/KubeX/Tools/AWS/LocalStack.d.ts +7 -0
- package/KubeX/Tools/AWS/LocalStack.js +29 -0
- package/KubeX/Tools/AWS/S3.d.ts +6 -0
- package/KubeX/Tools/AWS/S3.js +44 -0
- package/KubeX/Tools/AWS/index.d.ts +7 -0
- package/KubeX/Tools/AWS/index.js +14 -0
- package/KubeX/Tools/AppHealthzMonitor.d.ts +18 -0
- package/KubeX/Tools/AppHealthzMonitor.js +52 -0
- package/KubeX/Tools/ArgoCD/index.d.ts +17 -0
- package/KubeX/Tools/ArgoCD/index.js +131 -0
- package/KubeX/Tools/Dapr/Storage.d.ts +66 -0
- package/KubeX/Tools/Dapr/Storage.js +70 -0
- package/KubeX/Tools/Dapr/index.d.ts +10 -0
- package/KubeX/Tools/Dapr/index.js +31 -0
- package/KubeX/Tools/Echo-App.d.ts +3 -0
- package/KubeX/Tools/Echo-App.js +21 -0
- package/KubeX/Tools/Gitea/GiteaRepo.d.ts +72 -0
- package/KubeX/Tools/Gitea/GiteaRepo.js +184 -0
- package/KubeX/Tools/Gitea/GiteaRunner.d.ts +11 -0
- package/KubeX/Tools/Gitea/GiteaRunner.js +37 -0
- package/KubeX/Tools/Gitea/GiteaRunner.v1.d.ts +11 -0
- package/KubeX/Tools/Gitea/GiteaRunner.v1.js +123 -0
- package/KubeX/Tools/HarborRepo.d.ts +29 -0
- package/KubeX/Tools/HarborRepo.js +78 -0
- package/KubeX/Tools/HelloWorld.d.ts +3 -0
- package/KubeX/Tools/HelloWorld.js +21 -0
- package/KubeX/Tools/KubeCleanup.d.ts +9 -0
- package/KubeX/Tools/KubeCleanup.js +34 -0
- package/KubeX/Tools/NoIp.d.ts +13 -0
- package/KubeX/Tools/NoIp.js +24 -0
- package/KubeX/Tools/OpenLDAP/index.d.ts +12 -0
- package/KubeX/Tools/OpenLDAP/index.js +56 -0
- package/KubeX/Tools/OutlineVpn/index.d.ts +25 -0
- package/KubeX/Tools/OutlineVpn/index.js +256 -0
- package/KubeX/Tools/SqlPad.d.ts +29 -0
- package/KubeX/Tools/SqlPad.js +133 -0
- package/KubeX/Tools/ToolPod.d.ts +10 -0
- package/KubeX/Tools/ToolPod.js +40 -0
- package/KubeX/Tools/UptimeKuma.d.ts +6 -0
- package/KubeX/Tools/UptimeKuma.js +38 -0
- package/KubeX/Tools/index.d.ts +27 -0
- package/KubeX/Tools/index.js +35 -0
- package/KubeX/VairableResolvers/index.d.ts +15 -0
- package/KubeX/VairableResolvers/index.js +49 -0
- package/KubeX/kx/index.d.ts +114 -0
- package/KubeX/kx/index.js +423 -0
- package/KubeX/types.d.ts +49 -0
- package/KubeX/types.js +3 -0
- package/Logs/AppInsight.d.ts +16 -0
- package/Logs/AppInsight.js +48 -0
- package/Logs/Helpers.d.ts +50 -0
- package/Logs/Helpers.js +95 -0
- package/Logs/LogAnalytics.d.ts +17 -0
- package/Logs/LogAnalytics.js +54 -0
- package/Logs/WebTest.d.ts +13 -0
- package/Logs/WebTest.js +68 -0
- package/Logs/index.d.ts +42 -0
- package/Logs/index.js +69 -0
- package/MySql/index.d.ts +20 -0
- package/MySql/index.js +93 -0
- package/Postgresql/index.d.ts +20 -0
- package/Postgresql/index.js +93 -0
- package/ReadMe.md +36 -0
- package/RedisCache/index.d.ts +9 -0
- package/RedisCache/index.js +79 -0
- package/ServiceBus/ServiceBusHelper.d.ts +21 -0
- package/ServiceBus/ServiceBusHelper.js +35 -0
- package/ServiceBus/index.d.ts +98 -0
- package/ServiceBus/index.js +396 -0
- package/SignalR/index.d.ts +20 -0
- package/SignalR/index.js +114 -0
- package/Sql/Auditing.d.ts +0 -0
- package/Sql/Auditing.js +2 -0
- package/Sql/Helper.d.ts +9 -0
- package/Sql/Helper.js +11 -0
- package/Sql/SqlDb.d.ts +14 -0
- package/Sql/SqlDb.js +42 -0
- package/Sql/index.d.ts +44 -0
- package/Sql/index.js +236 -0
- package/Storage/CdnEndpoint.d.ts +12 -0
- package/Storage/CdnEndpoint.js +62 -0
- package/Storage/CdnRules.d.ts +6 -0
- package/Storage/CdnRules.js +134 -0
- package/Storage/Helper.d.ts +28 -0
- package/Storage/Helper.js +66 -0
- package/Storage/ManagementRules.d.ts +70 -0
- package/Storage/ManagementRules.js +32 -0
- package/Storage/index.d.ts +55 -0
- package/Storage/index.js +264 -0
- package/VM/index.d.ts +37 -0
- package/VM/index.js +138 -0
- package/VNet/Bastion.d.ts +8 -0
- package/VNet/Bastion.js +30 -0
- package/VNet/Firewall.d.ts +27 -0
- package/VNet/Firewall.js +87 -0
- package/VNet/FirewallPolicies/AksFirewallPolicy.d.ts +20 -0
- package/VNet/FirewallPolicies/AksFirewallPolicy.js +241 -0
- package/VNet/FirewallPolicies/CloudPCFirewallPolicy.d.ts +14 -0
- package/VNet/FirewallPolicies/CloudPCFirewallPolicy.js +303 -0
- package/VNet/FirewallPolicy.d.ts +28 -0
- package/VNet/FirewallPolicy.js +110 -0
- package/VNet/FirewallRules/AksFirewallRules.d.ts +24 -0
- package/VNet/FirewallRules/AksFirewallRules.js +250 -0
- package/VNet/FirewallRules/DefaultRules.d.ts +2 -0
- package/VNet/FirewallRules/DefaultRules.js +23 -0
- package/VNet/FirewallRules/types.d.ts +20 -0
- package/VNet/FirewallRules/types.js +5 -0
- package/VNet/GlobalNetworkPeering.d.ts +9 -0
- package/VNet/GlobalNetworkPeering.js +17 -0
- package/VNet/Helper.d.ts +33 -0
- package/VNet/Helper.js +86 -0
- package/VNet/IpAddress.d.ts +17 -0
- package/VNet/IpAddress.js +38 -0
- package/VNet/IpAddressPrefix.d.ts +22 -0
- package/VNet/IpAddressPrefix.js +42 -0
- package/VNet/NSGRules/AzADService.d.ts +10 -0
- package/VNet/NSGRules/AzADService.js +45 -0
- package/VNet/NetworkPeering.d.ts +10 -0
- package/VNet/NetworkPeering.js +29 -0
- package/VNet/PrivateDns.d.ts +33 -0
- package/VNet/PrivateDns.js +64 -0
- package/VNet/PrivateEndpoint.d.ts +9 -0
- package/VNet/PrivateEndpoint.js +71 -0
- package/VNet/PublicDns.d.ts +21 -0
- package/VNet/PublicDns.js +59 -0
- package/VNet/RouteTable.d.ts +13 -0
- package/VNet/RouteTable.js +23 -0
- package/VNet/SecurityGroup.d.ts +8 -0
- package/VNet/SecurityGroup.js +13 -0
- package/VNet/Subnet.d.ts +26 -0
- package/VNet/Subnet.js +48 -0
- package/VNet/VirtualWAN.d.ts +25 -0
- package/VNet/VirtualWAN.js +40 -0
- package/VNet/Vnet.d.ts +51 -0
- package/VNet/Vnet.js +196 -0
- package/VNet/index.d.ts +65 -0
- package/VNet/index.js +198 -0
- package/Web/AppCertOrder.d.ts +16 -0
- package/Web/AppCertOrder.js +34 -0
- package/Web/AppConfig.d.ts +16 -0
- package/Web/AppConfig.js +79 -0
- package/Web/AppGateway.d.ts +15 -0
- package/Web/AppGateway.js +32 -0
- package/Web/FuncApp.d.ts +12 -0
- package/Web/FuncApp.js +24 -0
- package/Web/Helpers.d.ts +6 -0
- package/Web/Helpers.js +36 -0
- package/Web/WebAppPlan.d.ts +7 -0
- package/Web/WebAppPlan.js +26 -0
- package/Web/types.d.ts +169 -0
- package/Web/types.js +3 -0
- package/package.json +34 -0
- package/types.d.ts +69 -0
- package/types.js +3 -0
- package/z_tests/_tools/Mocks.d.ts +2 -0
- package/z_tests/_tools/Mocks.js +47 -0
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPolicies = exports.SetHeaderTypes = void 0;
|
|
4
|
+
const AzureEnv_1 = require("../../Common/AzureEnv");
|
|
5
|
+
const Helper_1 = require("../../VNet/Helper");
|
|
6
|
+
const StackEnv_1 = require("../../Common/StackEnv");
|
|
7
|
+
const defaultRateLimit = AzureEnv_1.isPrd ? 60 : 120;
|
|
8
|
+
const enableApimEventHub = false;
|
|
9
|
+
const getInMockResponse = ({ code = 200, contentType = 'text/html', }) => ` <mock-response status-code="${code}" content-type="${contentType}" />`;
|
|
10
|
+
const getInRewriteUri = ({ template = '/' }) => ` <rewrite-uri template="${template}" />`;
|
|
11
|
+
const setBaseUrl = ({ url }) => ` <set-backend-service base-url="${url}" />`;
|
|
12
|
+
const getInRateLimit = ({ call = defaultRateLimit, //The number of call in
|
|
13
|
+
period = 60, //1 minute
|
|
14
|
+
successConditionOnly, }) => successConditionOnly
|
|
15
|
+
? ` <rate-limit-by-key calls="${call}"
|
|
16
|
+
renewal-period="${period}"
|
|
17
|
+
counter-key="@(context.Request.IpAddress)"
|
|
18
|
+
increment-condition="@(context.Response.StatusCode >= 200 && context.Response.StatusCode < 300)" />`
|
|
19
|
+
: ` <rate-limit-by-key calls="${call}"
|
|
20
|
+
renewal-period="${period}"
|
|
21
|
+
counter-key="@(context.Request.IpAddress)" />`;
|
|
22
|
+
const getInCache = () => ` <cache-lookup vary-by-developer="false"
|
|
23
|
+
vary-by-developer-groups="false"
|
|
24
|
+
allow-private-response-caching="true"
|
|
25
|
+
must-revalidate="true"
|
|
26
|
+
downstream-caching-type="public" />`;
|
|
27
|
+
const getOutCache = ({ duration = 60 }) => ` <cache-store duration="${duration}" />`;
|
|
28
|
+
const getInBackendCert = ({ thumbprint }) => ` <authentication-certificate thumbprint="${thumbprint}" />`;
|
|
29
|
+
const getInClientCertValidate = ({ issuer, subject, thumbprint, verifyCert, }) => ` <choose>
|
|
30
|
+
<when condition="@(context.Request.Certificate == null${verifyCert
|
|
31
|
+
? ' || !context.Request.Certificate.VerifyNoRevocation()'
|
|
32
|
+
: ''}${issuer ? ` || context.Request.Certificate.Issuer != "${issuer}"` : ''}${subject
|
|
33
|
+
? ` || context.Request.Certificate.SubjectName.Name != "${subject}"`
|
|
34
|
+
: ''}${thumbprint
|
|
35
|
+
? ` || context.Request.Certificate.Thumbprint != "${thumbprint}"`
|
|
36
|
+
: ''})" >
|
|
37
|
+
<return-response>
|
|
38
|
+
<set-status code="403" reason="Invalid client certificate" />
|
|
39
|
+
</return-response>
|
|
40
|
+
</when>
|
|
41
|
+
</choose>`;
|
|
42
|
+
const getCorsPolicy = ({ origins }) => {
|
|
43
|
+
const orgs = origins
|
|
44
|
+
? origins.map((o) => `<origin>${o}</origin>`)
|
|
45
|
+
: ['<origin>*</origin>'];
|
|
46
|
+
return `<cors allow-credentials="${Array.isArray(origins)}">
|
|
47
|
+
<allowed-origins>
|
|
48
|
+
${orgs.join('\n')}
|
|
49
|
+
</allowed-origins>
|
|
50
|
+
<allowed-methods preflight-result-max-age="300">
|
|
51
|
+
<method>*</method>
|
|
52
|
+
</allowed-methods>
|
|
53
|
+
<allowed-headers>
|
|
54
|
+
<header>*</header>
|
|
55
|
+
</allowed-headers>
|
|
56
|
+
</cors>`;
|
|
57
|
+
};
|
|
58
|
+
//Event Hub Policy
|
|
59
|
+
const getEventHubPolicy = ({ eventHubName, captureClientCertThumbprint, azFuncUrl, azFuncKey, }) => {
|
|
60
|
+
const enableIpStack = azFuncKey && azFuncUrl;
|
|
61
|
+
const rs = `
|
|
62
|
+
<set-variable name="message-id" value="@(Guid.NewGuid())" />
|
|
63
|
+
${enableIpStack
|
|
64
|
+
? `
|
|
65
|
+
<set-variable name="ipstackBaseUrl" value="@("${azFuncUrl}?ipAddress=" + context.Request.IpAddress)" />
|
|
66
|
+
<send-request mode="new" response-variable-name="ipstackResponse" timeout="2" ignore-error="true">
|
|
67
|
+
<set-url>@((string)context.Variables["ipstackBaseUrl"])</set-url>
|
|
68
|
+
<set-method>POST</set-method>
|
|
69
|
+
<set-header name="x-functions-key" exists-action="override">
|
|
70
|
+
<value>${azFuncKey}</value>
|
|
71
|
+
</set-header>
|
|
72
|
+
</send-request>`
|
|
73
|
+
: ''}
|
|
74
|
+
|
|
75
|
+
<log-to-eventhub logger-id="${eventHubName}" partition-id="0">@{
|
|
76
|
+
string accountId = "";
|
|
77
|
+
string profileId = "";
|
|
78
|
+
|
|
79
|
+
string authHeader = context.Request.Headers.GetValueOrDefault("Authorization", "");
|
|
80
|
+
if (authHeader?.Length > 0)
|
|
81
|
+
{
|
|
82
|
+
string[] authHeaderParts = authHeader.Split(' ');
|
|
83
|
+
if (authHeaderParts?.Length == 2 && authHeaderParts[0].Equals("Bearer", StringComparison.InvariantCultureIgnoreCase))
|
|
84
|
+
{
|
|
85
|
+
Jwt jwt;
|
|
86
|
+
if (authHeaderParts[1].TryParseJwt(out jwt))
|
|
87
|
+
{
|
|
88
|
+
accountId = jwt.Claims.GetValueOrDefault("client_AccountId", "");
|
|
89
|
+
profileId = jwt.Claims.GetValueOrDefault("client_ProfileId", "");
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
string statusText = (context.Response.StatusCode >= 200 && context.Response.StatusCode <= 299) ? "PASS" : "FAIL";
|
|
95
|
+
string statusMsg = "";
|
|
96
|
+
if (context.Response.StatusCode == 400 || context.Response.StatusCode == 500) {
|
|
97
|
+
statusMsg = context.Response.Body?.As<string>(true);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
string ipLocation = "";
|
|
101
|
+
${enableIpStack
|
|
102
|
+
? `
|
|
103
|
+
try {
|
|
104
|
+
var ipstackResponse = ((IResponse)context.Variables["ipstackResponse"]);
|
|
105
|
+
if (ipstackResponse.StatusCode == 200) {
|
|
106
|
+
ipLocation = (((IResponse)context.Variables["ipstackResponse"]).Body?.As<JObject>()["country_name"]).ToString();
|
|
107
|
+
}
|
|
108
|
+
}catch {}`
|
|
109
|
+
: ''}
|
|
110
|
+
|
|
111
|
+
string clientThumbprint = "";
|
|
112
|
+
${captureClientCertThumbprint
|
|
113
|
+
? `
|
|
114
|
+
string xCert = context.Request.Headers.GetValueOrDefault("X-ARR-ClientCert", "");
|
|
115
|
+
if(context.Request.Certificate != null){
|
|
116
|
+
clientThumbprint = context.Request.Certificate.Thumbprint;
|
|
117
|
+
}else if(xCert?.Length > 0){
|
|
118
|
+
var cert = new X509Certificate2(Convert.FromBase64String(xCert), (string)null);
|
|
119
|
+
clientThumbprint = cert.Thumbprint;
|
|
120
|
+
}
|
|
121
|
+
else{ clientThumbprint = "Not found";}
|
|
122
|
+
`
|
|
123
|
+
: ''}
|
|
124
|
+
|
|
125
|
+
return new JObject(
|
|
126
|
+
new JProperty("MessageId", context.Variables["message-id"]),
|
|
127
|
+
new JProperty("Method", context.Request.Method),
|
|
128
|
+
new JProperty("UrlPath", context.Request.Url.Path),
|
|
129
|
+
new JProperty("Timestamp", DateTime.UtcNow.ToString()),
|
|
130
|
+
new JProperty("IP_Address", context.Request.IpAddress),
|
|
131
|
+
new JProperty("IP_Location", ipLocation),
|
|
132
|
+
new JProperty("AccountId", accountId),
|
|
133
|
+
new JProperty("ProfileId", profileId),
|
|
134
|
+
new JProperty("Status", statusText),
|
|
135
|
+
new JProperty("HttpCode", context.Response.StatusCode),
|
|
136
|
+
new JProperty("Status_Message", statusMsg),
|
|
137
|
+
new JProperty("clientThumbprint", clientThumbprint)
|
|
138
|
+
).ToString();
|
|
139
|
+
}</log-to-eventhub>`;
|
|
140
|
+
//console.log(rs);
|
|
141
|
+
return rs;
|
|
142
|
+
};
|
|
143
|
+
/** Validate Client IP Address with configured IP in Token. */
|
|
144
|
+
const getIPAddressFilterPolicy = () => {
|
|
145
|
+
const getFilterStatus = `
|
|
146
|
+
<set-header name="IpAddressValidation" exists-action="override">
|
|
147
|
+
<value>@{
|
|
148
|
+
Boolean ipAddressValid = false;
|
|
149
|
+
string authHeader = context.Request.Headers.GetValueOrDefault("Authorization", "");
|
|
150
|
+
if (authHeader?.Length > 0)
|
|
151
|
+
{
|
|
152
|
+
string[] authHeaderParts = authHeader.Split(' ');
|
|
153
|
+
if (authHeaderParts?.Length == 2 && authHeaderParts[0].Equals("Bearer", StringComparison.InvariantCultureIgnoreCase))
|
|
154
|
+
{
|
|
155
|
+
if (authHeaderParts[1].TryParseJwt(out Jwt jwt))
|
|
156
|
+
{
|
|
157
|
+
var ipsWhitelist = jwt.Claims.GetValueOrDefault("client_IpWhitelist", "");
|
|
158
|
+
IEnumerable<string> ips = ipsWhitelist
|
|
159
|
+
.Split(new char[] { ';', ',' }, StringSplitOptions.RemoveEmptyEntries)
|
|
160
|
+
.Select(p => p.Trim());
|
|
161
|
+
|
|
162
|
+
if(string.IsNullOrEmpty(ipsWhitelist) || ips.Contains(context.Request.IpAddress))
|
|
163
|
+
{
|
|
164
|
+
ipAddressValid = true;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
else
|
|
170
|
+
{
|
|
171
|
+
ipAddressValid = true;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return ipAddressValid.ToString();
|
|
175
|
+
}</value>
|
|
176
|
+
</set-header>`;
|
|
177
|
+
const checkFilterValid = `
|
|
178
|
+
<choose>
|
|
179
|
+
<when condition="@(context.Request.Headers.GetValueOrDefault("IpAddressValidation", "").Equals(Boolean.FalseString))">
|
|
180
|
+
<return-response>
|
|
181
|
+
<set-status code="403" reason="Forbidden"/>
|
|
182
|
+
<set-body>@{
|
|
183
|
+
return new JObject(
|
|
184
|
+
new JProperty("message","IP does not match")
|
|
185
|
+
).ToString();
|
|
186
|
+
}</set-body>
|
|
187
|
+
</return-response>
|
|
188
|
+
</when>
|
|
189
|
+
</choose>`;
|
|
190
|
+
return `
|
|
191
|
+
${getFilterStatus}
|
|
192
|
+
${checkFilterValid}
|
|
193
|
+
`;
|
|
194
|
+
};
|
|
195
|
+
const getIpWhitelistPolicy = ({ ipAddresses }) => {
|
|
196
|
+
const policy = `<ip-filter action="allow">\r\n${ipAddresses
|
|
197
|
+
.map((ip) => {
|
|
198
|
+
if (ip.includes('/')) {
|
|
199
|
+
const range = (0, Helper_1.getIpsRange)(ip);
|
|
200
|
+
return `<address-range from="${range.first}" to="${range.last}" />`;
|
|
201
|
+
}
|
|
202
|
+
return `<address>${ip}</address>`;
|
|
203
|
+
})
|
|
204
|
+
.join('\r\n')}\r\n</ip-filter>`;
|
|
205
|
+
//console.log(policy);
|
|
206
|
+
return policy;
|
|
207
|
+
};
|
|
208
|
+
var SetHeaderTypes;
|
|
209
|
+
(function (SetHeaderTypes) {
|
|
210
|
+
SetHeaderTypes["delete"] = "delete";
|
|
211
|
+
SetHeaderTypes["override"] = "override";
|
|
212
|
+
SetHeaderTypes["skip"] = "skip";
|
|
213
|
+
SetHeaderTypes["append"] = "append";
|
|
214
|
+
})(SetHeaderTypes || (exports.SetHeaderTypes = SetHeaderTypes = {}));
|
|
215
|
+
const setHeader = ({ name, type = SetHeaderTypes.delete, value, }) => {
|
|
216
|
+
let rs = `<set-header name="${name}" exists-action="${type}">`;
|
|
217
|
+
if (value) {
|
|
218
|
+
rs += ` <value>${value}</value>`;
|
|
219
|
+
}
|
|
220
|
+
rs += '</set-header>';
|
|
221
|
+
return rs;
|
|
222
|
+
};
|
|
223
|
+
const checkHeaderPolicy = ({ checkHeaders }) => {
|
|
224
|
+
return checkHeaders
|
|
225
|
+
.map((c) => {
|
|
226
|
+
return `<check-header name="${c.name}" failed-check-httpcode="401" failed-check-error-message="The header ${c.name} is not found" ignore-case="true">
|
|
227
|
+
${c.value ? c.value.map((v) => `<value>${v}</value>`).join('\n') : ''}
|
|
228
|
+
</check-header>`;
|
|
229
|
+
})
|
|
230
|
+
.join('\n');
|
|
231
|
+
};
|
|
232
|
+
/** Set Client IP address to 'x-ts-client-ip' header key */
|
|
233
|
+
const setClientIpHeader = (key = `x-${StackEnv_1.organization}-clientIp`) => setHeader({
|
|
234
|
+
name: key,
|
|
235
|
+
value: '@(context.Request.IpAddress)',
|
|
236
|
+
type: SetHeaderTypes.override,
|
|
237
|
+
});
|
|
238
|
+
const setFindAndReplaces = (findAndReplaces) => findAndReplaces
|
|
239
|
+
.map((f) => ` <find-and-replace from="${f.from}" to="${f.to}" />`)
|
|
240
|
+
.join('\n');
|
|
241
|
+
const getPolicies = ({ enableClientIpHeader = false, findAndReplaces, ...props }) => {
|
|
242
|
+
const inbound = new Array();
|
|
243
|
+
const outbound = new Array();
|
|
244
|
+
const getProps = (p) => (typeof p === 'boolean' ? {} : p);
|
|
245
|
+
if (enableClientIpHeader) {
|
|
246
|
+
inbound.push(setClientIpHeader());
|
|
247
|
+
}
|
|
248
|
+
if (props.setBaseUrl) {
|
|
249
|
+
inbound.push(setBaseUrl(props.setBaseUrl));
|
|
250
|
+
}
|
|
251
|
+
if (props.rewriteUri) {
|
|
252
|
+
inbound.push(getInRewriteUri(getProps(props.rewriteUri)));
|
|
253
|
+
}
|
|
254
|
+
if (props.cache) {
|
|
255
|
+
inbound.push(getInCache());
|
|
256
|
+
outbound.push(getOutCache(getProps(props.cache)));
|
|
257
|
+
}
|
|
258
|
+
if (props.mockResponse) {
|
|
259
|
+
inbound.push(getInMockResponse(getProps(props.mockResponse)));
|
|
260
|
+
}
|
|
261
|
+
if (props.rateLimit) {
|
|
262
|
+
inbound.push(getInRateLimit(getProps(props.rateLimit)));
|
|
263
|
+
}
|
|
264
|
+
if (props.backendCert) {
|
|
265
|
+
inbound.push(getInBackendCert(props.backendCert));
|
|
266
|
+
}
|
|
267
|
+
if (props.cors) {
|
|
268
|
+
inbound.push(getCorsPolicy(getProps(props.cors)));
|
|
269
|
+
}
|
|
270
|
+
if (props.ipFilter) {
|
|
271
|
+
inbound.push(getIPAddressFilterPolicy());
|
|
272
|
+
}
|
|
273
|
+
if (props.whitelistIPs) {
|
|
274
|
+
inbound.push(getIpWhitelistPolicy({ ipAddresses: props.whitelistIPs }));
|
|
275
|
+
}
|
|
276
|
+
if (props.setHeaders) {
|
|
277
|
+
const array = Array.isArray(props.setHeaders)
|
|
278
|
+
? props.setHeaders
|
|
279
|
+
: [props.setHeaders];
|
|
280
|
+
array.forEach((s) => inbound.push(setHeader(s)));
|
|
281
|
+
}
|
|
282
|
+
if (props.checkHeaders) {
|
|
283
|
+
inbound.push(checkHeaderPolicy(props.checkHeaders));
|
|
284
|
+
}
|
|
285
|
+
if (findAndReplaces) {
|
|
286
|
+
outbound.push(setFindAndReplaces(findAndReplaces));
|
|
287
|
+
}
|
|
288
|
+
if (props.customInboundPolicy) {
|
|
289
|
+
inbound.push(props.customInboundPolicy);
|
|
290
|
+
}
|
|
291
|
+
if (props.customOutPolicy) {
|
|
292
|
+
outbound.push(props.customOutPolicy);
|
|
293
|
+
}
|
|
294
|
+
//======This always in the last position.===========
|
|
295
|
+
if (props.clientCert) {
|
|
296
|
+
inbound.push(getInClientCertValidate(props.clientCert));
|
|
297
|
+
}
|
|
298
|
+
let backend = '<base />';
|
|
299
|
+
if (!props.mockResponse) {
|
|
300
|
+
backend =
|
|
301
|
+
'<forward-request timeout="120" follow-redirects="true" buffer-request-body="true" fail-on-error-status-code="true"/>';
|
|
302
|
+
}
|
|
303
|
+
return `<policies>
|
|
304
|
+
<inbound>
|
|
305
|
+
<base />
|
|
306
|
+
${inbound.join('\n')}
|
|
307
|
+
</inbound>
|
|
308
|
+
<backend>
|
|
309
|
+
${backend}
|
|
310
|
+
</backend>
|
|
311
|
+
<outbound>
|
|
312
|
+
<base />
|
|
313
|
+
<set-header name="Strict-Transport-Security" exists-action="override">
|
|
314
|
+
<value>max-age=15724800; includeSubDomains</value>
|
|
315
|
+
</set-header>
|
|
316
|
+
<set-header name="X-XSS-Protection" exists-action="override">
|
|
317
|
+
<value>1; mode=block</value>
|
|
318
|
+
</set-header>
|
|
319
|
+
<set-header name="Content-Security-Policy" exists-action="override">
|
|
320
|
+
<value>default-src 'self' data: 'unsafe-inline' 'unsafe-eval'</value>
|
|
321
|
+
</set-header>
|
|
322
|
+
<set-header name="X-Frame-Options" exists-action="override">
|
|
323
|
+
<value>Deny</value>
|
|
324
|
+
</set-header>
|
|
325
|
+
<set-header name="X-Content-Type-Options" exists-action="override">
|
|
326
|
+
<value>nosniff</value>
|
|
327
|
+
</set-header>
|
|
328
|
+
<set-header name="Expect-Ct" exists-action="override">
|
|
329
|
+
<value>max-age=604800,enforce</value>
|
|
330
|
+
</set-header>
|
|
331
|
+
<set-header name="Cache-Control" exists-action="override">
|
|
332
|
+
<value>none</value>
|
|
333
|
+
</set-header>
|
|
334
|
+
<set-header name="X-Powered-By" exists-action="delete" />
|
|
335
|
+
<set-header name="X-AspNet-Version" exists-action="delete" />
|
|
336
|
+
|
|
337
|
+
${outbound.join('\n')}
|
|
338
|
+
${enableApimEventHub && props.logEventHubName
|
|
339
|
+
? getEventHubPolicy({
|
|
340
|
+
eventHubName: props.logEventHubName,
|
|
341
|
+
azFuncUrl: props.azFuncUrl,
|
|
342
|
+
azFuncKey: props.azFuncKey,
|
|
343
|
+
captureClientCertThumbprint: props.captureClientCertThumbprint,
|
|
344
|
+
})
|
|
345
|
+
: ''}
|
|
346
|
+
</outbound>
|
|
347
|
+
<on-error>
|
|
348
|
+
<base />
|
|
349
|
+
${enableApimEventHub && props.logEventHubName
|
|
350
|
+
? getEventHubPolicy({
|
|
351
|
+
eventHubName: props.logEventHubName,
|
|
352
|
+
azFuncUrl: props.azFuncUrl,
|
|
353
|
+
azFuncKey: props.azFuncKey,
|
|
354
|
+
captureClientCertThumbprint: props.captureClientCertThumbprint,
|
|
355
|
+
})
|
|
356
|
+
: ''}
|
|
357
|
+
</on-error>
|
|
358
|
+
</policies>`;
|
|
359
|
+
};
|
|
360
|
+
exports.getPolicies = getPolicies;
|
|
361
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9saWN5QnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BcGltL0FwaVByb2R1Y3QvUG9saWN5QnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxvREFBOEM7QUFDOUMsOENBQWdEO0FBQ2hELG9EQUFxRDtBQUVyRCxNQUFNLGdCQUFnQixHQUFHLGdCQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzFDLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0FBT2pDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxFQUN6QixJQUFJLEdBQUcsR0FBRyxFQUNWLFdBQVcsR0FBRyxXQUFXLEdBQ2YsRUFBRSxFQUFFLENBQ2QscUNBQXFDLElBQUksbUJBQW1CLFdBQVcsTUFBTSxDQUFDO0FBTWhGLE1BQU0sZUFBZSxHQUFHLENBQUMsRUFBRSxRQUFRLEdBQUcsR0FBRyxFQUFtQixFQUFFLEVBQUUsQ0FDOUQsZ0NBQWdDLFFBQVEsTUFBTSxDQUFDO0FBTWpELE1BQU0sVUFBVSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQWdCLEVBQUUsRUFBRSxDQUMzQyxxQ0FBcUMsR0FBRyxNQUFNLENBQUM7QUFXakQsTUFBTSxjQUFjLEdBQUcsQ0FBQyxFQUN0QixJQUFJLEdBQUcsZ0JBQWdCLEVBQUUsdUJBQXVCO0FBQ2hELE1BQU0sR0FBRyxFQUFFLEVBQUUsVUFBVTtBQUN2QixvQkFBb0IsR0FDTCxFQUFFLEVBQUUsQ0FDbkIsb0JBQW9CO0lBQ2xCLENBQUMsQ0FBQyxtQ0FBbUMsSUFBSTs4QkFDZixNQUFNOztnSEFFNEU7SUFDNUcsQ0FBQyxDQUFDLG1DQUFtQyxJQUFJOzhCQUNmLE1BQU07MERBQ3NCLENBQUM7QUFFM0QsTUFBTSxVQUFVLEdBQUcsR0FBRyxFQUFFLENBQ3RCOzs7O2dEQUk4QyxDQUFDO0FBS2pELE1BQU0sV0FBVyxHQUFHLENBQUMsRUFBRSxRQUFRLEdB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
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ApimInfo, KeyVaultInfo } from '../../types';
|
|
2
|
+
export interface ProductProps {
|
|
3
|
+
name: string;
|
|
4
|
+
apimInfo: ApimInfo;
|
|
5
|
+
subscriptionRequired?: boolean;
|
|
6
|
+
vaultInfo?: KeyVaultInfo;
|
|
7
|
+
}
|
|
8
|
+
export declare const createProduct: ({ name, apimInfo, subscriptionRequired, vaultInfo, }: ProductProps) => Promise<import("@pulumi/azure-native/apimanagement/product").Product>;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createProduct = void 0;
|
|
4
|
+
const apim = require("@pulumi/azure-native/apimanagement");
|
|
5
|
+
const ResourceEnv_1 = require("../../Common/ResourceEnv");
|
|
6
|
+
const pulumi_1 = require("@pulumi/pulumi");
|
|
7
|
+
const Random_1 = require("../../Core/Random");
|
|
8
|
+
const Naming_1 = require("../../Common/Naming");
|
|
9
|
+
const CustomHelper_1 = require("../../KeyVault/CustomHelper");
|
|
10
|
+
const getProductName = (name) => (0, ResourceEnv_1.getResourceName)(name, { prefix: '', suffix: 'prod', includeOrgName: false });
|
|
11
|
+
const getSubscriptionName = (name) => (0, ResourceEnv_1.getResourceName)(name, {
|
|
12
|
+
prefix: 'apim',
|
|
13
|
+
suffix: 'sub',
|
|
14
|
+
includeOrgName: false,
|
|
15
|
+
});
|
|
16
|
+
const createProduct = async ({ name, apimInfo, subscriptionRequired, vaultInfo, }) => {
|
|
17
|
+
const pName = getProductName(name);
|
|
18
|
+
const product = new apim.Product(pName, {
|
|
19
|
+
productId: pName,
|
|
20
|
+
displayName: pName,
|
|
21
|
+
description: pName,
|
|
22
|
+
serviceName: apimInfo.serviceName,
|
|
23
|
+
resourceGroupName: apimInfo.group.resourceGroupName,
|
|
24
|
+
subscriptionRequired,
|
|
25
|
+
approvalRequired: subscriptionRequired ? false : undefined,
|
|
26
|
+
subscriptionsLimit: subscriptionRequired ? 5 : undefined,
|
|
27
|
+
});
|
|
28
|
+
if (subscriptionRequired && vaultInfo) {
|
|
29
|
+
const subName = getSubscriptionName(name);
|
|
30
|
+
const primaryKey = (0, Naming_1.getPasswordName)(subName, 'primary');
|
|
31
|
+
const secondaryKey = (0, Naming_1.getPasswordName)(subName, 'secondary');
|
|
32
|
+
const primaryPass = (0, Random_1.randomPassword)({ name: primaryKey }).result;
|
|
33
|
+
const secondaryPass = (0, Random_1.randomPassword)({ name: secondaryKey }).result;
|
|
34
|
+
new apim.Subscription(subName, {
|
|
35
|
+
sid: subName,
|
|
36
|
+
displayName: subName,
|
|
37
|
+
serviceName: apimInfo.serviceName,
|
|
38
|
+
resourceGroupName: apimInfo.group.resourceGroupName,
|
|
39
|
+
scope: (0, pulumi_1.interpolate) `/products/${product.id}`,
|
|
40
|
+
primaryKey: primaryPass,
|
|
41
|
+
secondaryKey: secondaryPass,
|
|
42
|
+
}, { dependsOn: product });
|
|
43
|
+
(0, CustomHelper_1.addCustomSecret)({
|
|
44
|
+
name: primaryKey,
|
|
45
|
+
formattedName: true,
|
|
46
|
+
value: primaryPass,
|
|
47
|
+
contentType: subName,
|
|
48
|
+
vaultInfo,
|
|
49
|
+
tags: { name, subName },
|
|
50
|
+
});
|
|
51
|
+
(0, CustomHelper_1.addCustomSecret)({
|
|
52
|
+
name: secondaryKey,
|
|
53
|
+
formattedName: true,
|
|
54
|
+
value: secondaryPass,
|
|
55
|
+
contentType: subName,
|
|
56
|
+
vaultInfo,
|
|
57
|
+
tags: { name, subName },
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return product;
|
|
61
|
+
};
|
|
62
|
+
exports.createProduct = createProduct;
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvZHVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BcGltL0FwaVByb2R1Y3QvUHJvZHVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwyREFBMkQ7QUFDM0QsMERBQTJEO0FBQzNELDJDQUE2QztBQUM3Qyw4Q0FBbUQ7QUFDbkQsZ0RBQXNEO0FBQ3RELDhEQUE4RDtBQUU5RCxNQUFNLGNBQWMsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFLENBQ3RDLElBQUEsNkJBQWUsRUFBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDL0UsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFLENBQzNDLElBQUEsNkJBQWUsRUFBQyxJQUFJLEVBQUU7SUFDcEIsTUFBTSxFQUFFLE1BQU07SUFDZCxNQUFNLEVBQUUsS0FBSztJQUNiLGNBQWMsRUFBRSxLQUFLO0NBQ3RCLENBQUMsQ0FBQztBQVNFLE1BQU0sYUFBYSxHQUFHLEtBQUssRUFBRSxFQUNsQyxJQUFJLEVBQ0osUUFBUSxFQUNSLG9CQUFvQixFQUNwQixTQUFTLEdBQ0ksRUFBRSxFQUFFO0lBQ2pCLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxNQUFNLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO1FBQ3RDLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLFdBQVcsRUFBRSxLQUFLO1FBQ2xCLFdBQVcsRUFBRSxLQUFLO1FBQ2xCLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVztRQUNqQyxpQkFBaUIsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLGlCQUFpQjtRQUVuRCxvQkFBb0I7UUFDcEIsZ0JBQWdCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUztRQUMxRCxrQkFBa0IsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO0tBQ3pELENBQUMsQ0FBQztJQUVILElBQUksb0JBQW9CLElBQUksU0FBUyxFQUFFLENBQUM7UUFDdEMsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsTUFBTSxVQUFVLEdBQUcsSUFBQSx3QkFBZSxFQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN2RCxNQUFNLFlBQVksR0FBRyxJQUFBLHdCQUFlLEVBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRTNELE1BQU0sV0FBVyxHQUFHLElBQUEsdUJBQWMsRUFBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNoRSxNQUFNLGFBQWEsR0FBRyxJQUFBLHVCQUFjLEVBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFcEUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUNuQixPQUFPLEVBQ1A7WUFDRSxHQUFHLEVBQUUsT0FBTztZQUNaLFdBQVcsRUFBRSxPQUFPO1lBQ3BCLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVztZQUNqQyxpQkFBaUIsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLGlCQUFpQjtZQUNuRCxLQUFLLEVBQUUsSUFBQSxvQkFBVyxFQUFBLGFBQWEsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUMzQyxVQUFVLEVBQUUsV0FBVztZQUN2QixZQUFZLEVBQUUsYUFBYTtTQUM1QixFQUNELEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUN2QixDQUFDO1FBRUYsSUFBQSw4QkFBZSxFQUFDO1lBQ2QsSUFBSSxFQUFFLFVBQVU7WUFDaEIsYUFBYSxFQUFFLElBQUk7WUFDbkIsS0FBSyxFQUFFLFdBQVc7WUFDbEIsV0FBVyxFQUFFLE9BQU87WUFDcEIsU0FBUztZQUNULElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7U0FDeEIsQ0FBQyxDQUFDO1FBRUgsSUFBQSw4QkFBZSxFQUFDO1lBQ2QsSUFBSSxFQUFFLFlBQVk7WUFDbEIsYUFBYSxFQUFFLElBQUk7WUFDbkIsS0FBSyxFQUFFLGFBQWE7WUFDcEIsV0FBVyxFQUFFLE9BQU87WUFDcEIsU0FBUztZQUNULElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7U0FDeEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQTdEVyxRQUFBLGFBQWEsaUJBNkR4QiJ9
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getImportConfig = void 0;
|
|
4
|
+
const axios_1 = require("axios");
|
|
5
|
+
const Helpers_1 = require("../../Common/Helpers");
|
|
6
|
+
const removeVersion = (data, version) => {
|
|
7
|
+
if (!data?.paths) {
|
|
8
|
+
console.error(`APIM-removeVersion: There is no paths found in`, data);
|
|
9
|
+
return data;
|
|
10
|
+
}
|
|
11
|
+
const newPaths = {};
|
|
12
|
+
//Replace version from path
|
|
13
|
+
Object.keys(data.paths).forEach((k) => {
|
|
14
|
+
const newKey = (0, Helpers_1.replaceAll)(k, `/${version}`, "");
|
|
15
|
+
//console.log('Replaced: ', { current: k, new: newKey });
|
|
16
|
+
newPaths[newKey] = data.paths[k];
|
|
17
|
+
});
|
|
18
|
+
data.paths = newPaths;
|
|
19
|
+
return data;
|
|
20
|
+
};
|
|
21
|
+
const downloadSpecFile = async (fileUrl) => {
|
|
22
|
+
//console.log('Downloading Specs Url', fileUrl);
|
|
23
|
+
try {
|
|
24
|
+
//Get specs json from URL
|
|
25
|
+
const specs = await axios_1.default.get(fileUrl);
|
|
26
|
+
return specs.data;
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
console.error("Not able to get spec file from:", fileUrl);
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
const getImportConfig = async (specUrl, version) => {
|
|
34
|
+
const spec = await downloadSpecFile(specUrl);
|
|
35
|
+
if (!spec)
|
|
36
|
+
return undefined;
|
|
37
|
+
//Validate
|
|
38
|
+
//if (!validateSpecFile(specUrl, spec)) return undefined;
|
|
39
|
+
//Remove Version
|
|
40
|
+
const data = removeVersion(spec, version);
|
|
41
|
+
return JSON.stringify(data);
|
|
42
|
+
};
|
|
43
|
+
exports.getImportConfig = getImportConfig;
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3dhZ2dlckhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BcGltL0FwaVByb2R1Y3QvU3dhZ2dlckhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxpQ0FBMEI7QUFDMUIsa0RBQWtEO0FBRWxELE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBYyxFQUFFLE9BQWUsRUFBWSxFQUFFO0lBQ2xFLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDakIsT0FBTyxDQUFDLEtBQUssQ0FBQyxnREFBZ0QsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0RSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxFQUFTLENBQUM7SUFFM0IsMkJBQTJCO0lBQzNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ3BDLE1BQU0sTUFBTSxHQUFHLElBQUEsb0JBQVUsRUFBQyxDQUFDLEVBQUUsSUFBSSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNoRCx5REFBeUQ7UUFFekQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztJQUN0QixPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQU9GLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxFQUM1QixPQUFlLEVBQ2dCLEVBQUU7SUFDakMsZ0RBQWdEO0lBRWhELElBQUksQ0FBQztRQUNILHlCQUF5QjtRQUN6QixNQUFNLEtBQUssR0FBRyxNQUFNLGVBQUssQ0FBQyxHQUFHLENBQVcsT0FBTyxDQUFDLENBQUM7UUFDakQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQ3BCLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzFELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7QUFDSCxDQUFDLENBQUM7QUFFSyxNQUFNLGVBQWUsR0FBRyxLQUFLLEVBQ2xDLE9BQWUsRUFDZixPQUFlLEVBQ2MsRUFBRTtJQUMvQixNQUFNLElBQUksR0FBRyxNQUFNLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTdDLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFNUIsVUFBVTtJQUNWLHlEQUF5RDtJQUV6RCxnQkFBZ0I7SUFDaEIsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUIsQ0FBQyxDQUFDO0FBZFcsUUFBQSxlQUFlLG1CQWMxQiJ9
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ProductProps } from './Product';
|
|
2
|
+
import { ApiProps } from './Api';
|
|
3
|
+
interface Props extends ProductProps, Omit<ApiProps, 'product'> {
|
|
4
|
+
}
|
|
5
|
+
declare const _default: ({ name, apimInfo, subscriptionRequired, vaultInfo, ...others }: Props) => Promise<{
|
|
6
|
+
set: import("@pulumi/azure-native/apimanagement/apiVersionSet").ApiVersionSet | undefined;
|
|
7
|
+
apis: import("@pulumi/azure-native/apimanagement/api").Api[];
|
|
8
|
+
}>;
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const Product_1 = require("./Product");
|
|
4
|
+
const Api_1 = require("./Api");
|
|
5
|
+
exports.default = async ({ name, apimInfo, subscriptionRequired, vaultInfo, ...others }) => {
|
|
6
|
+
const product = await (0, Product_1.createProduct)({
|
|
7
|
+
name,
|
|
8
|
+
apimInfo,
|
|
9
|
+
vaultInfo,
|
|
10
|
+
subscriptionRequired,
|
|
11
|
+
});
|
|
12
|
+
product.name.apply(console.log);
|
|
13
|
+
const api = (0, Api_1.createApi)({
|
|
14
|
+
name,
|
|
15
|
+
apimInfo,
|
|
16
|
+
product,
|
|
17
|
+
subscriptionRequired,
|
|
18
|
+
...others,
|
|
19
|
+
});
|
|
20
|
+
return { product, ...api };
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQXBpbS9BcGlQcm9kdWN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsdUNBQXdEO0FBQ3hELCtCQUE0QztBQUk1QyxrQkFBZSxLQUFLLEVBQUUsRUFDcEIsSUFBSSxFQUNKLFFBQVEsRUFDUixvQkFBb0IsRUFDcEIsU0FBUyxFQUNULEdBQUcsTUFBTSxFQUNILEVBQUUsRUFBRTtJQUNWLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBQSx1QkFBYSxFQUFDO1FBQ2xDLElBQUk7UUFDSixRQUFRO1FBQ1IsU0FBUztRQUNULG9CQUFvQjtLQUNyQixDQUFDLENBQUM7SUFFSCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFaEMsTUFBTSxHQUFHLEdBQUcsSUFBQSxlQUFTLEVBQUM7UUFDcEIsSUFBSTtRQUNKLFFBQVE7UUFDUixPQUFPO1FBQ1Asb0JBQW9CO1FBQ3BCLEdBQUcsTUFBTTtLQUNWLENBQUMsQ0FBQztJQUVILE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUM3QixDQUFDLENBQUMifQ==
|
|
File without changes
|
package/Apim/Helpers.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { PoliciesProps } from '../ApiProduct/PolicyBuilder';
|
|
2
|
+
import { ApimInfo, KeyVaultInfo } from '../../types';
|
|
3
|
+
interface Props {
|
|
4
|
+
name?: string;
|
|
5
|
+
apimInfo: ApimInfo;
|
|
6
|
+
subscriptionRequired?: boolean;
|
|
7
|
+
vaultInfo?: KeyVaultInfo;
|
|
8
|
+
policies?: PoliciesProps;
|
|
9
|
+
domain: string;
|
|
10
|
+
authHeaderKey: string;
|
|
11
|
+
hookHeaderKey: string;
|
|
12
|
+
}
|
|
13
|
+
declare const _default: ({ name, subscriptionRequired, domain, hookHeaderKey, authHeaderKey, policies, ...props }: Props) => Promise<{
|
|
14
|
+
product: import("@pulumi/azure-native/apimanagement/product").Product;
|
|
15
|
+
api: {
|
|
16
|
+
set: import("@pulumi/azure-native/apimanagement/apiVersionSet").ApiVersionSet | undefined;
|
|
17
|
+
apis: import("@pulumi/azure-native/apimanagement/api").Api[];
|
|
18
|
+
};
|
|
19
|
+
}>;
|
|
20
|
+
export default _default;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const PolicyBuilder_1 = require("../ApiProduct/PolicyBuilder");
|
|
4
|
+
const Product_1 = require("../ApiProduct/Product");
|
|
5
|
+
const Api_1 = require("../ApiProduct/Api");
|
|
6
|
+
exports.default = async ({ name = 'hook-proxy', subscriptionRequired = true, domain, hookHeaderKey, authHeaderKey, policies, ...props }) => {
|
|
7
|
+
const product = await (0, Product_1.createProduct)({ name, ...props, subscriptionRequired });
|
|
8
|
+
const api = await (0, Api_1.createApi)({
|
|
9
|
+
name,
|
|
10
|
+
...props,
|
|
11
|
+
enableApiSet: false,
|
|
12
|
+
product,
|
|
13
|
+
authHeaderKey,
|
|
14
|
+
policies: {
|
|
15
|
+
...policies,
|
|
16
|
+
setHeaders: [{ name: authHeaderKey, type: PolicyBuilder_1.SetHeaderTypes.delete }],
|
|
17
|
+
checkHeaders: {
|
|
18
|
+
checkHeaders: [{ name: hookHeaderKey }],
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
//Dummy Url as it will be set from request header key `hookHeaderKey`
|
|
22
|
+
serviceUrl: `https://${domain}`,
|
|
23
|
+
operations: [{ name: 'Post', method: 'POST', urlTemplate: '/' }],
|
|
24
|
+
});
|
|
25
|
+
return { product, api };
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQXBpbS9Ib29rUHJveHkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwrREFBNEU7QUFFNUUsbURBQXNEO0FBQ3RELDJDQUE4QztBQWE5QyxrQkFBZSxLQUFLLEVBQUUsRUFDcEIsSUFBSSxHQUFHLFlBQVksRUFDbkIsb0JBQW9CLEdBQUcsSUFBSSxFQUMzQixNQUFNLEVBQ04sYUFBYSxFQUNiLGFBQWEsRUFDYixRQUFRLEVBQ1IsR0FBRyxLQUFLLEVBQ0YsRUFBRSxFQUFFO0lBQ1YsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFBLHVCQUFhLEVBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBRTlFLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBQSxlQUFTLEVBQUM7UUFDMUIsSUFBSTtRQUNKLEdBQUcsS0FBSztRQUNSLFlBQVksRUFBRSxLQUFLO1FBQ25CLE9BQU87UUFDUCxhQUFhO1FBQ2IsUUFBUSxFQUFFO1lBQ1IsR0FBRyxRQUFRO1lBQ1gsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSw4QkFBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xFLFlBQVksRUFBRTtnQkFDWixZQUFZLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsQ0FBQzthQUN4QztTQUNGO1FBQ0QscUVBQXFFO1FBQ3JFLFVBQVUsRUFBRSxXQUFXLE1BQU0sRUFBRTtRQUMvQixVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUM7S0FDakUsQ0FBQyxDQUFDO0lBRUgsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxQixDQUFDLENBQUMifQ==
|
package/Apim/index.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as apimanagement from '@pulumi/azure-native/apimanagement';
|
|
2
|
+
import { Input } from '@pulumi/pulumi';
|
|
3
|
+
import { ApimInfo, BasicResourceArgs, DefaultResourceArgs } from '../types';
|
|
4
|
+
interface Props extends BasicResourceArgs, Omit<DefaultResourceArgs, "monitoring"> {
|
|
5
|
+
insight?: {
|
|
6
|
+
id: Input<string>;
|
|
7
|
+
key: Input<string>;
|
|
8
|
+
};
|
|
9
|
+
sku: apimanagement.SkuType;
|
|
10
|
+
capacity?: number;
|
|
11
|
+
alertEmail: Input<string>;
|
|
12
|
+
customDomain?: {
|
|
13
|
+
domain: string;
|
|
14
|
+
certificate: Input<string>;
|
|
15
|
+
certificatePassword?: Input<string>;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
declare const _default: ({ name, group, customDomain, insight, sku, capacity, lock, alertEmail, ...others }: Props) => {
|
|
19
|
+
apim: import("@pulumi/azure-native/apimanagement/apiManagementService").ApiManagementService;
|
|
20
|
+
toApimInfo: () => ApimInfo;
|
|
21
|
+
};
|
|
22
|
+
export default _default;
|