raindancers-cloudfront 0.0.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 (103) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +176 -0
  3. package/lib/bicep/deploy/deploy.d.ts +46 -0
  4. package/lib/bicep/deploy/deploy.js +123 -0
  5. package/lib/bicep/deploy/index.d.ts +3 -0
  6. package/lib/bicep/deploy/index.js +20 -0
  7. package/lib/bicep/deploy/template.d.ts +75 -0
  8. package/lib/bicep/deploy/template.js +364 -0
  9. package/lib/bicep/deploy/templateBuilder.d.ts +16 -0
  10. package/lib/bicep/deploy/templateBuilder.js +35 -0
  11. package/lib/bicep/index.d.ts +3 -0
  12. package/lib/bicep/index.js +40 -0
  13. package/lib/bicep/patterns/azureAdApplicationFederated.d.ts +58 -0
  14. package/lib/bicep/patterns/azureAdApplicationFederated.js +317 -0
  15. package/lib/bicep/patterns/index.d.ts +1 -0
  16. package/lib/bicep/patterns/index.js +18 -0
  17. package/lib/bicep/resources/azure/appServicePlan.d.ts +11 -0
  18. package/lib/bicep/resources/azure/appServicePlan.js +24 -0
  19. package/lib/bicep/resources/azure/applicationInsights.d.ts +13 -0
  20. package/lib/bicep/resources/azure/applicationInsights.js +27 -0
  21. package/lib/bicep/resources/azure/deploymentScript.d.ts +16 -0
  22. package/lib/bicep/resources/azure/deploymentScript.js +43 -0
  23. package/lib/bicep/resources/azure/functionApp.d.ts +20 -0
  24. package/lib/bicep/resources/azure/functionApp.js +54 -0
  25. package/lib/bicep/resources/azure/index.d.ts +8 -0
  26. package/lib/bicep/resources/azure/index.js +25 -0
  27. package/lib/bicep/resources/azure/logAnalyticsWorkspace.d.ts +11 -0
  28. package/lib/bicep/resources/azure/logAnalyticsWorkspace.js +26 -0
  29. package/lib/bicep/resources/azure/managedIdentity.d.ts +13 -0
  30. package/lib/bicep/resources/azure/managedIdentity.js +24 -0
  31. package/lib/bicep/resources/azure/roleAssignment.d.ts +18 -0
  32. package/lib/bicep/resources/azure/roleAssignment.js +34 -0
  33. package/lib/bicep/resources/azure/storageAccount.d.ts +11 -0
  34. package/lib/bicep/resources/azure/storageAccount.js +28 -0
  35. package/lib/bicep/resources/graph/appRoleAssignment.d.ts +25 -0
  36. package/lib/bicep/resources/graph/appRoleAssignment.js +33 -0
  37. package/lib/bicep/resources/graph/application.d.ts +51 -0
  38. package/lib/bicep/resources/graph/application.js +88 -0
  39. package/lib/bicep/resources/graph/bicepConstruct.d.ts +14 -0
  40. package/lib/bicep/resources/graph/bicepConstruct.js +29 -0
  41. package/lib/bicep/resources/graph/existingServicePrincipal.d.ts +19 -0
  42. package/lib/bicep/resources/graph/existingServicePrincipal.js +26 -0
  43. package/lib/bicep/resources/graph/federatedIdentityCredential.d.ts +29 -0
  44. package/lib/bicep/resources/graph/federatedIdentityCredential.js +31 -0
  45. package/lib/bicep/resources/graph/group.d.ts +26 -0
  46. package/lib/bicep/resources/graph/group.js +31 -0
  47. package/lib/bicep/resources/graph/index.d.ts +8 -0
  48. package/lib/bicep/resources/graph/index.js +25 -0
  49. package/lib/bicep/resources/graph/servicePrincipal.d.ts +22 -0
  50. package/lib/bicep/resources/graph/servicePrincipal.js +27 -0
  51. package/lib/bicep/resources/graph/types/index.d.ts +1 -0
  52. package/lib/bicep/resources/graph/types/index.js +18 -0
  53. package/lib/bicep/resources/graph/types/permissions.d.ts +54 -0
  54. package/lib/bicep/resources/graph/types/permissions.js +73 -0
  55. package/lib/bicep/resources/index.d.ts +2 -0
  56. package/lib/bicep/resources/index.js +39 -0
  57. package/lib/cloudfront/auth/authLambdaFunctions.d.ts +20 -0
  58. package/lib/cloudfront/auth/authLambdaFunctions.js +159 -0
  59. package/lib/cloudfront/auth/authSecretManager.d.ts +19 -0
  60. package/lib/cloudfront/auth/authSecretManager.js +92 -0
  61. package/lib/cloudfront/auth/cognitoAuthSecretManager.d.ts +20 -0
  62. package/lib/cloudfront/auth/cognitoAuthSecretManager.js +93 -0
  63. package/lib/cloudfront/auth/index.d.ts +3 -0
  64. package/lib/cloudfront/auth/index.js +20 -0
  65. package/lib/cloudfront/authSecurityTable.d.ts +10 -0
  66. package/lib/cloudfront/authSecurityTable.js +78 -0
  67. package/lib/cloudfront/cloudfront-functions/function-composer.d.ts +21 -0
  68. package/lib/cloudfront/cloudfront-functions/function-composer.js +132 -0
  69. package/lib/cloudfront/cloudfrontCertificate.d.ts +40 -0
  70. package/lib/cloudfront/cloudfrontCertificate.js +116 -0
  71. package/lib/cloudfront/cloudfrontWebAcl.d.ts +72 -0
  72. package/lib/cloudfront/cloudfrontWebAcl.js +249 -0
  73. package/lib/cloudfront/countries.d.ts +260 -0
  74. package/lib/cloudfront/countries.js +263 -0
  75. package/lib/cloudfront/deployment/viteFrontendDeployment.d.ts +12 -0
  76. package/lib/cloudfront/deployment/viteFrontendDeployment.js +63 -0
  77. package/lib/cloudfront/index.d.ts +11 -0
  78. package/lib/cloudfront/index.js +28 -0
  79. package/lib/cloudfront/jwtDecoder.d.ts +5 -0
  80. package/lib/cloudfront/jwtDecoder.js +57 -0
  81. package/lib/cloudfront/logging/auditLogArchive.d.ts +18 -0
  82. package/lib/cloudfront/logging/auditLogArchive.js +205 -0
  83. package/lib/cloudfront/logging/index.d.ts +1 -0
  84. package/lib/cloudfront/logging/index.js +18 -0
  85. package/lib/cloudfront/oauthEdgeRole.d.ts +9 -0
  86. package/lib/cloudfront/oauthEdgeRole.js +56 -0
  87. package/lib/cloudfront/patterns/authInfrastructure.d.ts +34 -0
  88. package/lib/cloudfront/patterns/authInfrastructure.js +140 -0
  89. package/lib/cloudfront/patterns/cognito-secured-cloudfront.d.ts +36 -0
  90. package/lib/cloudfront/patterns/cognito-secured-cloudfront.js +285 -0
  91. package/lib/cloudfront/patterns/cognitoAuthInfrastructure.d.ts +28 -0
  92. package/lib/cloudfront/patterns/cognitoAuthInfrastructure.js +157 -0
  93. package/lib/cloudfront/patterns/index.d.ts +4 -0
  94. package/lib/cloudfront/patterns/index.js +21 -0
  95. package/lib/cloudfront/patterns/securedCloudFront.d.ts +73 -0
  96. package/lib/cloudfront/patterns/securedCloudFront.js +416 -0
  97. package/lib/cloudfront/ssmCrossRegionWriter.d.ts +9 -0
  98. package/lib/cloudfront/ssmCrossRegionWriter.js +65 -0
  99. package/lib/cloudfront/syncSecretToKvs.d.ts +9 -0
  100. package/lib/cloudfront/syncSecretToKvs.js +89 -0
  101. package/lib/index.d.ts +2 -0
  102. package/lib/index.js +19 -0
  103. package/package.json +105 -0
