@aws-cdk/aws-gamelift-alpha 2.53.0-alpha.0 → 2.54.0-alpha.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.
Binary file
package/.warnings.jsii.js CHANGED
@@ -1,3 +1,25 @@
1
+ function _aws_cdk_aws_gamelift_alpha_IAlias(p) {
2
+ }
3
+ function _aws_cdk_aws_gamelift_alpha_AliasOptions(p) {
4
+ }
5
+ function _aws_cdk_aws_gamelift_alpha_AliasAttributes(p) {
6
+ }
7
+ function _aws_cdk_aws_gamelift_alpha_AliasProps(p) {
8
+ if (p == null)
9
+ return;
10
+ visitedObjects.add(p);
11
+ try {
12
+ if (!visitedObjects.has(p.fleet))
13
+ _aws_cdk_aws_gamelift_alpha_IFleet(p.fleet);
14
+ }
15
+ finally {
16
+ visitedObjects.delete(p);
17
+ }
18
+ }
19
+ function _aws_cdk_aws_gamelift_alpha_AliasBase(p) {
20
+ }
21
+ function _aws_cdk_aws_gamelift_alpha_Alias(p) {
22
+ }
1
23
  function _aws_cdk_aws_gamelift_alpha_Content(p) {
2
24
  }
3
25
  function _aws_cdk_aws_gamelift_alpha_ContentConfig(p) {
@@ -204,6 +226,46 @@ function _aws_cdk_aws_gamelift_alpha_BuildFleetProps(p) {
204
226
  }
205
227
  function _aws_cdk_aws_gamelift_alpha_BuildFleet(p) {
206
228
  }
229
+ function _aws_cdk_aws_gamelift_alpha_IMatchmakingRuleSet(p) {
230
+ }
231
+ function _aws_cdk_aws_gamelift_alpha_MatchmakingRuleSetProps(p) {
232
+ if (p == null)
233
+ return;
234
+ visitedObjects.add(p);
235
+ try {
236
+ if (!visitedObjects.has(p.content))
237
+ _aws_cdk_aws_gamelift_alpha_RuleSetContent(p.content);
238
+ }
239
+ finally {
240
+ visitedObjects.delete(p);
241
+ }
242
+ }
243
+ function _aws_cdk_aws_gamelift_alpha_MatchmakingRuleSetAttributes(p) {
244
+ }
245
+ function _aws_cdk_aws_gamelift_alpha_MatchmakingRuleSetBase(p) {
246
+ }
247
+ function _aws_cdk_aws_gamelift_alpha_MatchmakingRuleSet(p) {
248
+ }
249
+ function _aws_cdk_aws_gamelift_alpha_IRuleSetBody(p) {
250
+ }
251
+ function _aws_cdk_aws_gamelift_alpha_RuleSetBodyConfig(p) {
252
+ }
253
+ function _aws_cdk_aws_gamelift_alpha_IRuleSetContent(p) {
254
+ }
255
+ function _aws_cdk_aws_gamelift_alpha_RuleSetContentProps(p) {
256
+ if (p == null)
257
+ return;
258
+ visitedObjects.add(p);
259
+ try {
260
+ if (!visitedObjects.has(p.content))
261
+ _aws_cdk_aws_gamelift_alpha_IRuleSetBody(p.content);
262
+ }
263
+ finally {
264
+ visitedObjects.delete(p);
265
+ }
266
+ }
267
+ function _aws_cdk_aws_gamelift_alpha_RuleSetContent(p) {
268
+ }
207
269
  function print(name, deprecationMessage) {
208
270
  const deprecated = process.env.JSII_DEPRECATED;
209
271
  const deprecationMode = ["warn", "fail", "quiet"].includes(deprecated) ? deprecated : "warn";
@@ -240,4 +302,4 @@ class DeprecationError extends Error {
240
302
  });
241
303
  }
242
304
  }
243
- module.exports = { print, getPropertyDescriptor, DeprecationError, _aws_cdk_aws_gamelift_alpha_Content, _aws_cdk_aws_gamelift_alpha_ContentConfig, _aws_cdk_aws_gamelift_alpha_S3Content, _aws_cdk_aws_gamelift_alpha_AssetContent, _aws_cdk_aws_gamelift_alpha_IBuild, _aws_cdk_aws_gamelift_alpha_BuildBase, _aws_cdk_aws_gamelift_alpha_OperatingSystem, _aws_cdk_aws_gamelift_alpha_BuildAttributes, _aws_cdk_aws_gamelift_alpha_BuildProps, _aws_cdk_aws_gamelift_alpha_Build, _aws_cdk_aws_gamelift_alpha_IScript, _aws_cdk_aws_gamelift_alpha_ScriptBase, _aws_cdk_aws_gamelift_alpha_ScriptAttributes, _aws_cdk_aws_gamelift_alpha_ScriptProps, _aws_cdk_aws_gamelift_alpha_Script, _aws_cdk_aws_gamelift_alpha_AutoScalingPolicy, _aws_cdk_aws_gamelift_alpha_InstanceDefinition, _aws_cdk_aws_gamelift_alpha_DeleteOption, _aws_cdk_aws_gamelift_alpha_BalancingStrategy, _aws_cdk_aws_gamelift_alpha_IGameServerGroup, _aws_cdk_aws_gamelift_alpha_GameServerGroupBase, _aws_cdk_aws_gamelift_alpha_GameServerGroupAttributes, _aws_cdk_aws_gamelift_alpha_GameServerGroupProps, _aws_cdk_aws_gamelift_alpha_GameServerGroup, _aws_cdk_aws_gamelift_alpha_Protocol, _aws_cdk_aws_gamelift_alpha_PortProps, _aws_cdk_aws_gamelift_alpha_Port, _aws_cdk_aws_gamelift_alpha_IPeer, _aws_cdk_aws_gamelift_alpha_Peer, _aws_cdk_aws_gamelift_alpha_IngressRule, _aws_cdk_aws_gamelift_alpha_LocationCapacity, _aws_cdk_aws_gamelift_alpha_Location, _aws_cdk_aws_gamelift_alpha_ServerProcess, _aws_cdk_aws_gamelift_alpha_RuntimeConfiguration, _aws_cdk_aws_gamelift_alpha_ResourceCreationLimitPolicy, _aws_cdk_aws_gamelift_alpha_IFleet, _aws_cdk_aws_gamelift_alpha_FleetProps, _aws_cdk_aws_gamelift_alpha_FleetAttributes, _aws_cdk_aws_gamelift_alpha_FleetBase, _aws_cdk_aws_gamelift_alpha_IBuildFleet, _aws_cdk_aws_gamelift_alpha_BuildFleetProps, _aws_cdk_aws_gamelift_alpha_BuildFleet };
305
+ module.exports = { print, getPropertyDescriptor, DeprecationError, _aws_cdk_aws_gamelift_alpha_IAlias, _aws_cdk_aws_gamelift_alpha_AliasOptions, _aws_cdk_aws_gamelift_alpha_AliasAttributes, _aws_cdk_aws_gamelift_alpha_AliasProps, _aws_cdk_aws_gamelift_alpha_AliasBase, _aws_cdk_aws_gamelift_alpha_Alias, _aws_cdk_aws_gamelift_alpha_Content, _aws_cdk_aws_gamelift_alpha_ContentConfig, _aws_cdk_aws_gamelift_alpha_S3Content, _aws_cdk_aws_gamelift_alpha_AssetContent, _aws_cdk_aws_gamelift_alpha_IBuild, _aws_cdk_aws_gamelift_alpha_BuildBase, _aws_cdk_aws_gamelift_alpha_OperatingSystem, _aws_cdk_aws_gamelift_alpha_BuildAttributes, _aws_cdk_aws_gamelift_alpha_BuildProps, _aws_cdk_aws_gamelift_alpha_Build, _aws_cdk_aws_gamelift_alpha_IScript, _aws_cdk_aws_gamelift_alpha_ScriptBase, _aws_cdk_aws_gamelift_alpha_ScriptAttributes, _aws_cdk_aws_gamelift_alpha_ScriptProps, _aws_cdk_aws_gamelift_alpha_Script, _aws_cdk_aws_gamelift_alpha_AutoScalingPolicy, _aws_cdk_aws_gamelift_alpha_InstanceDefinition, _aws_cdk_aws_gamelift_alpha_DeleteOption, _aws_cdk_aws_gamelift_alpha_BalancingStrategy, _aws_cdk_aws_gamelift_alpha_IGameServerGroup, _aws_cdk_aws_gamelift_alpha_GameServerGroupBase, _aws_cdk_aws_gamelift_alpha_GameServerGroupAttributes, _aws_cdk_aws_gamelift_alpha_GameServerGroupProps, _aws_cdk_aws_gamelift_alpha_GameServerGroup, _aws_cdk_aws_gamelift_alpha_Protocol, _aws_cdk_aws_gamelift_alpha_PortProps, _aws_cdk_aws_gamelift_alpha_Port, _aws_cdk_aws_gamelift_alpha_IPeer, _aws_cdk_aws_gamelift_alpha_Peer, _aws_cdk_aws_gamelift_alpha_IngressRule, _aws_cdk_aws_gamelift_alpha_LocationCapacity, _aws_cdk_aws_gamelift_alpha_Location, _aws_cdk_aws_gamelift_alpha_ServerProcess, _aws_cdk_aws_gamelift_alpha_RuntimeConfiguration, _aws_cdk_aws_gamelift_alpha_ResourceCreationLimitPolicy, _aws_cdk_aws_gamelift_alpha_IFleet, _aws_cdk_aws_gamelift_alpha_FleetProps, _aws_cdk_aws_gamelift_alpha_FleetAttributes, _aws_cdk_aws_gamelift_alpha_FleetBase, _aws_cdk_aws_gamelift_alpha_IBuildFleet, _aws_cdk_aws_gamelift_alpha_BuildFleetProps, _aws_cdk_aws_gamelift_alpha_BuildFleet, _aws_cdk_aws_gamelift_alpha_IMatchmakingRuleSet, _aws_cdk_aws_gamelift_alpha_MatchmakingRuleSetProps, _aws_cdk_aws_gamelift_alpha_MatchmakingRuleSetAttributes, _aws_cdk_aws_gamelift_alpha_MatchmakingRuleSetBase, _aws_cdk_aws_gamelift_alpha_MatchmakingRuleSet, _aws_cdk_aws_gamelift_alpha_IRuleSetBody, _aws_cdk_aws_gamelift_alpha_RuleSetBodyConfig, _aws_cdk_aws_gamelift_alpha_IRuleSetContent, _aws_cdk_aws_gamelift_alpha_RuleSetContentProps, _aws_cdk_aws_gamelift_alpha_RuleSetContent };
package/README.md CHANGED
@@ -44,6 +44,73 @@ deliver inexpensive, resilient game hosting for your players
44
44
  This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project. It allows you to define components for your matchmaking
