@drunk-pulumi/azure-components 1.0.2 → 1.0.4

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/README.md +29 -2
  2. package/ResourceBuilder.d.ts +76 -24
  3. package/ResourceBuilder.js +144 -44
  4. package/aks/AzKubernetes.d.ts +30 -8
  5. package/aks/AzKubernetes.js +107 -44
  6. package/aks/ContainerRegistry.d.ts +4 -3
  7. package/aks/ContainerRegistry.js +22 -19
  8. package/apim/Apim.d.ts +51 -0
  9. package/apim/Apim.js +248 -0
  10. package/apim/ApimApi.d.ts +34 -0
  11. package/apim/ApimApi.js +193 -0
  12. package/apim/ApimApiSet.d.ts +27 -0
  13. package/apim/ApimApiSet.js +88 -0
  14. package/apim/ApimPolicyBuilder.d.ts +93 -0
  15. package/apim/ApimPolicyBuilder.js +294 -0
  16. package/apim/ApimProduct.d.ts +27 -0
  17. package/apim/ApimProduct.js +118 -0
  18. package/apim/index.d.ts +2 -0
  19. package/apim/index.js +19 -0
  20. package/apim/openAPI3Type.d.ts +85 -0
  21. package/apim/openAPI3Type.js +3 -0
  22. package/apim/openApiHelper.d.ts +1 -0
  23. package/apim/openApiHelper.js +36 -0
  24. package/app/SignalR.d.ts +3 -3
  25. package/app/SignalR.js +35 -20
  26. package/azAd/AppRegistration.d.ts +13 -7
  27. package/azAd/AppRegistration.js +48 -40
  28. package/azAd/AzRole.js +2 -2
  29. package/azAd/GroupRole.d.ts +7 -11
  30. package/azAd/GroupRole.js +7 -6
  31. package/azAd/RoleAssignment.d.ts +1 -1
  32. package/azAd/RoleAssignment.js +5 -5
  33. package/azAd/UserAssignedIdentity.d.ts +3 -0
  34. package/azAd/UserAssignedIdentity.js +23 -7
  35. package/azAd/helpers/index.d.ts +0 -2
  36. package/azAd/helpers/index.js +26 -21
  37. package/azAd/helpers/rolesBuiltIn.d.ts +6 -57
  38. package/azAd/helpers/rolesBuiltIn.js +25868 -25353
  39. package/azAd/helpers/rsRoleDefinition.d.ts +12 -6
  40. package/azAd/helpers/rsRoleDefinition.js +43 -31
  41. package/base/BaseComponent.d.ts +1 -15
  42. package/base/BaseComponent.js +3 -22
  43. package/base/BaseResourceComponent.d.ts +24 -17
  44. package/base/BaseResourceComponent.js +61 -45
  45. package/base/helpers.d.ts +0 -6
  46. package/base/helpers.js +1 -18
  47. package/common/RandomPassword.js +4 -4
  48. package/common/RandomString.d.ts +1 -1
  49. package/common/RandomString.js +3 -3
  50. package/common/RsGroup.js +2 -2
  51. package/database/AzSql.d.ts +11 -10
  52. package/database/AzSql.js +38 -24
  53. package/database/MySql.d.ts +1 -1
  54. package/database/MySql.js +45 -28
  55. package/database/Postgres.d.ts +2 -1
  56. package/database/Postgres.js +29 -17
  57. package/database/Redis.d.ts +25 -4
  58. package/database/Redis.js +88 -25
  59. package/helpers/autoTags.js +2 -1
  60. package/helpers/certHelpers.d.ts +20 -0
  61. package/helpers/certHelpers.js +85 -0
  62. package/helpers/rsHelpers.d.ts +19 -1
  63. package/helpers/rsHelpers.js +27 -4
  64. package/helpers/stackEnv.d.ts +1 -1
  65. package/helpers/stackEnv.js +1 -1
  66. package/index.d.ts +1 -0
  67. package/index.js +2 -1
  68. package/package.json +10 -7
  69. package/services/Automation.d.ts +3 -1
  70. package/services/Automation.js +8 -8
  71. package/services/ServiceBus.d.ts +3 -2
  72. package/services/ServiceBus.js +17 -19
  73. package/types.d.ts +44 -15
  74. package/vault/EncryptionKey.d.ts +1 -1
  75. package/vault/EncryptionKey.js +4 -4
  76. package/vault/KeyVault.d.ts +7 -2
  77. package/vault/KeyVault.js +16 -5
  78. package/vault/VaultSecret.d.ts +1 -1
  79. package/vault/VaultSecret.js +9 -9
  80. package/vault/VaultSecrets.d.ts +2 -4
  81. package/vault/VaultSecrets.js +4 -6
  82. package/vault/helpers.d.ts +17 -0
  83. package/vault/helpers.js +50 -2
  84. package/vm/DiskEncryptionSet.js +2 -2
  85. package/vm/VirtualMachine.d.ts +2 -1
  86. package/vm/VirtualMachine.js +37 -25
  87. package/vnet/Basion.d.ts +4 -3
  88. package/vnet/Basion.js +17 -4
  89. package/vnet/DnsZone.d.ts +1 -1
  90. package/vnet/DnsZone.js +2 -2
  91. package/vnet/IpAddresses.d.ts +6 -2
  92. package/vnet/IpAddresses.js +2 -2
  93. package/vnet/NetworkPeering.d.ts +1 -1
  94. package/vnet/NetworkPeering.js +1 -1
  95. package/vnet/PrivateDnsZone.d.ts +1 -1
  96. package/vnet/PrivateDnsZone.js +4 -4
  97. package/vnet/PrivateEndpoint.d.ts +7 -10
  98. package/vnet/PrivateEndpoint.js +11 -10
  99. package/vnet/RouteTable.d.ts +1 -1
  100. package/vnet/RouteTable.js +2 -2
  101. package/vnet/VirtualNetwork.d.ts +30 -43
  102. package/vnet/VirtualNetwork.js +77 -43
  103. package/vnet/VpnGateway.js +2 -2