@@ -0,0 +1,364 @@
1
+ "use strict";
2
+ /**
3
+ * Lightweight Bicep synthesizer for generating Bicep templates from TypeScript.
4
+ * Provides type-safe Bicep generation without requiring external dependencies.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.BicepTemplate = exports.BicepExtension = exports.BicepParameterType = void 0;
8
+ const types_1 = require("../resources/graph/types");
9
+ var BicepParameterType;
10
+ (function (BicepParameterType) {
11
+ BicepParameterType["STRING"] = "string";
12
+ BicepParameterType["INT"] = "int";
13
+ BicepParameterType["BOOL"] = "bool";
14
+ BicepParameterType["OBJECT"] = "object";
15
+ BicepParameterType["ARRAY"] = "array";
16
+ })(BicepParameterType || (exports.BicepParameterType = BicepParameterType = {}));
17
+ var BicepExtension;
18
+ (function (BicepExtension) {
19
+ BicepExtension["MICROSOFT_GRAPH_STABLE"] = "br:mcr.microsoft.com/bicep/extensions/microsoftgraph/v1.0:1.0.0";
20
+ BicepExtension["KUBERNETES_STABLE"] = "Microsoft.KubernetesConfiguration/stable";
21
+ })(BicepExtension || (exports.BicepExtension = BicepExtension = {}));
22
+ class BicepTemplate {
23
+ constructor() {
24
+ this.parameters = new Map();
25
+ this.resources = new Map();
26
+ this.outputs = new Map();
27
+ this.extensions = new Map();
28
+ this.metadata = {};
29
+ }
30
+ addStringParameter(name, description, defaultValue) {
31
+ this.parameters.set(name, { type: BicepParameterType.STRING, description: description, defaultValue: defaultValue });
32
+ }
33
+ addIntParameter(name, description, defaultValue) {
34
+ this.parameters.set(name, { type: BicepParameterType.INT, description: description, defaultValue: defaultValue });
35
+ }
36
+ addBoolParameter(name, description, defaultValue) {
37
+ this.parameters.set(name, { type: BicepParameterType.BOOL, description: description, defaultValue: defaultValue });
38
+ }
39
+ addObjectParameter(name, description, defaultValue) {
40
+ this.parameters.set(name, { type: BicepParameterType.OBJECT, description: description, defaultValue: defaultValue });
41
+ }
42
+ addArrayParameter(name, description, defaultValue) {
43
+ this.parameters.set(name, { type: BicepParameterType.ARRAY, description: description, defaultValue: defaultValue });
44
+ }
45
+ addExtension(extension) {
46
+ this.extensions.set(extension, extension);
47
+ }
48
+ setMetadata(metadata) {
49
+ this.metadata = metadata;
50
+ }
51
+ addResource(name, resource) {
52
+ const pascalCaseName = this.toPascalCase(name);
53
+ this.resources.set(pascalCaseName, resource);
54
+ }
55
+ addStringOutput(name, value) {
56
+ this.outputs.set(name, { type: BicepParameterType.STRING, value: value });
57
+ }
58
+ addIntOutput(name, value) {
59
+ this.outputs.set(name, { type: BicepParameterType.INT, value: value });
60
+ }
61
+ addBoolOutput(name, value) {
62
+ this.outputs.set(name, { type: BicepParameterType.BOOL, value: value });
63
+ }
64
+ addObjectOutput(name, value) {
65
+ this.outputs.set(name, { type: BicepParameterType.OBJECT, value: value });
66
+ }
67
+ addArrayOutput(name, value) {
68
+ this.outputs.set(name, { type: BicepParameterType.ARRAY, value: value });
69
+ }
70
+ synthesize() {
71
+ const lines = [];
72
+ // Add header comment
73
+ lines.push('// This template has been automatically synthesized by bicep-cdk');
74
+ lines.push('');
75
+ // Metadata
76
+ lines.push('metadata generator = {');
77
+ lines.push(' name: \'bicep-cdk\'');
78
+ lines.push(' version: \'1.0.0\'');
79
+ lines.push('}');
80
+ lines.push('');
81
+ if (this.metadata.name || this.metadata.description) {
82
+ lines.push('metadata template = {');
83
+ if (this.metadata.name) {
84
+ lines.push(` name: '${this.metadata.name}'`);
85
+ }
86
+ if (this.metadata.description) {
87
+ lines.push(` description: '${this.metadata.description}'`);
88
+ }
89
+ lines.push('}');
90
+ lines.push('');
91
+ }
92
+ if (this.metadata.cloudformation?.stackArn) {
93
+ lines.push('metadata cloudformation = {');
94
+ lines.push(` stackArn: '${this.metadata.cloudformation.stackArn}'`);
95
+ lines.push('}');
96
+ lines.push('');
97
+ }
98
+ // Extensions
99
+ for (const [name] of this.extensions) {
100
+ lines.push(`extension '${name}'`);
101
+ }
102
+ if (this.extensions.size > 0) {
103
+ lines.push('');
104
+ }
105
+ // Parameters
106
+ for (const [name, param] of this.parameters) {
107
+ if (param.description) {
108
+ lines.push(`@description('${param.description}')`);
109
+ }
110
+ if (param.allowedValues) {
111
+ lines.push('@allowed([');
112
+ param.allowedValues.forEach(v => lines.push(` '${v}'`));
113
+ lines.push('])');
114
+ }
115
+ const defaultVal = param.defaultValue !== undefined
116
+ ? ` = ${this.formatValue(param.defaultValue)}`
117
+ : '';
118
+ lines.push(`param ${name} ${param.type}${defaultVal}`);
119
+ lines.push('');
120
+ }
121
+ // Resources grouped by section
122
+ const resourcesBySection = new Map();
123
+ for (const [name, resource] of this.resources) {
124
+ const section = this.getResourceSection(resource.type);
125
+ if (!resourcesBySection.has(section)) {
126
+ resourcesBySection.set(section, []);
127
+ }
128
+ resourcesBySection.get(section).push([name, resource]);
129
+ }
130
+ // Output resources grouped by section
131
+ for (const [section, resources] of resourcesBySection) {
132
+ lines.push(...this.formatSectionHeader(section));
133
+ lines.push('');
134
+ for (const [name, resource] of resources) {
135
+ if (resource.linterSuppressions && resource.linterSuppressions.length > 0) {
136
+ resource.linterSuppressions.forEach(code => {
137
+ lines.push(`#disable-next-line ${code}`);
138
+ });
139
+ }
140
+ if (resource.comment) {
141
+ lines.push(`// ${resource.comment}`);
142
+ }
143
+ const resourceType = resource.type.includes('@') ? resource.type : `${resource.type}@${resource.apiVersion}`;
144
+ const resourceDeclaration = resource.existing ? `resource ${name} '${resourceType}' existing = {` : `resource ${name} '${resourceType}' = {`;
145
+ lines.push(resourceDeclaration);
146
+ const knownProps = ['type', 'apiVersion', 'dependsOn', 'comment', 'linterSuppressions', 'propertySuppressions', 'existing'];
147
+ for (const [key, value] of Object.entries(resource)) {
148
+ if (knownProps.includes(key))
149
+ continue;
150
+ if (value === undefined)
151
+ continue;
152
+ if (this.isEmptyValue(value))
153
+ continue;
154
+ const camelKey = this.toCamelCase(key);
155
+ // Add property-level linter suppressions
156
+ if (resource.propertySuppressions && resource.propertySuppressions[key]) {
157
+ resource.propertySuppressions[key].forEach(code => {
158
+ lines.push(` #disable-next-line ${code}`);
159
+ });
160
+ }
161
+ if (key === 'properties' && value) {
162
+ lines.push(` ${camelKey}: ${this.formatValue(value, 2)}`);
163
+ }
164
+ else if (key === 'kind') {
165
+ lines.push(` ${camelKey}: '${value}'`);
166
+ }
167
+ else if (key === 'location') {
168
+ lines.push(` ${camelKey}: ${value}`);
169
+ }
170
+ else {
171
+ lines.push(` ${camelKey}: ${this.formatValue(value, 2)}`);
172
+ }
173
+ }
174
+ if (resource.dependsOn && resource.dependsOn.length > 0) {
175
+ lines.push(' dependsOn: [');
176
+ resource.dependsOn.forEach(dep => lines.push(` ${dep}`));
177
+ lines.push(' ]');
178
+ }
179
+ lines.push('}');
180
+ lines.push('');
181
+ }
182
+ lines.push('');
183
+ }
184
+ // Outputs
185
+ if (this.outputs.size > 0) {
186
+ lines.push(...this.formatSectionHeader('Outputs'));
187
+ lines.push('');
188
+ }
189
+ for (const [name, output] of this.outputs) {
190
+ lines.push(`output ${name} ${output.type} = ${output.value}`);
191
+ }
192
+ return lines.join('\n');
193
+ }
194
+ formatValue(value, indent = 0) {
195
+ if (typeof value === 'string') {
196
+ // Check if it's already a quoted Bicep expression with interpolation
197
+ if (value.startsWith("'") && value.endsWith("'")) {
198
+ return value;
199
+ }
200
+ // Check if it's a multi-line script (contains newlines)
201
+ if (value.includes('\n')) {
202
+ // Multi-line string literal
203
+ return `'''\n${value}\n'''`;
204
+ }
205
+ // Check if it's a Bicep function call (e.g., guid(...), tenant(), resourceGroup().location)
206
+ if (/^[a-zA-Z][a-zA-Z0-9]*\(.*\)/.test(value)) {
207
+ return value;
208
+ }
209
+ // Check if it's a nested resource name pattern (e.g., ResourceName.uniqueName/childName)
210
+ if (/^[a-zA-Z][a-zA-Z0-9]*\.[a-zA-Z][a-zA-Z0-9]*\/[^']+$/.test(value)) {
211
+ const [parentRef, childName] = value.split('/');
212
+ return `'\${${parentRef}}/${childName}'`;
213
+ }
214
+ // Check if it's a Bicep property reference (e.g., resourceName.property, resourceName.properties.subProperty)
215
+ if (/^[a-zA-Z][a-zA-Z0-9]*(?:\.[a-zA-Z][a-zA-Z0-9]*)+$/.test(value)) {
216
+ return value;
217
+ }
218
+ // Check if it's a Bicep parameter or simple identifier (e.g., parameterName, location)
219
+ if (/^[a-zA-Z][a-zA-Z0-9]*$/.test(value) && this.parameters.has(value)) {
220
+ return value;
221
+ }
222
+ // Check if it's a known Bicep expression
223
+ if (['location', 'utcValue', 'appName', 'redirectUri', 'signInAudience'].includes(value)) {
224
+ return value;
225
+ }
226
+ // Check if it contains unresolved CDK tokens
227
+ if (value.includes('Token[')) {
228
+ return `'${value}'`;
229
+ }
230
+ // Check if it's a GUID and add comment if known
231
+ if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(value)) {
232
+ const comment = this.getGuidComment(value);
233
+ return comment ? `'${value}' // ${comment}` : `'${value}'`;
234
+ }
235
+ // Check if string contains single quotes AND looks like a shell script - use multi-line string
236
+ if (value.includes("'") && (value.includes('az ') || value.includes('echo ') || value.length > 100)) {
237
+ return `'''${value}'''`;
238
+ }
239
+ return `'${value}'`;
240
+ }
241
+ if (typeof value === 'number' || typeof value === 'boolean') {
242
+ return String(value);
243
+ }
244
+ if (Array.isArray(value)) {
245
+ if (value.length === 0) {
246
+ return '[]';
247
+ }
248
+ const itemIndent = ' '.repeat(indent + 2);
249
+ const closeIndent = ' '.repeat(indent);
250
+ const items = value.map(v => `${itemIndent}${this.formatValue(v, indent + 2)}`).join('\n');
251
+ return `[\n${items}\n${closeIndent}]`;
252
+ }
253
+ if (typeof value === 'object') {
254
+ return this.formatObject(value, indent);
255
+ }
256
+ return String(value);
257
+ }
258
+ formatObject(obj, indent) {
259
+ const propIndent = ' '.repeat(indent + 2);
260
+ const closeIndent = ' '.repeat(indent);
261
+ const lines = ['{'];
262
+ for (const [key, value] of Object.entries(obj)) {
263
+ // Special handling for Bicep interpolated keys (e.g., '${Managedidentity.id}' or ${Managedidentity.id})
264
+ if ((key.startsWith("'${") && key.endsWith("}'"))) {
265
+ lines.push(`${propIndent}${key}: ${this.formatValue(value, indent + 2)}`);
266
+ continue;
267
+ }
268
+ if (key.startsWith('${') && key.endsWith('}')) {
269
+ lines.push(`${propIndent}'${key}': ${this.formatValue(value, indent + 2)}`);
270
+ continue;
271
+ }
272
+ if (this.isEmptyValue(value))
273
+ continue;
274
+ const camelKey = (key.includes('_') || key.charAt(0) === key.charAt(0).toUpperCase()) ? key : this.toCamelCase(key);
275
+ lines.push(`${propIndent}${camelKey}: ${this.formatValue(value, indent + 2)}`);
276
+ }
277
+ lines.push(`${closeIndent}}`);
278
+ return lines.join('\n');
279
+ }
280
+ isEmptyValue(value) {
281
+ if (value === null || value === undefined)
282
+ return true;
283
+ if (value === '')
284
+ return true;
285
+ if (Array.isArray(value) && value.length === 0)
286
+ return true;
287
+ if (typeof value === 'object' && !Array.isArray(value) && Object.keys(value).length === 0)
288
+ return true;
289
+ return false;
290
+ }
291
+ toCamelCase(str) {
292
+ return str.charAt(0).toLowerCase() + str.slice(1);
293
+ }
294
+ toPascalCase(str) {
295
+ return str
296
+ .split(/[-_\s]+/)
297
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
298
+ .join('')
299
+ .replace(/[^a-zA-Z0-9]/g, '')
300
+ .replace(/^[0-9]/, '_$&');
301
+ }
302
+ getGuidComment(guid) {
303
+ const lowerGuid = guid.toLowerCase();
304
+ if (lowerGuid === types_1.ResourceAppId.MICROSOFT_GRAPH.toLowerCase()) {
305
+ return 'Microsoft Graph';
306
+ }
307
+ const permissionMap = {
308
+ [types_1.MicrosoftGraphPermission.USER_READ]: 'User.Read',
309
+ [types_1.MicrosoftGraphPermission.USER_READ_WRITE]: 'User.ReadWrite',
310
+ [types_1.MicrosoftGraphPermission.USER_READ_ALL]: 'User.Read.All',
311
+ [types_1.MicrosoftGraphPermission.USER_READ_WRITE_ALL]: 'User.ReadWrite.All',
312
+ [types_1.MicrosoftGraphPermission.DIRECTORY_READ_ALL]: 'Directory.Read.All',
313
+ [types_1.MicrosoftGraphPermission.DIRECTORY_READ_WRITE_ALL]: 'Directory.ReadWrite.All',
314
+ [types_1.MicrosoftGraphPermission.GROUP_READ_ALL]: 'Group.Read.All',
315
+ [types_1.MicrosoftGraphPermission.GROUP_READ_WRITE_ALL]: 'Group.ReadWrite.All',
316
+ [types_1.MicrosoftGraphPermission.MAIL_READ]: 'Mail.Read',
317
+ [types_1.MicrosoftGraphPermission.MAIL_READ_WRITE]: 'Mail.ReadWrite',
318
+ [types_1.MicrosoftGraphPermission.MAIL_SEND]: 'Mail.Send',
319
+ [types_1.MicrosoftGraphPermission.CALENDARS_READ]: 'Calendars.Read',
320
+ [types_1.MicrosoftGraphPermission.CALENDARS_READ_WRITE]: 'Calendars.ReadWrite',
321
+ [types_1.MicrosoftGraphPermission.FILES_READ]: 'Files.Read',
322
+ [types_1.MicrosoftGraphPermission.FILES_READ_WRITE]: 'Files.ReadWrite',
323
+ [types_1.MicrosoftGraphPermission.FILES_READ_ALL]: 'Files.Read.All',
324
+ [types_1.MicrosoftGraphPermission.FILES_READ_WRITE_ALL]: 'Files.ReadWrite.All',
325
+ };
326
+ for (const [permGuid, name] of Object.entries(permissionMap)) {
327
+ if (permGuid.toLowerCase() === lowerGuid) {
328
+ return name;
329
+ }
330
+ }
331
+ return null;
332
+ }
333
+ getResourceSection(resourceType) {
334
+ if (resourceType.includes('Microsoft.Graph/groups'))
335
+ return 'Azure AD Groups';
336
+ if (resourceType.includes('Microsoft.Graph/appRoleAssignedTo'))
337
+ return 'Group Role Assignments';
338
+ if (resourceType.includes('Microsoft.Graph/applications/federatedIdentityCredentials'))
339
+ return 'Federated Identity Credentials';
340
+ if (resourceType.includes('Microsoft.Graph/applications'))
341
+ return 'Azure AD Application';
342
+ if (resourceType.includes('Microsoft.Graph/servicePrincipals'))
343
+ return 'Service Principal';
344
+ if (resourceType.includes('Microsoft.Compute'))
345
+ return 'Compute Resources';
346
+ if (resourceType.includes('Microsoft.Network'))
347
+ return 'Network Resources';
348
+ if (resourceType.includes('Microsoft.Storage'))
349
+ return 'Storage Resources';
350
+ return 'Resources';
351
+ }
352
+ formatSectionHeader(title) {
353
+ const border = '// ========================================================================';
354
+ const totalWidth = border.length;
355
+ const contentWidth = totalWidth - 5;
356
+ const padding = contentWidth - title.length;
357
+ const leftPad = Math.floor(padding / 2);
358
+ const rightPad = padding - leftPad;
359
+ const centeredTitle = `// =${' '.repeat(leftPad)}${title}${' '.repeat(rightPad)}=`;
360
+ return [border, centeredTitle, border];
361
+ }
362
+ }
363
+ exports.BicepTemplate = BicepTemplate;
364
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmljZXAvZGVwbG95L3RlbXBsYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7OztBQUVILG9EQUFtRjtBQUVuRixJQUFZLGtCQU1YO0FBTkQsV0FBWSxrQkFBa0I7SUFDNUIsdUNBQWlCLENBQUE7SUFDakIsaUNBQVcsQ0FBQTtJQUNYLG1DQUFhLENBQUE7SUFDYix1Q0FBaUIsQ0FBQTtJQUNqQixxQ0FBZSxDQUFBO0FBQ2pCLENBQUMsRUFOVyxrQkFBa0Isa0NBQWxCLGtCQUFrQixRQU03QjtBQUVELElBQVksY0FHWDtBQUhELFdBQVksY0FBYztJQUN4Qiw0R0FBMEYsQ0FBQTtJQUMxRixnRkFBOEQsQ0FBQTtBQUNoRSxDQUFDLEVBSFcsY0FBYyw4QkFBZCxjQUFjLFFBR3pCO0FBcUNELE1BQWEsYUFBYTtJQUExQjtRQUNVLGVBQVUsR0FBZ0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNwRCxjQUFTLEdBQStCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDbEQsWUFBTyxHQUE2QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzlDLGVBQVUsR0FBd0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUM1QyxhQUFRLEdBQWtCLEVBQUUsQ0FBQztJQXVXdkMsQ0FBQztJQXJXQyxrQkFBa0IsQ0FBQyxJQUFZLEVBQUUsV0FBb0IsRUFBRSxZQUFxQjtRQUMxRSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDdkgsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFZLEVBQUUsV0FBb0IsRUFBRSxZQUFxQjtRQUN2RSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVB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LEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEMsTUFBTSxRQUFRLEdBQUcsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUNuQyxNQUFNLGFBQWEsR0FBRyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztRQUNuRixPQUFPLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6QyxDQUFDO0NBQ0Y7QUE1V0Qsc0NBNFdDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMaWdodHdlaWdodCBCaWNlcCBzeW50aGVzaXplciBmb3IgZ2VuZXJhdGluZyBCaWNlcCB0ZW1wbGF0ZXMgZnJvbSBUeXBlU2NyaXB0LlxuICogUHJvdmlkZXMgdHlwZS1zYWZlIEJpY2VwIGdlbmVyYXRpb24gd2l0aG91dCByZXF1aXJpbmcgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLlxuICovXG5cbmltcG9ydCB7IFJlc291cmNlQXBwSWQsIE1pY3Jvc29mdEdyYXBoUGVybWlzc2lvbiB9IGZyb20gJy4uL3Jlc291cmNlcy9ncmFwaC90eXBlcyc7XG5cbmV4cG9ydCBlbnVtIEJpY2VwUGFyYW1ldGVyVHlwZSB7XG4gIFNUUklORyA9ICdzdHJpbmcnLFxuICBJTlQgPSAnaW50JyxcbiAgQk9PTCA9ICdib29sJyxcbiAgT0JKRUNUID0gJ29iamVjdCcsXG4gIEFSUkFZID0gJ2FycmF5Jyxcbn1cblxuZXhwb3J0IGVudW0gQmljZXBFeHRlbnNpb24ge1xuICBNSUNST1NPRlRfR1JBUEhfU1RBQkxFID0gJ2JyOm1jci5taWNyb3NvZnQuY29tL2JpY2VwL2V4dGVuc2lvbnMvbWljcm9zb2Z0Z3JhcGgvdjEuMDoxLjAuMCcsXG4gIEtVQkVSTkVURVNfU1RBQkxFID0gJ01pY3Jvc29mdC5LdWJlcm5ldGVzQ29uZmlndXJhdGlvbi9zdGFibGUnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJpY2VwUGFyYW1ldGVyIHtcbiAgdHlwZTogQmljZXBQYXJhbWV0ZXJUeXBlO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZGVmYXVsdFZhbHVlPzogYW55O1xuICBhbGxvd2VkVmFsdWVzPzogYW55W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmljZXBSZXNvdXJjZSB7XG4gIHR5cGU6IHN0cmluZztcbiAgYXBpVmVyc2lvbjogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBraW5kPzogc3RyaW5nO1xuICBsb2NhdGlvbj86IHN0cmluZztcbiAgcHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlcGVuZHNPbj86IHN0cmluZ1tdO1xuICBjb21tZW50Pzogc3RyaW5nO1xuICBsaW50ZXJTdXBwcmVzc2lvbnM/OiBzdHJpbmdbXTsgLy8gQmljZXAgbGludGVyIHJ1bGUgY29kZXMgdG8gc3VwcHJlc3MgZm9yIHRoZSByZXNvdXJjZSBkZWNsYXJhdGlvblxuICBwcm9wZXJ0eVN1cHByZXNzaW9ucz86IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjsgLy8gUHJvcGVydHkgbmFtZSAtPiBsaW50ZXIgY29kZXMgdG8gc3VwcHJlc3NcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJpY2VwT3V0cHV0IHtcbiAgdHlwZTogQmljZXBQYXJhbWV0ZXJUeXBlO1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJpY2VwTWV0YWRhdGEge1xuICBuYW1lPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgY2xvdWRmb3JtYXRpb24/OiB7XG4gICAgc3RhY2tBcm4/OiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBCaWNlcFRlbXBsYXRlIHtcbiAgcHJpdmF0ZSBwYXJhbWV0ZXJzOiBNYXA8c3RyaW5nLCBCaWNlcFBhcmFtZXRlcj4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgcmVzb3VyY2VzOiBNYXA8c3RyaW5nLCBCaWNlcFJlc291cmNlPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBvdXRwdXRzOiBNYXA8c3RyaW5nLCBCaWNlcE91dHB1dD4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgZXh0ZW5zaW9uczogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBtZXRhZGF0YTogQmljZXBNZXRhZGF0YSA9IHt9O1xuXG4gIGFkZFN0cmluZ1BhcmFtZXRlcihuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uPzogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnBhcmFtZXRlcnMuc2V0KG5hbWUsIHsgdHlwZTogQmljZXBQYXJhbWV0ZXJUeXBlLlNUUklORywgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLCBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSB9KTtcbiAgfVxuXG4gIGFkZEludFBhcmFtZXRlcihuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uPzogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnBhcmFtZXRlcnMuc2V0KG5hbWUsIHsgdHlwZTogQmljZXBQYXJhbWV0ZXJUeXBlLklOVCwgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLCBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSB9KTtcbiAgfVxuXG4gIGFkZEJvb2xQYXJhbWV0ZXIobmFtZTogc3RyaW5nLCBkZXNjcmlwdGlvbj86IHN0cmluZywgZGVmYXVsdFZhbHVlPzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMucGFyYW1ldGVycy5zZXQobmFtZSwgeyB0eXBlOiBCaWNlcFBhcmFtZXRlclR5cGUuQk9PTCwgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLCBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSB9KTtcbiAgfVxuXG4gIGFkZE9iamVjdFBhcmFtZXRlcihuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uPzogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5wYXJhbWV0ZXJzLnNldChuYW1lLCB7IHR5cGU6IEJpY2VwUGFyYW1ldGVyVHlwZS5PQkpFQ1QsIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiwgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUgfSk7XG4gIH1cblxuICBhZGRBcnJheVBhcmFtZXRlcihuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uPzogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMucGFyYW1ldGVycy5zZXQobmFtZSwgeyB0eXBlOiBCaWNlcFBhcmFtZXRlclR5cGUuQVJSQVksIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiwgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUgfSk7XG4gIH1cblxuICBhZGRFeHRlbnNpb24oZXh0ZW5zaW9uOiBCaWNlcEV4dGVuc2lvbik6IHZvaWQge1xuICAgIHRoaXMuZXh0ZW5zaW9ucy5zZXQoZXh0ZW5zaW9uLCBleHRlbnNpb24pO1xuICB9XG5cbiAgc2V0TWV0YWRhdGEobWV0YWRhdGE6IEJpY2VwTWV0YWRhdGEpOiB2b2lkIHtcbiAgICB0aGlzLm1ldGFkYXRhID0gbWV0YWRhdGE7XG4gIH1cblxuICBhZGRSZXNvdXJjZShuYW1lOiBzdHJpbmcsIHJlc291cmNlOiBCaWNlcFJlc291cmNlKTogdm9pZCB7XG4gICAgY29uc3QgcGFzY2FsQ2FzZU5hbWUgPSB0aGlzLnRvUGFzY2FsQ2FzZShuYW1lKTtcbiAgICB0aGlzLnJlc291cmNlcy5zZXQocGFzY2FsQ2FzZU5hbWUsIHJlc291cmNlKTtcbiAgfVxuXG4gIGFkZFN0cmluZ091dHB1dChuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm91dHB1dHMuc2V0KG5hbWUsIHsgdHlwZTogQmljZXBQYXJhbWV0ZXJUeXBlLlNUUklORywgdmFsdWU6IHZhbHVlIH0pO1xuICB9XG5cbiAgYWRkSW50T3V0cHV0KG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMub3V0cHV0cy5zZXQobmFtZSwgeyB0eXBlOiBCaWNlcFBhcmFtZXRlclR5cGUuSU5ULCB2YWx1ZTogdmFsdWUgfSk7XG4gIH1cblxuICBhZGRCb29sT3V0cHV0KG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMub3V0cHV0cy5zZXQobmFtZSwgeyB0eXBlOiBCaWNlcFBhcmFtZXRlclR5cGUuQk9PTCwgdmFsdWU6IHZhbHVlIH0pO1xuICB9XG5cbiAgYWRkT2JqZWN0T3V0cHV0KG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMub3V0cHV0cy5zZXQobmFtZSwgeyB0eXBlOiBCaWNlcFBhcmFtZXRlclR5cGUuT0JKRUNULCB2YWx1ZTogdmFsdWUgfSk7XG4gIH1cblxuICBhZGRBcnJheU91dHB1dChuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm91dHB1dHMuc2V0KG5hbWUsIHsgdHlwZTogQmljZXBQYXJhbWV0ZXJUeXBlLkFSUkFZLCB2YWx1ZTogdmFsdWUgfSk7XG4gIH1cblxuICBzeW50aGVzaXplKCk6IHN0cmluZyB7XG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBBZGQgaGVhZGVyIGNvbW1lbnRcbiAgICBsaW5lcy5wdXNoKCcvLyBUaGlzIHRlbXBsYXRlIGhhcyBiZWVuIGF1dG9tYXRpY2FsbHkgc3ludGhlc2l6ZWQgYnkgYmljZXAtY2RrJyk7XG4gICAgbGluZXMucHVzaCgnJyk7XG5cbiAgICAvLyBNZXRhZGF0YVxuICAgIGxpbmVzLnB1c2goJ21ldGFkYXRhIGdlbmVyYXRvciA9IHsnKTtcbiAgICBsaW5lcy5wdXNoKCcgIG5hbWU6IFxcJ2JpY2VwLWNka1xcJycpO1xuICAgIGxpbmVzLnB1c2goJyAgdmVyc2lvbjogXFwnMS4wLjBcXCcnKTtcbiAgICBsaW5lcy5wdXNoKCd9Jyk7XG4gICAgbGluZXMucHVzaCgnJyk7XG5cbiAgICBpZiAodGhpcy5tZXRhZGF0YS5uYW1lIHx8IHRoaXMubWV0YWRhdGEuZGVzY3JpcHRpb24pIHtcbiAgICAgIGxpbmVzLnB1c2goJ21ldGFkYXRhIHRlbXBsYXRlID0geycpO1xuICAgICAgaWYgKHRoaXMubWV0YWRhdGEubmFtZSkge1xuICAgICAgICBsaW5lcy5wdXNoKGAgIG5hbWU6ICcke3RoaXMubWV0YWRhdGEubmFtZX0nYCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5tZXRhZGF0YS5kZXNjcmlwdGlvbikge1xuICAgICAgICBsaW5lcy5wdXNoKGAgIGRlc2NyaXB0aW9uOiAnJHt0aGlzLm1ldGFkYXRhLmRlc2NyaXB0aW9ufSdgKTtcbiAgICAgIH1cbiAgICAgIGxpbmVzLnB1c2goJ30nKTtcbiAgICAgIGxpbmVzLnB1c2goJycpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1ldGFkYXRhLmNsb3VkZm9ybWF0aW9uPy5zdGFja0Fybikge1xuICAgICAgbGluZXMucHVzaCgnbWV0YWRhdGEgY2xvdWRmb3JtYXRpb24gPSB7Jyk7XG4gICAgICBsaW5lcy5wdXNoKGAgIHN0YWNrQXJuOiAnJHt0aGlzLm1ldGFkYXRhLmNsb3VkZm9ybWF0aW9uLnN0YWNrQXJufSdgKTtcbiAgICAgIGxpbmVzLnB1c2goJ30nKTtcbiAgICAgIGxpbmVzLnB1c2goJycpO1xuICAgIH1cblxuICAgIC8vIEV4dGVuc2lvbnNcbiAgICBmb3IgKGNvbnN0IFtuYW1lXSBvZiB0aGlzLmV4dGVuc2lvbnMpIHtcbiAgICAgIGxpbmVzLnB1c2goYGV4dGVuc2lvbiAnJHtuYW1lfSdgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZXh0ZW5zaW9ucy5zaXplID4gMCkge1xuICAgICAgbGluZXMucHVzaCgnJyk7XG4gICAgfVxuXG4gICAgLy8gUGFyYW1ldGVyc1xuICAgIGZvciAoY29uc3QgW25hbWUsIHBhcmFtXSBvZiB0aGlzLnBhcmFtZXRlcnMpIHtcbiAgICAgIGlmIChwYXJhbS5kZXNjcmlwdGlvbikge1xuICAgICAgICBsaW5lcy5wdXNoKGBAZGVzY3JpcHRpb24oJyR7cGFyYW0uZGVzY3JpcHRpb259JylgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbS5hbGxvd2VkVmFsdWVzKSB7XG4gICAgICAgIGxpbmVzLnB1c2goJ0BhbGxvd2VkKFsnKTtcbiAgICAgICAgcGFyYW0uYWxsb3dlZFZhbHVlcy5mb3JFYWNoKHYgPT4gbGluZXMucHVzaChgICAnJHt2fSdgKSk7XG4gICAgICAgIGxpbmVzLnB1c2goJ10pJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBkZWZhdWx0VmFsID0gcGFyYW0uZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBgID0gJHt0aGlzLmZvcm1hdFZhbHVlKHBhcmFtLmRlZmF1bHRWYWx1ZSl9YFxuICAgICAgICA6ICcnO1xuICAgICAgbGluZXMucHVzaChgcGFyYW0gJHtuYW1lfSAke3BhcmFtLnR5cGV9JHtkZWZhdWx0VmFsfWApO1xuICAgICAgbGluZXMucHVzaCgnJyk7XG4gICAgfVxuXG4gICAgLy8gUmVzb3VyY2VzIGdyb3VwZWQgYnkgc2VjdGlvblxuICAgIGNvbnN0IHJlc291cmNlc0J5U2VjdGlvbiA9IG5ldyBNYXA8c3RyaW5nLCBBcnJheTxbc3RyaW5nLCBCaWNlcFJlc291cmNlXT4+KCk7XG5cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCByZXNvdXJjZV0gb2YgdGhpcy5yZXNvdXJjZXMpIHtcbiAgICAgIGNvbnN0IHNlY3Rpb24gPSB0aGlzLmdldFJlc291cmNlU2VjdGlvbihyZXNvdXJjZS50eXBlKTtcbiAgICAgIGlmICghcmVzb3VyY2VzQnlTZWN0aW9uLmhhcyhzZWN0aW9uKSkge1xuICAgICAgICByZXNvdXJjZXNCeVNlY3Rpb24uc2V0KHNlY3Rpb24sIFtdKTtcbiAgICAgIH1cbiAgICAgIHJlc291cmNlc0J5U2VjdGlvbi5nZXQoc2VjdGlvbikhLnB1c2goW25hbWUsIHJlc291cmNlXSk7XG4gICAgfVxuXG4gICAgLy8gT3V0cHV0IHJlc291cmNlcyBncm91cGVkIGJ5IHNlY3Rpb25cbiAgICBmb3IgKGNvbnN0IFtzZWN0aW9uLCByZXNvdXJjZXNdIG9mIHJlc291cmNlc0J5U2VjdGlvbikge1xuICAgICAgbGluZXMucHVzaCguLi50aGlzLmZvcm1hdFNlY3Rpb25IZWFkZXIoc2VjdGlvbikpO1xuICAgICAgbGluZXMucHVzaCgnJyk7XG5cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIHJlc291cmNlXSBvZiByZXNvdXJjZXMpIHtcbiAgICAgICAgaWYgKHJlc291cmNlLmxpbnRlclN1cHByZXNzaW9ucyAmJiByZXNvdXJjZS5saW50ZXJTdXBwcmVzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlc291cmNlLmxpbnRlclN1cHByZXNzaW9ucy5mb3JFYWNoKGNvZGUgPT4ge1xuICAgICAgICAgICAgbGluZXMucHVzaChgI2Rpc2FibGUtbmV4dC1saW5lICR7Y29kZX1gKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzb3VyY2UuY29tbWVudCkge1xuICAgICAgICAgIGxpbmVzLnB1c2goYC8vICR7cmVzb3VyY2UuY29tbWVudH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc291cmNlVHlwZSA9IHJlc291cmNlLnR5cGUuaW5jbHVkZXMoJ0AnKSA/IHJlc291cmNlLnR5cGUgOiBgJHtyZXNvdXJjZS50eXBlfUAke3Jlc291cmNlLmFwaVZlcnNpb259YDtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VEZWNsYXJhdGlvbiA9IHJlc291cmNlLmV4aXN0aW5nID8gYHJlc291cmNlICR7bmFtZX0gJyR7cmVzb3VyY2VUeXBlfScgZXhpc3RpbmcgPSB7YCA6IGByZXNvdXJjZSAke25hbWV9ICcke3Jlc291cmNlVHlwZX0nID0ge2A7XG4gICAgICAgIGxpbmVzLnB1c2gocmVzb3VyY2VEZWNsYXJhdGlvbik7XG5cbiAgICAgICAgY29uc3Qga25vd25Qcm9wcyA9IFsndHlwZScsICdhcGlWZXJzaW9uJywgJ2RlcGVuZHNPbicsICdjb21tZW50JywgJ2xpbnRlclN1cHByZXNzaW9ucycsICdwcm9wZXJ0eVN1cHByZXNzaW9ucycsICdleGlzdGluZyddO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZXNvdXJjZSkpIHtcbiAgICAgICAgICBpZiAoa25vd25Qcm9wcy5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTtcbiAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgICAgICAgaWYgKHRoaXMuaXNFbXB0eVZhbHVlKHZhbHVlKSkgY29udGludWU7XG5cbiAgICAgICAgICBjb25zdCBjYW1lbEtleSA9IHRoaXMudG9DYW1lbENhc2Uoa2V5KTtcblxuICAgICAgICAgIC8vIEFkZCBwcm9wZXJ0eS1sZXZlbCBsaW50ZXIgc3VwcHJlc3Npb25zXG4gICAgICAgICAgaWYgKHJlc291cmNlLnByb3BlcnR5U3VwcHJlc3Npb25zICYmIHJlc291cmNlLnByb3BlcnR5U3VwcHJlc3Npb25zW2tleV0pIHtcbiAgICAgICAgICAgIHJlc291cmNlLnByb3BlcnR5U3VwcHJlc3Npb25zW2tleV0uZm9yRWFjaChjb2RlID0+IHtcbiAgICAgICAgICAgICAgbGluZXMucHVzaChgICAjZGlzYWJsZS1uZXh0LWxpbmUgJHtjb2RlfWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3Byb3BlcnRpZXMnICYmIHZhbHVlKSB7XG4gICAgICAgICAgICBsaW5lcy5wdXNoKGAgICR7Y2FtZWxLZXl9OiAke3RoaXMuZm9ybWF0VmFsdWUodmFsdWUsIDIpfWApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAna2luZCcpIHtcbiAgICAgICAgICAgIGxpbmVzLnB1c2goYCAgJHtjYW1lbEtleX06ICcke3ZhbHVlfSdgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2xvY2F0aW9uJykge1xuICAgICAgICAgICAgbGluZXMucHVzaChgICAke2NhbWVsS2V5fTogJHt2YWx1ZX1gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGluZXMucHVzaChgICAke2NhbWVsS2V5fTogJHt0aGlzLmZvcm1hdFZhbHVlKHZhbHVlLCAyKX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzb3VyY2UuZGVwZW5kc09uICYmIHJlc291cmNlLmRlcGVuZHNPbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbGluZXMucHVzaCgnICBkZXBlbmRzT246IFsnKTtcbiAgICAgICAgICByZXNvdXJjZS5kZXBlbmRzT24uZm9yRWFjaChkZXAgPT4gbGluZXMucHVzaChgICAgICR7ZGVwfWApKTtcbiAgICAgICAgICBsaW5lcy5wdXNoKCcgIF0nKTtcbiAgICAgICAgfVxuICAgICAgICBsaW5lcy5wdXNoKCd9Jyk7XG4gICAgICAgIGxpbmVzLnB1c2goJycpO1xuICAgICAgfVxuXG4gICAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICB9XG5cbiAgICAvLyBPdXRwdXRzXG4gICAgaWYgKHRoaXMub3V0cHV0cy5zaXplID4gMCkge1xuICAgICAgbGluZXMucHVzaCguLi50aGlzLmZvcm1hdFNlY3Rpb25IZWFkZXIoJ091dHB1dHMnKSk7XG4gICAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBbbmFtZSwgb3V0cHV0XSBvZiB0aGlzLm91dHB1dHMpIHtcbiAgICAgIGxpbmVzLnB1c2goYG91dHB1dCAke25hbWV9ICR7b3V0cHV0LnR5cGV9ID0gJHtvdXRwdXQudmFsdWV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRWYWx1ZSh2YWx1ZTogYW55LCBpbmRlbnQ6IG51bWJlciA9IDApOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBDaGVjayBpZiBpdCdzIGFscmVhZHkgYSBxdW90ZWQgQmljZXAgZXhwcmVzc2lvbiB3aXRoIGludGVycG9sYXRpb25cbiAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKFwiJ1wiKSAmJiB2YWx1ZS5lbmRzV2l0aChcIidcIikpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhIG11bHRpLWxpbmUgc2NyaXB0IChjb250YWlucyBuZXdsaW5lcylcbiAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcygnXFxuJykpIHtcbiAgICAgICAgLy8gTXVsdGktbGluZSBzdHJpbmcgbGl0ZXJhbFxuICAgICAgICByZXR1cm4gYCcnJ1xcbiR7dmFsdWV9XFxuJycnYDtcbiAgICAgIH1cbiAgICAgIC8vIENoZWNrIGlmIGl0J3MgYSBCaWNlcCBmdW5jdGlvbiBjYWxsIChlLmcuLCBndWlkKC4uLiksIHRlbmFudCgpLCByZXNvdXJjZUdyb3VwKCkubG9jYXRpb24pXG4gICAgICBpZiAoL15bYS16QS1aXVthLXpBLVowLTldKlxcKC4qXFwpLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICAvLyBDaGVjayBpZiBpdCdzIGEgbmVzdGVkIHJlc291cmNlIG5hbWUgcGF0dGVybiAoZS5nLiwgUmVzb3VyY2VOYW1lLnVuaXF1ZU5hbWUvY2hpbGROYW1lKVxuICAgICAgaWYgKC9eW2EtekEtWl1bYS16QS1aMC05XSpcXC5bYS16QS1aXVthLXpBLVowLTldKlxcL1teJ10rJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgW3BhcmVudFJlZiwgY2hpbGROYW1lXSA9IHZhbHVlLnNwbGl0KCcvJyk7XG4gICAgICAgIHJldHVybiBgJ1xcJHske3BhcmVudFJlZn19LyR7Y2hpbGROYW1lfSdgO1xuICAgICAgfVxuICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhIEJpY2VwIHByb3BlcnR5IHJlZmVyZW5jZSAoZS5nLiwgcmVzb3VyY2VOYW1lLnByb3BlcnR5LCByZXNvdXJjZU5hbWUucHJvcGVydGllcy5zdWJQcm9wZXJ0eSlcbiAgICAgIGlmICgvXlthLXpBLVpdW2EtekEtWjAtOV0qKD86XFwuW2EtekEtWl1bYS16QS1aMC05XSopKyQvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIC8vIENoZWNrIGlmIGl0J3MgYSBCaWNlcCBwYXJhbWV0ZXIgb3Igc2ltcGxlIGlkZW50aWZpZXIgKGUuZy4sIHBhcmFtZXRlck5hbWUsIGxvY2F0aW9uKVxuICAgICAgaWYgKC9eW2EtekEtWl1bYS16QS1aMC05XSokLy50ZXN0KHZhbHVlKSAmJiB0aGlzLnBhcmFtZXRlcnMuaGFzKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICAvLyBDaGVjayBpZiBpdCdzIGEga25vd24gQmljZXAgZXhwcmVzc2lvblxuICAgICAgaWYgKFsnbG9jYXRpb24nLCAndXRjVmFsdWUnLCAnYXBwTmFtZScsICdyZWRpcmVjdFVyaScsICdzaWduSW5BdWRpZW5jZSddLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICAvLyBDaGVjayBpZiBpdCBjb250YWlucyB1bnJlc29sdmVkIENESyB0b2tlbnNcbiAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcygnVG9rZW5bJykpIHtcbiAgICAgICAgcmV0dXJuIGAnJHt2YWx1ZX0nYDtcbiAgICAgIH1cbiAgICAgIC8vIENoZWNrIGlmIGl0J3MgYSBHVUlEIGFuZCBhZGQgY29tbWVudCBpZiBrbm93blxuICAgICAgaWYgKC9eWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17MTJ9JC9pLnRlc3QodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGNvbW1lbnQgPSB0aGlzLmdldEd1aWRDb21tZW50KHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGNvbW1lbnQgPyBgJyR7dmFsdWV9JyAvLyAke2NvbW1lbnR9YCA6IGAnJHt2YWx1ZX0nYDtcbiAgICAgIH1cbiAgICAgIC8vIENoZWNrIGlmIHN0cmluZyBjb250YWlucyBzaW5nbGUgcXVvdGVzIEFORCBsb29rcyBsaWtlIGEgc2hlbGwgc2NyaXB0IC0gdXNlIG11bHRpLWxpbmUgc3RyaW5nXG4gICAgICBpZiAodmFsdWUuaW5jbHVkZXMoXCInXCIpICYmICh2YWx1ZS5pbmNsdWRlcygnYXogJykgfHwgdmFsdWUuaW5jbHVkZXMoJ2VjaG8gJykgfHwgdmFsdWUubGVuZ3RoID4gMTAwKSkge1xuICAgICAgICByZXR1cm4gYCcnJyR7dmFsdWV9JycnYDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBgJyR7dmFsdWV9J2A7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnW10nO1xuICAgICAgfVxuICAgICAgY29uc3QgaXRlbUluZGVudCA9ICcgJy5yZXBlYXQoaW5kZW50ICsgMik7XG4gICAgICBjb25zdCBjbG9zZUluZGVudCA9ICcgJy5yZXBlYXQoaW5kZW50KTtcbiAgICAgIGNvbnN0IGl0ZW1zID0gdmFsdWUubWFwKHYgPT4gYCR7aXRlbUluZGVudH0ke3RoaXMuZm9ybWF0VmFsdWUodiwgaW5kZW50ICsgMil9YCkuam9pbignXFxuJyk7XG4gICAgICByZXR1cm4gYFtcXG4ke2l0ZW1zfVxcbiR7Y2xvc2VJbmRlbnR9XWA7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRPYmplY3QodmFsdWUsIGluZGVudCk7XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRPYmplY3Qob2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBpbmRlbnQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgcHJvcEluZGVudCA9ICcgJy5yZXBlYXQoaW5kZW50ICsgMik7XG4gICAgY29uc3QgY2xvc2VJbmRlbnQgPSAnICcucmVwZWF0KGluZGVudCk7XG4gICAgY29uc3QgbGluZXMgPSBbJ3snXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmopKSB7XG4gICAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBCaWNlcCBpbnRlcnBvbGF0ZWQga2V5cyAoZS5nLiwgJyR7TWFuYWdlZGlkZW50aXR5LmlkfScgb3IgJHtNYW5hZ2VkaWRlbnRpdHkuaWR9KVxuICAgICAgaWYgKChrZXkuc3RhcnRzV2l0aChcIicke1wiKSAmJiBrZXkuZW5kc1dpdGgoXCJ9J1wiKSkpIHtcbiAgICAgICAgbGluZXMucHVzaChgJHtwcm9wSW5kZW50fSR7a2V5fTogJHt0aGlzLmZvcm1hdFZhbHVlKHZhbHVlLCBpbmRlbnQgKyAyKX1gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoJyR7JykgJiYga2V5LmVuZHNXaXRoKCd9JykpIHtcbiAgICAgICAgbGluZXMucHVzaChgJHtwcm9wSW5kZW50fScke2tleX0nOiAke3RoaXMuZm9ybWF0VmFsdWUodmFsdWUsIGluZGVudCArIDIpfWApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzRW1wdHlWYWx1ZSh2YWx1ZSkpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgY2FtZWxLZXkgPSAoa2V5LmluY2x1ZGVzKCdfJykgfHwga2V5LmNoYXJBdCgwKSA9PT0ga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpKSA/IGtleSA6IHRoaXMudG9DYW1lbENhc2Uoa2V5KTtcbiAgICAgIGxpbmVzLnB1c2goYCR7cHJvcEluZGVudH0ke2NhbWVsS2V5fTogJHt0aGlzLmZvcm1hdFZhbHVlKHZhbHVlLCBpbmRlbnQgKyAyKX1gKTtcbiAgICB9XG4gICAgbGluZXMucHVzaChgJHtjbG9zZUluZGVudH19YCk7XG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VtcHR5VmFsdWUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAodmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSB0b0NhbWVsQ2FzZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9QYXNjYWxDYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RyXG4gICAgICAuc3BsaXQoL1stX1xcc10rLylcbiAgICAgIC5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKS50b0xvd2VyQ2FzZSgpKVxuICAgICAgLmpvaW4oJycpXG4gICAgICAucmVwbGFjZSgvW15hLXpBLVowLTldL2csICcnKVxuICAgICAgLnJlcGxhY2UoL15bMC05XS8sICdfJCYnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0R3VpZENvbW1lbnQoZ3VpZDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgbG93ZXJHdWlkID0gZ3VpZC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKGxvd2VyR3VpZCA9PT0gUmVzb3VyY2VBcHBJZC5NSUNST1NPRlRfR1JBUEgudG9Mb3dlckNhc2UoKSkge1xuICAgICAgcmV0dXJuICdNaWNyb3NvZnQgR3JhcGgnO1xuICAgIH1cblxuICAgIGNvbnN0IHBlcm1pc3Npb25NYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBbTWljcm9zb2Z0R3JhcGhQZXJtaXNzaW9uLlVTRVJfUkVBRF06ICdVc2VyLlJlYWQnLFxuICAgICAgW01pY3Jvc29mdEdyYXBoUGVybWlzc2lvbi5VU0VSX1JFQURfV1JJVEVdOiAnVXNlci5SZWFkV3JpdGUnLFxuICAgICAgW01pY3Jvc29mdEdyYXBoUGVybWlzc2lvbi5VU0VSX1JFQURfQUxMXTogJ1VzZXIuUmVhZC5BbGwnLFxuICAgICAgW01pY3Jvc29mdEdyYXBoUGVybWlzc2lvbi5VU0VSX1JFQURfV1JJVEVfQUxMXTogJ1VzZXIuUmVhZFdyaXRlLkFsbCcsXG4gICAgICBbTWljcm9zb2Z0R3JhcGhQZXJtaXNzaW9uLkRJUkVDVE9SWV9SRUFEX0FMTF06ICdEaXJlY3RvcnkuUmVhZC5BbGwnLFxuICAgICAgW01pY3Jvc29mdEdyYXBoUGVybWlzc2lvbi5ESVJFQ1RPUllfUkVBRF9XUklURV9BTExdOiAnRGlyZWN0b3J5LlJlYWRXcml0ZS5BbGwnLFxuICAgICAgW01pY3Jvc29mdEdyYXBoUGVybWlzc2lvbi5HUk9VUF9SRUFEX0FMTF06ICdHcm91cC5SZWFkLkFsbCcsXG4gICAgICBbTWljcm9zb2Z0R3JhcGhQZXJtaXNzaW9uLkdST1VQX1JFQURfV1JJVEVfQUxMXTogJ0dyb3VwLlJlYWRXcml0ZS5BbGwnLFxuICAgICAgW01pY3Jvc29mdEdyYXBoUGVybWlzc2lvbi5NQUlMX1JFQURdOiAnTWFpbC5SZWFkJyxcbiAgICAgIFtNaWNyb3NvZnRHcmFwaFBlcm1pc3Npb24uTUFJTF9SRUFEX1dSSVRFXTogJ01haWwuUmVhZFdyaXRlJyxcbiAgICAgIFtNaWNyb3NvZnRHcmFwaFBlcm1pc3Npb24uTUFJTF9TRU5EXTogJ01haWwuU2VuZCcsXG4gICAgICBbTWljcm9zb2Z0R3JhcGhQZXJtaXNzaW9uLkNBTEVOREFSU19SRUFEXTogJ0NhbGVuZGFycy5SZWFkJyxcbiAgICAgIFtNaWNyb3NvZnRHcmFwaFBlcm1pc3Npb24uQ0FMRU5EQVJTX1JFQURfV1JJVEVdOiAnQ2FsZW5kYXJzLlJlYWRXcml0ZScsXG4gICAgICBbTWljcm9zb2Z0R3JhcGhQZXJtaXNzaW9uLkZJTEVTX1JFQURdOiAnRmlsZXMuUmVhZCcsXG4gICAgICBbTWljcm9zb2Z0R3JhcGhQZXJtaXNzaW9uLkZJTEVTX1JFQURfV1JJVEVdOiAnRmlsZXMuUmVhZFdyaXRlJyxcbiAgICAgIFtNaWNyb3NvZnRHcmFwaFBlcm1pc3Npb24uRklMRVNfUkVBRF9BTExdOiAnRmlsZXMuUmVhZC5BbGwnLFxuICAgICAgW01pY3Jvc29mdEdyYXBoUGVybWlzc2lvbi5GSUxFU19SRUFEX1dSSVRFX0FMTF06ICdGaWxlcy5SZWFkV3JpdGUuQWxsJyxcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBbcGVybUd1aWQsIG5hbWVdIG9mIE9iamVjdC5lbnRyaWVzKHBlcm1pc3Npb25NYXApKSB7XG4gICAgICBpZiAocGVybUd1aWQudG9Mb3dlckNhc2UoKSA9PT0gbG93ZXJHdWlkKSB7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXNvdXJjZVNlY3Rpb24ocmVzb3VyY2VUeXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChyZXNvdXJjZVR5cGUuaW5jbHVkZXMoJ01pY3Jvc29mdC5HcmFwaC9ncm91cHMnKSkgcmV0dXJuICdBenVyZSBBRCBHcm91cHMnO1xuICAgIGlmIChyZXNvdXJjZVR5cGUuaW5jbHVkZXMoJ01pY3Jvc29mdC5HcmFwaC9hcHBSb2xlQXNzaWduZWRUbycpKSByZXR1cm4gJ0dyb3VwIFJvbGUgQXNzaWdubWVudHMnO1xuICAgIGlmIChyZXNvdXJjZVR5cGUuaW5jbHVkZXMoJ01pY3Jvc29mdC5HcmFwaC9hcHBsaWNhdGlvbnMvZmVkZXJhdGVkSWRlbnRpdHlDcmVkZW50aWFscycpKSByZXR1cm4gJ0ZlZGVyYXRlZCBJZGVudGl0eSBDcmVkZW50aWFscyc7XG4gICAgaWYgKHJlc291cmNlVHlwZS5pbmNsdWRlcygnTWljcm9zb2Z0LkdyYXBoL2FwcGxpY2F0aW9ucycpKSByZXR1cm4gJ0F6dXJlIEFEIEFwcGxpY2F0aW9uJztcbiAgICBpZiAocmVzb3VyY2VUeXBlLmluY2x1ZGVzKCdNaWNyb3NvZnQuR3JhcGgvc2VydmljZVByaW5jaXBhbHMnKSkgcmV0dXJuICdTZXJ2aWNlIFByaW5jaXBhbCc7XG4gICAgaWYgKHJlc291cmNlVHlwZS5pbmNsdWRlcygnTWljcm9zb2Z0LkNvbXB1dGUnKSkgcmV0dXJuICdDb21wdXRlIFJlc291cmNlcyc7XG4gICAgaWYgKHJlc291cmNlVHlwZS5pbmNsdWRlcygnTWljcm9zb2Z0Lk5ldHdvcmsnKSkgcmV0dXJuICdOZXR3b3JrIFJlc291cmNlcyc7XG4gICAgaWYgKHJlc291cmNlVHlwZS5pbmNsdWRlcygnTWljcm9zb2Z0LlN0b3JhZ2UnKSkgcmV0dXJuICdTdG9yYWdlIFJlc291cmNlcyc7XG4gICAgcmV0dXJuICdSZXNvdXJjZXMnO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRTZWN0aW9uSGVhZGVyKHRpdGxlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgYm9yZGVyID0gJy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSc7XG4gICAgY29uc3QgdG90YWxXaWR0aCA9IGJvcmRlci5sZW5ndGg7XG4gICAgY29uc3QgY29udGVudFdpZHRoID0gdG90YWxXaWR0aCAtIDU7XG4gICAgY29uc3QgcGFkZGluZyA9IGNvbnRlbnRXaWR0aCAtIHRpdGxlLmxlbmd0aDtcbiAgICBjb25zdCBsZWZ0UGFkID0gTWF0aC5mbG9vcihwYWRkaW5nIC8gMik7XG4gICAgY29uc3QgcmlnaHRQYWQgPSBwYWRkaW5nIC0gbGVmdFBhZDtcbiAgICBjb25zdCBjZW50ZXJlZFRpdGxlID0gYC8vID0keycgJy5yZXBlYXQobGVmdFBhZCl9JHt0aXRsZX0keycgJy5yZXBlYXQocmlnaHRQYWQpfT1gO1xuICAgIHJldHVybiBbYm9yZGVyLCBjZW50ZXJlZFRpdGxlLCBib3JkZXJdO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,16 @@
1
+ import { BicepTemplate, BicepExtension, BicepMetadata } from './template';
2
+ /**
3
+ * Fluent builder for creating Bicep templates with a CDK-idiomatic approach
4
+ */
5
+ export declare class BicepTemplateBuilder {
6
+ private template;
7
+ private outputKeys;
8
+ withMetadata(metadata: BicepMetadata): this;
9
+ withExtensions(...extensions: BicepExtension[]): this;
10
+ withResources(buildFn: (template: BicepTemplate) => void): this;
11
+ withOutputs(outputs: Record<string, string>): this;
12
+ build(): {
13
+ template: BicepTemplate;
14
+ outputKeys: string[];
15
+ };
16
+ }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BicepTemplateBuilder = void 0;
4
+ const template_1 = require("./template");
5
+ /**
6
+ * Fluent builder for creating Bicep templates with a CDK-idiomatic approach
7
+ */
8
+ class BicepTemplateBuilder {
9
+ constructor() {
10
+ this.template = new template_1.BicepTemplate();
11
+ this.outputKeys = [];
12
+ }
13
+ withMetadata(metadata) {
14
+ this.template.setMetadata(metadata);
15
+ return this;
16
+ }
17
+ withExtensions(...extensions) {
18
+ extensions.forEach(ext => this.template.addExtension(ext));
19
+ return this;
20
+ }
21
+ withResources(buildFn) {
22
+ buildFn(this.template);
23
+ return this;
24
+ }
25
+ withOutputs(outputs) {
26
+ this.outputKeys = Object.keys(outputs);
27
+ Object.entries(outputs).forEach(([name, value]) => this.template.addStringOutput(name, value));
28
+ return this;
29
+ }
30
+ build() {
31
+ return { template: this.template, outputKeys: this.outputKeys };
32
+ }
33
+ }
34
+ exports.BicepTemplateBuilder = BicepTemplateBuilder;
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JpY2VwL2RlcGxveS90ZW1wbGF0ZUJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQTBFO0FBRTFFOztHQUVHO0FBQ0gsTUFBYSxvQkFBb0I7SUFBakM7UUFDVSxhQUFRLEdBQUcsSUFBSSx3QkFBYSxFQUFFLENBQUM7UUFDL0IsZUFBVSxHQUFhLEVBQUUsQ0FBQztJQTRCcEMsQ0FBQztJQTFCQyxZQUFZLENBQUMsUUFBdUI7UUFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsY0FBYyxDQUFDLEdBQUcsVUFBNEI7UUFDNUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDM0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQTBDO1FBQ3RELE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQStCO1FBQ3pDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUMzQyxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSztRQUNILE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ2xFLENBQUM7Q0FDRjtBQTlCRCxvREE4QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCaWNlcFRlbXBsYXRlLCBCaWNlcEV4dGVuc2lvbiwgQmljZXBNZXRhZGF0YSB9IGZyb20gJy4vdGVtcGxhdGUnO1xuXG4vKipcbiAqIEZsdWVudCBidWlsZGVyIGZvciBjcmVhdGluZyBCaWNlcCB0ZW1wbGF0ZXMgd2l0aCBhIENESy1pZGlvbWF0aWMgYXBwcm9hY2hcbiAqL1xuZXhwb3J0IGNsYXNzIEJpY2VwVGVtcGxhdGVCdWlsZGVyIHtcbiAgcHJpdmF0ZSB0ZW1wbGF0ZSA9IG5ldyBCaWNlcFRlbXBsYXRlKCk7XG4gIHByaXZhdGUgb3V0cHV0S2V5czogc3RyaW5nW10gPSBbXTtcblxuICB3aXRoTWV0YWRhdGEobWV0YWRhdGE6IEJpY2VwTWV0YWRhdGEpOiB0aGlzIHtcbiAgICB0aGlzLnRlbXBsYXRlLnNldE1ldGFkYXRhKG1ldGFkYXRhKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHdpdGhFeHRlbnNpb25zKC4uLmV4dGVuc2lvbnM6IEJpY2VwRXh0ZW5zaW9uW10pOiB0aGlzIHtcbiAgICBleHRlbnNpb25zLmZvckVhY2goZXh0ID0+IHRoaXMudGVtcGxhdGUuYWRkRXh0ZW5zaW9uKGV4dCkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgd2l0aFJlc291cmNlcyhidWlsZEZuOiAodGVtcGxhdGU6IEJpY2VwVGVtcGxhdGUpID0+IHZvaWQpOiB0aGlzIHtcbiAgICBidWlsZEZuKHRoaXMudGVtcGxhdGUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgd2l0aE91dHB1dHMob3V0cHV0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHRoaXMge1xuICAgIHRoaXMub3V0cHV0S2V5cyA9IE9iamVjdC5rZXlzKG91dHB1dHMpO1xuICAgIE9iamVjdC5lbnRyaWVzKG91dHB1dHMpLmZvckVhY2goKFtuYW1lLCB2YWx1ZV0pID0+XG4gICAgICB0aGlzLnRlbXBsYXRlLmFkZFN0cmluZ091dHB1dChuYW1lLCB2YWx1ZSksXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGJ1aWxkKCk6IHsgdGVtcGxhdGU6IEJpY2VwVGVtcGxhdGU7IG91dHB1dEtleXM6IHN0cmluZ1tdIH0ge1xuICAgIHJldHVybiB7IHRlbXBsYXRlOiB0aGlzLnRlbXBsYXRlLCBvdXRwdXRLZXlzOiB0aGlzLm91dHB1dEtleXMgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,3 @@
1
+ export * as patterns from './patterns';
2
+ export * as deploy from './deploy';
3
+ export * as resources from './resources';
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.resources = exports.deploy = exports.patterns = void 0;
37
+ exports.patterns = __importStar(require("./patterns"));
38
+ exports.deploy = __importStar(require("./deploy"));
39
+ exports.resources = __importStar(require("./resources"));
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmljZXAvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdURBQXVDO0FBQ3ZDLG1EQUFtQztBQUNuQyx5REFBeUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBhcyBwYXR0ZXJucyBmcm9tICcuL3BhdHRlcm5zJztcbmV4cG9ydCAqIGFzIGRlcGxveSBmcm9tICcuL2RlcGxveSc7XG5leHBvcnQgKiBhcyByZXNvdXJjZXMgZnJvbSAnLi9yZXNvdXJjZXMnO1xuIl19
@@ -0,0 +1,58 @@
1
+ import { Construct } from 'constructs';
2
+ import * as bicep from '../deploy';
3
+ import * as graph from '../resources/graph';
4
+ /**
5
+ * Well-known OIDC audience values for common providers
6
+ */
7
+ export declare enum OidcAudience {
8
+ /** AWS Security Token Service */
9
+ AWS_STS = "sts.amazonaws.com",
10
+ /** Azure AD Token Exchange for Workload Identity Federation */
11
+ AZURE_AD_TOKEN_EXCHANGE = "api://AzureADTokenExchange",
12
+ /** Microsoft Graph API */
13
+ MICROSOFT_GRAPH = "https://graph.microsoft.com",
14
+ /** Kubernetes default service account */
15
+ KUBERNETES = "https://kubernetes.default.svc"
16
+ }
17
+ /**
18
+ * Configuration for external identity trusted to request tokens
19
+ */
20
+ export interface TrustedTokenRequesterConfig {
21
+ /** OIDC issuer URL that Azure AD trusts */
22
+ readonly issuer: string;
23
+ /** Subject (sub) claim identifying the trusted workload */
24
+ readonly sub: string;
25
+ /** Audience (aud) values for token validation - use OidcAudience enum or custom strings */
26
+ readonly aud: string[];
27
+ }
28
+ /**
29
+ * Properties for Azure AD application with federated credentials.
30
+ */
31
+ export interface AzureAdApplicationFederatedProps {
32
+ /** Name of the Azure AD application */
33
+ readonly appName: string;
34
+ /** Redirect URIs for OAuth callbacks */
35
+ readonly redirectUris: string[];
36
+ /** Supported account types for sign-in (defaults to single tenant) */
37
+ readonly signInAudience?: graph.SignInAudience;
38
+ /** Azure resource group name */
39
+ readonly resourceGroupName: string;
40
+ /** Azure AD groups to create */
41
+ readonly groups?: string[];
42
+ /** Azure federated credentials for deployment */
43
+ readonly deploymentCredentials: bicep.AzureFederatedCredentials;
44
+ /** External identity trusted to request tokens */
45
+ readonly trustedTokenRequester: TrustedTokenRequesterConfig;
46
+ /** Enable AWS session tag mapping via Custom Claims Provider (requires groups to be defined) */
47
+ readonly enableAwsSessionTagMapping?: boolean;
48
+ }
49
+ export declare class AzureAdApplicationFederated extends Construct {
50
+ /** All deployment outputs */
51
+ readonly outputs: Record<string, string>;
52
+ /** Trusted token requester configuration */
53
+ readonly trustedTokenRequester: TrustedTokenRequesterConfig;
54
+ constructor(scope: Construct, id: string, props: AzureAdApplicationFederatedProps);
55
+ private buildResources;
56
+ private buildCustomClaimsProvider;
57
+ private sanitizeIdentifier;
58
+ }