45
45
  configuration or game server fleet management system.
46
46
 
47
+ ## GameLift FlexMatch
48
+
49
+ ### Matchmaking RuleSet
50
+
51
+ Every FlexMatch matchmaker must have a rule set. The rule set determines the
52
+ two key elements of a match: your game's team structure and size, and how to
53
+ group players together for the best possible match.
54
+
55
+ For example, a rule set might describe a match like this: Create a match with
56
+ two teams of four to eight players each, one team is the cowboy and the other
57
+ team the aliens. A team can have novice and experienced players, but the
58
+ average skill of the two teams must be within 10 points of each other. If no
59
+ match is made after 30 seconds, gradually relax the skill requirements.
60
+
61
+ ```ts
62
+ new gamelift.MatchmakingRuleSet(this, 'RuleSet', {
63
+ matchmakingRuleSetName: 'my-test-ruleset',
64
+ content: gamelift.RuleSetContent.fromJsonFile(path.join(__dirname, 'my-ruleset/ruleset.json')),
65
+ });
66
+ ```
67
+
68
+ ### FlexMatch Monitoring
69
+
70
+ You can monitor GameLift FlexMatch activity for matchmaking configurations and
71
+ matchmaking rules using Amazon CloudWatch. These statistics are used to provide
72
+ a historical perspective on how your Gamelift FlexMatch solution is performing.
73
+
74
+ #### FlexMatch Metrics
75
+
76
+ GameLift FlexMatch sends metrics to CloudWatch so that you can collect and
77
+ analyze the activity of your matchmaking solution, including match acceptance
78
+ workflow, ticket consumtion.
79
+
80
+ You can then use CloudWatch alarms to alert you, for example, when matches has
81
+ been rejected (potential matches that were rejected by at least one player
82
+ since the last report) exceed a certain thresold which could means that you may
83
+ have an issue in your matchmaking rules.
84
+
85
+ CDK provides methods for accessing GameLift FlexMatch metrics with default configuration,
86
+ such as `metricRuleEvaluationsPassed`, or `metricRuleEvaluationsFailed` (see
87
+ [`IMatchmakingRuleSet`](https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-gamelift.IMatchmakingRuleSet.html)
88
+ for a full list). CDK also provides a generic `metric` method that can be used
89
+ to produce metric configurations for any metric provided by GameLift FlexMatch;
90
+ the configurations are pre-populated with the correct dimensions for the
91
+ matchmaking configuration.
92
+
93
+ ```ts
94
+ declare const matchmakingRuleSet: gamelift.MatchmakingRuleSet;
95
+ // Alarm that triggers when the per-second average of not placed matches exceed 10%
96
+ const ruleEvaluationRatio = new cloudwatch.MathExpression({
97
+ expression: '1 - (ruleEvaluationsPassed / ruleEvaluationsFailed)',
98
+ usingMetrics: {
99
+ ruleEvaluationsPassed: matchmakingRuleSet.metricRuleEvaluationsPassed({ statistic: cloudwatch.Statistic.SUM }),
100
+ ruleEvaluationsFailed: matchmakingRuleSet.metric('ruleEvaluationsFailed'),
101
+ },
102
+ });
103
+ new cloudwatch.Alarm(this, 'Alarm', {
104
+ metric: ruleEvaluationRatio,
105
+ threshold: 0.1,
106
+ evaluationPeriods: 3,
107
+ });
108
+ ```
109
+
110
+ See: [Monitoring Using CloudWatch Metrics](https://docs.aws.amazon.com/gamelift/latest/developerguide/monitoring-cloudwatch.html)
111
+ in the *Amazon GameLift Developer Guide*.
112
+
113
+
47
114
  ## GameLift Hosting
48
115
 
49
116
  ### Uploading builds and scripts to GameLift
@@ -74,9 +141,12 @@ services.
74
141
 
75
142
  ```ts
76
143
  declare const bucket: s3.Bucket;
77
- new gamelift.Build(this, 'Build', {
144
+ const build = new gamelift.Build(this, 'Build', {
78
145
  content: gamelift.Content.fromBucket(bucket, "sample-asset-key")
79
146
  });
147
+
148
+ new CfnOutput(this, 'BuildArn', { value: build.buildArn });
149
+ new CfnOutput(this, 'BuildId', { value: build.buildId });
80
150
  ```
81
151
 
82
152
  #### Upload a realtime server Script
@@ -280,7 +350,7 @@ fleet.addLocation('ap-southeast-1', 5, 2, 10);
280
350
  Some GameLift features require you to extend limited access to your AWS
281
351
  resources. This is done by creating an AWS IAM role. The GameLift Fleet class
282
352
  automatically created an IAM role with all the minimum necessary permissions
283
- for GameLift to access your ressources. If you wish, you may
353
+ for GameLift to access your resources. If you wish, you may
284
354
  specify your own IAM role.
285
355
 
286
356
  ```ts
@@ -306,12 +376,36 @@ const fleet = new gamelift.BuildFleet(this, 'Game server fleet', {
306
376
  fleet.grant(role, 'gamelift:ListFleets');
307
377
  ```
308
378
 
379
+ ### Alias
380
+
381
+ A GameLift alias is used to abstract a fleet designation. Fleet designations
382
+ tell Amazon GameLift where to search for available resources when creating new
383
+ game sessions for players. By using aliases instead of specific fleet IDs, you
384
+ can more easily and seamlessly switch player traffic from one fleet to another
385
+ by changing the alias's target location.
386
+
387
+ ```ts
388
+ declare const fleet: gamelift.BuildFleet;
389
+
390
+ // Add an alias to an existing fleet using a dedicated fleet method
391
+ const liveAlias = fleet.addAlias('live');
392
+
393
+ // You can also create a standalone alias
394
+ new gamelift.Alias(this, 'TerminalAlias', {
395
+ aliasName: 'terminal-alias',
396
+ terminalMessage: 'A terminal message',
397
+ });
398
+ ```
399
+
400
+ See [Add an alias to a GameLift fleet](https://docs.aws.amazon.com/gamelift/latest/developerguide/aliases-creating.html)
401
+ in the *Amazon GameLift Developer Guide*.
402
+
309
403
  ### Monitoring your Fleet
310
404
 
311
405
  GameLift is integrated with CloudWatch, so you can monitor the performance of
312
406
  your game servers via logs and metrics.
313
407
 
314
- #### Metrics
408
+ #### Fleet Metrics
315
409
 
316
410
  GameLift Fleet sends metrics to CloudWatch so that you can collect and analyze
317
411
  the activity of your Fleet, including game and player sessions and server
@@ -319,7 +413,7 @@ processes.
319
413
 
320
414
  You can then use CloudWatch alarms to alert you, for example, when matches has
321
415
  been rejected (potential matches that were rejected by at least one player
322
- since the last report) exceed a certain thresold which could means that you may
416
+ since the last report) exceed a certain threshold which could means that you may
323
417
  have an issue in your matchmaking rules.
324
418
 
325
419
  CDK provides methods for accessing GameLift Fleet metrics with default configuration,
@@ -427,7 +521,7 @@ in the *Amazon GameLift FleetIQ Developer Guide*.
427
521
 
428
522
  The GameLift FleetIQ class automatically creates an IAM role with all the minimum necessary
429
523
  permissions for GameLift to access your Amazon EC2 Auto Scaling groups. If you wish, you may
430
- specify your own IAM role. It must have the correct permissions, or FleetIQ creation or ressource usage may fail.
524
+ specify your own IAM role. It must have the correct permissions, or FleetIQ creation or resource usage may fail.
431
525
 
432
526
  ```ts
433
527
  declare const launchTemplate: ec2.ILaunchTemplate;
@@ -484,7 +578,7 @@ new gamelift.GameServerGroup(this, 'GameServerGroup', {
484
578
  });
485
579
  ```
486
580
 
487
- ### Monitoring
581
+ ### FleetIQ Monitoring
488
582
 
489
583
  GameLift FleetIQ sends metrics to CloudWatch so that you can collect and
490
584
  analyze the activity of your Game server fleet, including the number of
@@ -493,7 +587,7 @@ limited Spot availability.
493
587
 
494
588
  You can then use CloudWatch alarms to alert you, for example, when the portion
495
589
  of game servers that are currently supporting game executions exceed a certain
496
- thresold which could means that your autoscaling policy need to be adjust to
590
+ threshold which could means that your autoscaling policy need to be adjust to
497
591
  add more instances to match with player demand.
498
592
 
499
593
  CDK provides a generic `metric` method that can be used
package/lib/alias.d.ts ADDED
@@ -0,0 +1,141 @@
1
+ import * as cdk from 'aws-cdk-lib';
2
+ import { Construct } from 'constructs';
3
+ import { IFleet } from './fleet-base';
4
+ /**
5
+ * Represents a Gamelift Alias for a Gamelift fleet destination.
6
+ */
7
+ export interface IAlias extends cdk.IResource {
8
+ /**
9
+ * The Identifier of the alias.
10
+ *
11
+ * @attribute
12
+ */
13
+ readonly aliasId: string;
14
+ /**
15
+ * The ARN of the alias.
16
+ *
17
+ * @attribute
18
+ */
19
+ readonly aliasArn: string;
20
+ }
21
+ /**
22
+ * Options for `gamelift.Alias`.
23
+ */
24
+ export interface AliasOptions {
25
+ /**
26
+ * Description for the alias
27
+ *
28
+ * @default No description
29
+ */
30
+ readonly description?: string;
31
+ }
32
+ /**
33
+ * A full specification of an alias that can be used to import it fluently into the CDK application.
34
+ */
35
+ export interface AliasAttributes {
36
+ /**
37
+ * The ARN of the alias
38
+ *
39
+ * At least one of `aliasArn` and `aliasId` must be provided.
40
+ *
41
+ * @default derived from `aliasId`.
42
+ */
43
+ readonly aliasArn?: string;
44
+ /**
45
+ * The identifier of the alias
46
+ *
47
+ * At least one of `aliasId` and `aliasArn` must be provided.
48
+ *
49
+ * @default derived from `aliasArn`.
50
+ */
51
+ readonly aliasId?: string;
52
+ }
53
+ /**
54
+ * Properties for a new Fleet alias
55
+ */
56
+ export interface AliasProps {
57
+ /**
58
+ * Name of this alias
59
+ */
60
+ readonly aliasName: string;
61
+ /**
62
+ * A human-readable description of the alias
63
+ *
64
+ * @default no description
65
+ */
66
+ readonly description?: string;
67
+ /**
68
+ * A fleet that the alias points to.
69
+ * If specified, the alias resolves to one specific fleet.
70
+ *
71
+ * At least one of `fleet` and `terminalMessage` must be provided.
72
+ *
73
+ * @default no fleet that the alias points to.
74
+ */
75
+ readonly fleet?: IFleet;
76
+ /**
77
+ * The message text to be used with a terminal routing strategy.
78
+ *
79
+ * At least one of `fleet` and `terminalMessage` must be provided.
80
+ *
81
+ * @default no terminal message
82
+ */
83
+ readonly terminalMessage?: string;
84
+ }
85
+ /**
86
+ * Base class for new and imported GameLift Alias.
87
+ */
88
+ export declare abstract class AliasBase extends cdk.Resource implements IAlias {
89
+ /**
90
+ * The Identifier of the alias.
91
+ */
92
+ abstract readonly aliasId: string;
93
+ /**
94
+ * The ARN of the alias
95
+ */
96
+ abstract readonly aliasArn: string;
97
+ }
98
+ /**
99
+ * A Amazon GameLift alias is used to abstract a fleet designation.
100
+ * Fleet designations tell GameLift where to search for available resources when creating new game sessions for players.
101
+ * Use aliases instead of specific fleet IDs to seamlessly switch player traffic from one fleet to another by changing the alias's target location.
102
+ *
103
+ * Aliases are useful in games that don't use queues.
104
+ * Switching fleets in a queue is a simple matter of creating a new fleet, adding it to the queue, and removing the old fleet, none of which is visible to players.
105
+ * In contrast, game clients that don't use queues must specify which fleet to use when communicating with the GameLift service.
106
+ * Without aliases, a fleet switch requires updates to your game code and possibly distribution of an updated game clients to players.
107
+ *
108
+ * When updating the fleet-id an alias points to, there is a transition period of up to 2 minutes where game sessions on the alias may end up on the old fleet.
109
+ *
110
+ * @see https://docs.aws.amazon.com/gamelift/latest/developerguide/aliases-creating.html
111
+ *
112
+ * @resource AWS::GameLift::Alias
113
+ */
114
+ export declare class Alias extends AliasBase {
115
+ /**
116
+ * Import an existing alias from its identifier.
117
+ */
118
+ static fromAliasId(scope: Construct, id: string, aliasId: string): IAlias;
119
+ /**
120
+ * Import an existing alias from its ARN.
121
+ */
122
+ static fromAliasArn(scope: Construct, id: string, aliasArn: string): IAlias;
123
+ /**
124
+ * Import an existing alias from its attributes.
125
+ */
126
+ static fromAliasAttributes(scope: Construct, id: string, attrs: AliasAttributes): IAlias;
127
+ /**
128
+ * The Identifier of the alias.
129
+ */
130
+ readonly aliasId: string;
131
+ /**
132
+ * The ARN of the alias.
133
+ */
134
+ readonly aliasArn: string;
135
+ /**
136
+ * A fleet that the alias points to.
137
+ */
138
+ readonly fleet?: IFleet;
139
+ constructor(scope: Construct, id: string, props: AliasProps);
140
+ private parseRoutingStrategy;
141
+ }
package/lib/alias.js ADDED
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ var _a, _b;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Alias = exports.AliasBase = void 0;
5
+ const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
6
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
7
+ const cdk = require("aws-cdk-lib");
8
+ const aws_gamelift_1 = require("aws-cdk-lib/aws-gamelift");
9
+ /**
10
+ * Base class for new and imported GameLift Alias.
11
+ */
12
+ class AliasBase extends cdk.Resource {
13
+ }
14
+ exports.AliasBase = AliasBase;
15
+ _a = JSII_RTTI_SYMBOL_1;
16
+ AliasBase[_a] = { fqn: "@aws-cdk/aws-gamelift-alpha.AliasBase", version: "2.54.0-alpha.0" };
17
+ /**
18
+ * A Amazon GameLift alias is used to abstract a fleet designation.
19
+ * Fleet designations tell GameLift where to search for available resources when creating new game sessions for players.
20
+ * Use aliases instead of specific fleet IDs to seamlessly switch player traffic from one fleet to another by changing the alias's target location.
21
+ *
22
+ * Aliases are useful in games that don't use queues.
23
+ * Switching fleets in a queue is a simple matter of creating a new fleet, adding it to the queue, and removing the old fleet, none of which is visible to players.
24
+ * In contrast, game clients that don't use queues must specify which fleet to use when communicating with the GameLift service.
25
+ * Without aliases, a fleet switch requires updates to your game code and possibly distribution of an updated game clients to players.
26
+ *
27
+ * When updating the fleet-id an alias points to, there is a transition period of up to 2 minutes where game sessions on the alias may end up on the old fleet.
28
+ *
29
+ * @see https://docs.aws.amazon.com/gamelift/latest/developerguide/aliases-creating.html
30
+ *
31
+ * @resource AWS::GameLift::Alias
32
+ */
33
+ class Alias extends AliasBase {
34
+ constructor(scope, id, props) {
35
+ super(scope, id, {
36
+ physicalName: props.aliasName,
37
+ });
38
+ try {
39
+ jsiiDeprecationWarnings._aws_cdk_aws_gamelift_alpha_AliasProps(props);
40
+ }
41
+ catch (error) {
42
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
43
+ Error.captureStackTrace(error, Alias);
44
+ }
45
+ throw error;
46
+ }
47
+ if (!cdk.Token.isUnresolved(props.aliasName)) {
48
+ if (props.aliasName.length > 1024) {
49
+ throw new Error(`Alias name can not be longer than 1024 characters but has ${props.aliasName.length} characters.`);
50
+ }
51
+ }
52
+ if (props.description && !cdk.Token.isUnresolved(props.description)) {
53
+ if (props.description.length > 1024) {
54
+ throw new Error(`Alias description can not be longer than 1024 characters but has ${props.description.length} characters.`);
55
+ }
56
+ }
57
+ if (!props.terminalMessage && !props.fleet) {
58
+ throw new Error('Either a terminal message or a fleet must be binded to this Alias.');
59
+ }
60
+ if (props.terminalMessage && props.fleet) {
61
+ throw new Error('Either a terminal message or a fleet must be binded to this Alias, not both.');
62
+ }
63
+ const resource = new aws_gamelift_1.CfnAlias(this, 'Resource', {
64
+ name: props.aliasName,
65
+ description: props.description,
66
+ routingStrategy: this.parseRoutingStrategy(props),
67
+ });
68
+ this.aliasId = this.getResourceNameAttribute(resource.ref);
69
+ this.aliasArn = cdk.Stack.of(scope).formatArn({
70
+ service: 'gamelift',
71
+ resource: 'alias',
72
+ resourceName: this.aliasId,
73
+ arnFormat: cdk.ArnFormat.SLASH_RESOURCE_NAME,
74
+ });
75
+ }
76
+ /**
77
+ * Import an existing alias from its identifier.
78
+ */
79
+ static fromAliasId(scope, id, aliasId) {
80
+ return this.fromAliasAttributes(scope, id, { aliasId: aliasId });
81
+ }
82
+ /**
83
+ * Import an existing alias from its ARN.
84
+ */
85
+ static fromAliasArn(scope, id, aliasArn) {
86
+ return this.fromAliasAttributes(scope, id, { aliasArn: aliasArn });
87
+ }
88
+ /**
89
+ * Import an existing alias from its attributes.
90
+ */
91
+ static fromAliasAttributes(scope, id, attrs) {
92
+ try {
93
+ jsiiDeprecationWarnings._aws_cdk_aws_gamelift_alpha_AliasAttributes(attrs);
94
+ }
95
+ catch (error) {
96
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
97
+ Error.captureStackTrace(error, this.fromAliasAttributes);
98
+ }
99
+ throw error;
100
+ }
101
+ if (!attrs.aliasId && !attrs.aliasArn) {
102
+ throw new Error('Either aliasId or aliasArn must be provided in AliasAttributes');
103
+ }
104
+ const aliasId = attrs.aliasId ??
105
+ cdk.Stack.of(scope).splitArn(attrs.aliasArn, cdk.ArnFormat.SLASH_RESOURCE_NAME).resourceName;
106
+ if (!aliasId) {
107
+ throw new Error(`No alias identifier found in ARN: '${attrs.aliasArn}'`);
108
+ }
109
+ const aliasArn = attrs.aliasArn ?? cdk.Stack.of(scope).formatArn({
110
+ service: 'gamelift',
111
+ resource: 'alias',
112
+ resourceName: attrs.aliasId,
113
+ arnFormat: cdk.ArnFormat.SLASH_RESOURCE_NAME,
114
+ });
115
+ class Import extends AliasBase {
116
+ constructor(s, i) {
117
+ super(s, i, {
118
+ environmentFromArn: aliasArn,
119
+ });
120
+ this.aliasId = aliasId;
121
+ this.aliasArn = aliasArn;
122
+ }
123
+ }
124
+ return new Import(scope, id);
125
+ }
126
+ parseRoutingStrategy(props) {
127
+ if (props.fleet) {
128
+ return {
129
+ fleetId: props.fleet.fleetId,
130
+ type: 'SIMPLE',
131
+ };
132
+ }
133
+ return {
134
+ message: props.terminalMessage,
135
+ type: 'TERMINAL',
136
+ };
137
+ }
138
+ }
139
+ exports.Alias = Alias;
140
+ _b = JSII_RTTI_SYMBOL_1;
141
+ Alias[_b] = { fqn: "@aws-cdk/aws-gamelift-alpha.Alias", version: "2.54.0-alpha.0" };
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxpYXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhbGlhcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtQ0FBbUM7QUFHbkMsMkRBQW9EO0FBNkZwRDs7R0FFRztBQUNILE1BQXNCLFNBQVUsU0FBUSxHQUFHLENBQUMsUUFBUTs7QUFBcEQsOEJBU0M7OztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQWEsS0FBTSxTQUFRLFNBQVM7SUFnRWxDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBaUI7UUFDekQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixZQUFZLEVBQUUsS0FBSyxDQUFDLFNBQVM7U0FDOUIsQ0FBQyxDQUFDOzs7Ozs7K0NBbkVNLEtBQUs7Ozs7UUFxRWQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUM1QyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRTtnQkFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2REFBNkQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLGNBQWMsQ0FBQyxDQUFDO2FBQ3BIO1NBQ0Y7UUFFRCxJQUFJLEtBQUssQ0FBQyxXQUFXLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDbkUsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUU7Z0JBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsb0VBQW9FLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxjQUFjLENBQUMsQ0FBQzthQUM3SDtTQUNGO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO1lBQzFDLE1BQU0sSUFBSSxLQUFLLENBQUMsb0VB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RUFBRSxFQUFFLENBQUMsQ0FBQztLQUM5QjtJQXlETyxvQkFBb0IsQ0FBQyxLQUFpQjtRQUM1QyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUc7WUFDaEIsT0FBTztnQkFDTCxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPO2dCQUM1QixJQUFJLEVBQUUsUUFBUTthQUNmLENBQUM7U0FDSDtRQUNELE9BQU87WUFDTCxPQUFPLEVBQUUsS0FBSyxDQUFDLGVBQWU7WUFDOUIsSUFBSSxFQUFFLFVBQVU7U0FDakIsQ0FBQztLQUNIOztBQW5ISCxzQkFvSEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBJRmxlZXQgfSBmcm9tICcuL2ZsZWV0LWJhc2UnO1xuaW1wb3J0IHsgQ2ZuQWxpYXMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZ2FtZWxpZnQnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBHYW1lbGlmdCBBbGlhcyBmb3IgYSBHYW1lbGlmdCBmbGVldCBkZXN0aW5hdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQWxpYXMgZXh0ZW5kcyBjZGsuSVJlc291cmNlIHtcblxuICAvKipcbiAgICAgKiBUaGUgSWRlbnRpZmllciBvZiB0aGUgYWxpYXMuXG4gICAgICpcbiAgICAgKiBAYXR0cmlidXRlXG4gICAgICovXG4gIHJlYWRvbmx5IGFsaWFzSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgYWxpYXMuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGFsaWFzQXJuOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYGdhbWVsaWZ0LkFsaWFzYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBbGlhc09wdGlvbnMge1xuICAvKipcbiAgICAgKiBEZXNjcmlwdGlvbiBmb3IgdGhlIGFsaWFzXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBObyBkZXNjcmlwdGlvblxuICAgICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIGZ1bGwgc3BlY2lmaWNhdGlvbiBvZiBhbiBhbGlhcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGltcG9ydCBpdCBmbHVlbnRseSBpbnRvIHRoZSBDREsgYXBwbGljYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWxpYXNBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAgICAgKiBUaGUgQVJOIG9mIHRoZSBhbGlhc1xuICAgICAgICpcbiAgICAgICAqIEF0IGxlYXN0IG9uZSBvZiBgYWxpYXNBcm5gIGFuZCBgYWxpYXNJZGAgbXVzdCBiZSBwcm92aWRlZC5cbiAgICAgICAqXG4gICAgICAgKiBAZGVmYXVsdCBkZXJpdmVkIGZyb20gYGFsaWFzSWRgLlxuICAgICAgICovXG4gIHJlYWRvbmx5IGFsaWFzQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgICAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBhbGlhc1xuICAgICAqXG4gICAgICogQXQgbGVhc3Qgb25lIG9mIGBhbGlhc0lkYCBhbmQgYGFsaWFzQXJuYCAgbXVzdCBiZSBwcm92aWRlZC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGRlcml2ZWQgZnJvbSBgYWxpYXNBcm5gLlxuICAgICAqL1xuICByZWFkb25seSBhbGlhc0lkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGEgbmV3IEZsZWV0IGFsaWFzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWxpYXNQcm9wcyB7XG4gIC8qKlxuICAgICAqIE5hbWUgb2YgdGhpcyBhbGlhc1xuICAgICAqL1xuICByZWFkb25seSBhbGlhc05hbWU6IHN0cmluZztcblxuICAvKipcbiAgICAgKiBBIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBhbGlhc1xuICAgICAqXG4gICAgICogQGRlZmF1bHQgbm8gZGVzY3JpcHRpb25cbiAgICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgZmxlZXQgdGhhdCB0aGUgYWxpYXMgcG9pbnRzIHRvLlxuICAgKiBJZiBzcGVjaWZpZWQsIHRoZSBhbGlhcyByZXNvbHZlcyB0byBvbmUgc3BlY2lmaWMgZmxlZXQuXG4gICAqXG4gICAqIEF0IGxlYXN0IG9uZSBvZiBgZmxlZXRgIGFuZCBgdGVybWluYWxNZXNzYWdlYCBtdXN0IGJlIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBubyBmbGVldCB0aGF0IHRoZSBhbGlhcyBwb2ludHMgdG8uXG4gICAqL1xuICByZWFkb25seSBmbGVldD86IElGbGVldDtcblxuICAvKipcbiAgICogVGhlIG1lc3NhZ2UgdGV4dCB0byBiZSB1c2VkIHdpdGggYSB0ZXJtaW5hbCByb3V0aW5nIHN0cmF0ZWd5LlxuICAgKlxuICAgKiBBdCBsZWFzdCBvbmUgb2YgYGZsZWV0YCBhbmQgYHRlcm1pbmFsTWVzc2FnZWAgbXVzdCBiZSBwcm92aWRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgbm8gdGVybWluYWwgbWVzc2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgdGVybWluYWxNZXNzYWdlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIG5ldyBhbmQgaW1wb3J0ZWQgR2FtZUxpZnQgQWxpYXMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBbGlhc0Jhc2UgZXh0ZW5kcyBjZGsuUmVzb3VyY2UgaW1wbGVtZW50cyBJQWxpYXMge1xuICAvKipcbiAqIFRoZSBJZGVudGlmaWVyIG9mIHRoZSBhbGlhcy5cbiAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgYWxpYXNJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgYWxpYXNcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBhbGlhc0Fybjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgQW1hem9uIEdhbWVMaWZ0IGFsaWFzIGlzIHVzZWQgdG8gYWJzdHJhY3QgYSBmbGVldCBkZXNpZ25hdGlvbi5cbiAqIEZsZWV0IGRlc2lnbmF0aW9ucyB0ZWxsIEdhbWVMaWZ0IHdoZXJlIHRvIHNlYXJjaCBmb3IgYXZhaWxhYmxlIHJlc291cmNlcyB3aGVuIGNyZWF0aW5nIG5ldyBnYW1lIHNlc3Npb25zIGZvciBwbGF5ZXJzLlxuICogVXNlIGFsaWFzZXMgaW5zdGVhZCBvZiBzcGVjaWZpYyBmbGVldCBJRHMgdG8gc2VhbWxlc3NseSBzd2l0Y2ggcGxheWVyIHRyYWZmaWMgZnJvbSBvbmUgZmxlZXQgdG8gYW5vdGhlciBieSBjaGFuZ2luZyB0aGUgYWxpYXMncyB0YXJnZXQgbG9jYXRpb24uXG4gKlxuICogQWxpYXNlcyBhcmUgdXNlZnVsIGluIGdhbWVzIHRoYXQgZG9uJ3QgdXNlIHF1ZXVlcy5cbiAqIFN3aXRjaGluZyBmbGVldHMgaW4gYSBxdWV1ZSBpcyBhIHNpbXBsZSBtYXR0ZXIgb2YgY3JlYXRpbmcgYSBuZXcgZmxlZXQsIGFkZGluZyBpdCB0byB0aGUgcXVldWUsIGFuZCByZW1vdmluZyB0aGUgb2xkIGZsZWV0LCBub25lIG9mIHdoaWNoIGlzIHZpc2libGUgdG8gcGxheWVycy5cbiAqIEluIGNvbnRyYXN0LCBnYW1lIGNsaWVudHMgdGhhdCBkb24ndCB1c2UgcXVldWVzIG11c3Qgc3BlY2lmeSB3aGljaCBmbGVldCB0byB1c2Ugd2hlbiBjb21tdW5pY2F0aW5nIHdpdGggdGhlIEdhbWVMaWZ0IHNlcnZpY2UuXG4gKiBXaXRob3V0IGFsaWFzZXMsIGEgZmxlZXQgc3dpdGNoIHJlcXVpcmVzIHVwZGF0ZXMgdG8geW91ciBnYW1lIGNvZGUgYW5kIHBvc3NpYmx5IGRpc3RyaWJ1dGlvbiBvZiBhbiB1cGRhdGVkIGdhbWUgY2xpZW50cyB0byBwbGF5ZXJzLlxuICpcbiAqIFdoZW4gdXBkYXRpbmcgdGhlIGZsZWV0LWlkIGFuIGFsaWFzIHBvaW50cyB0bywgdGhlcmUgaXMgYSB0cmFuc2l0aW9uIHBlcmlvZCBvZiB1cCB0byAyIG1pbnV0ZXMgd2hlcmUgZ2FtZSBzZXNzaW9ucyBvbiB0aGUgYWxpYXMgbWF5IGVuZCB1cCBvbiB0aGUgb2xkIGZsZWV0LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dhbWVsaWZ0L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9hbGlhc2VzLWNyZWF0aW5nLmh0bWxcbiAqXG4gKiBAcmVzb3VyY2UgQVdTOjpHYW1lTGlmdDo6QWxpYXNcbiAqL1xuZXhwb3J0IGNsYXNzIEFsaWFzIGV4dGVuZHMgQWxpYXNCYXNlIHtcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGFsaWFzIGZyb20gaXRzIGlkZW50aWZpZXIuXG4gICAqL1xuICBzdGF0aWMgZnJvbUFsaWFzSWQoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYWxpYXNJZDogc3RyaW5nKTogSUFsaWFzIHtcbiAgICByZXR1cm4gdGhpcy5mcm9tQWxpYXNBdHRyaWJ1dGVzKHNjb3BlLCBpZCwgeyBhbGlhc0lkOiBhbGlhc0lkIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBhbGlhcyBmcm9tIGl0cyBBUk4uXG4gICAqL1xuICBzdGF0aWMgZnJvbUFsaWFzQXJuKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGFsaWFzQXJuOiBzdHJpbmcpOiBJQWxpYXMge1xuICAgIHJldHVybiB0aGlzLmZyb21BbGlhc0F0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IGFsaWFzQXJuOiBhbGlhc0FybiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgYWxpYXMgZnJvbSBpdHMgYXR0cmlidXRlcy5cbiAgICovXG4gIHN0YXRpYyBmcm9tQWxpYXNBdHRyaWJ1dGVzKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGF0dHJzOiBBbGlhc0F0dHJpYnV0ZXMpOiBJQWxpYXMge1xuICAgIGlmICghYXR0cnMuYWxpYXNJZCAmJiAhYXR0cnMuYWxpYXNBcm4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRWl0aGVyIGFsaWFzSWQgb3IgYWxpYXNBcm4gbXVzdCBiZSBwcm92aWRlZCBpbiBBbGlhc0F0dHJpYnV0ZXMnKTtcbiAgICB9XG4gICAgY29uc3QgYWxpYXNJZCA9IGF0dHJzLmFsaWFzSWQgPz9cbiAgICAgIGNkay5TdGFjay5vZihzY29wZSkuc3BsaXRBcm4oYXR0cnMuYWxpYXNBcm4hLCBjZGsuQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUpLnJlc291cmNlTmFtZTtcblxuICAgIGlmICghYWxpYXNJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBhbGlhcyBpZGVudGlmaWVyIGZvdW5kIGluIEFSTjogJyR7YXR0cnMuYWxpYXNBcm59J2ApO1xuICAgIH1cblxuICAgIGNvbnN0IGFsaWFzQXJuID0gYXR0cnMuYWxpYXNBcm4gPz8gY2RrLlN0YWNrLm9mKHNjb3BlKS5mb3JtYXRBcm4oe1xuICAgICAgc2VydmljZTogJ2dhbWVsaWZ0JyxcbiAgICAgIHJlc291cmNlOiAnYWxpYXMnLFxuICAgICAgcmVzb3VyY2VOYW1lOiBhdHRycy5hbGlhc0lkLFxuICAgICAgYXJuRm9ybWF0OiBjZGsuQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgfSk7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgQWxpYXNCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBhbGlhc0lkID0gYWxpYXNJZCE7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYWxpYXNBcm4gPSBhbGlhc0FybjtcblxuICAgICAgY29uc3RydWN0b3IoczogQ29uc3RydWN0LCBpOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIocywgaSwge1xuICAgICAgICAgIGVudmlyb25tZW50RnJvbUFybjogYWxpYXNBcm4sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBJZGVudGlmaWVyIG9mIHRoZSBhbGlhcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhbGlhc0lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAgKiBUaGUgQVJOIG9mIHRoZSBhbGlhcy5cbiAgICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWxpYXNBcm46IHN0cmluZztcblxuICAvKipcbiAgICogQSBmbGVldCB0aGF0IHRoZSBhbGlhcyBwb2ludHMgdG8uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZmxlZXQ/OiBJRmxlZXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEFsaWFzUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMuYWxpYXNOYW1lLFxuICAgIH0pO1xuXG4gICAgaWYgKCFjZGsuVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLmFsaWFzTmFtZSkpIHtcbiAgICAgIGlmIChwcm9wcy5hbGlhc05hbWUubGVuZ3RoID4gMTAyNCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFsaWFzIG5hbWUgY2FuIG5vdCBiZSBsb25nZXIgdGhhbiAxMDI0IGNoYXJhY3RlcnMgYnV0IGhhcyAke3Byb3BzLmFsaWFzTmFtZS5sZW5ndGh9IGNoYXJhY3RlcnMuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmRlc2NyaXB0aW9uICYmICFjZGsuVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLmRlc2NyaXB0aW9uKSkge1xuICAgICAgaWYgKHByb3BzLmRlc2NyaXB0aW9uLmxlbmd0aCA+IDEwMjQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBbGlhcyBkZXNjcmlwdGlvbiBjYW4gbm90IGJlIGxvbmdlciB0aGFuIDEwMjQgY2hhcmFjdGVycyBidXQgaGFzICR7cHJvcHMuZGVzY3JpcHRpb24ubGVuZ3RofSBjaGFyYWN0ZXJzLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcHJvcHMudGVybWluYWxNZXNzYWdlICYmICFwcm9wcy5mbGVldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFaXRoZXIgYSB0ZXJtaW5hbCBtZXNzYWdlIG9yIGEgZmxlZXQgbXVzdCBiZSBiaW5kZWQgdG8gdGhpcyBBbGlhcy4nKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMudGVybWluYWxNZXNzYWdlICYmIHByb3BzLmZsZWV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VpdGhlciBhIHRlcm1pbmFsIG1lc3NhZ2Ugb3IgYSBmbGVldCBtdXN0IGJlIGJpbmRlZCB0byB0aGlzIEFsaWFzLCBub3QgYm90aC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IG5ldyBDZm5BbGlhcyh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBuYW1lOiBwcm9wcy5hbGlhc05hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICByb3V0aW5nU3RyYXRlZ3k6IHRoaXMucGFyc2VSb3V0aW5nU3RyYXRlZ3kocHJvcHMpLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hbGlhc0lkID0gdGhpcy5nZXRSZXNvdXJjZU5hbWVBdHRyaWJ1dGUocmVzb3VyY2UucmVmKTtcbiAgICB0aGlzLmFsaWFzQXJuID0gY2RrLlN0YWNrLm9mKHNjb3BlKS5mb3JtYXRBcm4oe1xuICAgICAgc2VydmljZTogJ2dhbWVsaWZ0JyxcbiAgICAgIHJlc291cmNlOiAnYWxpYXMnLFxuICAgICAgcmVzb3VyY2VOYW1lOiB0aGlzLmFsaWFzSWQsXG4gICAgICBhcm5Gb3JtYXQ6IGNkay5Bcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VSb3V0aW5nU3RyYXRlZ3kocHJvcHM6IEFsaWFzUHJvcHMpOiBDZm5BbGlhcy5Sb3V0aW5nU3RyYXRlZ3lQcm9wZXJ0eSB7XG4gICAgaWYgKHByb3BzLmZsZWV0ICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmxlZXRJZDogcHJvcHMuZmxlZXQuZmxlZXRJZCxcbiAgICAgICAgdHlwZTogJ1NJTVBMRScsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZTogcHJvcHMudGVybWluYWxNZXNzYWdlLFxuICAgICAgdHlwZTogJ1RFUk1JTkFMJyxcbiAgICB9O1xuICB9XG59XG5cbiJdfQ==
@@ -151,5 +151,5 @@ class BuildFleet extends fleet_base_1.FleetBase {
151
151
  }