@@ -0,0 +1,93 @@
1
+ import * as pulumi from '@pulumi/pulumi';
2
+ type ApimCorsType = {
3
+ origins: pulumi.Input<string>[];
4
+ };
5
+ export declare enum SetHeaderTypes {
6
+ delete = "delete",
7
+ override = "override",
8
+ skip = "skip",
9
+ append = "append"
10
+ }
11
+ export type ApimClientCertType = {
12
+ issuer?: pulumi.Input<string>;
13
+ subject?: pulumi.Input<string>;
14
+ verifyCert?: pulumi.Input<boolean>;
15
+ thumbprint?: pulumi.Input<string>;
16
+ };
17
+ export type ApimForwardToServiceBusType = {
18
+ authClientId?: pulumi.Input<string>;
19
+ serviceBusName: pulumi.Input<string>;
20
+ topicOrQueueName: pulumi.Input<string>;
21
+ brokerProperties?: Record<string, pulumi.Input<string>>;
22
+ };
23
+ export type ApimSetHeaderType = {
24
+ name: pulumi.Input<string>;
25
+ value?: pulumi.Input<string>;
26
+ type: SetHeaderTypes;
27
+ };
28
+ export type ApimSetResponseBodyType = {
29
+ condition?: pulumi.Input<string>;
30
+ conditionStatusCode?: pulumi.Input<number>;
31
+ responseBody: pulumi.Input<string>;
32
+ responseStatusCode?: pulumi.Input<number>;
33
+ };
34
+ export declare class ApimPolicyBuilder {
35
+ private _inboundPolicies;
36
+ private _outboundPolicies;
37
+ private _cors;
38
+ private _mockResponse;
39
+ private _clientCertVerification?;
40
+ setBaseUrl(url: pulumi.Input<string>): ApimPolicyBuilder;
41
+ setBaseUrlIf(condition: boolean, url: pulumi.Input<string>): ApimPolicyBuilder;
42
+ setRequestHeader(props: ApimSetHeaderType): ApimPolicyBuilder;
43
+ setResponseHeaders(props: ApimSetHeaderType): ApimPolicyBuilder;
44
+ authBasic(props: {
45
+ userName: pulumi.Input<string>;
46
+ password: pulumi.Input<string>;
47
+ }): ApimPolicyBuilder;
48
+ authCert(props: {
49
+ certId: pulumi.Input<string>;
50
+ password?: pulumi.Input<string>;
51
+ } | {
52
+ thumbprint: pulumi.Input<string>;
53
+ }): ApimPolicyBuilder;
54
+ authIdentity(props: {
55
+ resource: pulumi.Input<string>;
56
+ clientId?: pulumi.Input<string>;
57
+ variableName: pulumi.Input<string>;
58
+ ignoreError?: pulumi.Input<boolean>;
59
+ setHeaderKey?: pulumi.Input<string>;
60
+ }): ApimPolicyBuilder;
61
+ checkHeader(props: {
62
+ name: pulumi.Input<string>;
63
+ values?: pulumi.Input<string>[];
64
+ }): ApimPolicyBuilder;
65
+ mockResponse(props: {
66
+ code?: pulumi.Input<number>;
67
+ contentType?: string;
68
+ }): ApimPolicyBuilder;
69
+ rewriteUri(template: pulumi.Input<string>): ApimPolicyBuilder;
70
+ setRateLimit(props: {
71
+ calls?: pulumi.Input<number>;
72
+ inSecond?: pulumi.Input<number>;
73
+ successConditionOnly?: boolean;
74
+ }): ApimPolicyBuilder;
75
+ setCacheOptions(duration?: pulumi.Input<string>): ApimPolicyBuilder;
76
+ setCors(props: ApimCorsType): ApimPolicyBuilder;
77
+ setClientIpHeader(headerKey: pulumi.Input<string>): ApimPolicyBuilder;
78
+ setWhitelistIPs(ipAddresses: pulumi.Input<string>[]): ApimPolicyBuilder;
79
+ verifyClientCert(props: ApimClientCertType): ApimPolicyBuilder;
80
+ forwardToBus(props: ApimForwardToServiceBusType): ApimPolicyBuilder;
81
+ forwardToBusIf(condition: boolean, props: ApimForwardToServiceBusType): ApimPolicyBuilder;
82
+ /**Replace outbound results */
83
+ replacesResponse(props: {
84
+ from: pulumi.Input<string>;
85
+ to: pulumi.Input<string>;
86
+ }): ApimPolicyBuilder;
87
+ setResponseBody(...props: ApimSetResponseBodyType[]): ApimPolicyBuilder;
88
+ build(): pulumi.Output<string>;
89
+ private setHeader;
90
+ private buildCors;
91
+ private buildCertVerification;
92
+ }
93
+ export {};
@@ -0,0 +1,294 @@
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.ApimPolicyBuilder = exports.SetHeaderTypes = void 0;
37
+ const helpers_1 = require("../helpers");
38
+ const database_1 = require("../database");
39
+ const pulumi = __importStar(require("@pulumi/pulumi"));
40
+ var SetHeaderTypes;
41
+ (function (SetHeaderTypes) {
42
+ SetHeaderTypes["delete"] = "delete";
43
+ SetHeaderTypes["override"] = "override";
44
+ SetHeaderTypes["skip"] = "skip";
45
+ SetHeaderTypes["append"] = "append";
46
+ })(SetHeaderTypes || (exports.SetHeaderTypes = SetHeaderTypes = {}));
47
+ class ApimPolicyBuilder {
48
+ _inboundPolicies = [];
49
+ _outboundPolicies = [];
50
+ _cors = undefined;
51
+ _mockResponse = false;
52
+ _clientCertVerification;
53
+ setBaseUrl(url) {
54
+ this._inboundPolicies.push(pulumi.interpolate `<set-backend-service base-url="${url}" />`);
55
+ return this;
56
+ }
57
+ setBaseUrlIf(condition, url) {
58
+ if (condition)
59
+ this.setBaseUrl(url);
60
+ return this;
61
+ }
62
+ setRequestHeader(props) {
63
+ const rs = this.setHeader(props);
64
+ this._inboundPolicies.push(rs);
65
+ return this;
66
+ }
67
+ setResponseHeaders(props) {
68
+ const rs = this.setHeader(props);
69
+ this._outboundPolicies.push(rs);
70
+ return this;
71
+ }
72
+ authBasic(props) {
73
+ this._inboundPolicies.push(pulumi.interpolate `<authentication-basic username="${props.userName}" password="${props.password}" />`);
74
+ return this;
75
+ }
76
+ authCert(props) {
77
+ this._inboundPolicies.push('thumbprint' in props
78
+ ? pulumi.interpolate `<authentication-certificate thumbprint="${props.thumbprint}" />`
79
+ : pulumi.interpolate `<authentication-certificate certificate-id="${props.certId}" password="${props.password}" />`);
80
+ return this;
81
+ }
82
+ authIdentity(props) {
83
+ this._inboundPolicies.push('clientId' in props && props.clientId
84
+ ? pulumi.interpolate `\t<authentication-managed-identity resource="${props.resource}" client-id="${props.clientId}" output-token-variable-name="${props.variableName}" ignore-error="${props.ignoreError}"/>`
85
+ : pulumi.interpolate `\t<authentication-managed-identity resource="${props.resource}" output-token-variable-name="${props.variableName}" ignore-error="${props.ignoreError}"/>`);
86
+ if (props.setHeaderKey)
87
+ this.setRequestHeader({
88
+ name: props.setHeaderKey,
89
+ type: SetHeaderTypes.override,
90
+ value: pulumi.interpolate `@($"Bearer {context.Variables[&quot;${props.variableName}&quot;]}")`,
91
+ });
92
+ return this;
93
+ }
94
+ checkHeader(props) {
95
+ const vs = props.values ? props.values.map((v) => pulumi.interpolate `<value>${v}</value>`) : [];
96
+ const rs = pulumi.interpolate `\t<check-header name="${props.name}" failed-check-httpcode="401" failed-check-error-message="The header ${props.name} is not found" ignore-case="true">
97
+ ${pulumi.output(vs).apply((s) => s.join('\n'))}
98
+ \t</check-header>`;
99
+ this._inboundPolicies.push(rs);
100
+ return this;
101
+ }
102
+ mockResponse(props) {
103
+ this._inboundPolicies.push(pulumi.interpolate `<mock-response status-code="${props.code ?? 200}" content-type="${props.contentType ?? 'application/json'}" />`);
104
+ this._mockResponse = true;
105
+ return this;
106
+ }
107
+ rewriteUri(template) {
108
+ this._inboundPolicies.push(pulumi.interpolate `<rewrite-uri template="${template ?? '/'}" />`);
109
+ return this;
110
+ }
111
+ setRateLimit(props) {
112
+ this._inboundPolicies.push(props.successConditionOnly
113
+ ? pulumi.interpolate `<rate-limit-by-key calls="${props.calls ?? 10}" renewal-period="${props.inSecond ?? 10}" counter-key="@(context.Request.IpAddress)" increment-condition="@(context.Response.StatusCode &gt;= 200 &amp;&amp; context.Response.StatusCode &lt; 300)" />`
114
+ : pulumi.interpolate `<rate-limit-by-key calls="${props.calls ?? 10}" renewal-period="${props.inSecond ?? 10}" counter-key="@(context.Request.IpAddress)" />`);
115
+ return this;
116
+ }
117
+ setCacheOptions(duration) {
118
+ this._inboundPolicies.push(pulumi.interpolate `<cache-lookup vary-by-developer="false"
119
+ vary-by-developer-groups="false"
120
+ allow-private-response-caching="true"
121
+ must-revalidate="true"
122
+ downstream-caching-type="public" />`);
123
+ this._outboundPolicies.push(pulumi.interpolate `<cache-store duration="${duration ?? 60}" />`);
124
+ return this;
125
+ }
126
+ setCors(props) {
127
+ this._cors = props;
128
+ return this;
129
+ }
130
+ setClientIpHeader(headerKey) {
131
+ this.setRequestHeader({
132
+ name: headerKey ?? `x-${helpers_1.stackInfo.organization}-clientIp`,
133
+ value: '@(context.Request.IpAddress)',
134
+ type: SetHeaderTypes.override,
135
+ });
136
+ return this;
137
+ }
138
+ setWhitelistIPs(ipAddresses) {
139
+ const policy = pulumi.interpolate `\t<ip-filter action="allow">\r\n${pulumi.output(ipAddresses).apply((ips) => ips
140
+ .map((ip) => {
141
+ if (ip.includes('/')) {
142
+ const range = database_1.dbHelpers.getIpsRange(ip);
143
+ return `<address-range from="${range.first}" to="${range.last}" />`;
144
+ }
145
+ return `<address>${ip}</address>`;
146
+ })
147
+ .join('\r\n'))}
148
+ \t</ip-filter>`;
149
+ this._inboundPolicies.push(policy);
150
+ return this;
151
+ }
152
+ verifyClientCert(props) {
153
+ this._clientCertVerification = props;
154
+ return this;
155
+ }
156
+ forwardToBus(props) {
157
+ this.authIdentity({
158
+ clientId: props.authClientId,
159
+ variableName: 'x-forward-to-bus',
160
+ setHeaderKey: 'Authorization',
161
+ resource: 'https://servicebus.azure.net',
162
+ ignoreError: false,
163
+ });
164
+ this.setBaseUrl(pulumi.interpolate `https://${props.serviceBusName}.servicebus.windows.net`);
165
+ this.rewriteUri(pulumi.interpolate `${props.topicOrQueueName}/messages`);
166
+ if (props.brokerProperties) {
167
+ Object.keys(props.brokerProperties).forEach((key) => this.setRequestHeader({
168
+ name: key,
169
+ type: SetHeaderTypes.append,
170
+ value: props.brokerProperties[key],
171
+ }));
172
+ }
173
+ return this;
174
+ }
175
+ forwardToBusIf(condition, props) {
176
+ if (condition)
177
+ this.forwardToBus(props);
178
+ return this;
179
+ }
180
+ /**Replace outbound results */
181
+ replacesResponse(props) {
182
+ this._outboundPolicies.push(pulumi.interpolate `<find-and-replace from="${props.from}" to="${props.to}" />`);
183
+ return this;
184
+ }
185
+ setResponseBody(...props) {
186
+ const options = props.map((c) => c.conditionStatusCode
187
+ ? pulumi.interpolate `\t<when condition="@(context.Response.StatusCode == ${c.conditionStatusCode})">
188
+ <set-status code="${c.responseStatusCode ?? 200}" />
189
+ <set-body>${c.responseBody}</set-body>
190
+ \t</when>`
191
+ : pulumi.interpolate `\t<when condition="${c.condition}">
192
+ <set-status code="${c.responseStatusCode ?? 200}" />
193
+ <set-body>${c.responseBody}</set-body>
194
+ \t</when>`);
195
+ this._outboundPolicies.push(pulumi.interpolate `\t<choose>
196
+ ${pulumi.output(options).apply((ops) => ops.join('\n'))}
197
+ \t</choose>`);
198
+ return this;
199
+ }
200
+ build() {
201
+ this.buildCors();
202
+ //This must be a last rule
203
+ this.buildCertVerification();
204
+ let backend = '<base />';
205
+ if (!this._mockResponse) {
206
+ backend = pulumi.interpolate `<forward-request timeout="120" follow-redirects="true" buffer-request-body="true" fail-on-error-status-code="true"/>`;
207
+ }
208
+ return pulumi.interpolate `<policies>
209
+ <inbound>
210
+ <base />
211
+ ${pulumi.output(this._inboundPolicies).apply((is) => is.join('\n'))}
212
+ </inbound>
213
+ <backend>
214
+ ${backend}
215
+ </backend>
216
+ <outbound>
217
+ <base />
218
+ <set-header name="Strict-Transport-Security" exists-action="override">
219
+ <value>max-age=3600; includeSubDomains</value>
220
+ </set-header>
221
+ <set-header name="X-XSS-Protection" exists-action="override">
222
+ <value>1; mode=block</value>
223
+ </set-header>
224
+ <set-header name="Content-Security-Policy" exists-action="override">
225
+ <value>default-src 'self' data:</value>
226
+ </set-header>
227
+ <set-header name="X-Frame-Options" exists-action="override">
228
+ <value>Deny</value>
229
+ </set-header>
230
+ <set-header name="X-Content-Type-Options" exists-action="override">
231
+ <value>nosniff</value>
232
+ </set-header>
233
+ <set-header name="Expect-Ct" exists-action="override">
234
+ <value>max-age=3600,enforce</value>
235
+ </set-header>
236
+ <set-header name="Cache-Control" exists-action="override">
237
+ <value>none</value>
238
+ </set-header>
239
+ <set-header name="X-Powered-By" exists-action="delete" />
240
+ <set-header name="X-AspNet-Version" exists-action="delete" />
241
+
242
+ ${pulumi.output(this._outboundPolicies).apply((os) => os.join('\n'))}
243
+ </outbound>
244
+ <on-error>
245
+ <base />
246
+ </on-error>
247
+ </policies>`;
248
+ }
249
+ setHeader(props) {
250
+ return pulumi.output(props).apply((p) => {
251
+ let rs = `\t<set-header name="${p.name}" exists-action="${p.type}">`;
252
+ if (p.value) {
253
+ rs += ` <value>${p.value}</value>`;
254
+ }
255
+ rs += '</set-header>';
256
+ return rs;
257
+ });
258
+ }
259
+ buildCors() {
260
+ const cors = !this._cors?.origins
261
+ ? ['<origin>*</origin>']
262
+ : this._cors.origins.map((o) => pulumi.interpolate `<origin>${o}</origin>`);
263
+ this._inboundPolicies.push(pulumi.interpolate `<cors allow-credentials="${Array.isArray(this._cors?.origins)}">
264
+ <allowed-origins>
265
+ ${pulumi.output(cors).apply((cs) => cs.join('\n'))}
266
+ </allowed-origins>
267
+ <allowed-methods preflight-result-max-age="300">
268
+ <method>*</method>
269
+ </allowed-methods>
270
+ <allowed-headers>
271
+ <header>*</header>
272
+ </allowed-headers>
273
+ </cors>`);
274
+ }
275
+ buildCertVerification() {
276
+ if (!this._clientCertVerification)
277
+ return;
278
+ this._inboundPolicies.push(pulumi.interpolate `<choose>
279
+ <when condition="@(context.Request.Certificate == null${this._clientCertVerification.verifyCert ? ' || !context.Request.Certificate.VerifyNoRevocation()' : ''}${this._clientCertVerification.issuer
280
+ ? ` || context.Request.Certificate.Issuer != "${this._clientCertVerification.issuer}"`
281
+ : ''}${this._clientCertVerification.subject
282
+ ? ` || context.Request.Certificate.SubjectName.Name != "${this._clientCertVerification.subject}"`
283
+ : ''}${this._clientCertVerification.thumbprint
284
+ ? ` || context.Request.Certificate.Thumbprint != "${this._clientCertVerification.thumbprint}"`
285
+ : ''})" >
286
+ <return-response>
287
+ <set-status code="403" reason="Invalid client certificate" />
288
+ </return-response>
289
+ </when>
290
+ </choose>`);
291
+ }
292
+ }
293
+ exports.ApimPolicyBuilder = ApimPolicyBuilder;
294
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBpbVBvbGljeUJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpbS9BcGltUG9saWN5QnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx3Q0FBdUM7QUFDdkMsMENBQXdDO0FBQ3hDLHVEQUF5QztBQUl6QyxJQUFZLGNBS1g7QUFMRCxXQUFZLGNBQWM7SUFDeEIsbUNBQWlCLENBQUE7SUFDakIsdUNBQXFCLENBQUE7SUFDckIsK0JBQWEsQ0FBQTtJQUNiLG1DQUFpQixDQUFBO0FBQ25CLENBQUMsRUFMVyxjQUFjLDhCQUFkLGNBQWMsUUFLekI7QUE0QkQsTUFBYSxpQkFBaUI7SUFDcEIsZ0JBQWdCLEdBQTJCLEVBQUUsQ0FBQztJQUM5QyxpQkFBaUIsR0FBMkIsRUFBRSxDQUFDO0lBQy9DLEtBQUssR0FBNkIsU0FBUyxDQUFDO0lBQzVDLGFBQWEsR0FBWSxLQUFLLENBQUM7SUFDL0IsdUJBQXVCLENBQWtDO0lBRTFELFVBQVUsQ0FBQyxHQUF5QjtRQUN6QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUEsa0NBQWtDLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDMUYsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sWUFBWSxDQUFDLFNBQWtCLEVBQUUsR0FBeUI7UUFDL0QsSUFBSSxTQUFTO1lBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxLQUF3QjtRQUM5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0IsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sa0JBQWtCLENBQUMsS0FBd0I7UUFDaEQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLFNBQVMsQ0FBQyxLQUF5RTtRQUN4RixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUN4QixNQUFNLENBQUMsV0FBVyxDQUFBLG1DQUFtQyxLQUFLLENBQUMsUUFBUSxlQUFlLEtBQUssQ0FBQyxRQUFRLE1BQU0sQ0FDdkcsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLFFBQVEsQ0FDYixLQU9LO1FBRUwsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDeEIsWUFBWSxJQUFJLEtBQUs7WUFDbkIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUEsMkNBQTJDLEtBQUssQ0FBQyxVQUFVLE1BQU07WUFDckYsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUEsK0NBQStDLEtBQUssQ0FBQyxNQUFNLGVBQWUsS0FBSyxDQUFDLFFBQVEsTUFBTSxDQUNySCxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sWUFBWSxDQUFDLEtBTW5CO1FBQ0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDeEIsVUFBVSxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUTtZQUNuQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQSxnREFBZ0QsS0FBSyxDQUFDLFFBQVEsZ0JBQWdCLEtBQUssQ0FBQyxRQUFRLGlDQUFpQyxLQUFLLENBQUMsWUFBWSxtQkFBbUIsS0FBSyxDQUFDLFdBQVcsS0FBSztZQUM1TSxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQSxnREFBZ0QsS0FBSyxDQUFDLFFBQVEsaUNBQWlDLEtBQUssQ0FBQyxZQUFZLG1CQUFtQixLQUFLLENBQUMsV0FBVyxLQUFLLENBQ2pMLENBQUM7UUFFRixJQUFJLEtBQUssQ0FBQyxZQUFZO1lBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDcEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxZQUFZO2dCQUN4QixJQUFJLEVBQUUsY0FBYyxDQUFDLFFBQVE7Z0JBQzdCLEtBQUssRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFBLHVDQUF1QyxLQUFLLENBQUMsWUFBWSxZQUFZO2FBQy9GLENBQUMsQ0FBQztRQUVMLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLFdBQVcsQ0FBQyxLQUFzRTtRQUN2RixNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFBLHlCQUMzQixLQUFLLENBQUMsSUFDUix3RUFDRSxLQUFLLENBQUMsSUFDUjtNQUNFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2tCQUNoQyxDQUFDO1FBRWYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxZQUFZLENBQUMsS0FBNEQ7UUFDOUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDeEIsTUFBTSxDQUFDLFdBQVcsQ0FBQSwrQkFBK0IsS0FBSyxDQUFDLElBQUksSUFBSSxHQUFHLG1CQUFtQixLQUFLLENBQUMsV0FBVyxJQUFJLGtCQUFrQixNQUFNLENBQ25JLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxVQUFVLENBQUMsUUFBOEI7UUFDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFBLDBCQUEwQixRQUFRLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQztRQUM5RixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxZQUFZLENBQUMsS0FJbkI7UUFDQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUN4QixLQUFLLENBQUMsb0JBQW9CO1lBQ3hCLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFBLDZCQUE2QixLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUscUJBQzlELEtBQUssQ0FBQyxRQUFRLElBQUksRUFDcEIsZ0tBQWdLO1lBQ2xLLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFBLDZCQUE2QixLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUscUJBQzlELEtBQUssQ0FBQyxRQUFRLElBQUksRUFDcEIsaURBQWlELENBQ3RELENBQUM7UUFDRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxlQUFlLENBQUMsUUFBK0I7UUFDcEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFBOzs7O2dEQUlELENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUEsMEJBQTBCLFFBQVEsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzlGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLE9BQU8sQ0FBQyxLQUFtQjtRQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxTQUErQjtRQUN0RCxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDcEIsSUFBSSxFQUFFLFNBQVMsSUFBSSxLQUFLLG1CQUFTLENBQUMsWUFBWSxXQUFXO1lBQ3pELEtBQUssRUFBRSw4QkFBOEI7WUFDckMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxRQUFRO1NBQzlCLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLGVBQWUsQ0FBQyxXQUFtQztRQUN4RCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFBLG1DQUFtQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQzNHLEdBQUc7YUFDQSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUNWLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNyQixNQUFNLEtBQUssR0FBRyxvQkFBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDeEMsT0FBTyx3QkFBd0IsS0FBSyxDQUFDLEtBQUssU0FBUyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUM7WUFDdEUsQ0FBQztZQUNELE9BQU8sWUFBWSxFQUFFLFlBQVksQ0FBQztRQUNwQyxDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQ2hCO2VBQ1UsQ0FBQztRQUVaLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsS0FBeUI7UUFDL0MsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQztRQUNyQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxZQUFZLENBQUMsS0FBa0M7UUFDcEQsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUNoQixRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVk7WUFDNUIsWUFBWSxFQUFFLGtCQUFrQjtZQUNoQyxZQUFZLEVBQUUsZUFBZTtZQUM3QixRQUFRLEVBQUUsOEJBQThCO1lBQ3hDLFdBQVcsRUFBRSxLQUFLO1NBQ25CLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQSxXQUFXLEtBQUssQ0FBQyxjQUFjLHlCQUF5QixDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFBLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixXQUFXLENBQUMsQ0FBQztRQUV4RSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDbEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDO2dCQUNwQixJQUFJLEVBQUUsR0FBRztnQkFDVCxJQUFJLEVBQUUsY0FBYyxDQUFDLE1BQU07Z0JBQzNCLEtBQUssRUFBRSxLQUFLLENBQUMsZ0JBQWlCLENBQUMsR0FBRyxDQUFDO2FBQ3BDLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLGNBQWMsQ0FBQyxTQUFrQixFQUFFLEtBQWtDO1FBQzFFLElBQUksU0FBUztZQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsOEJBQThCO0lBQ3ZCLGdCQUFnQixDQUFDLEtBQStEO1FBQ3JGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQSwyQkFBMkIsS0FBSyxDQUFDLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM1RyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxlQUFlLENBQUMsR0FBRyxLQUFnQztRQUN4RCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDOUIsQ0FBQyxDQUFDLG1CQUFtQjtZQUNuQixDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQSx1REFBdUQsQ0FBQyxDQUFDLG1CQUFtQjs4QkFDMUUsQ0FBQyxDQUFDLGtCQUFrQixJQUFJLEdBQUc7c0JBQ25DLENBQUMsQ0FBQyxZQUFZO1VBQzFCO1lBQ0YsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUEsc0JBQXNCLENBQUMsQ0FBQyxTQUFTOzhCQUMvQixDQUFDLENBQUMsa0JBQWtCLElBQUksR0FBRztzQkFDbkMsQ0FBQyxDQUFDLFlBQVk7VUFDMUIsQ0FDTCxDQUFDO1FBRUYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFBO0lBQzlDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdDLENBQUMsQ0FBQztRQUNWLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRTdCLElBQUksT0FBTyxHQUF5QixVQUFVLENBQUM7UUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4QixPQUFPLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQSxzSEFBc0gsQ0FBQztRQUNySixDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFBOzs7UUFHckIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7OztRQUdqRSxPQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBNEJQLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOzs7OztZQUs5RCxDQUFDO0lBQ1gsQ0FBQztJQUVPLFNBQVMsQ0FBQyxLQUF3QjtRQUN4QyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDdEMsSUFBSSxFQUFFLEdBQUcsdUJBQXVCLENBQUMsQ0FBQyxJQUFJLG9CQUFvQixDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7WUFDckUsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ1osRUFBRSxJQUFJLFdBQVcsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDO1lBQ3JDLENBQUM7WUFDRCxFQUFFLElBQUksZUFBZSxDQUFDO1lBQ3RCLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sU0FBUztRQUNmLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPO1lBQy9CLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDO1lBQ3hCLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUEsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTlFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQSw0QkFBNEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQzs7VUFFckcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Ozs7Ozs7O1FBUWxELENBQUMsQ0FBQztJQUNSLENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUI7WUFBRSxPQUFPO1FBRTFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQTtnRUFFdkMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsdURBQXVELENBQUMsQ0FBQyxDQUFDLEVBQ3RHLEdBQ0UsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU07WUFDakMsQ0FBQyxDQUFDLDhDQUE4QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxHQUFHO1lBQ3RGLENBQUMsQ0FBQyxFQUNOLEdBQ0UsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU87WUFDbEMsQ0FBQyxDQUFDLHdEQUF3RCxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxHQUFHO1lBQ2pHLENBQUMsQ0FBQyxFQUNOLEdBQ0UsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVU7WUFDckMsQ0FBQyxDQUFDLGtEQUFrRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxHQUFHO1lBQzlGLENBQUMsQ0FBQyxFQUNOOzs7OztjQUtNLENBQUMsQ0FBQztJQUNkLENBQUM7Q0FDRjtBQXhVRCw4Q0F3VUMifQ==
@@ -0,0 +1,27 @@
1
+ import * as apim from '@pulumi/azure-native/apimanagement';
2
+ import * as pulumi from '@pulumi/pulumi';
3
+ import { ApimApiSetArgs } from './ApimApiSet';
4
+ import { BaseResourceComponent, CommonBaseArgs } from '../base';
5
+ import { ApimPolicyBuilder } from './ApimPolicyBuilder';
6
+ import * as types from '../types';
7
+ export interface ApimProductArgs extends CommonBaseArgs, Omit<apim.ProductArgs, types.CommonProps | 'displayName' | 'subscriptionRequired'> {
8
+ displayName?: pulumi.Input<string>;
9
+ subscriptionRequired?: boolean;
10
+ enableDiagnostic?: boolean;
11
+ policyBuilder?: (policy: ApimPolicyBuilder) => ApimPolicyBuilder;
12
+ apiSets?: Array<Omit<ApimApiSetArgs, types.CommonProps | 'serviceName' | 'vaultInfo' | 'enableDiagnostic' | 'productId'> & {
13
+ name: string;
14
+ }>;
15
+ }
16
+ export declare class ApimProduct extends BaseResourceComponent<ApimProductArgs> {
17
+ readonly id: pulumi.Output<string>;
18
+ readonly resourceName: pulumi.Output<string>;
19
+ constructor(name: string, args: ApimProductArgs, opts?: pulumi.ComponentResourceOptions);
20
+ getOutputs(): {
21
+ id: pulumi.Output<string>;
22
+ resourceName: pulumi.Output<string>;
23
+ };
24
+ private buildProduct;
25
+ private buildSubscription;
26
+ private buildApiSets;
27
+ }
@@ -0,0 +1,118 @@
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.ApimProduct = void 0;
37
+ const apim = __importStar(require("@pulumi/azure-native/apimanagement"));
38
+ const pulumi = __importStar(require("@pulumi/pulumi"));
39
+ const ApimApiSet_1 = require("./ApimApiSet");
40
+ const base_1 = require("../base");
41
+ const ApimPolicyBuilder_1 = require("./ApimPolicyBuilder");
42
+ class ApimProduct extends base_1.BaseResourceComponent {
43
+ id;
44
+ resourceName;
45
+ constructor(name, args, opts) {
46
+ super('ApimProduct', name, args, opts);
47
+ const product = this.buildProduct();
48
+ this.buildSubscription(product);
49
+ this.buildApiSets(product);
50
+ this.id = product.id;
51
+ this.resourceName = product.name;
52
+ this.registerOutputs();
53
+ }
54
+ getOutputs() {
55
+ return {
56
+ id: this.id,
57
+ resourceName: this.resourceName,
58
+ };
59
+ }
60
+ buildProduct() {
61
+ const { rsGroup, productId, displayName, description, policyBuilder, serviceName, approvalRequired, apiSets, enableDiagnostic, groupRoles, vaultInfo, subscriptionRequired = true, subscriptionsLimit = 5, ...others } = this.args;
62
+ const product = new apim.Product(this.name, {
63
+ ...rsGroup,
64
+ ...others,
65
+ serviceName,
66
+ approvalRequired: subscriptionRequired ? approvalRequired : undefined,
67
+ subscriptionRequired: subscriptionRequired ?? true,
68
+ subscriptionsLimit: subscriptionRequired ? subscriptionsLimit : undefined,
69
+ productId: productId ?? this.name,
70
+ displayName: displayName ?? this.name,
71
+ description: description ?? this.name,
72
+ }, { ...this.opts, parent: this });
73
+ if (policyBuilder) {
74
+ new apim.ProductPolicy(`${this.name}-policy`, {
75
+ ...rsGroup,
76
+ serviceName,
77
+ productId: productId ?? this.name,
78
+ format: 'xml',
79
+ policyId: 'policy',
80
+ value: policyBuilder(new ApimPolicyBuilder_1.ApimPolicyBuilder()).build(),
81
+ }, { dependsOn: product, deletedWith: product, parent: this });
82
+ }
83
+ return product;
84
+ }
85
+ buildSubscription(product) {
86
+ const { productId, serviceName, rsGroup, subscriptionRequired } = this.args;
87
+ if (!subscriptionRequired)
88
+ return;
89
+ const subName = `${this.name}-sub`;
90
+ const primaryKey = `apim-${subName}-primary`;
91
+ const secondaryKey = `apim-${subName}-secondary`;
92
+ const primaryPass = this.createPassword({ name: primaryKey, length: 50, policy: 'yearly' });
93
+ const secondaryPass = this.createPassword({ name: secondaryKey, length: 50, policy: 'yearly' });
94
+ const sub = new apim.Subscription(subName, {
95
+ ...rsGroup,
96
+ sid: subName,
97
+ displayName: subName,
98
+ serviceName,
99
+ scope: pulumi.interpolate `/products/${productId ?? this.name}`,
100
+ state: 'active',
101
+ primaryKey: primaryPass.value,
102
+ secondaryKey: secondaryPass.value,
103
+ }, { dependsOn: [product, primaryPass, secondaryPass], deletedWith: product, parent: this });
104
+ this.addSecrets({
105
+ [primaryKey]: primaryPass.value,
106
+ [secondaryKey]: secondaryPass.value,
107
+ });
108
+ return sub;
109
+ }
110
+ buildApiSets(product) {
111
+ const { productId, rsGroup, serviceName, enableDiagnostic, subscriptionRequired, apiSets } = this.args;
112
+ if (!apiSets)
113
+ return;
114
+ return apiSets.map((s) => new ApimApiSet_1.ApimApiSet(s.name, { ...s, rsGroup, serviceName, productId: productId ?? this.name, enableDiagnostic, subscriptionRequired }, { dependsOn: product, deletedWith: product, parent: this }));
115
+ }
116
+ }
117
+ exports.ApimProduct = ApimProduct;
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBpbVByb2R1Y3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpbS9BcGltUHJvZHVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5RUFBMkQ7QUFDM0QsdURBQXlDO0FBRXpDLDZDQUEwRDtBQUMxRCxrQ0FBZ0U7QUFFaEUsMkRBQXdEO0FBaUJ4RCxNQUFhLFdBQVksU0FBUSw0QkFBc0M7SUFDckQsRUFBRSxDQUF3QjtJQUMxQixZQUFZLENBQXdCO0lBRXBELFlBQVksSUFBWSxFQUFFLElBQXFCLEVBQUUsSUFBc0M7UUFDckYsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXZDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUzQixJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU0sVUFBVTtRQUNmLE9BQU87WUFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDWCxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDaEMsQ0FBQztJQUNKLENBQUM7SUFFTyxZQUFZO1FBQ2xCLE1BQU0sRUFDSixPQUFPLEVBQ1AsU0FBUyxFQUNULFdBQVcsRUFDWCxXQUFXLEVBQ1gsYUFBYSxFQUNiLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLGdCQUFnQixFQUNoQixVQUFVLEVBQ1YsU0FBUyxFQUNULG9CQUFvQixHQUFH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
@@ -0,0 +1,2 @@
1
+ export * from './Apim';
2
+ export * from './ApimPolicyBuilder';
package/apim/index.js ADDED
@@ -0,0 +1,19 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./Apim"), exports);
18
+ __exportStar(require("./ApimPolicyBuilder"), exports);
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpbS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseUNBQXVCO0FBQ3ZCLHNEQUFvQyJ9
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Validation schema for OpenAPI Specification 3.0.X.
3
+ */
4
+ export interface OpenAPI3 {
5
+ components?: Components;
6
+ externalDocs?: ExternalDocumentation;
7
+ info: Info;
8
+ openapi: string;
9
+ paths: Paths;
10
+ security?: {
11
+ [key: string]: string[];
12
+ }[];
13
+ servers?: Server[];
14
+ tags?: Tag[];
15
+ }
16
+ export interface Components {
17
+ callbacks?: {
18
+ [key: string]: any;
19
+ };
20
+ examples?: {
21
+ [key: string]: any;
22
+ };
23
+ headers?: {
24
+ [key: string]: any;
25
+ };
26
+ links?: {
27
+ [key: string]: any;
28
+ };
29
+ parameters?: {
30
+ [key: string]: any;
31
+ };
32
+ requestBodies?: {
33
+ [key: string]: any;
34
+ };
35
+ responses?: {
36
+ [key: string]: any;
37
+ };
38
+ schemas?: {
39
+ [key: string]: any;
40
+ };
41
+ securitySchemes?: {
42
+ [key: string]: any;
43
+ };
44
+ }
45
+ export interface ExternalDocumentation {
46
+ description?: string;
47
+ url: string;
48
+ }
49
+ export interface Info {
50
+ contact?: Contact;
51
+ description?: string;
52
+ license?: License;
53
+ termsOfService?: string;
54
+ title: string;
55
+ version: string;
56
+ }
57
+ export interface Contact {
58
+ email?: string;
59
+ name?: string;
60
+ url?: string;
61
+ }
62
+ export interface License {
63
+ name: string;
64
+ url?: string;
65
+ }
66
+ export interface Paths {
67
+ [key: string]: any;
68
+ }
69
+ export interface Server {
70
+ description?: string;
71
+ url: string;
72
+ variables?: {
73
+ [key: string]: ServerVariable;
74
+ };
75
+ }
76
+ export interface ServerVariable {
77
+ default: string;
78
+ description?: string;
79
+ enum?: string[];
80
+ }
81
+ export interface Tag {
82
+ description?: string;
83
+ externalDocs?: ExternalDocumentation;
84
+ name: string;
85
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbkFQSTNUeXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaW0vb3BlbkFQSTNUeXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==