@microsoft/terraform-cdk-constructs 1.8.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/.jsii +21007 -16056
  2. package/API.md +37023 -29701
  3. package/lib/azure-actiongroup/lib/action-group.js +1 -1
  4. package/lib/azure-activitylogalert/lib/activity-log-alert.js +1 -1
  5. package/lib/azure-aks/lib/aks-cluster.js +1 -1
  6. package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +1 -1
  7. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.js +1 -1
  8. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.js +1 -1
  9. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.js +1 -1
  10. package/lib/azure-dnsresolver/lib/dns-resolver.js +1 -1
  11. package/lib/azure-dnsresolver/lib/inbound-endpoint.js +1 -1
  12. package/lib/azure-dnsresolver/lib/outbound-endpoint.js +1 -1
  13. package/lib/azure-dnszone/lib/dns-zone.js +1 -1
  14. package/lib/azure-dnszone/lib/records/dns-records.js +10 -10
  15. package/lib/azure-loganalyticsworkspace/index.d.ts +6 -0
  16. package/lib/azure-loganalyticsworkspace/index.js +23 -0
  17. package/lib/azure-loganalyticsworkspace/lib/index.d.ts +5 -0
  18. package/lib/azure-loganalyticsworkspace/lib/index.js +22 -0
  19. package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace-schemas.d.ts +51 -0
  20. package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace-schemas.js +255 -0
  21. package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace.d.ts +301 -0
  22. package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace.js +213 -0
  23. package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.integ.d.ts +9 -0
  24. package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.integ.js +71 -0
  25. package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.spec.d.ts +8 -0
  26. package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.spec.js +504 -0
  27. package/lib/azure-metricalert/lib/metric-alert.js +1 -1
  28. package/lib/azure-networkinterface/lib/network-interface.js +1 -1
  29. package/lib/azure-networksecuritygroup/lib/network-security-group.js +1 -1
  30. package/lib/azure-networkwatcher/index.d.ts +14 -0
  31. package/lib/azure-networkwatcher/index.js +31 -0
  32. package/lib/azure-networkwatcher/lib/index.d.ts +5 -0
  33. package/lib/azure-networkwatcher/lib/index.js +22 -0
  34. package/lib/azure-networkwatcher/lib/network-watcher-schemas.d.ts +47 -0
  35. package/lib/azure-networkwatcher/lib/network-watcher-schemas.js +167 -0
  36. package/lib/azure-networkwatcher/lib/network-watcher.d.ts +181 -0
  37. package/lib/azure-networkwatcher/lib/network-watcher.js +187 -0
  38. package/lib/azure-networkwatcher/test/network-watcher.integ.d.ts +12 -0
  39. package/lib/azure-networkwatcher/test/network-watcher.integ.js +84 -0
  40. package/lib/azure-networkwatcher/test/network-watcher.spec.d.ts +8 -0
  41. package/lib/azure-networkwatcher/test/network-watcher.spec.js +312 -0
  42. package/lib/azure-policyassignment/lib/policy-assignment.js +1 -1
  43. package/lib/azure-policydefinition/lib/policy-definition.js +1 -1
  44. package/lib/azure-policysetdefinition/index.d.ts +10 -0
  45. package/lib/azure-policysetdefinition/index.js +27 -0
  46. package/lib/azure-policysetdefinition/lib/index.d.ts +5 -0
  47. package/lib/azure-policysetdefinition/lib/index.js +22 -0
  48. package/lib/azure-policysetdefinition/lib/policy-set-definition-schemas.d.ts +50 -0
  49. package/lib/azure-policysetdefinition/lib/policy-set-definition-schemas.js +255 -0
  50. package/lib/azure-policysetdefinition/lib/policy-set-definition.d.ts +426 -0
  51. package/lib/azure-policysetdefinition/lib/policy-set-definition.js +255 -0
  52. package/lib/azure-policysetdefinition/test/policy-set-definition.integ.d.ts +9 -0
  53. package/lib/azure-policysetdefinition/test/policy-set-definition.integ.js +56 -0
  54. package/lib/azure-policysetdefinition/test/policy-set-definition.spec.d.ts +8 -0
  55. package/lib/azure-policysetdefinition/test/policy-set-definition.spec.js +745 -0
  56. package/lib/azure-privatednszone/lib/private-dns-zone.js +1 -1
  57. package/lib/azure-privatednszone/lib/records/private-dns-records.js +8 -8
  58. package/lib/azure-privatednszonelink/lib/private-dns-zone-link.js +1 -1
  59. package/lib/azure-publicipaddress/lib/public-ip-address.js +1 -1
  60. package/lib/azure-resourcegroup/lib/resource-group.js +1 -1
  61. package/lib/azure-roleassignment/lib/role-assignment.js +1 -1
  62. package/lib/azure-roledefinition/lib/role-definition.js +1 -1
  63. package/lib/azure-storageaccount/lib/storage-account.js +1 -1
  64. package/lib/azure-subnet/lib/subnet.js +1 -1
  65. package/lib/azure-virtualmachine/lib/virtual-machine.js +1 -1
  66. package/lib/azure-virtualnetwork/lib/virtual-network.js +1 -1
  67. package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway-schemas.js +2 -2
  68. package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway.d.ts +4 -2
  69. package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway.js +8 -5
  70. package/lib/azure-virtualnetworkgateway/test/virtual-network-gateway.spec.js +109 -1
  71. package/lib/azure-virtualnetworkgatewayconnection/lib/virtual-network-gateway-connection.js +1 -1
  72. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.js +1 -1
  73. package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr.js +1 -1
  74. package/lib/azure-virtualnetworkmanager/lib/ipam-pool.js +1 -1
  75. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.js +1 -1
  76. package/lib/azure-virtualnetworkmanager/lib/network-group.js +1 -1
  77. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.js +1 -1
  78. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.js +1 -1
  79. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.js +1 -1
  80. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.js +1 -1
  81. package/lib/azure-vmss/lib/virtual-machine-scale-set.js +1 -1
  82. package/lib/core-azure/lib/azapi/azapi-resource.js +2 -2
  83. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +2 -2
  84. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +5 -5
  85. package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +1 -1
  86. package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +5 -5
  87. package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +3 -3
  88. package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +3 -3
  89. package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.js +1 -1
  90. package/lib/core-azure/lib/version-manager/api-version-manager.js +1 -1
  91. package/lib/core-azure/lib/version-manager/interfaces/version-interfaces.js +7 -7
  92. package/lib/index.d.ts +9 -0
  93. package/lib/index.js +11 -2
  94. package/lib/testing/index.js +2 -2
  95. package/lib/testing/lib/cleanup.js +1 -1
  96. package/lib/testing/lib/metadata.js +1 -1
  97. package/package.json +1 -1
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.NetworkWatcher = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ /**
7
+ * Unified Azure Network Watcher implementation using AzapiResource framework
8
+ *
9
+ * This class provides a version-aware implementation for Azure Network Watcher
10
+ * that automatically handles version management, schema validation, and property
11
+ * transformation across all supported API versions.
12
+ *
13
+ * IMPORTANT: Azure only allows one Network Watcher per subscription per region.
14
+ * If you attempt to create a Network Watcher in a region where one already exists,
15
+ * the deployment will fail.
16
+ *
17
+ * Supported API Versions:
18
+ * - 2024-01-01 (Active, Latest)
19
+ * - 2023-11-01 (Active, Backward Compatibility)
20
+ *
21
+ * Features:
22
+ * - Automatic latest version resolution when no version is specified
23
+ * - Explicit version pinning for stability requirements
24
+ * - Schema-driven validation and transformation
25
+ * - Full JSII compliance for multi-language support
26
+ *
27
+ * Network Watcher is primarily used as a dependency for other Network Watcher features:
28
+ * - Flow Logs
29
+ * - Connection Monitor
30
+ * - Packet Capture
31
+ * - Network Diagnostic Tools
32
+ */
33
+ const cdktf = require("cdktf");
34
+ const network_watcher_schemas_1 = require("./network-watcher-schemas");
35
+ const azapi_resource_1 = require("../../core-azure/lib/azapi/azapi-resource");
36
+ /**
37
+ * Unified Azure Network Watcher implementation
38
+ *
39
+ * This class provides a single, version-aware implementation that automatically handles version
40
+ * resolution, schema validation, and property transformation while maintaining full JSII compliance.
41
+ *
42
+ * Network Watcher is a regional service that provides tools to monitor, diagnose, and gain
43
+ * insights into your network health and performance in Azure. It serves as the anchor for
44
+ * Network Watcher features like Flow Logs, Connection Monitor, and Packet Capture.
45
+ *
46
+ * IMPORTANT CONSTRAINT: Azure only allows one Network Watcher per subscription per region.
47
+ * If you need Network Watcher functionality in multiple regions, you must create a separate
48
+ * Network Watcher for each region.
49
+ *
50
+ * @example
51
+ * // Basic Network Watcher:
52
+ * const networkWatcher = new NetworkWatcher(this, "network-watcher", {
53
+ * name: "nw-eastus",
54
+ * location: "eastus",
55
+ * resourceGroupId: resourceGroup.id,
56
+ * });
57
+ *
58
+ * @example
59
+ * // Network Watcher with specific API version:
60
+ * const networkWatcher = new NetworkWatcher(this, "network-watcher", {
61
+ * name: "nw-westus2",
62
+ * location: "westus2",
63
+ * resourceGroupId: resourceGroup.id,
64
+ * apiVersion: "2024-01-01",
65
+ * tags: {
66
+ * environment: "production",
67
+ * },
68
+ * });
69
+ *
70
+ * @example
71
+ * // Network Watcher for use with Flow Logs:
72
+ * const networkWatcher = new NetworkWatcher(this, "network-watcher", {
73
+ * name: "NetworkWatcher_eastus",
74
+ * location: "eastus",
75
+ * resourceGroupId: networkWatcherRg.id,
76
+ * });
77
+ *
78
+ * // Then use it with NSG Flow Logs
79
+ * const flowLog = new NsgFlowLog(this, "flow-log", {
80
+ * networkWatcherId: networkWatcher.id,
81
+ * // ... other properties
82
+ * });
83
+ *
84
+ * @stability stable
85
+ */
86
+ class NetworkWatcher extends azapi_resource_1.AzapiResource {
87
+ /**
88
+ * Creates a new Azure Network Watcher using the AzapiResource framework
89
+ *
90
+ * The constructor automatically handles version resolution, schema registration,
91
+ * validation, and resource creation.
92
+ *
93
+ * IMPORTANT: Azure only allows one Network Watcher per subscription per region.
94
+ * Attempting to create a Network Watcher in a region where one already exists
95
+ * will result in a deployment error.
96
+ *
97
+ * @param scope - The scope in which to define this construct
98
+ * @param id - The unique identifier for this instance
99
+ * @param props - Configuration properties for the Network Watcher
100
+ */
101
+ constructor(scope, id, props) {
102
+ super(scope, id, props);
103
+ this.props = props;
104
+ // Create Terraform outputs for easy access and referencing from other resources
105
+ this.idOutput = new cdktf.TerraformOutput(this, "id", {
106
+ value: this.id,
107
+ description: "The ID of the Network Watcher",
108
+ });
109
+ this.nameOutput = new cdktf.TerraformOutput(this, "name", {
110
+ value: `\${${this.terraformResource.fqn}.name}`,
111
+ description: "The name of the Network Watcher",
112
+ });
113
+ this.locationOutput = new cdktf.TerraformOutput(this, "location", {
114
+ value: `\${${this.terraformResource.fqn}.output.location}`,
115
+ description: "The location of the Network Watcher",
116
+ });
117
+ this.provisioningStateOutput = new cdktf.TerraformOutput(this, "provisioning_state", {
118
+ value: `\${${this.terraformResource.fqn}.output.properties.provisioningState}`,
119
+ description: "The provisioning state of the Network Watcher",
120
+ });
121
+ // Override logical IDs
122
+ this.idOutput.overrideLogicalId("id");
123
+ this.nameOutput.overrideLogicalId("name");
124
+ this.locationOutput.overrideLogicalId("location");
125
+ this.provisioningStateOutput.overrideLogicalId("provisioning_state");
126
+ }
127
+ // =============================================================================
128
+ // REQUIRED ABSTRACT METHODS FROM AzapiResource
129
+ // =============================================================================
130
+ /**
131
+ * Gets the default API version to use when no explicit version is specified
132
+ * Returns the latest stable version as the default
133
+ */
134
+ defaultVersion() {
135
+ return "2024-01-01";
136
+ }
137
+ /**
138
+ * Gets the Azure resource type for Network Watcher
139
+ */
140
+ resourceType() {
141
+ return network_watcher_schemas_1.NETWORK_WATCHER_TYPE;
142
+ }
143
+ /**
144
+ * Gets the API schema for the resolved version
145
+ * Uses the framework's schema resolution to get the appropriate schema
146
+ */
147
+ apiSchema() {
148
+ return this.resolveSchema();
149
+ }
150
+ /**
151
+ * Indicates that this resource type requires a location
152
+ */
153
+ requiresLocation() {
154
+ return true;
155
+ }
156
+ /**
157
+ * Creates the resource body for the Azure API call
158
+ *
159
+ * Network Watcher is a simple resource with an empty properties block.
160
+ * All configuration is handled at the resource level (name, location, tags).
161
+ */
162
+ createResourceBody(_props) {
163
+ // Network Watcher has an empty properties block
164
+ // The resource is configured primarily through name, location, and tags
165
+ const body = {
166
+ properties: {},
167
+ };
168
+ return body;
169
+ }
170
+ /**
171
+ * Resolves the parent resource ID for Network Watcher
172
+ * Network Watcher is a top-level resource within a resource group
173
+ *
174
+ * @param props - The resource properties
175
+ * @returns The parent resource ID (the resource group)
176
+ */
177
+ resolveParentId(props) {
178
+ return props.resourceGroupId;
179
+ }
180
+ }
181
+ exports.NetworkWatcher = NetworkWatcher;
182
+ _a = JSII_RTTI_SYMBOL_1;
183
+ NetworkWatcher[_a] = { fqn: "@microsoft/terraform-cdk-constructs.NetworkWatcher", version: "1.9.0" };
184
+ (() => {
185
+ azapi_resource_1.AzapiResource.registerSchemas(network_watcher_schemas_1.NETWORK_WATCHER_TYPE, network_watcher_schemas_1.ALL_NETWORK_WATCHER_VERSIONS);
186
+ })();
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay13YXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLW5ldHdvcmt3YXRjaGVyL2xpYi9uZXR3b3JrLXdhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFFSCwrQkFBK0I7QUFFL0IsdUVBR21DO0FBQ25DLDhFQUdtRDtBQWlDbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpREc7QUFDSCxNQUFhLGNBQWUsU0FBUSw4QkFBYTtJQWtDL0M7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDcEQsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2QsV0FBVyxFQUFFLCtCQUErQjtTQUM3QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFFBQVE7WUFDL0MsV0FBVyxFQUFFLGlDQUFpQztTQUMvQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ2hFLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLG1CQUFtQjtZQUMxRCxXQUFXLEVBQUUscUNBQXFDO1NBQ25ELENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQ3RELElBQUksRUFDSixvQkFBb0IsRUFDcEI7WUFDRSxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyx1Q0FBdUM7WUFDOUUsV0FBVyxFQUFFLCtDQUErQztTQUM3RCxDQUNGLENBQUM7UUFFRix1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELGdGQUFnRjtJQUNoRiwrQ0FBK0M7SUFDL0MsZ0ZBQWdGO0lBRWhGOzs7T0FHRztJQUNPLGNBQWM7UUFDdEIsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ08sWUFBWTtRQUNwQixPQUFPLDhDQUFvQixDQUFDO0lBQzlCLENBQUM7SUFFRDs7O09BR0c7SUFDTyxTQUFTO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNPLGdCQUFnQjtRQUN4QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNPLGtCQUFrQixDQUFDLE1BQVc7UUFDdEMsZ0RBQWdEO1FBQ2hELHdFQUF3RTtRQUN4RSxNQUFNLElBQUksR0FBUTtZQUNoQixVQUFVLEVBQUUsRUFBRTtTQUNmLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDTyxlQUFlLENBQUMsS0FBVTtRQUNsQyxPQUFRLEtBQTZCLENBQUMsZUFBZSxDQUFDO0lBQ3hELENBQUM7O0FBaEpILHdDQWlKQzs7O0FBaEpDO0lBQ0UsOEJBQWEsQ0FBQyxlQUFlLENBQzNCLDhDQUFvQixFQUNwQixzREFBNEIsQ0FDN0IsQ0FBQztBQUNKLENBQUMsR0FBQSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVbmlmaWVkIEF6dXJlIE5ldHdvcmsgV2F0Y2hlciBpbXBsZW1lbnRhdGlvbiB1c2luZyBBemFwaVJlc291cmNlIGZyYW1ld29ya1xuICpcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSB2ZXJzaW9uLWF3YXJlIGltcGxlbWVudGF0aW9uIGZvciBBenVyZSBOZXR3b3JrIFdhdGNoZXJcbiAqIHRoYXQgYXV0b21hdGljYWxseSBoYW5kbGVzIHZlcnNpb24gbWFuYWdlbWVudCwgc2NoZW1hIHZhbGlkYXRpb24sIGFuZCBwcm9wZXJ0eVxuICogdHJhbnNmb3JtYXRpb24gYWNyb3NzIGFsbCBzdXBwb3J0ZWQgQVBJIHZlcnNpb25zLlxuICpcbiAqIElNUE9SVEFOVDogQXp1cmUgb25seSBhbGxvd3Mgb25lIE5ldHdvcmsgV2F0Y2hlciBwZXIgc3Vic2NyaXB0aW9uIHBlciByZWdpb24uXG4gKiBJZiB5b3UgYXR0ZW1wdCB0byBjcmVhdGUgYSBOZXR3b3JrIFdhdGNoZXIgaW4gYSByZWdpb24gd2hlcmUgb25lIGFscmVhZHkgZXhpc3RzLFxuICogdGhlIGRlcGxveW1lbnQgd2lsbCBmYWlsLlxuICpcbiAqIFN1cHBvcnRlZCBBUEkgVmVyc2lvbnM6XG4gKiAtIDIwMjQtMDEtMDEgKEFjdGl2ZSwgTGF0ZXN0KVxuICogLSAyMDIzLTExLTAxIChBY3RpdmUsIEJhY2t3YXJkIENvbXBhdGliaWxpdHkpXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEF1dG9tYXRpYyBsYXRlc3QgdmVyc2lvbiByZXNvbHV0aW9uIHdoZW4gbm8gdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAqIC0gRXhwbGljaXQgdmVyc2lvbiBwaW5uaW5nIGZvciBzdGFiaWxpdHkgcmVxdWlyZW1lbnRzXG4gKiAtIFNjaGVtYS1kcml2ZW4gdmFsaWRhdGlvbiBhbmQgdHJhbnNmb3JtYXRpb25cbiAqIC0gRnVsbCBKU0lJIGNvbXBsaWFuY2UgZm9yIG11bHRpLWxhbmd1YWdlIHN1cHBvcnRcbiAqXG4gKiBOZXR3b3JrIFdhdGNoZXIgaXMgcHJpbWFyaWx5IHVzZWQgYXMgYSBkZXBlbmRlbmN5IGZvciBvdGhlciBOZXR3b3JrIFdhdGNoZXIgZmVhdHVyZXM6XG4gKiAtIEZsb3cgTG9nc1xuICogLSBDb25uZWN0aW9uIE1vbml0b3JcbiAqIC0gUGFja2V0IENhcHR1cmVcbiAqIC0gTmV0d29yayBEaWFnbm9zdGljIFRvb2xzXG4gKi9cblxuaW1wb3J0ICogYXMgY2RrdGYgZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgQUxMX05FVFdPUktfV0FUQ0hFUl9WRVJTSU9OUyxcbiAgTkVUV09SS19XQVRDSEVSX1RZUEUsXG59IGZyb20gXCIuL25ldHdvcmstd2F0Y2hlci1zY2hlbWFzXCI7XG5pbXBvcnQge1xuICBBemFwaVJlc291cmNlLFxuICBBemFwaVJlc291cmNlUHJvcHMsXG59IGZyb20gXCIuLi8uLi9jb3JlLWF6dXJlL2xpYi9hemFwaS9hemFwaS1yZXNvdXJjZVwiO1xuaW1wb3J0IHsgQXBpU2NoZW1hIH0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL3ZlcnNpb24tbWFuYWdlci9pbnRlcmZhY2VzL3ZlcnNpb24taW50ZXJmYWNlc1wiO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHRoZSB1bmlmaWVkIEF6dXJlIE5ldHdvcmsgV2F0Y2hlclxuICpcbiAqIEV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHdpdGggTmV0d29yayBXYXRjaGVyIHNwZWNpZmljIHByb3BlcnRpZXMuXG4gKlxuICogSU1QT1JUQU5UOiBBenVyZSBvbmx5IGFsbG93cyBvbmUgTmV0d29yayBXYXRjaGVyIHBlciBzdWJzY3JpcHRpb24gcGVyIHJlZ2lvbi5cbiAqIEF0dGVtcHRpbmcgdG8gY3JlYXRlIG11bHRpcGxlIE5ldHdvcmsgV2F0Y2hlcnMgaW4gdGhlIHNhbWUgcmVnaW9uIHdpbGwgZmFpbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrV2F0Y2hlclByb3BzIGV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHtcbiAgLyoqXG4gICAqIFJlc291cmNlIEdyb3VwIElEIHdoZXJlIHRoZSBOZXR3b3JrIFdhdGNoZXIgd2lsbCBiZSBjcmVhdGVkXG4gICAqXG4gICAqIFRoZSBOZXR3b3JrIFdhdGNoZXIgd2lsbCBiZSBjcmVhdGVkIGFzIGEgY2hpbGQgb2YgdGhpcyByZXNvdXJjZSBncm91cC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgYSBkZWRpY2F0ZWQgcmVzb3VyY2UgZ3JvdXAgZm9yIE5ldHdvcmsgV2F0Y2hlcnMsXG4gICAqIGFzIEF6dXJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBvbmUgbmFtZWQgXCJOZXR3b3JrV2F0Y2hlclJHXCIgd2hlbiBjZXJ0YWluXG4gICAqIG5ldHdvcmsgZmVhdHVyZXMgYXJlIHVzZWQuXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZUdyb3VwSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcmVzb3VyY2UgYm9keSBpbnRlcmZhY2UgZm9yIEF6dXJlIE5ldHdvcmsgV2F0Y2hlciBBUEkgY2FsbHNcbiAqXG4gKiBOZXR3b3JrIFdhdGNoZXIgaXMgYSBzaW1wbGUgcmVzb3VyY2Ugd2l0aCBtaW5pbWFsIHByb3BlcnRpZXMuXG4gKiBUaGUgcHJvcGVydGllcyBibG9jayBpcyB0eXBpY2FsbHkgZW1wdHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya1dhdGNoZXJCb2R5IHtcbiAgcmVhZG9ubHkgcHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbn1cblxuLyoqXG4gKiBVbmlmaWVkIEF6dXJlIE5ldHdvcmsgV2F0Y2hlciBpbXBsZW1lbnRhdGlvblxuICpcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBzaW5nbGUsIHZlcnNpb24tYXdhcmUgaW1wbGVtZW50YXRpb24gdGhhdCBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdmVyc2lvblxuICogcmVzb2x1dGlvbiwgc2NoZW1hIHZhbGlkYXRpb24sIGFuZCBwcm9wZXJ0eSB0cmFuc2Zvcm1hdGlvbiB3aGlsZSBtYWludGFpbmluZyBmdWxsIEpTSUkgY29tcGxpYW5jZS5cbiAqXG4gKiBOZXR3b3JrIFdhdGNoZXIgaXMgYSByZWdpb25hbCBzZXJ2aWNlIHRoYXQgcHJvdmlkZXMgdG9vbHMgdG8gbW9uaXRvciwgZGlhZ25vc2UsIGFuZCBnYWluXG4gKiBpbnNpZ2h0cyBpbnRvIHlvdXIgbmV0d29yayBoZWFsdGggYW5kIHBlcmZvcm1hbmNlIGluIEF6dXJlLiBJdCBzZXJ2ZXMgYXMgdGhlIGFuY2hvciBmb3JcbiAqIE5ldHdvcmsgV2F0Y2hlciBmZWF0dXJlcyBsaWtlIEZsb3cgTG9ncywgQ29ubmVjdGlvbiBNb25pdG9yLCBhbmQgUGFja2V0IENhcHR1cmUuXG4gKlxuICogSU1QT1JUQU5UIENPTlNUUkFJTlQ6IEF6dXJlIG9ubHkgYWxsb3dzIG9uZSBOZXR3b3JrIFdhdGNoZXIgcGVyIHN1YnNjcmlwdGlvbiBwZXIgcmVnaW9uLlxuICogSWYgeW91IG5lZWQgTmV0d29yayBXYXRjaGVyIGZ1bmN0aW9uYWxpdHkgaW4gbXVsdGlwbGUgcmVnaW9ucywgeW91IG11c3QgY3JlYXRlIGEgc2VwYXJhdGVcbiAqIE5ldHdvcmsgV2F0Y2hlciBmb3IgZWFjaCByZWdpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEJhc2ljIE5ldHdvcmsgV2F0Y2hlcjpcbiAqIGNvbnN0IG5ldHdvcmtXYXRjaGVyID0gbmV3IE5ldHdvcmtXYXRjaGVyKHRoaXMsIFwibmV0d29yay13YXRjaGVyXCIsIHtcbiAqICAgbmFtZTogXCJudy1lYXN0dXNcIixcbiAqICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gKiAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBOZXR3b3JrIFdhdGNoZXIgd2l0aCBzcGVjaWZpYyBBUEkgdmVyc2lvbjpcbiAqIGNvbnN0IG5ldHdvcmtXYXRjaGVyID0gbmV3IE5ldHdvcmtXYXRjaGVyKHRoaXMsIFwibmV0d29yay13YXRjaGVyXCIsIHtcbiAqICAgbmFtZTogXCJudy13ZXN0dXMyXCIsXG4gKiAgIGxvY2F0aW9uOiBcIndlc3R1czJcIixcbiAqICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICogICBhcGlWZXJzaW9uOiBcIjIwMjQtMDEtMDFcIixcbiAqICAgdGFnczoge1xuICogICAgIGVudmlyb25tZW50OiBcInByb2R1Y3Rpb25cIixcbiAqICAgfSxcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBOZXR3b3JrIFdhdGNoZXIgZm9yIHVzZSB3aXRoIEZsb3cgTG9nczpcbiAqIGNvbnN0IG5ldHdvcmtXYXRjaGVyID0gbmV3IE5ldHdvcmtXYXRjaGVyKHRoaXMsIFwibmV0d29yay13YXRjaGVyXCIsIHtcbiAqICAgbmFtZTogXCJOZXR3b3JrV2F0Y2hlcl9lYXN0dXNcIixcbiAqICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gKiAgIHJlc291cmNlR3JvdXBJZDogbmV0d29ya1dhdGNoZXJSZy5pZCxcbiAqIH0pO1xuICpcbiAqIC8vIFRoZW4gdXNlIGl0IHdpdGggTlNHIEZsb3cgTG9nc1xuICogY29uc3QgZmxvd0xvZyA9IG5ldyBOc2dGbG93TG9nKHRoaXMsIFwiZmxvdy1sb2dcIiwge1xuICogICBuZXR3b3JrV2F0Y2hlcklkOiBuZXR3b3JrV2F0Y2hlci5pZCxcbiAqICAgLy8gLi4uIG90aGVyIHByb3BlcnRpZXNcbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXR3b3JrV2F0Y2hlciBleHRlbmRzIEF6YXBpUmVzb3VyY2Uge1xuICBzdGF0aWMge1xuICAgIEF6YXBpUmVzb3VyY2UucmVnaXN0ZXJTY2hlbWFzKFxuICAgICAgTkVUV09SS19XQVRDSEVSX1RZUEUsXG4gICAgICBBTExfTkVUV09SS19XQVRDSEVSX1ZFUlNJT05TLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGlucHV0IHByb3BlcnRpZXMgZm9yIHRoaXMgTmV0d29yayBXYXRjaGVyIGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvcHM6IE5ldHdvcmtXYXRjaGVyUHJvcHM7XG5cbiAgLy8gT3V0cHV0IHByb3BlcnRpZXMgZm9yIGVhc3kgYWNjZXNzIGFuZCByZWZlcmVuY2luZ1xuICAvKipcbiAgICogVGVycmFmb3JtIG91dHB1dCBmb3IgdGhlIE5ldHdvcmsgV2F0Y2hlciByZXNvdXJjZSBJRFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlkT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG5cbiAgLyoqXG4gICAqIFRlcnJhZm9ybSBvdXRwdXQgZm9yIHRoZSBOZXR3b3JrIFdhdGNoZXIgbmFtZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hbWVPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcblxuICAvKipcbiAgICogVGVycmFmb3JtIG91dHB1dCBmb3IgdGhlIE5ldHdvcmsgV2F0Y2hlciBsb2NhdGlvblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGxvY2F0aW9uT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG5cbiAgLyoqXG4gICAqIFRlcnJhZm9ybSBvdXRwdXQgZm9yIHRoZSBOZXR3b3JrIFdhdGNoZXIgcHJvdmlzaW9uaW5nIHN0YXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvdmlzaW9uaW5nU3RhdGVPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBBenVyZSBOZXR3b3JrIFdhdGNoZXIgdXNpbmcgdGhlIEF6YXBpUmVzb3VyY2UgZnJhbWV3b3JrXG4gICAqXG4gICAqIFRoZSBjb25zdHJ1Y3RvciBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdmVyc2lvbiByZXNvbHV0aW9uLCBzY2hlbWEgcmVnaXN0cmF0aW9uLFxuICAgKiB2YWxpZGF0aW9uLCBhbmQgcmVzb3VyY2UgY3JlYXRpb24uXG4gICAqXG4gICAqIElNUE9SVEFOVDogQXp1cmUgb25seSBhbGxvd3Mgb25lIE5ldHdvcmsgV2F0Y2hlciBwZXIgc3Vic2NyaXB0aW9uIHBlciByZWdpb24uXG4gICAqIEF0dGVtcHRpbmcgdG8gY3JlYXRlIGEgTmV0d29yayBXYXRjaGVyIGluIGEgcmVnaW9uIHdoZXJlIG9uZSBhbHJlYWR5IGV4aXN0c1xuICAgKiB3aWxsIHJlc3VsdCBpbiBhIGRlcGxveW1lbnQgZXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIGluc3RhbmNlXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgdGhlIE5ldHdvcmsgV2F0Y2hlclxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5ldHdvcmtXYXRjaGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIC8vIENyZWF0ZSBUZXJyYWZvcm0gb3V0cHV0cyBmb3IgZWFzeSBhY2Nlc3MgYW5kIHJlZmVyZW5jaW5nIGZyb20gb3RoZXIgcmVzb3VyY2VzXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgTmV0d29yayBXYXRjaGVyXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5hbWVPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5uYW1lfWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgbmFtZSBvZiB0aGUgTmV0d29yayBXYXRjaGVyXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmxvY2F0aW9uT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImxvY2F0aW9uXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5sb2NhdGlvbn1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIGxvY2F0aW9uIG9mIHRoZSBOZXR3b3JrIFdhdGNoZXJcIixcbiAgICB9KTtcblxuICAgIHRoaXMucHJvdmlzaW9uaW5nU3RhdGVPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KFxuICAgICAgdGhpcyxcbiAgICAgIFwicHJvdmlzaW9uaW5nX3N0YXRlXCIsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLnByb3Zpc2lvbmluZ1N0YXRlfWAsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBwcm92aXNpb25pbmcgc3RhdGUgb2YgdGhlIE5ldHdvcmsgV2F0Y2hlclwiLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gT3ZlcnJpZGUgbG9naWNhbCBJRHNcbiAgICB0aGlzLmlkT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiaWRcIik7XG4gICAgdGhpcy5uYW1lT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibmFtZVwiKTtcbiAgICB0aGlzLmxvY2F0aW9uT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibG9jYXRpb25cIik7XG4gICAgdGhpcy5wcm92aXNpb25pbmdTdGF0ZU91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcInByb3Zpc2lvbmluZ19zdGF0ZVwiKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFUVVJUkVEIEFCU1RSQUNUIE1FVEhPRFMgRlJPTSBBemFwaVJlc291cmNlXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGRlZmF1bHQgQVBJIHZlcnNpb24gdG8gdXNlIHdoZW4gbm8gZXhwbGljaXQgdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAgICogUmV0dXJucyB0aGUgbGF0ZXN0IHN0YWJsZSB2ZXJzaW9uIGFzIHRoZSBkZWZhdWx0XG4gICAqL1xuICBwcm90ZWN0ZWQgZGVmYXVsdFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCIyMDI0LTAxLTAxXCI7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgQXp1cmUgcmVzb3VyY2UgdHlwZSBmb3IgTmV0d29yayBXYXRjaGVyXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE5FVFdPUktfV0FUQ0hFUl9UWVBFO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIEFQSSBzY2hlbWEgZm9yIHRoZSByZXNvbHZlZCB2ZXJzaW9uXG4gICAqIFVzZXMgdGhlIGZyYW1ld29yaydzIHNjaGVtYSByZXNvbHV0aW9uIHRvIGdldCB0aGUgYXBwcm9wcmlhdGUgc2NoZW1hXG4gICAqL1xuICBwcm90ZWN0ZWQgYXBpU2NoZW1hKCk6IEFwaVNjaGVtYSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZVNjaGVtYSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoaXMgcmVzb3VyY2UgdHlwZSByZXF1aXJlcyBhIGxvY2F0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVxdWlyZXNMb2NhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSByZXNvdXJjZSBib2R5IGZvciB0aGUgQXp1cmUgQVBJIGNhbGxcbiAgICpcbiAgICogTmV0d29yayBXYXRjaGVyIGlzIGEgc2ltcGxlIHJlc291cmNlIHdpdGggYW4gZW1wdHkgcHJvcGVydGllcyBibG9jay5cbiAgICogQWxsIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZCBhdCB0aGUgcmVzb3VyY2UgbGV2ZWwgKG5hbWUsIGxvY2F0aW9uLCB0YWdzKS5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVSZXNvdXJjZUJvZHkoX3Byb3BzOiBhbnkpOiBhbnkge1xuICAgIC8vIE5ldHdvcmsgV2F0Y2hlciBoYXMgYW4gZW1wdHkgcHJvcGVydGllcyBibG9ja1xuICAgIC8vIFRoZSByZXNvdXJjZSBpcyBjb25maWd1cmVkIHByaW1hcmlseSB0aHJvdWdoIG5hbWUsIGxvY2F0aW9uLCBhbmQgdGFnc1xuICAgIGNvbnN0IGJvZHk6IGFueSA9IHtcbiAgICAgIHByb3BlcnRpZXM6IHt9LFxuICAgIH07XG5cbiAgICByZXR1cm4gYm9keTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0aGUgcGFyZW50IHJlc291cmNlIElEIGZvciBOZXR3b3JrIFdhdGNoZXJcbiAgICogTmV0d29yayBXYXRjaGVyIGlzIGEgdG9wLWxldmVsIHJlc291cmNlIHdpdGhpbiBhIHJlc291cmNlIGdyb3VwXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyAtIFRoZSByZXNvdXJjZSBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIFRoZSBwYXJlbnQgcmVzb3VyY2UgSUQgKHRoZSByZXNvdXJjZSBncm91cClcbiAgICovXG4gIHByb3RlY3RlZCByZXNvbHZlUGFyZW50SWQocHJvcHM6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChwcm9wcyBhcyBOZXR3b3JrV2F0Y2hlclByb3BzKS5yZXNvdXJjZUdyb3VwSWQ7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Integration test for Azure Network Watcher
3
+ *
4
+ * This test demonstrates basic usage of the NetworkWatcher construct
5
+ * and validates deployment, idempotency, and cleanup.
6
+ *
7
+ * IMPORTANT: Azure only allows one Network Watcher per subscription per region.
8
+ * If a Network Watcher already exists in the test region, this test will fail.
9
+ *
10
+ * Run with: npm run integration:nostream
11
+ */
12
+ import "cdktf/lib/testing/adapters/jest";
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ /**
3
+ * Integration test for Azure Network Watcher
4
+ *
5
+ * This test demonstrates basic usage of the NetworkWatcher construct
6
+ * and validates deployment, idempotency, and cleanup.
7
+ *
8
+ * IMPORTANT: Azure only allows one Network Watcher per subscription per region.
9
+ * If a Network Watcher already exists in the test region, this test will fail.
10
+ *
11
+ * Run with: npm run integration:nostream
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ const cdktf_1 = require("cdktf");
15
+ require("cdktf/lib/testing/adapters/jest");
16
+ const azure_resourcegroup_1 = require("../../azure-resourcegroup");
17
+ const provider_1 = require("../../core-azure/lib/azapi/providers-azapi/provider");
18
+ const testing_1 = require("../../testing");
19
+ const network_watcher_1 = require("../lib/network-watcher");
20
+ /**
21
+ * Example stack demonstrating Network Watcher usage
22
+ *
23
+ * Note: This example creates a dedicated resource group for the Network Watcher.
24
+ * In practice, Azure often uses a resource group named "NetworkWatcherRG" for
25
+ * automatically provisioned Network Watchers.
26
+ */
27
+ class NetworkWatcherExampleStack extends cdktf_1.TerraformStack {
28
+ constructor(scope, id) {
29
+ super(scope, id);
30
+ // Configure AZAPI provider
31
+ new provider_1.AzapiProvider(this, "azapi", {});
32
+ // Create a resource group for Network Watcher
33
+ // Note: Azure typically uses NetworkWatcherRG for auto-provisioned Network Watchers
34
+ // Using northeurope to avoid conflict with existing Network Watchers
35
+ const resourceGroup = new azure_resourcegroup_1.ResourceGroup(this, "example-rg", {
36
+ name: "nw-example-rg",
37
+ location: "northeurope",
38
+ tags: {
39
+ environment: "example",
40
+ purpose: "integration-test",
41
+ },
42
+ });
43
+ // Example 1: Basic Network Watcher
44
+ // Note: Only one Network Watcher per region per subscription is allowed
45
+ new network_watcher_1.NetworkWatcher(this, "basic-network-watcher", {
46
+ name: "nw-basic-example",
47
+ location: resourceGroup.props.location,
48
+ resourceGroupId: resourceGroup.id,
49
+ tags: {
50
+ example: "basic",
51
+ },
52
+ });
53
+ // Example 2: Network Watcher with specific version
54
+ // Using a different construct ID but same region (this is for demonstration only -
55
+ // in practice, you should only have one Network Watcher per region)
56
+ // This example shows version pinning but would fail if deployed alongside Example 1
57
+ // since both use the same region.
58
+ // Uncomment for testing version pinning in a different region:
59
+ /*
60
+ new NetworkWatcher(this, "versioned-network-watcher", {
61
+ name: "nw-versioned-example",
62
+ location: "westus2", // Different region
63
+ resourceGroupId: resourceGroup.id,
64
+ apiVersion: "2024-01-01",
65
+ tags: {
66
+ example: "versioned",
67
+ },
68
+ });
69
+ */
70
+ }
71
+ }
72
+ describe("Network Watcher Integration Test", () => {
73
+ it("should deploy, validate idempotency, and cleanup Network Watcher resources", () => {
74
+ const app = cdktf_1.Testing.app();
75
+ const stack = new NetworkWatcherExampleStack(app, "test-network-watcher");
76
+ const synthesized = cdktf_1.Testing.fullSynth(stack);
77
+ // This will:
78
+ // 1. Run terraform apply to deploy resources
79
+ // 2. Run terraform plan to check idempotency (no changes expected)
80
+ // 3. Run terraform destroy to cleanup resources
81
+ (0, testing_1.TerraformApplyCheckAndDestroy)(synthesized);
82
+ }, 600000); // 10 minute timeout for deployment and cleanup
83
+ });
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay13YXRjaGVyLmludGVnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLW5ldHdvcmt3YXRjaGVyL3Rlc3QvbmV0d29yay13YXRjaGVyLmludGVnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7OztHQVVHOztBQUVILGlDQUFnRDtBQUVoRCwyQ0FBeUM7QUFDekMsbUVBQTBEO0FBQzFELGtGQUFvRjtBQUNwRiwyQ0FBOEQ7QUFDOUQsNERBQXdEO0FBRXhEOzs7Ozs7R0FNRztBQUNILE1BQU0sMEJBQTJCLFNBQVEsc0JBQWM7SUFDckQsWUFBWSxLQUFnQixFQUFFLEVBQVU7UUFDdEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQiwyQkFBMkI7UUFDM0IsSUFBSSx3QkFBYSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFckMsOENBQThDO1FBQzlDLG9GQUFvRjtRQUNwRixxRUFBcUU7UUFDckUsTUFBTSxhQUFhLEdBQUcsSUFBSSxtQ0FBYSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7WUFDMUQsSUFBSSxFQUFFLGVBQWU7WUFDckIsUUFBUSxFQUFFLGFBQWE7WUFDdkIsSUFBSSxFQUFFO2dCQUNKLFdBQVcsRUFBRSxTQUFTO2dCQUN0QixPQUFPLEVBQUUsa0JBQWtCO2FBQzVCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsbUNBQW1DO1FBQ25DLHdFQUF3RTtRQUN4RSxJQUFJLGdDQUFjLENBQUMsSUFBSSxFQUFFLHVCQUF1QixFQUFFO1lBQ2hELElBQUksRUFBRSxrQkFBa0I7WUFDeEIsUUFBUSxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUztZQUN2QyxlQUFlLEVBQUUsYUFBYSxDQUFDLEVBQUU7WUFDakMsSUFBSSxFQUFFO2dCQUNKLE9BQU8sRUFBRSxPQUFPO2FBQ2pCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsbURBQW1EO1FBQ25ELG1GQUFtRjtRQUNuRixvRUFBb0U7UUFDcEUsb0ZBQW9GO1FBQ3BGLGtDQUFrQztRQUNsQywrREFBK0Q7UUFDL0Q7Ozs7Ozs7Ozs7VUFVRTtJQUNKLENBQUM7Q0FDRjtBQUVELFFBQVEsQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7SUFDaEQsRUFBRSxDQUFDLDRFQUE0RSxFQUFFLEdBQUcsRUFBRTtRQUNwRixNQUFNLEdBQUcsR0FBRyxlQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDMUIsTUFBTSxLQUFLLEdBQUcsSUFBSSwwQkFBMEIsQ0FBQyxHQUFHLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUMxRSxNQUFNLFdBQVcsR0FBRyxlQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdDLGFBQWE7UUFDYiw2Q0FBNkM7UUFDN0MsbUVBQW1FO1FBQ25FLGdEQUFnRDtRQUNoRCxJQUFBLHVDQUE2QixFQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzdDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLCtDQUErQztBQUM3RCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSW50ZWdyYXRpb24gdGVzdCBmb3IgQXp1cmUgTmV0d29yayBXYXRjaGVyXG4gKlxuICogVGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyBiYXNpYyB1c2FnZSBvZiB0aGUgTmV0d29ya1dhdGNoZXIgY29uc3RydWN0XG4gKiBhbmQgdmFsaWRhdGVzIGRlcGxveW1lbnQsIGlkZW1wb3RlbmN5LCBhbmQgY2xlYW51cC5cbiAqXG4gKiBJTVBPUlRBTlQ6IEF6dXJlIG9ubHkgYWxsb3dzIG9uZSBOZXR3b3JrIFdhdGNoZXIgcGVyIHN1YnNjcmlwdGlvbiBwZXIgcmVnaW9uLlxuICogSWYgYSBOZXR3b3JrIFdhdGNoZXIgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHRlc3QgcmVnaW9uLCB0aGlzIHRlc3Qgd2lsbCBmYWlsLlxuICpcbiAqIFJ1biB3aXRoOiBucG0gcnVuIGludGVncmF0aW9uOm5vc3RyZWFtXG4gKi9cblxuaW1wb3J0IHsgVGVzdGluZywgVGVycmFmb3JtU3RhY2sgfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgXCJjZGt0Zi9saWIvdGVzdGluZy9hZGFwdGVycy9qZXN0XCI7XG5pbXBvcnQgeyBSZXNvdXJjZUdyb3VwIH0gZnJvbSBcIi4uLy4uL2F6dXJlLXJlc291cmNlZ3JvdXBcIjtcbmltcG9ydCB7IEF6YXBpUHJvdmlkZXIgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvYXphcGkvcHJvdmlkZXJzLWF6YXBpL3Byb3ZpZGVyXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1BcHBseUNoZWNrQW5kRGVzdHJveSB9IGZyb20gXCIuLi8uLi90ZXN0aW5nXCI7XG5pbXBvcnQgeyBOZXR3b3JrV2F0Y2hlciB9IGZyb20gXCIuLi9saWIvbmV0d29yay13YXRjaGVyXCI7XG5cbi8qKlxuICogRXhhbXBsZSBzdGFjayBkZW1vbnN0cmF0aW5nIE5ldHdvcmsgV2F0Y2hlciB1c2FnZVxuICpcbiAqIE5vdGU6IFRoaXMgZXhhbXBsZSBjcmVhdGVzIGEgZGVkaWNhdGVkIHJlc291cmNlIGdyb3VwIGZvciB0aGUgTmV0d29yayBXYXRjaGVyLlxuICogSW4gcHJhY3RpY2UsIEF6dXJlIG9mdGVuIHVzZXMgYSByZXNvdXJjZSBncm91cCBuYW1lZCBcIk5ldHdvcmtXYXRjaGVyUkdcIiBmb3JcbiAqIGF1dG9tYXRpY2FsbHkgcHJvdmlzaW9uZWQgTmV0d29yayBXYXRjaGVycy5cbiAqL1xuY2xhc3MgTmV0d29ya1dhdGNoZXJFeGFtcGxlU3RhY2sgZXh0ZW5kcyBUZXJyYWZvcm1TdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gQ29uZmlndXJlIEFaQVBJIHByb3ZpZGVyXG4gICAgbmV3IEF6YXBpUHJvdmlkZXIodGhpcywgXCJhemFwaVwiLCB7fSk7XG5cbiAgICAvLyBDcmVhdGUgYSByZXNvdXJjZSBncm91cCBmb3IgTmV0d29yayBXYXRjaGVyXG4gICAgLy8gTm90ZTogQXp1cmUgdHlwaWNhbGx5IHVzZXMgTmV0d29ya1dhdGNoZXJSRyBmb3IgYXV0by1wcm92aXNpb25lZCBOZXR3b3JrIFdhdGNoZXJzXG4gICAgLy8gVXNpbmcgbm9ydGhldXJvcGUgdG8gYXZvaWQgY29uZmxpY3Qgd2l0aCBleGlzdGluZyBOZXR3b3JrIFdhdGNoZXJzXG4gICAgY29uc3QgcmVzb3VyY2VHcm91cCA9IG5ldyBSZXNvdXJjZUdyb3VwKHRoaXMsIFwiZXhhbXBsZS1yZ1wiLCB7XG4gICAgICBuYW1lOiBcIm53LWV4YW1wbGUtcmdcIixcbiAgICAgIGxvY2F0aW9uOiBcIm5vcnRoZXVyb3BlXCIsXG4gICAgICB0YWdzOiB7XG4gICAgICAgIGVudmlyb25tZW50OiBcImV4YW1wbGVcIixcbiAgICAgICAgcHVycG9zZTogXCJpbnRlZ3JhdGlvbi10ZXN0XCIsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gRXhhbXBsZSAxOiBCYXNpYyBOZXR3b3JrIFdhdGNoZXJcbiAgICAvLyBOb3RlOiBPbmx5IG9uZSBOZXR3b3JrIFdhdGNoZXIgcGVyIHJlZ2lvbiBwZXIgc3Vic2NyaXB0aW9uIGlzIGFsbG93ZWRcbiAgICBuZXcgTmV0d29ya1dhdGNoZXIodGhpcywgXCJiYXNpYy1uZXR3b3JrLXdhdGNoZXJcIiwge1xuICAgICAgbmFtZTogXCJudy1iYXNpYy1leGFtcGxlXCIsXG4gICAgICBsb2NhdGlvbjogcmVzb3VyY2VHcm91cC5wcm9wcy5sb2NhdGlvbiEsXG4gICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICB0YWdzOiB7XG4gICAgICAgIGV4YW1wbGU6IFwiYmFzaWNcIixcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBFeGFtcGxlIDI6IE5ldHdvcmsgV2F0Y2hlciB3aXRoIHNwZWNpZmljIHZlcnNpb25cbiAgICAvLyBVc2luZyBhIGRpZmZlcmVudCBjb25zdHJ1Y3QgSUQgYnV0IHNhbWUgcmVnaW9uICh0aGlzIGlzIGZvciBkZW1vbnN0cmF0aW9uIG9ubHkgLVxuICAgIC8vIGluIHByYWN0aWNlLCB5b3Ugc2hvdWxkIG9ubHkgaGF2ZSBvbmUgTmV0d29yayBXYXRjaGVyIHBlciByZWdpb24pXG4gICAgLy8gVGhpcyBleGFtcGxlIHNob3dzIHZlcnNpb24gcGlubmluZyBidXQgd291bGQgZmFpbCBpZiBkZXBsb3llZCBhbG9uZ3NpZGUgRXhhbXBsZSAxXG4gICAgLy8gc2luY2UgYm90aCB1c2UgdGhlIHNhbWUgcmVnaW9uLlxuICAgIC8vIFVuY29tbWVudCBmb3IgdGVzdGluZyB2ZXJzaW9uIHBpbm5pbmcgaW4gYSBkaWZmZXJlbnQgcmVnaW9uOlxuICAgIC8qXG4gICAgbmV3IE5ldHdvcmtXYXRjaGVyKHRoaXMsIFwidmVyc2lvbmVkLW5ldHdvcmstd2F0Y2hlclwiLCB7XG4gICAgICBuYW1lOiBcIm53LXZlcnNpb25lZC1leGFtcGxlXCIsXG4gICAgICBsb2NhdGlvbjogXCJ3ZXN0dXMyXCIsICAvLyBEaWZmZXJlbnQgcmVnaW9uXG4gICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICBhcGlWZXJzaW9uOiBcIjIwMjQtMDEtMDFcIixcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgZXhhbXBsZTogXCJ2ZXJzaW9uZWRcIixcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgKi9cbiAgfVxufVxuXG5kZXNjcmliZShcIk5ldHdvcmsgV2F0Y2hlciBJbnRlZ3JhdGlvbiBUZXN0XCIsICgpID0+IHtcbiAgaXQoXCJzaG91bGQgZGVwbG95LCB2YWxpZGF0ZSBpZGVtcG90ZW5jeSwgYW5kIGNsZWFudXAgTmV0d29yayBXYXRjaGVyIHJlc291cmNlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgYXBwID0gVGVzdGluZy5hcHAoKTtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBOZXR3b3JrV2F0Y2hlckV4YW1wbGVTdGFjayhhcHAsIFwidGVzdC1uZXR3b3JrLXdhdGNoZXJcIik7XG4gICAgY29uc3Qgc3ludGhlc2l6ZWQgPSBUZXN0aW5nLmZ1bGxTeW50aChzdGFjayk7XG5cbiAgICAvLyBUaGlzIHdpbGw6XG4gICAgLy8gMS4gUnVuIHRlcnJhZm9ybSBhcHBseSB0byBkZXBsb3kgcmVzb3VyY2VzXG4gICAgLy8gMi4gUnVuIHRlcnJhZm9ybSBwbGFuIHRvIGNoZWNrIGlkZW1wb3RlbmN5IChubyBjaGFuZ2VzIGV4cGVjdGVkKVxuICAgIC8vIDMuIFJ1biB0ZXJyYWZvcm0gZGVzdHJveSB0byBjbGVhbnVwIHJlc291cmNlc1xuICAgIFRlcnJhZm9ybUFwcGx5Q2hlY2tBbmREZXN0cm95KHN5bnRoZXNpemVkKTtcbiAgfSwgNjAwMDAwKTsgLy8gMTAgbWludXRlIHRpbWVvdXQgZm9yIGRlcGxveW1lbnQgYW5kIGNsZWFudXBcbn0pO1xuIl19
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Comprehensive tests for the NetworkWatcher implementation
3
+ *
4
+ * This test suite validates the NetworkWatcher class using the AzapiResource framework.
5
+ * Tests cover automatic version resolution, explicit version pinning, schema validation,
6
+ * property configurations, and resource creation.
7
+ */
8
+ export {};