152
152
  exports.BuildFleet = BuildFleet;
153
153
  _a = JSII_RTTI_SYMBOL_1;
154
- BuildFleet[_a] = { fqn: "@aws-cdk/aws-gamelift-alpha.BuildFleet", version: "2.53.0-alpha.0" };
154
+ BuildFleet[_a] = { fqn: "@aws-cdk/aws-gamelift-alpha.BuildFleet", version: "2.54.0-alpha.0" };
155
155
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtZmxlZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJidWlsZC1mbGVldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwyQ0FBMkM7QUFDM0MsbUNBQW1DO0FBR25DLDZDQUE2RDtBQUM3RCwyREFBb0Q7QUErQnBEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQWEsVUFBVyxTQUFRLHNCQUFTO0lBMkN2QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXNCO1FBQzlELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsWUFBWSxFQUFFLEtBQUssQ0FBQyxTQUFTO1NBQzlCLENBQUMsQ0FBQztRQUxZLGlCQUFZLEdBQWtCLEVBQUUsQ0FBQzs7Ozs7OytDQXpDdkMsVUFBVTs7OztRQWdEbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUM1QyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRTtnQkFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2REFBNkQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLGNBQWMsQ0FBQyxDQUFDO2FBQ3BIO1NBQ0Y7UUFFRCxJQUFJLEtBQUssQ0FBQyxXQUFXLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDbkUsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUU7Z0JBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsb0VBQW9FLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxjQUFjLENBQUMsQ0FBQzthQUM3SDtTQUNGO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0ZB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bmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IElCdWlsZCB9IGZyb20gJy4vYnVpbGQnO1xuaW1wb3J0IHsgRmxlZXRCYXNlLCBGbGVldFByb3BzLCBJRmxlZXQgfSBmcm9tICcuL2ZsZWV0LWJhc2UnO1xuaW1wb3J0IHsgQ2ZuRmxlZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZ2FtZWxpZnQnO1xuaW1wb3J0IHsgUG9ydCwgSVBlZXIsIEluZ3Jlc3NSdWxlIH0gZnJvbSAnLi9pbmdyZXNzLXJ1bGUnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBHYW1lTGlmdCBGbGVldCB1c2VkIHRvIHJ1biBhIGN1c3RvbSBnYW1lIGJ1aWxkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElCdWlsZEZsZWV0IGV4dGVuZHMgSUZsZWV0IHt9XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYSBuZXcgR2FtZWxpZnQgYnVpbGQgZmxlZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZEZsZWV0UHJvcHMgZXh0ZW5kcyBGbGVldFByb3BzIHtcblxuICAvKipcbiAgICAgKiBBIGJ1aWxkIHRvIGJlIGRlcGxveWVkIG9uIHRoZSBmbGVldC5cbiAgICAgKiBUaGUgYnVpbGQgbXVzdCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkIHRvIEFtYXpvbiBHYW1lTGlmdCBhbmQgYmUgaW4gYSBgUkVBRFlgIHN0YXR1cy5cbiAgICAgKlxuICAgICAqIFRoaXMgZmxlZXQgc2V0dGluZyBjYW5ub3QgYmUgY2hhbmdlZCBvbmNlIHRoZSBmbGVldCBpcyBjcmVhdGVkLlxuICAgICAqL1xuICByZWFkb25seSBjb250ZW50OiBJQnVpbGQ7XG5cbiAgLyoqXG4gICAqIFRoZSBhbGxvd2VkIElQIGFkZHJlc3MgcmFuZ2VzIGFuZCBwb3J0IHNldHRpbmdzIHRoYXQgYWxsb3cgaW5ib3VuZCB0cmFmZmljIHRvIGFjY2VzcyBnYW1lIHNlc3Npb25zIG9uIHRoaXMgZmxlZXQuXG4gICAqXG4gICAqIFRoaXMgcHJvcGVydHkgbXVzdCBiZSBzZXQgYmVmb3JlIHBsYXllcnMgY2FuIGNvbm5lY3QgdG8gZ2FtZSBzZXNzaW9ucy5cbiAgICpcbiAgICogQGRlZmF1bHQgbm8gaW5ib3VuZCB0cmFmZmljIGFsbG93ZWRcbiAgICovXG4gIHJlYWRvbmx5IGluZ3Jlc3NSdWxlcz86IEluZ3Jlc3NSdWxlW107XG59XG5cbi8qKlxuICogQSBmbGVldCBjb250YWlucyBBbWF6b24gRWxhc3RpYyBDb21wdXRlIENsb3VkIChBbWF6b24gRUMyKSBpbnN0YW5jZXMgdGhhdCBHYW1lTGlmdCBob3N0cy5cbiAqIEEgZmxlZXQgdXNlcyB0aGUgY29uZmlndXJhdGlvbiBhbmQgc2NhbGluZyBsb2dpYyB0aGF0IHlvdSBkZWZpbmUgdG8gcnVuIHlvdXIgZ2FtZSBzZXJ2ZXIgYnVpbGQuIFlvdSBjYW4gdXNlIGEgZmxlZXQgZGlyZWN0bHkgd2l0aG91dCBhIHF1ZXVlLlxuICogWW91IGNhbiBhbHNvIGFzc29jaWF0ZSBtdWx0aXBsZSBmbGVldHMgd2l0aCBhIEdhbWVMaWZ0IHF1ZXVlLlxuICpcbiAqIEZvciBleGFtcGxlLCB5b3UgY2FuIHVzZSBTcG90IEluc3RhbmNlIGZsZWV0cyBjb25maWd1cmVkIHdpdGggeW91ciBwcmVmZXJyZWQgbG9jYXRpb25zLCBhbG9uZyB3aXRoIGEgYmFja3VwIE9uLURlbWFuZCBJbnN0YW5jZSBmbGVldCB3aXRoIHRoZSBzYW1lIGxvY2F0aW9ucy5cbiAqIFVzaW5nIG11bHRpcGxlIFNwb3QgSW5zdGFuY2UgZmxlZXRzIG9mIGRpZmZlcmVudCBpbnN0YW5jZSB0eXBlcyByZWR1Y2VzIHRoZSBjaGFuY2Ugb2YgbmVlZGluZyBPbi1EZW1hbmQgSW5zdGFuY2UgcGxhY2VtZW50LlxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkdhbWVMaWZ0OjpGbGVldFxuICovXG5leHBvcnQgY2xhc3MgQnVpbGRGbGVldCBleHRlbmRzIEZsZWV0QmFzZSBpbXBsZW1lbnRzIElCdWlsZEZsZWV0IHtcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGZsZWV0IGZyb20gaXRzIGlkZW50aWZpZXIuXG4gICAqL1xuICBzdGF0aWMgZnJvbUJ1aWxkRmxlZXRJZChzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBidWlsZEZsZWV0SWQ6IHN0cmluZyk6IElCdWlsZEZsZWV0IHtcbiAgICByZXR1cm4gdGhpcy5mcm9tRmxlZXRBdHRyaWJ1dGVzKHNjb3BlLCBpZCwgeyBmbGVldElkOiBidWlsZEZsZWV0SWQgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGZsZWV0IGZyb20gaXRzIEFSTi5cbiAgICovXG4gIHN0YXRpYyBmcm9tQnVpbGRGbGVldEFybihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBidWlsZEZsZWV0QXJuOiBzdHJpbmcpOiBJQnVpbGRGbGVldCB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUZsZWV0QXR0cmlidXRlcyhzY29wZSwgaWQsIHsgZmxlZXRBcm46IGJ1aWxkRmxlZXRBcm4gfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIElkZW50aWZpZXIgb2YgdGhlIGZsZWV0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGZsZWV0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgZmxlZXQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZmxlZXRBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGJ1aWxkIGNvbnRlbnQgb2YgdGhlIGZsZWV0XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29udGVudDogSUJ1aWxkO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgR2FtZUxpZnQgYXNzdW1lcyBieSBmbGVldCBpbnN0YW5jZXMgdG8gYWNjZXNzIEFXUyByZXNzb3VyY2VzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvbGU6IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogVGhlIHByaW5jaXBhbCB0aGlzIEdhbWVMaWZ0IGZsZWV0IGlzIHVzaW5nLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsOiBpYW0uSVByaW5jaXBhbDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGluZ3Jlc3NSdWxlczogSW5ncmVzc1J1bGVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBCdWlsZEZsZWV0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMuZmxlZXROYW1lLFxuICAgIH0pO1xuXG4gICAgaWYgKCFjZGsuVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLmZsZWV0TmFtZSkpIHtcbiAgICAgIGlmIChwcm9wcy5mbGVldE5hbWUubGVuZ3RoID4gMTAyNCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZsZWV0IG5hbWUgY2FuIG5vdCBiZSBsb25nZXIgdGhhbiAxMDI0IGNoYXJhY3RlcnMgYnV0IGhhcyAke3Byb3BzLmZsZWV0TmFtZS5sZW5ndGh9IGNoYXJhY3RlcnMuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmRlc2NyaXB0aW9uICYmICFjZGsuVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLmRlc2NyaXB0aW9uKSkge1xuICAgICAgaWYgKHByb3BzLmRlc2NyaXB0aW9uLmxlbmd0aCA+IDEwMjQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGbGVldCBkZXNjcmlwdGlvbiBjYW4gbm90IGJlIGxvbmdlciB0aGFuIDEwMjQgY2hhcmFjdGVycyBidXQgaGFzICR7cHJvcHMuZGVzY3JpcHRpb24ubGVuZ3RofSBjaGFyYWN0ZXJzLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9wcy5taW5TaXplICYmIHByb3BzLm1pblNpemUgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBtaW5pbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgYWxsb3dlZCBpbiB0aGUgRmxlZXQgY2Fubm90IGJlIGxvd2VyIHRoYW4gMCwgZ2l2ZW4gJHtwcm9wcy5taW5TaXplfWApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5tYXhTaXplICYmIHByb3BzLm1heFNpemUgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgYWxsb3dlZCBpbiB0aGUgRmxlZXQgY2Fubm90IGJlIGxvd2VyIHRoYW4gMCwgZ2l2ZW4gJHtwcm9wcy5tYXhTaXplfWApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5wZWVyVnBjKSB7XG4gICAgICB0aGlzLndhcm5WcGNQZWVyaW5nQXV0aG9yaXphdGlvbnModGhpcyk7XG4gICAgfVxuXG4gICAgLy8gQWRkIGFsbCBsb2NhdGlvbnNcbiAgICBpZiAocHJvcHMubG9jYXRpb25zICYmIHByb3BzLmxvY2F0aW9ucz8ubGVuZ3RoID4gMTAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIG1vcmUgdGhhbiAxMDAgbG9jYXRpb25zIGFyZSBhbGxvd2VkIHBlciBmbGVldCwgZ2l2ZW4gJHtwcm9wcy5sb2NhdGlvbnMubGVuZ3RofWApO1xuICAgIH1cbiAgICAocHJvcHMubG9jYXRpb25zIHx8IFtdKS5mb3JFYWNoKHRoaXMuYWRkSW50ZXJuYWxMb2NhdGlvbi5iaW5kKHRoaXMpKTtcblxuXG4gICAgLy8gQWRkIGFsbCBJbmdyZXNzIHJ1bGVzXG4gICAgaWYgKHByb3BzLmluZ3Jlc3NSdWxlcyAmJiBwcm9wcy5pbmdyZXNzUnVsZXM/Lmxlbmd0aCA+IDUwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIG1vcmUgdGhhbiA1MCBpbmdyZXNzIHJ1bGVzIGFyZSBhbGxvd2VkIHBlciBmbGVldCwgZ2l2ZW4gJHtwcm9wcy5pbmdyZXNzUnVsZXMubGVuZ3RofWApO1xuICAgIH1cbiAgICAocHJvcHMuaW5ncmVzc1J1bGVzIHx8IFtdKS5mb3JFYWNoKHRoaXMuYWRkSW50ZXJuYWxJbmdyZXNzUnVsZS5iaW5kKHRoaXMpKTtcblxuICAgIHRoaXMuY29udGVudCA9IHByb3BzLmNvbnRlbnQ7XG4gICAgdGhpcy5yb2xlID0gcHJvcHMucm9sZSA/PyBuZXcgaWFtLlJvbGUodGhpcywgJ1NlcnZpY2VSb2xlJywge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLkNvbXBvc2l0ZVByaW5jaXBhbChcbiAgICAgICAgbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdnYW1lbGlmdC5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnZWMyLmFtYXpvbmF3cy5jb20nKSksXG4gICAgfSk7XG4gICAgdGhpcy5ncmFudFByaW5jaXBhbCA9IHRoaXMucm9sZTtcblxuICAgIGNvbnN0IHJlc291cmNlID0gbmV3IENmbkZsZWV0KHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIGJ1aWxkSWQ6IHRoaXMuY29udGVudC5idWlsZElkLFxuICAgICAgY2VydGlmaWNhdGVDb25maWd1cmF0aW9uOiB7XG4gICAgICAgIGNlcnRpZmljYXRlVHlwZTogcHJvcHMudXNlQ2VydGlmaWNhdGUgPyAnR0VORVJBVEVEJzogJ0RJU0FCTEVEJyxcbiAgICAgIH0sXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBkZXNpcmVkRWMySW5zdGFuY2VzOiBwcm9wcy5kZXNpcmVkQ2FwYWNpdHksXG4gICAgICBlYzJJbmJvdW5kUGVybWlzc2lvbnM6IGNkay5MYXp5LmFueSh7IHByb2R1Y2U6ICgpID0+IHRoaXMucGFyc2VJbmdyZXNzUnVsZXMoKSB9KSxcbiAgICAgIGVjMkluc3RhbmNlVHlwZTogcHJvcHMuaW5zdGFuY2VUeXBlLnRvU3RyaW5nKCksXG4gICAgICBmbGVldFR5cGU6IHByb3BzLnVzZVNwb3QgPyAnU1BPVCcgOiAnT05fREVNQU5EJyxcbiAgICAgIGluc3RhbmNlUm9sZUFybjogdGhpcy5yb2xlLnJvbGVBcm4sXG4gICAgICBsb2NhdGlvbnM6IGNkay5MYXp5LmFueSh7IHByb2R1Y2U6ICgpID0+IHRoaXMucGFyc2VMb2NhdGlvbnMoKSB9KSxcbiAgICAgIG1heFNpemU6IHByb3BzLm1heFNpemUgPyBwcm9wcy5tYXhTaXplIDogMSxcbiAgICAgIG1pblNpemU6IHByb3BzLm1pblNpemUgPyBwcm9wcy5taW5TaXplIDogMCxcbiAgICAgIG5hbWU6IHRoaXMucGh5c2ljYWxOYW1lLFxuICAgICAgbmV3R2FtZVNlc3Npb25Qcm90ZWN0aW9uUG9saWN5OiBwcm9wcy5wcm90ZWN0TmV3R2FtZVNlc3Npb24gPyAnRnVsbFByb3RlY3Rpb24nIDogJ05vUHJvdGVjdGlvbicsXG4gICAgICBwZWVyVnBjQXdzQWNjb3VudElkOiBwcm9wcy5wZWVyVnBjICYmIHByb3BzLnBlZXJWcGMuZW52LmFjY291bnQsXG4gICAgICBwZWVyVnBjSWQ6IHByb3BzLnBlZXJWcGMgJiYgcHJvcHMucGVlclZwYy52cGNJZCxcbiAgICAgIHJlc291cmNlQ3JlYXRpb25MaW1pdFBvbGljeTogdGhpcy5wYXJzZVJlc291cmNlQ3JlYXRpb25MaW1pdFBvbGljeShwcm9wcyksXG4gICAgICBydW50aW1lQ29uZmlndXJhdGlvbjogdGhpcy5wYXJzZVJ1bnRpbWVDb25maWd1cmF0aW9uKHByb3BzKSxcbiAgICB9KTtcblxuICAgIHRoaXMuZmxlZXRJZCA9IHRoaXMuZ2V0UmVzb3VyY2VOYW1lQXR0cmlidXRlKHJlc291cmNlLnJlZik7XG4gICAgdGhpcy5mbGVldEFybiA9IGNkay5TdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgIHNlcnZpY2U6ICdnYW1lbGlmdCcsXG4gICAgICByZXNvdXJjZTogJ2ZsZWV0JyxcbiAgICAgIHJlc291cmNlTmFtZTogdGhpcy5mbGVldElkLFxuICAgICAgYXJuRm9ybWF0OiBjZGsuQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBpbmdyZXNzIHJ1bGUgdG8gYWxsb3cgaW5ib3VuZCB0cmFmZmljIHRvIGFjY2VzcyBnYW1lIHNlc3Npb25zIG9uIHRoaXMgZmxlZXQuXG4gICAqXG4gICAqIEBwYXJhbSBzb3VyY2UgQSByYW5nZSBvZiBhbGxvd2VkIElQIGFkZHJlc3Nlc1xuICAgKiBAcGFyYW0gcG9ydCBUaGUgcG9ydCByYW5nZSB1c2VkIGZvciBpbmdyZXNzIHRyYWZmaWNcbiAgICovXG4gIHB1YmxpYyBhZGRJbmdyZXNzUnVsZShzb3VyY2U6IElQZWVyLCBwb3J0OiBQb3J0KSB7XG4gICAgdGhpcy5hZGRJbnRlcm5hbEluZ3Jlc3NSdWxlKHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgcG9ydDogcG9ydCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkSW50ZXJuYWxJbmdyZXNzUnVsZShpbmdyZXNzUnVsZTogSW5ncmVzc1J1bGUpIHtcbiAgICBpZiAodGhpcy5pbmdyZXNzUnVsZXMubGVuZ3RoID09IDUwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIG1vcmUgdGhhbiA1MCBpbmdyZXNzIHJ1bGVzIGFyZSBhbGxvd2VkIHBlciBmbGVldCcpO1xuICAgIH1cbiAgICB0aGlzLmluZ3Jlc3NSdWxlcy5wdXNoKGluZ3Jlc3NSdWxlKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VJbmdyZXNzUnVsZXMoKTogQ2ZuRmxlZXQuSXBQZXJtaXNzaW9uUHJvcGVydHlbXSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLmluZ3Jlc3NSdWxlcyB8fCB0aGlzLmluZ3Jlc3NSdWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaW5ncmVzc1J1bGVzLm1hcChwYXJzZUluZ3Jlc3NSdWxlKTtcblxuICAgIGZ1bmN0aW9uIHBhcnNlSW5ncmVzc1J1bGUoaW5ncmVzc1J1bGU6IEluZ3Jlc3NSdWxlKTogQ2ZuRmxlZXQuSXBQZXJtaXNzaW9uUHJvcGVydHkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uaW5ncmVzc1J1bGUucG9ydC50b0pzb24oKSxcbiAgICAgICAgLi4uaW5ncmVzc1J1bGUuc291cmNlLnRvSnNvbigpLFxuICAgICAgfTtcbiAgICB9XG4gIH1cbn0iXX0=