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,249 @@
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.CloudFrontWebAcl = exports.Country = void 0;
37
+ const core = __importStar(require("aws-cdk-lib"));
38
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
39
+ const constructs = __importStar(require("constructs"));
40
+ const countries_1 = require("./countries");
41
+ var countries_2 = require("./countries");
42
+ Object.defineProperty(exports, "Country", { enumerable: true, get: function () { return countries_2.Country; } });
43
+ /**
44
+ * Creates a WAF WebACL in us-east-1 for use with CloudFront.
45
+ *
46
+ * CloudFront requires WAF WebACLs to be in us-east-1 with CLOUDFRONT scope.
47
+ * This construct uses a custom resource to create the WebACL in us-east-1
48
+ * regardless of the stack's region.
49
+ *
50
+ * Provides sensible defaults with AWS managed rules for common threats.
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * const webAcl = new CloudFrontWebAcl(this, 'WebAcl', {
55
+ * name: 'MyCloudFrontWebAcl',
56
+ * rateLimit: 10000, // Default for all paths
57
+ * pathRateLimits: [
58
+ * { path: '/oauth2/callback', rateLimit: 100 },
59
+ * { path: '/oauth2/authorize', rateLimit: 100 },
60
+ * { path: '/api/auth', rateLimit: 500 },
61
+ * ],
62
+ * allowedCountries: ['UnitedStates', 'Canada', 'UnitedKingdom'],
63
+ * });
64
+ *
65
+ * new cloudfront.Distribution(this, 'Distribution', {
66
+ * webAclId: webAcl.webAclArn,
67
+ * // ...
68
+ * });
69
+ * ```
70
+ */
71
+ class CloudFrontWebAcl extends constructs.Construct {
72
+ constructor(scope, id, props = {}) {
73
+ super(scope, id);
74
+ if (props.allowedCountries && props.blockedCountries) {
75
+ throw new Error('Cannot specify both allowedCountries and blockedCountries');
76
+ }
77
+ const name = props.name || `${core.Stack.of(this).stackName}-cloudfront-waf`;
78
+ const enableManagedRules = props.enableManagedRules ?? true;
79
+ const rateLimit = props.rateLimit ?? 2000;
80
+ const pathRateLimits = props.pathRateLimits ?? [];
81
+ const allowedCountries = props.allowedCountries?.map(c => countries_1.Country[c]) ?? [];
82
+ const blockedCountries = props.blockedCountries?.map(c => countries_1.Country[c]) ?? [];
83
+ const rules = this.buildRules(enableManagedRules, rateLimit, pathRateLimits, allowedCountries, blockedCountries);
84
+ this.webAcl = new aws_cdk_lib_1.aws_wafv2.CfnWebACL(this, 'WebACL', {
85
+ scope: 'CLOUDFRONT',
86
+ defaultAction: { allow: {} },
87
+ rules: rules,
88
+ visibilityConfig: {
89
+ sampledRequestsEnabled: true,
90
+ cloudWatchMetricsEnabled: true,
91
+ metricName: name,
92
+ },
93
+ name: name,
94
+ });
95
+ this.webAclArn = this.webAcl.attrArn;
96
+ this.webAclId = this.webAcl.attrId;
97
+ }
98
+ buildRules(enableManagedRules, rateLimit, pathRateLimits, allowedCountries, blockedCountries) {
99
+ const rules = [];
100
+ let priority = 0;
101
+ if (allowedCountries.length > 0) {
102
+ rules.push({
103
+ name: 'GeoAllowRule',
104
+ priority: priority++,
105
+ statement: {
106
+ notStatement: {
107
+ statement: {
108
+ geoMatchStatement: {
109
+ countryCodes: allowedCountries,
110
+ },
111
+ },
112
+ },
113
+ },
114
+ action: { block: {} },
115
+ visibilityConfig: {
116
+ sampledRequestsEnabled: true,
117
+ cloudWatchMetricsEnabled: true,
118
+ metricName: 'GeoAllowRule',
119
+ },
120
+ });
121
+ }
122
+ if (blockedCountries.length > 0) {
123
+ rules.push({
124
+ name: 'GeoBlockRule',
125
+ priority: priority++,
126
+ statement: {
127
+ geoMatchStatement: {
128
+ countryCodes: blockedCountries,
129
+ },
130
+ },
131
+ action: { block: {} },
132
+ visibilityConfig: {
133
+ sampledRequestsEnabled: true,
134
+ cloudWatchMetricsEnabled: true,
135
+ metricName: 'GeoBlockRule',
136
+ },
137
+ });
138
+ }
139
+ pathRateLimits.forEach((pathLimit, idx) => {
140
+ const ruleName = pathLimit.name || `PathRateLimit${idx}`;
141
+ rules.push({
142
+ name: ruleName,
143
+ priority: priority++,
144
+ statement: {
145
+ rateBasedStatement: {
146
+ limit: pathLimit.rateLimit,
147
+ aggregateKeyType: 'IP',
148
+ scopeDownStatement: {
149
+ byteMatchStatement: {
150
+ searchString: pathLimit.path,
151
+ fieldToMatch: { uriPath: {} },
152
+ textTransformations: [{ priority: 0, type: 'NONE' }],
153
+ positionalConstraint: pathLimit.path.includes('*') ? 'CONTAINS' : 'STARTS_WITH',
154
+ },
155
+ },
156
+ },
157
+ },
158
+ action: { block: {} },
159
+ visibilityConfig: {
160
+ sampledRequestsEnabled: true,
161
+ cloudWatchMetricsEnabled: true,
162
+ metricName: ruleName,
163
+ },
164
+ });
165
+ });
166
+ rules.push({
167
+ name: 'RateLimitRule',
168
+ priority: priority++,
169
+ statement: {
170
+ rateBasedStatement: {
171
+ limit: rateLimit,
172
+ aggregateKeyType: 'IP',
173
+ },
174
+ },
175
+ action: { block: {} },
176
+ visibilityConfig: {
177
+ sampledRequestsEnabled: true,
178
+ cloudWatchMetricsEnabled: true,
179
+ metricName: 'RateLimitRule',
180
+ },
181
+ });
182
+ if (enableManagedRules) {
183
+ rules.push({
184
+ name: 'AWSManagedRulesCommonRuleSet',
185
+ priority: priority++,
186
+ statement: {
187
+ managedRuleGroupStatement: {
188
+ vendorName: 'AWS',
189
+ name: 'AWSManagedRulesCommonRuleSet',
190
+ },
191
+ },
192
+ overrideAction: { none: {} },
193
+ visibilityConfig: {
194
+ sampledRequestsEnabled: true,
195
+ cloudWatchMetricsEnabled: true,
196
+ metricName: 'AWSManagedRulesCommonRuleSet',
197
+ },
198
+ }, {
199
+ name: 'AWSManagedRulesKnownBadInputsRuleSet',
200
+ priority: priority++,
201
+ statement: {
202
+ managedRuleGroupStatement: {
203
+ vendorName: 'AWS',
204
+ name: 'AWSManagedRulesKnownBadInputsRuleSet',
205
+ },
206
+ },
207
+ overrideAction: { none: {} },
208
+ visibilityConfig: {
209
+ sampledRequestsEnabled: true,
210
+ cloudWatchMetricsEnabled: true,
211
+ metricName: 'AWSManagedRulesKnownBadInputsRuleSet',
212
+ },
213
+ }, {
214
+ name: 'AWSManagedRulesAmazonIpReputationList',
215
+ priority: priority++,
216
+ statement: {
217
+ managedRuleGroupStatement: {
218
+ vendorName: 'AWS',
219
+ name: 'AWSManagedRulesAmazonIpReputationList',
220
+ },
221
+ },
222
+ overrideAction: { none: {} },
223
+ visibilityConfig: {
224
+ sampledRequestsEnabled: true,
225
+ cloudWatchMetricsEnabled: true,
226
+ metricName: 'AWSManagedRulesAmazonIpReputationList',
227
+ },
228
+ }, {
229
+ name: 'AWSManagedRulesAnonymousIpList',
230
+ priority: priority++,
231
+ statement: {
232
+ managedRuleGroupStatement: {
233
+ vendorName: 'AWS',
234
+ name: 'AWSManagedRulesAnonymousIpList',
235
+ },
236
+ },
237
+ overrideAction: { none: {} },
238
+ visibilityConfig: {
239
+ sampledRequestsEnabled: true,
240
+ cloudWatchMetricsEnabled: true,
241
+ metricName: 'AWSManagedRulesAnonymousIpList',
242
+ },
243
+ });
244
+ }
245
+ return rules;
246
+ }
247
+ }
248
+ exports.CloudFrontWebAcl = CloudFrontWebAcl;
249
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRmcm9udFdlYkFjbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbG91ZGZyb250L2Nsb3VkZnJvbnRXZWJBY2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0RBQW9DO0FBQ3BDLDZDQUVxQjtBQUNyQix1REFBeUM7QUFDekMsMkNBQXNDO0FBRXRDLHlDQUFtRDtBQUExQyxvR0FBQSxPQUFPLE9BQUE7QUFvQ2hCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7QUFDSCxNQUFhLGdCQUFpQixTQUFRLFVBQVUsQ0FBQyxTQUFTO0lBUXhELFlBQVksS0FBMkIsRUFBRSxFQUFVLEVBQUUsUUFBK0IsRUFBRTtRQUNwRixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksS0FBSyxDQUFDLGdCQUFnQixJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JELE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsaUJBQWlCLENBQUM7UUFDN0UsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDO1FBQzVELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDO1FBQzFDLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDO1FBQ2xELE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLG1CQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFB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O29CQUNULHlCQUF5QixFQUFFO3dCQUN6QixVQUFVLEVBQUUsS0FBSzt3QkFDakIsSUFBSSxFQUFFLGdDQUFnQztxQkFDdkM7aUJBQ0Y7Z0JBQ0QsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtnQkFDNUIsZ0JBQWdCLEVBQUU7b0JBQ2hCLHNCQUFzQixFQUFFLElBQUk7b0JBQzVCLHdCQUF3QixFQUFFLElBQUk7b0JBQzlCLFVBQVUsRUFBRSxnQ0FBZ0M7aUJBQzdDO2FBQ0YsQ0FDRixDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGO0FBOU1ELDRDQThNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNvcmUgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHtcbiAgYXdzX3dhZnYyIGFzIHdhZnYyLFxufSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBjb25zdHJ1Y3RzIGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQ291bnRyeSB9IGZyb20gJy4vY291bnRyaWVzJztcblxuZXhwb3J0IHsgQ291bnRyeSwgQ291bnRyeUNvZGUgfSBmcm9tICcuL2NvdW50cmllcyc7XG5cbmV4cG9ydCB0eXBlIENvdW50cnlOYW1lID0ga2V5b2YgdHlwZW9mIENvdW50cnk7XG5cbi8qKlxuICogUGF0aC1zcGVjaWZpYyByYXRlIGxpbWl0IGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF0aFJhdGVMaW1pdCB7XG4gIC8qKiBVUkkgcGF0aCBwYXR0ZXJuIChlLmcuLCAnL29hdXRoMi9jYWxsYmFjaycsICcvYXBpL2F1dGgvKicpICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbiAgLyoqIFJhdGUgbGltaXQgZm9yIHRoaXMgcGF0aCAocmVxdWVzdHMgcGVyIDUgbWludXRlcykgKi9cbiAgcmVhZG9ubHkgcmF0ZUxpbWl0OiBudW1iZXI7XG4gIC8qKiBPcHRpb25hbCBuYW1lIGZvciB0aGUgcnVsZSAoYXV0by1nZW5lcmF0ZWQgaWYgbm90IHByb3ZpZGVkKSAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIENsb3VkRnJvbnRXZWJBY2wgY29uc3RydWN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkRnJvbnRXZWJBY2xQcm9wcyB7XG4gIC8qKiBOYW1lIGZvciB0aGUgV2ViIEFDTCAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICAvKiogV2hldGhlciB0byBlbmFibGUgQVdTIG1hbmFnZWQgcnVsZXMgKGRlZmF1bHQ6IHRydWUpICovXG4gIHJlYWRvbmx5IGVuYWJsZU1hbmFnZWRSdWxlcz86IGJvb2xlYW47XG4gIC8qKiBDdXN0b20gcnVsZXMgdG8gYWRkIHRvIHRoZSBXZWIgQUNMICovXG4gIHJlYWRvbmx5IHJ1bGVzPzogd2FmdjIuQ2ZuV2ViQUNMLlJ1bGVQcm9wZXJ0eVtdO1xuICAvKiogUmF0ZSBsaW1pdCBmb3IgcmVxdWVzdHMgcGVyIDUgbWludXRlcyAoZGVmYXVsdDogMjAwMCkgKi9cbiAgcmVhZG9ubHkgcmF0ZUxpbWl0PzogbnVtYmVyO1xuICAvKiogUGF0aC1zcGVjaWZpYyByYXRlIGxpbWl0cyAob3ZlcnJpZGVzIGRlZmF1bHQgcmF0ZUxpbWl0IGZvciBtYXRjaGluZyBwYXRocykgKi9cbiAgcmVhZG9ubHkgcGF0aFJhdGVMaW1pdHM/OiBQYXRoUmF0ZUxpbWl0W107XG4gIC8qKiBBbGxvdyByZXF1ZXN0cyBvbmx5IGZyb20gdGhlc2UgY291bnRyaWVzIChhbGwgb3RoZXJzIGJsb2NrZWQpICovXG4gIHJlYWRvbmx5IGFsbG93ZWRDb3VudHJpZXM/OiBDb3VudHJ5TmFtZVtdO1xuICAvKiogQmxvY2sgcmVxdWVzdHMgZnJvbSB0aGVzZSBjb3VudHJpZXMgKGFsbCBvdGhlcnMgYWxsb3dlZCkgKi9cbiAgcmVhZG9ubHkgYmxvY2tlZENvdW50cmllcz86IENvdW50cnlOYW1lW107XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIFdBRiBXZWJBQ0wgaW4gdXMtZWFzdC0xIGZvciB1c2Ugd2l0aCBDbG91ZEZyb250LlxuICpcbiAqIENsb3VkRnJvbnQgcmVxdWlyZXMgV0FGIFdlYkFDTHMgdG8gYmUgaW4gdXMtZWFzdC0xIHdpdGggQ0xPVURGUk9OVCBzY29wZS5cbiAqIFRoaXMgY29uc3RydWN0IHVzZXMgYSBjdXN0b20gcmVzb3VyY2UgdG8gY3JlYXRlIHRoZSBXZWJBQ0wgaW4gdXMtZWFzdC0xXG4gKiByZWdhcmRsZXNzIG9mIHRoZSBzdGFjaydzIHJlZ2lvbi5cbiAqXG4gKiBQcm92aWRlcyBzZW5zaWJsZSBkZWZhdWx0cyB3aXRoIEFXUyBtYW5hZ2VkIHJ1bGVzIGZvciBjb21tb24gdGhyZWF0cy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgd2ViQWNsID0gbmV3IENsb3VkRnJvbnRXZWJBY2wodGhpcywgJ1dlYkFjbCcsIHtcbiAqICAgbmFtZTogJ015Q2xvdWRGcm9udFdlYkFjbCcsXG4gKiAgIHJhdGVMaW1pdDogMTAwMDAsIC8vIERlZmF1bHQgZm9yIGFsbCBwYXRoc1xuICogICBwYXRoUmF0ZUxpbWl0czogW1xuICogICAgIHsgcGF0aDogJy9vYXV0aDIvY2FsbGJhY2snLCByYXRlTGltaXQ6IDEwMCB9LFxuICogICAgIHsgcGF0aDogJy9vYXV0aDIvYXV0aG9yaXplJywgcmF0ZUxpbWl0OiAxMDAgfSxcbiAqICAgICB7IHBhdGg6ICcvYXBpL2F1dGgnLCByYXRlTGltaXQ6IDUwMCB9LFxuICogICBdLFxuICogICBhbGxvd2VkQ291bnRyaWVzOiBbJ1VuaXRlZFN0YXRlcycsICdDYW5hZGEnLCAnVW5pdGVkS2luZ2RvbSddLFxuICogfSk7XG4gKlxuICogbmV3IGNsb3VkZnJvbnQuRGlzdHJpYnV0aW9uKHRoaXMsICdEaXN0cmlidXRpb24nLCB7XG4gKiAgIHdlYkFjbElkOiB3ZWJBY2wud2ViQWNsQXJuLFxuICogICAvLyAuLi5cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBDbG91ZEZyb250V2ViQWNsIGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICAvKiogVGhlIFdlYkFDTCBBUk4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHdlYkFjbEFybjogc3RyaW5nO1xuICAvKiogVGhlIFdlYkFDTCBJRCAqL1xuICBwdWJsaWMgcmVhZG9ubHkgd2ViQWNsSWQ6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IHdlYkFjbDogd2FmdjIuQ2ZuV2ViQUNMO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENsb3VkRnJvbnRXZWJBY2xQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGlmIChwcm9wcy5hbGxvd2VkQ291bnRyaWVzICYmIHByb3BzLmJsb2NrZWRDb3VudHJpZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHNwZWNpZnkgYm90aCBhbGxvd2VkQ291bnRyaWVzIGFuZCBibG9ja2VkQ291bnRyaWVzJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZSA9IHByb3BzLm5hbWUgfHwgYCR7Y29yZS5TdGFjay5vZih0aGlzKS5zdGFja05hbWV9LWNsb3VkZnJvbnQtd2FmYDtcbiAgICBjb25zdCBlbmFibGVNYW5hZ2VkUnVsZXMgPSBwcm9wcy5lbmFibGVNYW5hZ2VkUnVsZXMgPz8gdHJ1ZTtcbiAgICBjb25zdCByYXRlTGltaXQgPSBwcm9wcy5yYXRlTGltaXQgPz8gMjAwMDtcbiAgICBjb25zdCBwYXRoUmF0ZUxpbWl0cyA9IHByb3BzLnBhdGhSYXRlTGltaXRzID8/IFtdO1xuICAgIGNvbnN0IGFsbG93ZWRDb3VudHJpZXMgPSBwcm9wcy5hbGxvd2VkQ291bnRyaWVzPy5tYXAoYyA9PiBDb3VudHJ5W2NdKSA/PyBbXTtcbiAgICBjb25zdCBibG9ja2VkQ291bnRyaWVzID0gcHJvcHMuYmxvY2tlZENvdW50cmllcz8ubWFwKGMgPT4gQ291bnRyeVtjXSkgPz8gW107XG5cbiAgICBjb25zdCBydWxlcyA9IHRoaXMuYnVpbGRSdWxlcyhlbmFibGVNYW5hZ2VkUnVsZXMsIHJhdGVMaW1pdCwgcGF0aFJhdGVMaW1pdHMsIGFsbG93ZWRDb3VudHJpZXMsIGJsb2NrZWRDb3VudHJpZXMpO1xuXG4gICAgdGhpcy53ZWJBY2wgPSBuZXcgd2FmdjIuQ2ZuV2ViQUNMKHRoaXMsICdXZWJBQ0wnLCB7XG4gICAgICBzY29wZTogJ0NMT1VERlJPTlQnLFxuICAgICAgZGVmYXVsdEFjdGlvbjogeyBhbGxvdzoge30gfSxcbiAgICAgIHJ1bGVzOiBydWxlcyxcbiAgICAgIHZpc2liaWxpdHlDb25maWc6IHtcbiAgICAgICAgc2FtcGxlZFJlcXVlc3RzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgY2xvdWRXYXRjaE1ldHJpY3NFbmFibGVkOiB0cnVlLFxuICAgICAgICBtZXRyaWNOYW1lOiBuYW1lLFxuICAgICAgfSxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLndlYkFjbEFybiA9IHRoaXMud2ViQWNsLmF0dHJBcm47XG4gICAgdGhpcy53ZWJBY2xJZCA9IHRoaXMud2ViQWNsLmF0dHJJZDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRSdWxlcyhcbiAgICBlbmFibGVNYW5hZ2VkUnVsZXM6IGJvb2xlYW4sXG4gICAgcmF0ZUxpbWl0OiBudW1iZXIsXG4gICAgcGF0aFJhdGVMaW1pdHM6IFBhdGhSYXRlTGltaXRbXSxcbiAgICBhbGxvd2VkQ291bnRyaWVzOiBzdHJpbmdbXSxcbiAgICBibG9ja2VkQ291bnRyaWVzOiBzdHJpbmdbXSxcbiAgKTogd2FmdjIuQ2ZuV2ViQUNMLlJ1bGVQcm9wZXJ0eVtdIHtcbiAgICBjb25zdCBydWxlczogd2FmdjIuQ2ZuV2ViQUNMLlJ1bGVQcm9wZXJ0eVtdID0gW107XG4gICAgbGV0IHByaW9yaXR5ID0gMDtcblxuICAgIGlmIChhbGxvd2VkQ291bnRyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJ1bGVzLnB1c2goe1xuICAgICAgICBuYW1lOiAnR2VvQWxsb3dSdWxlJyxcbiAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5KyssXG4gICAgICAgIHN0YXRlbWVudDoge1xuICAgICAgICAgIG5vdFN0YXRlbWVudDoge1xuICAgICAgICAgICAgc3RhdGVtZW50OiB7XG4gICAgICAgICAgICAgIGdlb01hdGNoU3RhdGVtZW50OiB7XG4gICAgICAgICAgICAgICAgY291bnRyeUNvZGVzOiBhbGxvd2VkQ291bnRyaWVzLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhY3Rpb246IHsgYmxvY2s6IHt9IH0sXG4gICAgICAgIHZpc2liaWxpdHlDb25maWc6IHtcbiAgICAgICAgICBzYW1wbGVkUmVxdWVzdHNFbmFibGVkOiB0cnVlLFxuICAgICAgICAgIGNsb3VkV2F0Y2hNZXRyaWNzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICBtZXRyaWNOYW1lOiAnR2VvQWxsb3dSdWxlJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChibG9ja2VkQ291bnRyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJ1bGVzLnB1c2goe1xuICAgICAgICBuYW1lOiAnR2VvQmxvY2tSdWxlJyxcbiAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5KyssXG4gICAgICAgIHN0YXRlbWVudDoge1xuICAgICAgICAgIGdlb01hdGNoU3RhdGVtZW50OiB7XG4gICAgICAgICAgICBjb3VudHJ5Q29kZXM6IGJsb2NrZWRDb3VudHJpZXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYWN0aW9uOiB7IGJsb2NrOiB7fSB9LFxuICAgICAgICB2aXNpYmlsaXR5Q29uZmlnOiB7XG4gICAgICAgICAgc2FtcGxlZFJlcXVlc3RzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICBjbG91ZFdhdGNoTWV0cmljc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgbWV0cmljTmFtZTogJ0dlb0Jsb2NrUnVsZScsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBwYXRoUmF0ZUxpbWl0cy5mb3JFYWNoKChwYXRoTGltaXQsIGlkeCkgPT4ge1xuICAgICAgY29uc3QgcnVsZU5hbWUgPSBwYXRoTGltaXQubmFtZSB8fCBgUGF0aFJhdGVMaW1pdCR7aWR4fWA7XG4gICAgICBydWxlcy5wdXNoKHtcbiAgICAgICAgbmFtZTogcnVsZU5hbWUsXG4gICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSsrLFxuICAgICAgICBzdGF0ZW1lbnQ6IHtcbiAgICAgICAgICByYXRlQmFzZWRTdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgIGxpbWl0OiBwYXRoTGltaXQucmF0ZUxpbWl0LFxuICAgICAgICAgICAgYWdncmVnYXRlS2V5VHlwZTogJ0lQJyxcbiAgICAgICAgICAgIHNjb3BlRG93blN0YXRlbWVudDoge1xuICAgICAgICAgICAgICBieXRlTWF0Y2hTdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICBzZWFyY2hTdHJpbmc6IHBhdGhMaW1pdC5wYXRoLFxuICAgICAgICAgICAgICAgIGZpZWxkVG9NYXRjaDogeyB1cmlQYXRoOiB7fSB9LFxuICAgICAgICAgICAgICAgIHRleHRUcmFuc2Zvcm1hdGlvbnM6IFt7IHByaW9yaXR5OiAwLCB0eXBlOiAnTk9ORScgfV0sXG4gICAgICAgICAgICAgICAgcG9zaXRpb25hbENvbnN0cmFpbnQ6IHBhdGhMaW1pdC5wYXRoLmluY2x1ZGVzKCcqJykgPyAnQ09OVEFJTlMnIDogJ1NUQVJUU19XSVRIJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYWN0aW9uOiB7IGJsb2NrOiB7fSB9LFxuICAgICAgICB2aXNpYmlsaXR5Q29uZmlnOiB7XG4gICAgICAgICAgc2FtcGxlZFJlcXVlc3RzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICBjbG91ZFdhdGNoTWV0cmljc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgbWV0cmljTmFtZTogcnVsZU5hbWUsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJ1bGVzLnB1c2goe1xuICAgICAgbmFtZTogJ1JhdGVMaW1pdFJ1bGUnLFxuICAgICAgcHJpb3JpdHk6IHByaW9yaXR5KyssXG4gICAgICBzdGF0ZW1lbnQ6IHtcbiAgICAgICAgcmF0ZUJhc2VkU3RhdGVtZW50OiB7XG4gICAgICAgICAgbGltaXQ6IHJhdGVMaW1pdCxcbiAgICAgICAgICBhZ2dyZWdhdGVLZXlUeXBlOiAnSVAnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGFjdGlvbjogeyBibG9jazoge30gfSxcbiAgICAgIHZpc2liaWxpdHlDb25maWc6IHtcbiAgICAgICAgc2FtcGxlZFJlcXVlc3RzRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgY2xvdWRXYXRjaE1ldHJpY3NFbmFibGVkOiB0cnVlLFxuICAgICAgICBtZXRyaWNOYW1lOiAnUmF0ZUxpbWl0UnVsZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgaWYgKGVuYWJsZU1hbmFnZWRSdWxlcykge1xuICAgICAgcnVsZXMucHVzaChcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdBV1NNYW5hZ2VkUnVsZXNDb21tb25SdWxlU2V0JyxcbiAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHkrKyxcbiAgICAgICAgICBzdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgIG1hbmFnZWRSdWxlR3JvdXBTdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgICAgdmVuZG9yTmFtZTogJ0FXUycsXG4gICAgICAgICAgICAgIG5hbWU6ICdBV1NNYW5hZ2VkUnVsZXNDb21tb25SdWxlU2V0JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvdmVycmlkZUFjdGlvbjogeyBub25lOiB7fSB9LFxuICAgICAgICAgIHZpc2liaWxpdHlDb25maWc6IHtcbiAgICAgICAgICAgIHNhbXBsZWRSZXF1ZXN0c0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICBjbG91ZFdhdGNoTWV0cmljc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICBtZXRyaWNOYW1lOiAnQVdTTWFuYWdlZFJ1bGVzQ29tbW9uUnVsZVNldCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdBV1NNYW5hZ2VkUnVsZXNLbm93bkJhZElucHV0c1J1bGVTZXQnLFxuICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSsrLFxuICAgICAgICAgIHN0YXRlbWVudDoge1xuICAgICAgICAgICAgbWFuYWdlZFJ1bGVHcm91cFN0YXRlbWVudDoge1xuICAgICAgICAgICAgICB2ZW5kb3JOYW1lOiAnQVdTJyxcbiAgICAgICAgICAgICAgbmFtZTogJ0FXU01hbmFnZWRSdWxlc0tub3duQmFkSW5wdXRzUnVsZVNldCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb3ZlcnJpZGVBY3Rpb246IHsgbm9uZToge30gfSxcbiAgICAgICAgICB2aXNpYmlsaXR5Q29uZmlnOiB7XG4gICAgICAgICAgICBzYW1wbGVkUmVxdWVzdHNFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgY2xvdWRXYXRjaE1ldHJpY3NFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgbWV0cmljTmFtZTogJ0FXU01hbmFnZWRSdWxlc0tub3duQmFkSW5wdXRzUnVsZVNldCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdBV1NNYW5hZ2VkUnVsZXNBbWF6b25JcFJlcHV0YXRpb25MaXN0JyxcbiAgICAgICAgICBwcmlvcml0eTogcHJpb3JpdHkrKyxcbiAgICAgICAgICBzdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgIG1hbmFnZWRSdWxlR3JvdXBTdGF0ZW1lbnQ6IHtcbiAgICAgICAgICAgICAgdmVuZG9yTmFtZTogJ0FXUycsXG4gICAgICAgICAgICAgIG5hbWU6ICdBV1NNYW5hZ2VkUnVsZXNBbWF6b25JcFJlcHV0YXRpb25MaXN0JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvdmVycmlkZUFjdGlvbjogeyBub25lOiB7fSB9LFxuICAgICAgICAgIHZpc2liaWxpdHlDb25maWc6IHtcbiAgICAgICAgICAgIHNhbXBsZWRSZXF1ZXN0c0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICBjbG91ZFdhdGNoTWV0cmljc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICBtZXRyaWNOYW1lOiAnQVdTTWFuYWdlZFJ1bGVzQW1hem9uSXBSZXB1dGF0aW9uTGlzdCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdBV1NNYW5hZ2VkUnVsZXNBbm9ueW1vdXNJcExpc3QnLFxuICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSsrLFxuICAgICAgICAgIHN0YXRlbWVudDoge1xuICAgICAgICAgICAgbWFuYWdlZFJ1bGVHcm91cFN0YXRlbWVudDoge1xuICAgICAgICAgICAgICB2ZW5kb3JOYW1lOiAnQVdTJyxcbiAgICAgICAgICAgICAgbmFtZTogJ0FXU01hbmFnZWRSdWxlc0Fub255bW91c0lwTGlzdCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb3ZlcnJpZGVBY3Rpb246IHsgbm9uZToge30gfSxcbiAgICAgICAgICB2aXNpYmlsaXR5Q29uZmlnOiB7XG4gICAgICAgICAgICBzYW1wbGVkUmVxdWVzdHNFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgY2xvdWRXYXRjaE1ldHJpY3NFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgbWV0cmljTmFtZTogJ0FXU01hbmFnZWRSdWxlc0Fub255bW91c0lwTGlzdCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGVzO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,260 @@
1
+ /**
2
+ * ISO 3166-1 alpha-2 country codes for use with CloudFront WAF geographic restrictions.
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * webAcl.allowGeographies([Country.NewZealand, Country.Australia, Country.UnitedKingdom]);
7
+ * ```
8
+ */
9
+ export declare const Country: {
10
+ readonly Afghanistan: "AF";
11
+ readonly AlandIslands: "AX";
12
+ readonly Albania: "AL";
13
+ readonly Algeria: "DZ";
14
+ readonly AmericanSamoa: "AS";
15
+ readonly Andorra: "AD";
16
+ readonly Angola: "AO";
17
+ readonly Anguilla: "AI";
18
+ readonly Antarctica: "AQ";
19
+ readonly AntiguaAndBarbuda: "AG";
20
+ readonly Argentina: "AR";
21
+ readonly Armenia: "AM";
22
+ readonly Aruba: "AW";
23
+ readonly Australia: "AU";
24
+ readonly Austria: "AT";
25
+ readonly Azerbaijan: "AZ";
26
+ readonly Bahamas: "BS";
27
+ readonly Bahrain: "BH";
28
+ readonly Bangladesh: "BD";
29
+ readonly Barbados: "BB";
30
+ readonly Belarus: "BY";
31
+ readonly Belgium: "BE";
32
+ readonly Belize: "BZ";
33
+ readonly Benin: "BJ";
34
+ readonly Bermuda: "BM";
35
+ readonly Bhutan: "BT";
36
+ readonly Bolivia: "BO";
37
+ readonly BonaireSintEustatiusAndSaba: "BQ";
38
+ readonly BosniaAndHerzegovina: "BA";
39
+ readonly Botswana: "BW";
40
+ readonly BouvetIsland: "BV";
41
+ readonly Brazil: "BR";
42
+ readonly BritishIndianOceanTerritory: "IO";
43
+ readonly BruneiDarussalam: "BN";
44
+ readonly Bulgaria: "BG";
45
+ readonly BurkinaFaso: "BF";
46
+ readonly Burundi: "BI";
47
+ readonly CaboVerde: "CV";
48
+ readonly Cambodia: "KH";
49
+ readonly Cameroon: "CM";
50
+ readonly Canada: "CA";
51
+ readonly CaymanIslands: "KY";
52
+ readonly CentralAfricanRepublic: "CF";
53
+ readonly Chad: "TD";
54
+ readonly Chile: "CL";
55
+ readonly China: "CN";
56
+ readonly ChristmasIsland: "CX";
57
+ readonly CocosKeelingIslands: "CC";
58
+ readonly Colombia: "CO";
59
+ readonly Comoros: "KM";
60
+ readonly Congo: "CG";
61
+ readonly CongoDemocraticRepublic: "CD";
62
+ readonly CookIslands: "CK";
63
+ readonly CostaRica: "CR";
64
+ readonly CoteDIvoire: "CI";
65
+ readonly Croatia: "HR";
66
+ readonly Cuba: "CU";
67
+ readonly Curacao: "CW";
68
+ readonly Cyprus: "CY";
69
+ readonly Czechia: "CZ";
70
+ readonly Denmark: "DK";
71
+ readonly Djibouti: "DJ";
72
+ readonly Dominica: "DM";
73
+ readonly DominicanRepublic: "DO";
74
+ readonly Ecuador: "EC";
75
+ readonly Egypt: "EG";
76
+ readonly ElSalvador: "SV";
77
+ readonly EquatorialGuinea: "GQ";
78
+ readonly Eritrea: "ER";
79
+ readonly Estonia: "EE";
80
+ readonly Eswatini: "SZ";
81
+ readonly Ethiopia: "ET";
82
+ readonly FalklandIslands: "FK";
83
+ readonly FaroeIslands: "FO";
84
+ readonly Fiji: "FJ";
85
+ readonly Finland: "FI";
86
+ readonly France: "FR";
87
+ readonly FrenchGuiana: "GF";
88
+ readonly FrenchPolynesia: "PF";
89
+ readonly FrenchSouthernTerritories: "TF";
90
+ readonly Gabon: "GA";
91
+ readonly Gambia: "GM";
92
+ readonly Georgia: "GE";
93
+ readonly Germany: "DE";
94
+ readonly Ghana: "GH";
95
+ readonly Gibraltar: "GI";
96
+ readonly Greece: "GR";
97
+ readonly Greenland: "GL";
98
+ readonly Grenada: "GD";
99
+ readonly Guadeloupe: "GP";
100
+ readonly Guam: "GU";
101
+ readonly Guatemala: "GT";
102
+ readonly Guernsey: "GG";
103
+ readonly Guinea: "GN";
104
+ readonly GuineaBissau: "GW";
105
+ readonly Guyana: "GY";
106
+ readonly Haiti: "HT";
107
+ readonly HeardIslandAndMcDonaldIslands: "HM";
108
+ readonly HolySee: "VA";
109
+ readonly Honduras: "HN";
110
+ readonly HongKong: "HK";
111
+ readonly Hungary: "HU";
112
+ readonly Iceland: "IS";
113
+ readonly India: "IN";
114
+ readonly Indonesia: "ID";
115
+ readonly Iran: "IR";
116
+ readonly Iraq: "IQ";
117
+ readonly Ireland: "IE";
118
+ readonly IsleOfMan: "IM";
119
+ readonly Israel: "IL";
120
+ readonly Italy: "IT";
121
+ readonly Jamaica: "JM";
122
+ readonly Japan: "JP";
123
+ readonly Jersey: "JE";
124
+ readonly Jordan: "JO";
125
+ readonly Kazakhstan: "KZ";
126
+ readonly Kenya: "KE";
127
+ readonly Kiribati: "KI";
128
+ readonly KoreaDemocraticPeoplesRepublic: "KP";
129
+ readonly KoreaRepublic: "KR";
130
+ readonly Kuwait: "KW";
131
+ readonly Kyrgyzstan: "KG";
132
+ readonly Lao: "LA";
133
+ readonly Latvia: "LV";
134
+ readonly Lebanon: "LB";
135
+ readonly Lesotho: "LS";
136
+ readonly Liberia: "LR";
137
+ readonly Libya: "LY";
138
+ readonly Liechtenstein: "LI";
139
+ readonly Lithuania: "LT";
140
+ readonly Luxembourg: "LU";
141
+ readonly Macao: "MO";
142
+ readonly Madagascar: "MG";
143
+ readonly Malawi: "MW";
144
+ readonly Malaysia: "MY";
145
+ readonly Maldives: "MV";
146
+ readonly Mali: "ML";
147
+ readonly Malta: "MT";
148
+ readonly MarshallIslands: "MH";
149
+ readonly Martinique: "MQ";
150
+ readonly Mauritania: "MR";
151
+ readonly Mauritius: "MU";
152
+ readonly Mayotte: "YT";
153
+ readonly Mexico: "MX";
154
+ readonly Micronesia: "FM";
155
+ readonly Moldova: "MD";
156
+ readonly Monaco: "MC";
157
+ readonly Mongolia: "MN";
158
+ readonly Montenegro: "ME";
159
+ readonly Montserrat: "MS";
160
+ readonly Morocco: "MA";
161
+ readonly Mozambique: "MZ";
162
+ readonly Myanmar: "MM";
163
+ readonly Namibia: "NA";
164
+ readonly Nauru: "NR";
165
+ readonly Nepal: "NP";
166
+ readonly Netherlands: "NL";
167
+ readonly NewCaledonia: "NC";
168
+ readonly NewZealand: "NZ";
169
+ readonly Nicaragua: "NI";
170
+ readonly Niger: "NE";
171
+ readonly Nigeria: "NG";
172
+ readonly Niue: "NU";
173
+ readonly NorfolkIsland: "NF";
174
+ readonly NorthMacedonia: "MK";
175
+ readonly NorthernMarianaIslands: "MP";
176
+ readonly Norway: "NO";
177
+ readonly Oman: "OM";
178
+ readonly Pakistan: "PK";
179
+ readonly Palau: "PW";
180
+ readonly Palestine: "PS";
181
+ readonly Panama: "PA";
182
+ readonly PapuaNewGuinea: "PG";
183
+ readonly Paraguay: "PY";
184
+ readonly Peru: "PE";
185
+ readonly Philippines: "PH";
186
+ readonly Pitcairn: "PN";
187
+ readonly Poland: "PL";
188
+ readonly Portugal: "PT";
189
+ readonly PuertoRico: "PR";
190
+ readonly Qatar: "QA";
191
+ readonly Reunion: "RE";
192
+ readonly Romania: "RO";
193
+ readonly RussianFederation: "RU";
194
+ readonly Rwanda: "RW";
195
+ readonly SaintBarthelemy: "BL";
196
+ readonly SaintHelenaAscensionAndTristanDaCunha: "SH";
197
+ readonly SaintKittsAndNevis: "KN";
198
+ readonly SaintLucia: "LC";
199
+ readonly SaintMartinFrenchPart: "MF";
200
+ readonly SaintPierreAndMiquelon: "PM";
201
+ readonly SaintVincentAndTheGrenadines: "VC";
202
+ readonly Samoa: "WS";
203
+ readonly SanMarino: "SM";
204
+ readonly SaoTomeAndPrincipe: "ST";
205
+ readonly SaudiArabia: "SA";
206
+ readonly Senegal: "SN";
207
+ readonly Serbia: "RS";
208
+ readonly Seychelles: "SC";
209
+ readonly SierraLeone: "SL";
210
+ readonly Singapore: "SG";
211
+ readonly SintMaartenDutchPart: "SX";
212
+ readonly Slovakia: "SK";
213
+ readonly Slovenia: "SI";
214
+ readonly SolomonIslands: "SB";
215
+ readonly Somalia: "SO";
216
+ readonly SouthAfrica: "ZA";
217
+ readonly SouthGeorgiaAndTheSouthSandwichIslands: "GS";
218
+ readonly SouthSudan: "SS";
219
+ readonly Spain: "ES";
220
+ readonly SriLanka: "LK";
221
+ readonly Sudan: "SD";
222
+ readonly Suriname: "SR";
223
+ readonly SvalbardAndJanMayen: "SJ";
224
+ readonly Sweden: "SE";
225
+ readonly Switzerland: "CH";
226
+ readonly SyrianArabRepublic: "SY";
227
+ readonly Taiwan: "TW";
228
+ readonly Tajikistan: "TJ";
229
+ readonly Tanzania: "TZ";
230
+ readonly Thailand: "TH";
231
+ readonly TimorLeste: "TL";
232
+ readonly Togo: "TG";
233
+ readonly Tokelau: "TK";
234
+ readonly Tonga: "TO";
235
+ readonly TrinidadAndTobago: "TT";
236
+ readonly Tunisia: "TN";
237
+ readonly Turkey: "TR";
238
+ readonly Turkmenistan: "TM";
239
+ readonly TurksAndCaicosIslands: "TC";
240
+ readonly Tuvalu: "TV";
241
+ readonly Uganda: "UG";
242
+ readonly Ukraine: "UA";
243
+ readonly UnitedArabEmirates: "AE";
244
+ readonly UnitedKingdom: "GB";
245
+ readonly UnitedStates: "US";
246
+ readonly UnitedStatesMinorOutlyingIslands: "UM";
247
+ readonly Uruguay: "UY";
248
+ readonly Uzbekistan: "UZ";
249
+ readonly Vanuatu: "VU";
250
+ readonly Venezuela: "VE";
251
+ readonly VietNam: "VN";
252
+ readonly VirginIslandsBritish: "VG";
253
+ readonly VirginIslandsUS: "VI";
254
+ readonly WallisAndFutuna: "WF";
255
+ readonly WesternSahara: "EH";
256
+ readonly Yemen: "YE";
257
+ readonly Zambia: "ZM";
258
+ readonly Zimbabwe: "ZW";
259
+ };
260
+ export type CountryCode = typeof Country[keyof typeof Country];