ec2-instance-running-scheduler 0.1.8 → 0.2.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.
@@ -29,6 +29,27 @@ export interface Secrets {
29
29
  /** Name of the Secrets Manager secret containing Slack token and channel. */
30
30
  readonly slackSecretName: string;
31
31
  }
32
+ /**
33
+ * CDK-side limits for per-instance stable-state polling in the Durable Lambda handler.
34
+ *
35
+ * Values are written to {@link PROCESS_RESOURCE_MAX_LOOP_COUNT_ENV} and
36
+ * {@link PROCESS_RESOURCE_MAX_ELAPSED_SECONDS_ENV} on the running scheduler function.
37
+ * Prevents abnormal or stuck transitions from running until the Durable execution timeout.
38
+ */
39
+ export interface ResourcePollingLimits {
40
+ /**
41
+ * Maximum describe/poll loop iterations per instance.
42
+ *
43
+ * @default {@link DEFAULT_RESOURCE_POLLING_LIMITS.maxLoopCount} (90)
44
+ */
45
+ readonly maxLoopCount?: number;
46
+ /**
47
+ * Maximum wall-clock seconds spent polling a single instance.
48
+ *
49
+ * @default {@link DEFAULT_RESOURCE_POLLING_LIMITS.maxElapsedSeconds} (1800, 30 minutes)
50
+ */
51
+ readonly maxElapsedSeconds?: number;
52
+ }
32
53
  /**
33
54
  * Properties for creating an EC2 instance running scheduler.
34
55
  */
@@ -43,12 +64,21 @@ export interface EC2InstanceRunningSchedulerProps {
43
64
  readonly stopSchedule?: Schedule;
44
65
  /** Cron schedule for starting instances. */
45
66
  readonly startSchedule?: Schedule;
67
+ /**
68
+ * Per-instance polling limits for the running scheduler Lambda.
69
+ *
70
+ * @default {@link DEFAULT_RESOURCE_POLLING_LIMITS}
71
+ */
72
+ readonly resourcePolling?: ResourcePollingLimits;
46
73
  }
47
74
  /**
48
75
  * Provisions EventBridge Scheduler rules and a Durable Execution Lambda that start/stop tagged EC2 instances.
49
76
  *
50
77
  * Each schedule invokes the function with `Params` (`TagKey`, `TagValues`, `Mode`). The function uses
51
78
  * the Resource Groups Tagging API and EC2 APIs; Slack notifications use the secret named in {@link Secrets.slackSecretName}.
79
+ *
80
+ * Per-instance polling timeouts are configured via {@link EC2InstanceRunningSchedulerProps.resourcePolling}
81
+ * and enforced in the handler before the Durable execution timeout.
52
82
  */
53
83
  export declare class EC2InstanceRunningScheduler extends Construct {
54
84
  /**
@@ -56,7 +86,7 @@ export declare class EC2InstanceRunningScheduler extends Construct {
56
86
  *
57
87
  * @param scope - Parent construct.
58
88
  * @param id - Construct id.
59
- * @param props - Target tags, optional cron overrides, Slack secret name, and schedule enable flag.
89
+ * @param props - Target tags, schedules, Slack secret, schedule enable flag, and optional {@link ResourcePollingLimits}.
60
90
  */
61
91
  constructor(scope: Construct, id: string, props: EC2InstanceRunningSchedulerProps);
62
92
  }
@@ -12,11 +12,16 @@ const targets = require("aws-cdk-lib/aws-scheduler-targets");
12
12
  const aws_secretsmanager_1 = require("aws-cdk-lib/aws-secretsmanager");
13
13
  const constructs_1 = require("constructs");
14
14
  const running_scheduler_function_1 = require("../funcs/running-scheduler-function");
15
+ const running_scheduler_polling_config_1 = require("../funcs/running-scheduler-polling-config");
16
+ const running_scheduler_predicates_1 = require("../funcs/running-scheduler-predicates");
15
17
  /**
16
18
  * Provisions EventBridge Scheduler rules and a Durable Execution Lambda that start/stop tagged EC2 instances.
17
19
  *
18
20
  * Each schedule invokes the function with `Params` (`TagKey`, `TagValues`, `Mode`). The function uses
19
21
  * the Resource Groups Tagging API and EC2 APIs; Slack notifications use the secret named in {@link Secrets.slackSecretName}.
22
+ *
23
+ * Per-instance polling timeouts are configured via {@link EC2InstanceRunningSchedulerProps.resourcePolling}
24
+ * and enforced in the handler before the Durable execution timeout.
20
25
  */
21
26
  class EC2InstanceRunningScheduler extends constructs_1.Construct {
22
27
  /**
@@ -24,7 +29,7 @@ class EC2InstanceRunningScheduler extends constructs_1.Construct {
24
29
  *
25
30
  * @param scope - Parent construct.
26
31
  * @param id - Construct id.
27
- * @param props - Target tags, optional cron overrides, Slack secret name, and schedule enable flag.
32
+ * @param props - Target tags, schedules, Slack secret, schedule enable flag, and optional {@link ResourcePollingLimits}.
28
33
  */
29
34
  constructor(scope, id, props) {
30
35
  super(scope, id);
@@ -43,6 +48,8 @@ class EC2InstanceRunningScheduler extends constructs_1.Construct {
43
48
  },
44
49
  environment: {
45
50
  SLACK_SECRET_NAME: props.secrets.slackSecretName,
51
+ [running_scheduler_polling_config_1.PROCESS_RESOURCE_MAX_LOOP_COUNT_ENV]: String(props.resourcePolling?.maxLoopCount ?? running_scheduler_predicates_1.DEFAULT_RESOURCE_POLLING_LIMITS.maxLoopCount),
52
+ [running_scheduler_polling_config_1.PROCESS_RESOURCE_MAX_ELAPSED_SECONDS_ENV]: String(props.resourcePolling?.maxElapsedSeconds ?? running_scheduler_predicates_1.DEFAULT_RESOURCE_POLLING_LIMITS.maxElapsedSeconds),
46
53
  },
47
54
  paramsAndSecrets: lambda.ParamsAndSecretsLayerVersion.fromVersion(lambda.ParamsAndSecretsVersions.V1_0_103, {
48
55
  cacheSize: 500,
@@ -139,5 +146,5 @@ class EC2InstanceRunningScheduler extends constructs_1.Construct {
139
146
  }
140
147
  exports.EC2InstanceRunningScheduler = EC2InstanceRunningScheduler;
141
148
  _a = JSII_RTTI_SYMBOL_1;
142
- EC2InstanceRunningScheduler[_a] = { fqn: "ec2-instance-running-scheduler.EC2InstanceRunningScheduler", version: "0.1.8" };
143
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWMyLWluc3RhbmNlLXJ1bm5pbmctc2NoZWR1bGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvZWMyLWluc3RhbmNlLXJ1bm5pbmctc2NoZWR1bGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBQWdFO0FBQ2hFLDJDQUEyQztBQUMzQyxpREFBaUQ7QUFDakQsNkNBQTZDO0FBQzdDLHVEQUF1RDtBQUN2RCw2REFBNkQ7QUFDN0QsdUVBQXdEO0FBQ3hELDJDQUF1QztBQUN2QyxvRkFBK0U7QUFrRC9FOzs7OztHQUtHO0FBQ0gsTUFBYSwyQkFBNEIsU0FBUSxzQkFBUztJQUN4RDs7Ozs7O09BTUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXVDO1FBQy9FLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxXQUFXLEdBQUcsMkJBQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFaEcsbUdBQW1HO1FBQ25HLDBDQUEwQztRQUMxQyxNQUFNLHVCQUF1QixHQUFHLElBQUkscURBQXdCLENBQUMsSUFBSSxFQUFFLDBCQUEwQixFQUFFO1lBQzdGLFdBQVcsRUFBRSwyRUFBMkU7WUFDeEYsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTTtZQUN4QyxPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzdCLFVBQVUsRUFBRSxHQUFHO1lBQ2YsYUFBYSxFQUFFLENBQUM7WUFDaEIsYUFBYSxFQUFFO2dCQUNiLGdCQUFnQixFQUFFLHNCQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDbkMsZUFBZSxFQUFFLHNCQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNsQztZQUNELFdBQVcsRUFBRTtnQkFDWCxpQkFBaUIsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWU7YUFDakQ7WUFDRCxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsNEJBQTRCLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUU7Z0JBQzFHLFNBQVMsRUFBRSxHQUFHO2dCQUNkLFFBQVEsRUFBRSxNQUFNLENBQUMsd0JBQXdCLENBQUMsSUFBSTthQUMvQyxDQUFDO1lBQ0YsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsOEJBQThCLEVBQUU7Z0JBQ3ZELFdBQVcsRUFBRSxpR0FBaUc7Z0JBQzlHLFNBQVMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQztnQkFDM0QsZUFBZSxFQUFFO29CQUNmLEdBQUcsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsMENBQTBDLENBQUM7b0JBQ3RGLEdBQUcsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsdURBQXVELENBQUM7aUJBQ3BHO2FBQ0YsQ0FBQztZQUNGLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGtDQUFrQyxFQUFFO2dCQUNwRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZO2dCQUMxQyxhQUFhLEVBQUUsMkJBQWEsQ0FBQyxPQUFPO2FBQ3JDLENBQUM7WUFDRixhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJO1lBQ3hDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSTtZQUM1QyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsbUJBQW1CLENBQUMsSUFBSTtTQUN2RCxDQUFDLENBQUM7UUFDSCx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO1lBQzlELEdBQUcsRUFBRSxjQUFjO1lBQ25CLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUs7WUFDeEIsT0FBTyxFQUFFO2dCQUNQLGtCQUFrQjthQUNuQjtZQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUNqQixDQUFDLENBQUMsQ0FBQztRQUNKLHdEQUF3RDtRQUN4RCx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO1lBQzlELEdBQUcsRUFBRSxtQkFBbUI7WUFDeEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSztZQUN4QixPQUFPLEVBQUU7Z0JBQ1AsdUJBQXVCO2dCQUN2QixvQkFBb0I7Z0JBQ3BCLG1CQUFtQjthQUNwQjtZQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUNqQixDQUFDLENBQUMsQ0FBQztRQUNKLHdDQUF3QztRQUN4QyxXQUFXLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFFL0MscUZBQXFGO1FBQ3JGLE1BQU0sNEJBQTRCLEdBQUcsdUJBQXVCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTlFLDJFQUEyRTtRQUMzRSxNQUFNLGVBQWUsR0FBWSxDQUFDLEdBQUcsRUFBRTtZQUNyQyxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ25FLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFTCx5RkFBeUY7UUFDekYsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRTtZQUNuRCxXQUFXLEVBQUUsd0JBQXdCO1lBQ3JDLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLFFBQVEsRUFBRSxTQUFTLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDO2dCQUMxQyxNQUFNLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxNQUFNLElBQUksSUFBSTtnQkFDM0MsSUFBSSxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxJQUFJLEdBQUc7Z0JBQ3RDLE9BQU8sRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksSUFBSSxTQUFTO2dCQUMvQyxRQUFRLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxRQUFRLElBQUksc0JBQVEsQ0FBQyxPQUFPO2FBQzVELENBQUM7WUFDRixNQUFNLEVBQUUsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLDRCQUE0QixFQUFFO2dCQUM3RCxLQUFLLEVBQUUsU0FBUyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQztvQkFDOUMsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU07d0JBQ25DLFNBQVMsRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLFNBQVM7d0JBQ3pDLElBQUksRUFBRSxPQUFPO3FCQUNkO2lCQUNGLENBQUM7YUFDSCxDQUFDO1NBQ0gsQ0FBQyxDQUFDO1FBRUgsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBRTtZQUNsRCxXQUFXLEVBQUUsdUJBQXVCO1lBQ3BDLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLFFBQVEsRUFBRSxTQUFTLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDO2dCQUMxQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxNQUFNLElBQUksR0FBRztnQkFDekMsSUFBSSxFQUFFLEtBQUssQ0FBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLElBQUk7Z0JBQ3RDLE9BQU8sRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksSUFBSSxTQUFTO2dCQUM5QyxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxRQUFRLElBQUksc0JBQVEsQ0FBQyxPQUFPO2FBQzNELENBQUM7WUFDRixNQUFNLEVBQUUsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLDRCQUE0QixFQUFFO2dCQUM3RCxLQUFLLEVBQUUsU0FBUyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQztvQkFDOUMsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU07d0JBQ25DLFNBQVMsRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLFNBQVM7d0JBQ3pDLElBQUksRUFBRSxNQUFNO3FCQUNiO2lCQUNGLENBQUM7YUFDSCxDQUFDO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUExSEgsa0VBMkhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24sIFJlbW92YWxQb2xpY3ksIFRpbWVab25lIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgKiBhcyBzY2hlZHVsZXIgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNjaGVkdWxlcic7XG5pbXBvcnQgKiBhcyB0YXJnZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zY2hlZHVsZXItdGFyZ2V0cyc7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBSdW5uaW5nU2NoZWR1bGVyRnVuY3Rpb24gfSBmcm9tICcuLi9mdW5jcy9ydW5uaW5nLXNjaGVkdWxlci1mdW5jdGlvbic7XG5cbi8qKlxuICogQ3Jvbi1zdHlsZSBzY2hlZHVsZSBjb25maWd1cmF0aW9uIGZvciBzdGFydC9zdG9wIGFjdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZWR1bGUge1xuICAvKiogVGltZSB6b25lIGZvciB0aGUgc2NoZWR1bGUgKGUuZy4gRVRDX1VUQykuICovXG4gIHJlYWRvbmx5IHRpbWV6b25lOiBUaW1lWm9uZTtcbiAgLyoqIENyb24gbWludXRlICgw4oCTNTkpLiAqL1xuICByZWFkb25seSBtaW51dGU/OiBzdHJpbmc7XG4gIC8qKiBDcm9uIGhvdXIgKDDigJMyMykuICovXG4gIHJlYWRvbmx5IGhvdXI/OiBzdHJpbmc7XG4gIC8qKiBDcm9uIGRheSBvZiB3ZWVrIChlLmcuIE1PTi1GUkkpLiAqL1xuICByZWFkb25seSB3ZWVrPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlZmluZXMgd2hpY2ggRUMyIGluc3RhbmNlcyBhcmUgdGFyZ2V0ZWQgYnkgdGFnIGtleSBhbmQgdmFsdWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldFJlc291cmNlIHtcbiAgLyoqIFRhZyBrZXkgdXNlZCB0byBzZWxlY3QgaW5zdGFuY2VzIChlLmcuIFNjaGVkdWxlKS4gKi9cbiAgcmVhZG9ubHkgdGFnS2V5OiBzdHJpbmc7XG4gIC8qKiBUYWcgdmFsdWVzIHRoYXQgbWF0Y2ggaW5zdGFuY2VzIHRvIGluY2x1ZGUuICovXG4gIHJlYWRvbmx5IHRhZ1ZhbHVlczogc3RyaW5nW107XG59XG5cbi8qKlxuICogU2VjcmV0IGlkZW50aWZpZXJzIHJlcXVpcmVkIGJ5IHRoZSBzY2hlZHVsZXIgKGUuZy4gU2xhY2spLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldHMge1xuICAvKiogTmFtZSBvZiB0aGUgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBjb250YWluaW5nIFNsYWNrIHRva2VuIGFuZCBjaGFubmVsLiAqL1xuICByZWFkb25seSBzbGFja1NlY3JldE5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhbiBFQzIgaW5zdGFuY2UgcnVubmluZyBzY2hlZHVsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMge1xuICAvKiogVGFnLWJhc2VkIHRhcmdldGluZyBmb3IgRUMyIGluc3RhbmNlcyB0byBzdGFydC9zdG9wLiAqL1xuICByZWFkb25seSB0YXJnZXRSZXNvdXJjZTogVGFyZ2V0UmVzb3VyY2U7XG4gIC8qKiBXaGV0aGVyIEV2ZW50QnJpZGdlIFNjaGVkdWxlciBydWxlcyBhcmUgZW5hYmxlZC4gRGVmYXVsdHMgdG8gdHJ1ZSBpZiBvbWl0dGVkLiAqL1xuICByZWFkb25seSBlbmFibGVTY2hlZHVsaW5nPzogYm9vbGVhbjtcbiAgLyoqIFNlY3JldHMgKGUuZy4gU2xhY2spIHVzZWQgZm9yIG5vdGlmaWNhdGlvbnMuICovXG4gIHJlYWRvbmx5IHNlY3JldHM6IFNlY3JldHM7XG4gIC8qKiBDcm9uIHNjaGVkdWxlIGZvciBzdG9wcGluZyBpbnN0YW5jZXMuICovXG4gIHJlYWRvbmx5IHN0b3BTY2hlZHVsZT86IFNjaGVkdWxlO1xuICAvKiogQ3JvbiBzY2hlZHVsZSBmb3Igc3RhcnRpbmcgaW5zdGFuY2VzLiAqL1xuICByZWFkb25seSBzdGFydFNjaGVkdWxlPzogU2NoZWR1bGU7XG59XG5cbi8qKlxuICogUHJvdmlzaW9ucyBFdmVudEJyaWRnZSBTY2hlZHVsZXIgcnVsZXMgYW5kIGEgRHVyYWJsZSBFeGVjdXRpb24gTGFtYmRhIHRoYXQgc3RhcnQvc3RvcCB0YWdnZWQgRUMyIGluc3RhbmNlcy5cbiAqXG4gKiBFYWNoIHNjaGVkdWxlIGludm9rZXMgdGhlIGZ1bmN0aW9uIHdpdGggYFBhcmFtc2AgKGBUYWdLZXlgLCBgVGFnVmFsdWVzYCwgYE1vZGVgKS4gVGhlIGZ1bmN0aW9uIHVzZXNcbiAqIHRoZSBSZXNvdXJjZSBHcm91cHMgVGFnZ2luZyBBUEkgYW5kIEVDMiBBUElzOyBTbGFjayBub3RpZmljYXRpb25zIHVzZSB0aGUgc2VjcmV0IG5hbWVkIGluIHtAbGluayBTZWNyZXRzLnNsYWNrU2VjcmV0TmFtZX0uXG4gKi9cbmV4cG9ydCBjbGFzcyBFQzJJbnN0YW5jZVJ1bm5pbmdTY2hlZHVsZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogRGVmaW5lcyBJQU0sIGxvZ2dpbmcsIHR3byBjcm9uIHNjaGVkdWxlcyAoc3RhcnQvc3RvcCksIGFuZCB0aGUgYnVuZGxlZCBydW5uaW5nLXNjaGVkdWxlciBMYW1iZGEgKE5vZGUuanMsIER1cmFibGUgRXhlY3V0aW9uKS5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gUGFyZW50IGNvbnN0cnVjdC5cbiAgICogQHBhcmFtIGlkIC0gQ29uc3RydWN0IGlkLlxuICAgKiBAcGFyYW0gcHJvcHMgLSBUYXJnZXQgdGFncywgb3B0aW9uYWwgY3JvbiBvdmVycmlkZXMsIFNsYWNrIHNlY3JldCBuYW1lLCBhbmQgc2NoZWR1bGUgZW5hYmxlIGZsYWcuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3Qgc2xhY2tTZWNyZXQgPSBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMih0aGlzLCAnU2xhY2tTZWNyZXQnLCBwcm9wcy5zZWNyZXRzLnNsYWNrU2VjcmV0TmFtZSk7XG5cbiAgICAvLyBEdXJhYmxlIEZ1bmN0aW9ucy1iYXNlZCBSdW5uaW5nIFNjaGVkdWxlciAocHJldmlvdXMgU3RlcCBGdW5jdGlvbnMgbG9naWMgaW1wbGVtZW50ZWQgaW4gTGFtYmRhKS5cbiAgICAvLyBEdXJhYmxlIEV4ZWN1dGlvbiByZXF1aXJlcyBOb2RlLmpzIDIyKy5cbiAgICBjb25zdCBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbiA9IG5ldyBSdW5uaW5nU2NoZWR1bGVyRnVuY3Rpb24odGhpcywgJ1J1bm5pbmdTY2hlZHVsZXJGdW5jdGlvbicsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnU3RhcnRzIGFuZCBzdG9wcyB0YWdnZWQgRUMyIGluc3RhbmNlcyBvbiBFdmVudEJyaWRnZSBTY2hlZHVsZXIgc2NoZWR1bGVzLicsXG4gICAgICBhcmNoaXRlY3R1cmU6IGxhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgICBtZW1vcnlTaXplOiA1MTIsXG4gICAgICByZXRyeUF0dGVtcHRzOiAyLFxuICAgICAgZHVyYWJsZUNvbmZpZzoge1xuICAgICAgICBleGVjdXRpb25UaW1lb3V0OiBEdXJhdGlvbi5ob3VycygyKSxcbiAgICAgICAgcmV0ZW50aW9uUGVyaW9kOiBEdXJhdGlvbi5kYXlzKDEpLFxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFNMQUNLX1NFQ1JFVF9OQU1FOiBwcm9wcy5zZWNyZXRzLnNsYWNrU2VjcmV0TmFtZSxcbiAgICAgIH0sXG4gICAgICBwYXJhbXNBbmRTZWNyZXRzOiBsYW1iZGEuUGFyYW1zQW5kU2VjcmV0c0xheWVyVmVyc2lvbi5mcm9tVmVyc2lvbihsYW1iZGEuUGFyYW1zQW5kU2VjcmV0c1ZlcnNpb25zLlYxXzBfMTAzLCB7XG4gICAgICAgIGNhY2hlU2l6ZTogNTAwLFxuICAgICAgICBsb2dMZXZlbDogbGFtYmRhLlBhcmFtc0FuZFNlY3JldHNMb2dMZXZlbC5JTkZPLFxuICAgICAgfSksXG4gICAgICByb2xlOiBuZXcgaWFtLlJvbGUodGhpcywgJ1J1bm5pbmdTY2hlZHVsZXJGdW5jdGlvblJvbGUnLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQWxsb3dzIHRoZSBydW5uaW5nIHNjaGVkdWxlciB0byBkZXNjcmliZSwgc3RhcnQsIGFuZCBzdG9wIEVDMiBpbnN0YW5jZXMgYW5kIHJlYWQgU2xhY2sgc2VjcmV0cy4nLFxuICAgICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnbGFtYmRhLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdzZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlJyksXG4gICAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdzZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNEdXJhYmxlRXhlY3V0aW9uUm9sZVBvbGljeScpLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgICBsb2dHcm91cDogbmV3IGxvZ3MuTG9nR3JvdXAodGhpcywgJ1J1bm5pbmdTY2hlZHVsZXJGdW5jdGlvbkxvZ0dyb3VwJywge1xuICAgICAgICByZXRlbnRpb246IGxvZ3MuUmV0ZW50aW9uRGF5cy5USFJFRV9NT05USFMsXG4gICAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIH0pLFxuICAgICAgbG9nZ2luZ0Zvcm1hdDogbGFtYmRhLkxvZ2dpbmdGb3JtYXQuSlNPTixcbiAgICAgIHN5c3RlbUxvZ0xldmVsVjI6IGxhbWJkYS5TeXN0ZW1Mb2dMZXZlbC5JTkZPLFxuICAgICAgYXBwbGljYXRpb25Mb2dMZXZlbFYyOiBsYW1iZGEuQXBwbGljYXRpb25Mb2dMZXZlbC5JTkZPLFxuICAgIH0pO1xuICAgIHJ1bm5pbmdTY2hlZHVsZUZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdHZXRSZXNvdXJjZXMnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAndGFnOkdldFJlc291cmNlcycsXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICB9KSk7XG4gICAgLy8gRUMyOiBkZXNjcmliZSBpbnN0YW5jZXMgYW5kIHN0YXJ0L3N0b3AgYnkgaW5zdGFuY2UgaWRcbiAgICBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnRWMyUnVubmluZ0NvbnRyb2wnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAnZWMyOkRlc2NyaWJlSW5zdGFuY2VzJyxcbiAgICAgICAgJ2VjMjpTdGFydEluc3RhbmNlcycsXG4gICAgICAgICdlYzI6U3RvcEluc3RhbmNlcycsXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICB9KSk7XG4gICAgLy8gR3JhbnQgcmVhZCBhY2Nlc3MgdG8gdGhlIFNsYWNrIHNlY3JldFxuICAgIHNsYWNrU2VjcmV0LmdyYW50UmVhZChydW5uaW5nU2NoZWR1bGVGdW5jdGlvbik7XG5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9sYW1iZGEvbGF0ZXN0L2RnL2R1cmFibGUtZ2V0dGluZy1zdGFydGVkLWlhYy5odG1sXG4gICAgY29uc3QgcnVubmluZ1NjaGVkdWxlRnVuY3Rpb25BbGlhcyA9IHJ1bm5pbmdTY2hlZHVsZUZ1bmN0aW9uLmFkZEFsaWFzKCdsaXZlJyk7XG5cbiAgICAvLyBXaGV0aGVyIHNjaGVkdWxlcyBhcmUgZW5hYmxlZCAoZGVmYXVsdCB0cnVlIHVubGVzcyBleHBsaWNpdGx5IGRpc2FibGVkKS5cbiAgICBjb25zdCBzY2hlZHVsZUVuYWJsZWQ6IGJvb2xlYW4gPSAoKCkgPT4ge1xuICAgICAgaWYgKHByb3BzLmVuYWJsZVNjaGVkdWxpbmcgPT09IHVuZGVmaW5lZCB8fCBwcm9wcy5lbmFibGVTY2hlZHVsaW5nKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICAvLyBEdXJhYmxlIEZ1bmN0aW9uczogTGFtYmRhIHBlcmZvcm1zIHRhZyBsb29rdXAgYW5kIGluc3RhbmNlIHN0YXJ0L3N0b3AgaW4gYSBzaW5nbGUgcnVuLlxuICAgIG5ldyBzY2hlZHVsZXIuU2NoZWR1bGUodGhpcywgJ1J1bm5pbmdTdGFydFNjaGVkdWxlJywge1xuICAgICAgZGVzY3JpcHRpb246ICdydW5uaW5nIHN0YXJ0IHNjaGVkdWxlJyxcbiAgICAgIGVuYWJsZWQ6IHNjaGVkdWxlRW5hYmxlZCxcbiAgICAgIHNjaGVkdWxlOiBzY2hlZHVsZXIuU2NoZWR1bGVFeHByZXNzaW9uLmNyb24oe1xuICAgICAgICBtaW51dGU6IHByb3BzLnN0YXJ0U2NoZWR1bGU/Lm1pbnV0ZSA/PyAnNTAnLFxuICAgICAgICBob3VyOiBwcm9wcy5zdGFydFNjaGVkdWxlPy5ob3VyID8/ICc3JyxcbiAgICAgICAgd2Vla0RheTogcHJvcHMuc3RhcnRTY2hlZHVsZT8ud2VlayA/PyAnTU9OLUZSSScsXG4gICAgICAgIHRpbWVab25lOiBwcm9wcy5zdGFydFNjaGVkdWxlPy50aW1lem9uZSA/PyBUaW1lWm9uZS5FVENfVVRDLFxuICAgICAgfSksXG4gICAgICB0YXJnZXQ6IG5ldyB0YXJnZXRzLkxhbWJkYUludm9rZShydW5uaW5nU2NoZWR1bGVGdW5jdGlvbkFsaWFzLCB7XG4gICAgICAgIGlucHV0OiBzY2hlZHVsZXIuU2NoZWR1bGVUYXJnZXRJbnB1dC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICBQYXJhbXM6IHtcbiAgICAgICAgICAgIFRhZ0tleTogcHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnS2V5LFxuICAgICAgICAgICAgVGFnVmFsdWVzOiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdWYWx1ZXMsXG4gICAgICAgICAgICBNb2RlOiAnU3RhcnQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICBuZXcgc2NoZWR1bGVyLlNjaGVkdWxlKHRoaXMsICdSdW5uaW5nU3RvcFNjaGVkdWxlJywge1xuICAgICAgZGVzY3JpcHRpb246ICdydW5uaW5nIHN0b3Agc2NoZWR1bGUnLFxuICAgICAgZW5hYmxlZDogc2NoZWR1bGVFbmFibGVkLFxuICAgICAgc2NoZWR1bGU6IHNjaGVkdWxlci5TY2hlZHVsZUV4cHJlc3Npb24uY3Jvbih7XG4gICAgICAgIG1pbnV0ZTogcHJvcHMuc3RvcFNjaGVkdWxlPy5taW51dGUgPz8gJzUnLFxuICAgICAgICBob3VyOiBwcm9wcy5zdG9wU2NoZWR1bGU/LmhvdXIgPz8gJzE5JyxcbiAgICAgICAgd2Vla0RheTogcHJvcHMuc3RvcFNjaGVkdWxlPy53ZWVrID8/ICdNT04tRlJJJyxcbiAgICAgICAgdGltZVpvbmU6IHByb3BzLnN0b3BTY2hlZHVsZT8udGltZXpvbmUgPz8gVGltZVpvbmUuRVRDX1VUQyxcbiAgICAgIH0pLFxuICAgICAgdGFyZ2V0OiBuZXcgdGFyZ2V0cy5MYW1iZGFJbnZva2UocnVubmluZ1NjaGVkdWxlRnVuY3Rpb25BbGlhcywge1xuICAgICAgICBpbnB1dDogc2NoZWR1bGVyLlNjaGVkdWxlVGFyZ2V0SW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICAgICAgUGFyYW1zOiB7XG4gICAgICAgICAgICBUYWdLZXk6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ0tleSxcbiAgICAgICAgICAgIFRhZ1ZhbHVlczogcHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzLFxuICAgICAgICAgICAgTW9kZTogJ1N0b3AnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgfSksXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
149
+ EC2InstanceRunningScheduler[_a] = { fqn: "ec2-instance-running-scheduler.EC2InstanceRunningScheduler", version: "0.2.0" };
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWMyLWluc3RhbmNlLXJ1bm5pbmctc2NoZWR1bGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvZWMyLWluc3RhbmNlLXJ1bm5pbmctc2NoZWR1bGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBQWdFO0FBQ2hFLDJDQUEyQztBQUMzQyxpREFBaUQ7QUFDakQsNkNBQTZDO0FBQzdDLHVEQUF1RDtBQUN2RCw2REFBNkQ7QUFDN0QsdUVBQXdEO0FBQ3hELDJDQUF1QztBQUN2QyxvRkFBK0U7QUFDL0UsZ0dBR21EO0FBQ25ELHdGQUF3RjtBQThFeEY7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFhLDJCQUE0QixTQUFRLHNCQUFTO0lBQ3hEOzs7Ozs7T0FNRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUM7UUFDL0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFdBQVcsR0FBRywyQkFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVoRyxtR0FBbUc7UUFDbkcsMENBQTBDO1FBQzFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxxREFBd0IsQ0FBQyxJQUFJLEVBQUUsMEJBQTBCLEVBQUU7WUFDN0YsV0FBVyxFQUFFLDJFQUEyRTtZQUN4RixZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNO1lBQ3hDLE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDN0IsVUFBVSxFQUFFLEdBQUc7WUFDZixhQUFhLEVBQUUsQ0FBQztZQUNoQixhQUFhLEVBQUU7Z0JBQ2IsZ0JBQWdCLEVBQUUsc0JBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNuQyxlQUFlLEVBQUUsc0JBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxD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QUFDLFlBQVksRUFBRSxJQUFJLElBQUksU0FBUztnQkFDOUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxZQUFZLEVBQUUsUUFBUSxJQUFJLHNCQUFRLENBQUMsT0FBTzthQUMzRCxDQUFDO1lBQ0YsTUFBTSxFQUFFLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsRUFBRTtnQkFDN0QsS0FBSyxFQUFFLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUM7b0JBQzlDLE1BQU0sRUFBRTt3QkFDTixNQUFNLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNO3dCQUNuQyxTQUFTLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTO3dCQUN6QyxJQUFJLEVBQUUsTUFBTTtxQkFDYjtpQkFDRixDQUFDO2FBQ0gsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7O0FBaElILGtFQWlJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uLCBSZW1vdmFsUG9saWN5LCBUaW1lWm9uZSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0ICogYXMgc2NoZWR1bGVyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zY2hlZHVsZXInO1xuaW1wb3J0ICogYXMgdGFyZ2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2NoZWR1bGVyLXRhcmdldHMnO1xuaW1wb3J0IHsgU2VjcmV0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgUnVubmluZ1NjaGVkdWxlckZ1bmN0aW9uIH0gZnJvbSAnLi4vZnVuY3MvcnVubmluZy1zY2hlZHVsZXItZnVuY3Rpb24nO1xuaW1wb3J0IHtcbiAgUFJPQ0VTU19SRVNPVVJDRV9NQVhfRUxBUFNFRF9TRUNPTkRTX0VOVixcbiAgUFJPQ0VTU19SRVNPVVJDRV9NQVhfTE9PUF9DT1VOVF9FTlYsXG59IGZyb20gJy4uL2Z1bmNzL3J1bm5pbmctc2NoZWR1bGVyLXBvbGxpbmctY29uZmlnJztcbmltcG9ydCB7IERFRkFVTFRfUkVTT1VSQ0VfUE9MTElOR19MSU1JVFMgfSBmcm9tICcuLi9mdW5jcy9ydW5uaW5nLXNjaGVkdWxlci1wcmVkaWNhdGVzJztcblxuLyoqXG4gKiBDcm9uLXN0eWxlIHNjaGVkdWxlIGNvbmZpZ3VyYXRpb24gZm9yIHN0YXJ0L3N0b3AgYWN0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2hlZHVsZSB7XG4gIC8qKiBUaW1lIHpvbmUgZm9yIHRoZSBzY2hlZHVsZSAoZS5nLiBFVENfVVRDKS4gKi9cbiAgcmVhZG9ubHkgdGltZXpvbmU6IFRpbWVab25lO1xuICAvKiogQ3JvbiBtaW51dGUgKDDigJM1OSkuICovXG4gIHJlYWRvbmx5IG1pbnV0ZT86IHN0cmluZztcbiAgLyoqIENyb24gaG91ciAoMOKAkzIzKS4gKi9cbiAgcmVhZG9ubHkgaG91cj86IHN0cmluZztcbiAgLyoqIENyb24gZGF5IG9mIHdlZWsgKGUuZy4gTU9OLUZSSSkuICovXG4gIHJlYWRvbmx5IHdlZWs/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVmaW5lcyB3aGljaCBFQzIgaW5zdGFuY2VzIGFyZSB0YXJnZXRlZCBieSB0YWcga2V5IGFuZCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFyZ2V0UmVzb3VyY2Uge1xuICAvKiogVGFnIGtleSB1c2VkIHRvIHNlbGVjdCBpbnN0YW5jZXMgKGUuZy4gU2NoZWR1bGUpLiAqL1xuICByZWFkb25seSB0YWdLZXk6IHN0cmluZztcbiAgLyoqIFRhZyB2YWx1ZXMgdGhhdCBtYXRjaCBpbnN0YW5jZXMgdG8gaW5jbHVkZS4gKi9cbiAgcmVhZG9ubHkgdGFnVmFsdWVzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBTZWNyZXQgaWRlbnRpZmllcnMgcmVxdWlyZWQgYnkgdGhlIHNjaGVkdWxlciAoZS5nLiBTbGFjaykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjcmV0cyB7XG4gIC8qKiBOYW1lIG9mIHRoZSBTZWNyZXRzIE1hbmFnZXIgc2VjcmV0IGNvbnRhaW5pbmcgU2xhY2sgdG9rZW4gYW5kIGNoYW5uZWwuICovXG4gIHJlYWRvbmx5IHNsYWNrU2VjcmV0TmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIENESy1zaWRlIGxpbWl0cyBmb3IgcGVyLWluc3RhbmNlIHN0YWJsZS1zdGF0ZSBwb2xsaW5nIGluIHRoZSBEdXJhYmxlIExhbWJkYSBoYW5kbGVyLlxuICpcbiAqIFZhbHVlcyBhcmUgd3JpdHRlbiB0byB7QGxpbmsgUFJPQ0VTU19SRVNPVVJDRV9NQVhfTE9PUF9DT1VOVF9FTlZ9IGFuZFxuICoge0BsaW5rIFBST0NFU1NfUkVTT1VSQ0VfTUFYX0VMQVBTRURfU0VDT05EU19FTlZ9IG9uIHRoZSBydW5uaW5nIHNjaGVkdWxlciBmdW5jdGlvbi5cbiAqIFByZXZlbnRzIGFibm9ybWFsIG9yIHN0dWNrIHRyYW5zaXRpb25zIGZyb20gcnVubmluZyB1bnRpbCB0aGUgRHVyYWJsZSBleGVjdXRpb24gdGltZW91dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZVBvbGxpbmdMaW1pdHMge1xuICAvKipcbiAgICogTWF4aW11bSBkZXNjcmliZS9wb2xsIGxvb3AgaXRlcmF0aW9ucyBwZXIgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBERUZBVUxUX1JFU09VUkNFX1BPTExJTkdfTElNSVRTLm1heExvb3BDb3VudH0gKDkwKVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4TG9vcENvdW50PzogbnVtYmVyO1xuICAvKipcbiAgICogTWF4aW11bSB3YWxsLWNsb2NrIHNlY29uZHMgc3BlbnQgcG9sbGluZyBhIHNpbmdsZSBpbnN0YW5jZS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIERFRkFVTFRfUkVTT1VSQ0VfUE9MTElOR19MSU1JVFMubWF4RWxhcHNlZFNlY29uZHN9ICgxODAwLCAzMCBtaW51dGVzKVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4RWxhcHNlZFNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYW4gRUMyIGluc3RhbmNlIHJ1bm5pbmcgc2NoZWR1bGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVDMkluc3RhbmNlUnVubmluZ1NjaGVkdWxlclByb3BzIHtcbiAgLyoqIFRhZy1iYXNlZCB0YXJnZXRpbmcgZm9yIEVDMiBpbnN0YW5jZXMgdG8gc3RhcnQvc3RvcC4gKi9cbiAgcmVhZG9ubHkgdGFyZ2V0UmVzb3VyY2U6IFRhcmdldFJlc291cmNlO1xuICAvKiogV2hldGhlciBFdmVudEJyaWRnZSBTY2hlZHVsZXIgcnVsZXMgYXJlIGVuYWJsZWQuIERlZmF1bHRzIHRvIHRydWUgaWYgb21pdHRlZC4gKi9cbiAgcmVhZG9ubHkgZW5hYmxlU2NoZWR1bGluZz86IGJvb2xlYW47XG4gIC8qKiBTZWNyZXRzIChlLmcuIFNsYWNrKSB1c2VkIGZvciBub3RpZmljYXRpb25zLiAqL1xuICByZWFkb25seSBzZWNyZXRzOiBTZWNyZXRzO1xuICAvKiogQ3JvbiBzY2hlZHVsZSBmb3Igc3RvcHBpbmcgaW5zdGFuY2VzLiAqL1xuICByZWFkb25seSBzdG9wU2NoZWR1bGU/OiBTY2hlZHVsZTtcbiAgLyoqIENyb24gc2NoZWR1bGUgZm9yIHN0YXJ0aW5nIGluc3RhbmNlcy4gKi9cbiAgcmVhZG9ubHkgc3RhcnRTY2hlZHVsZT86IFNjaGVkdWxlO1xuICAvKipcbiAgICogUGVyLWluc3RhbmNlIHBvbGxpbmcgbGltaXRzIGZvciB0aGUgcnVubmluZyBzY2hlZHVsZXIgTGFtYmRhLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgREVGQVVMVF9SRVNPVVJDRV9QT0xMSU5HX0xJTUlUU31cbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlUG9sbGluZz86IFJlc291cmNlUG9sbGluZ0xpbWl0cztcbn1cblxuLyoqXG4gKiBQcm92aXNpb25zIEV2ZW50QnJpZGdlIFNjaGVkdWxlciBydWxlcyBhbmQgYSBEdXJhYmxlIEV4ZWN1dGlvbiBMYW1iZGEgdGhhdCBzdGFydC9zdG9wIHRhZ2dlZCBFQzIgaW5zdGFuY2VzLlxuICpcbiAqIEVhY2ggc2NoZWR1bGUgaW52b2tlcyB0aGUgZnVuY3Rpb24gd2l0aCBgUGFyYW1zYCAoYFRhZ0tleWAsIGBUYWdWYWx1ZXNgLCBgTW9kZWApLiBUaGUgZnVuY3Rpb24gdXNlc1xuICogdGhlIFJlc291cmNlIEdyb3VwcyBUYWdnaW5nIEFQSSBhbmQgRUMyIEFQSXM7IFNsYWNrIG5vdGlmaWNhdGlvbnMgdXNlIHRoZSBzZWNyZXQgbmFtZWQgaW4ge0BsaW5rIFNlY3JldHMuc2xhY2tTZWNyZXROYW1lfS5cbiAqXG4gKiBQZXItaW5zdGFuY2UgcG9sbGluZyB0aW1lb3V0cyBhcmUgY29uZmlndXJlZCB2aWEge0BsaW5rIEVDMkluc3RhbmNlUnVubmluZ1NjaGVkdWxlclByb3BzLnJlc291cmNlUG9sbGluZ31cbiAqIGFuZCBlbmZvcmNlZCBpbiB0aGUgaGFuZGxlciBiZWZvcmUgdGhlIER1cmFibGUgZXhlY3V0aW9uIHRpbWVvdXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBFQzJJbnN0YW5jZVJ1bm5pbmdTY2hlZHVsZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogRGVmaW5lcyBJQU0sIGxvZ2dpbmcsIHR3byBjcm9uIHNjaGVkdWxlcyAoc3RhcnQvc3RvcCksIGFuZCB0aGUgYnVuZGxlZCBydW5uaW5nLXNjaGVkdWxlciBMYW1iZGEgKE5vZGUuanMsIER1cmFibGUgRXhlY3V0aW9uKS5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gUGFyZW50IGNvbnN0cnVjdC5cbiAgICogQHBhcmFtIGlkIC0gQ29uc3RydWN0IGlkLlxuICAgKiBAcGFyYW0gcHJvcHMgLSBUYXJnZXQgdGFncywgc2NoZWR1bGVzLCBTbGFjayBzZWNyZXQsIHNjaGVkdWxlIGVuYWJsZSBmbGFnLCBhbmQgb3B0aW9uYWwge0BsaW5rIFJlc291cmNlUG9sbGluZ0xpbWl0c30uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3Qgc2xhY2tTZWNyZXQgPSBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMih0aGlzLCAnU2xhY2tTZWNyZXQnLCBwcm9wcy5zZWNyZXRzLnNsYWNrU2VjcmV0TmFtZSk7XG5cbiAgICAvLyBEdXJhYmxlIEZ1bmN0aW9ucy1iYXNlZCBSdW5uaW5nIFNjaGVkdWxlciAocHJldmlvdXMgU3RlcCBGdW5jdGlvbnMgbG9naWMgaW1wbGVtZW50ZWQgaW4gTGFtYmRhKS5cbiAgICAvLyBEdXJhYmxlIEV4ZWN1dGlvbiByZXF1aXJlcyBOb2RlLmpzIDIyKy5cbiAgICBjb25zdCBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbiA9IG5ldyBSdW5uaW5nU2NoZWR1bGVyRnVuY3Rpb24odGhpcywgJ1J1bm5pbmdTY2hlZHVsZXJGdW5jdGlvbicsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnU3RhcnRzIGFuZCBzdG9wcyB0YWdnZWQgRUMyIGluc3RhbmNlcyBvbiBFdmVudEJyaWRnZSBTY2hlZHVsZXIgc2NoZWR1bGVzLicsXG4gICAgICBhcmNoaXRlY3R1cmU6IGxhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgICBtZW1vcnlTaXplOiA1MTIsXG4gICAgICByZXRyeUF0dGVtcHRzOiAyLFxuICAgICAgZHVyYWJsZUNvbmZpZzoge1xuICAgICAgICBleGVjdXRpb25UaW1lb3V0OiBEdXJhdGlvbi5ob3VycygyKSxcbiAgICAgICAgcmV0ZW50aW9uUGVyaW9kOiBEdXJhdGlvbi5kYXlzKDEpLFxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFNMQUNLX1NFQ1JFVF9OQU1FOiBwcm9wcy5zZWNyZXRzLnNsYWNrU2VjcmV0TmFtZSxcbiAgICAgICAgW1BST0NFU1NfUkVTT1VSQ0VfTUFYX0xPT1BfQ09VTlRfRU5WXTogU3RyaW5nKFxuICAgICAgICAgIHByb3BzLnJlc291cmNlUG9sbGluZz8ubWF4TG9vcENvdW50ID8/IERFRkFVTFRfUkVTT1VSQ0VfUE9MTElOR19MSU1JVFMubWF4TG9vcENvdW50LFxuICAgICAgICApLFxuICAgICAgICBbUFJPQ0VTU19SRVNPVVJDRV9NQVhfRUxBUFNFRF9TRUNPTkRTX0VOVl06IFN0cmluZyhcbiAgICAgICAgICBwcm9wcy5yZXNvdXJjZVBvbGxpbmc/Lm1heEVsYXBzZWRTZWNvbmRzID8/IERFRkFVTFRfUkVTT1VSQ0VfUE9MTElOR19MSU1JVFMubWF4RWxhcHNlZFNlY29uZHMsXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICAgcGFyYW1zQW5kU2VjcmV0czogbGFtYmRhLlBhcmFtc0FuZFNlY3JldHNMYXllclZlcnNpb24uZnJvbVZlcnNpb24obGFtYmRhLlBhcmFtc0FuZFNlY3JldHNWZXJzaW9ucy5WMV8wXzEwMywge1xuICAgICAgICBjYWNoZVNpemU6IDUwMCxcbiAgICAgICAgbG9nTGV2ZWw6IGxhbWJkYS5QYXJhbXNBbmRTZWNyZXRzTG9nTGV2ZWwuSU5GTyxcbiAgICAgIH0pLFxuICAgICAgcm9sZTogbmV3IGlhbS5Sb2xlKHRoaXMsICdSdW5uaW5nU2NoZWR1bGVyRnVuY3Rpb25Sb2xlJywge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0FsbG93cyB0aGUgcnVubmluZyBzY2hlZHVsZXIgdG8gZGVzY3JpYmUsIHN0YXJ0LCBhbmQgc3RvcCBFQzIgaW5zdGFuY2VzIGFuZCByZWFkIFNsYWNrIHNlY3JldHMuJyxcbiAgICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2xhbWJkYS5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZScpLFxuICAgICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRHVyYWJsZUV4ZWN1dGlvblJvbGVQb2xpY3knKSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICAgbG9nR3JvdXA6IG5ldyBsb2dzLkxvZ0dyb3VwKHRoaXMsICdSdW5uaW5nU2NoZWR1bGVyRnVuY3Rpb25Mb2dHcm91cCcsIHtcbiAgICAgICAgcmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuVEhSRUVfTU9OVEhTLFxuICAgICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICB9KSxcbiAgICAgIGxvZ2dpbmdGb3JtYXQ6IGxhbWJkYS5Mb2dnaW5nRm9ybWF0LkpTT04sXG4gICAgICBzeXN0ZW1Mb2dMZXZlbFYyOiBsYW1iZGEuU3lzdGVtTG9nTGV2ZWwuSU5GTyxcbiAgICAgIGFwcGxpY2F0aW9uTG9nTGV2ZWxWMjogbGFtYmRhLkFwcGxpY2F0aW9uTG9nTGV2ZWwuSU5GTyxcbiAgICB9KTtcbiAgICBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnR2V0UmVzb3VyY2VzJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgJ3RhZzpHZXRSZXNvdXJjZXMnLFxuICAgICAgXSxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgfSkpO1xuICAgIC8vIEVDMjogZGVzY3JpYmUgaW5zdGFuY2VzIGFuZCBzdGFydC9zdG9wIGJ5IGluc3RhbmNlIGlkXG4gICAgcnVubmluZ1NjaGVkdWxlRnVuY3Rpb24uYWRkVG9Sb2xlUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ0VjMlJ1bm5pbmdDb250cm9sJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgJ2VjMjpEZXNjcmliZUluc3RhbmNlcycsXG4gICAgICAgICdlYzI6U3RhcnRJbnN0YW5jZXMnLFxuICAgICAgICAnZWMyOlN0b3BJbnN0YW5jZXMnLFxuICAgICAgXSxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgfSkpO1xuICAgIC8vIEdyYW50IHJlYWQgYWNjZXNzIHRvIHRoZSBTbGFjayBzZWNyZXRcbiAgICBzbGFja1NlY3JldC5ncmFudFJlYWQocnVubmluZ1NjaGVkdWxlRnVuY3Rpb24pO1xuXG4gICAgLy8gU2VlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9kZy9kdXJhYmxlLWdldHRpbmctc3RhcnRlZC1pYWMuaHRtbFxuICAgIGNvbnN0IHJ1bm5pbmdTY2hlZHVsZUZ1bmN0aW9uQWxpYXMgPSBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbi5hZGRBbGlhcygnbGl2ZScpO1xuXG4gICAgLy8gV2hldGhlciBzY2hlZHVsZXMgYXJlIGVuYWJsZWQgKGRlZmF1bHQgdHJ1ZSB1bmxlc3MgZXhwbGljaXRseSBkaXNhYmxlZCkuXG4gICAgY29uc3Qgc2NoZWR1bGVFbmFibGVkOiBib29sZWFuID0gKCgpID0+IHtcbiAgICAgIGlmIChwcm9wcy5lbmFibGVTY2hlZHVsaW5nID09PSB1bmRlZmluZWQgfHwgcHJvcHMuZW5hYmxlU2NoZWR1bGluZykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KSgpO1xuXG4gICAgLy8gRHVyYWJsZSBGdW5jdGlvbnM6IExhbWJkYSBwZXJmb3JtcyB0YWcgbG9va3VwIGFuZCBpbnN0YW5jZSBzdGFydC9zdG9wIGluIGEgc2luZ2xlIHJ1bi5cbiAgICBuZXcgc2NoZWR1bGVyLlNjaGVkdWxlKHRoaXMsICdSdW5uaW5nU3RhcnRTY2hlZHVsZScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAncnVubmluZyBzdGFydCBzY2hlZHVsZScsXG4gICAgICBlbmFibGVkOiBzY2hlZHVsZUVuYWJsZWQsXG4gICAgICBzY2hlZHVsZTogc2NoZWR1bGVyLlNjaGVkdWxlRXhwcmVzc2lvbi5jcm9uKHtcbiAgICAgICAgbWludXRlOiBwcm9wcy5zdGFydFNjaGVkdWxlPy5taW51dGUgPz8gJzUwJyxcbiAgICAgICAgaG91cjogcHJvcHMuc3RhcnRTY2hlZHVsZT8uaG91ciA/PyAnNycsXG4gICAgICAgIHdlZWtEYXk6IHByb3BzLnN0YXJ0U2NoZWR1bGU/LndlZWsgPz8gJ01PTi1GUkknLFxuICAgICAgICB0aW1lWm9uZTogcHJvcHMuc3RhcnRTY2hlZHVsZT8udGltZXpvbmUgPz8gVGltZVpvbmUuRVRDX1VUQyxcbiAgICAgIH0pLFxuICAgICAgdGFyZ2V0OiBuZXcgdGFyZ2V0cy5MYW1iZGFJbnZva2UocnVubmluZ1NjaGVkdWxlRnVuY3Rpb25BbGlhcywge1xuICAgICAgICBpbnB1dDogc2NoZWR1bGVyLlNjaGVkdWxlVGFyZ2V0SW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICAgICAgUGFyYW1zOiB7XG4gICAgICAgICAgICBUYWdLZXk6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ0tleSxcbiAgICAgICAgICAgIFRhZ1ZhbHVlczogcHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzLFxuICAgICAgICAgICAgTW9kZTogJ1N0YXJ0JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgbmV3IHNjaGVkdWxlci5TY2hlZHVsZSh0aGlzLCAnUnVubmluZ1N0b3BTY2hlZHVsZScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAncnVubmluZyBzdG9wIHNjaGVkdWxlJyxcbiAgICAgIGVuYWJsZWQ6IHNjaGVkdWxlRW5hYmxlZCxcbiAgICAgIHNjaGVkdWxlOiBzY2hlZHVsZXIuU2NoZWR1bGVFeHByZXNzaW9uLmNyb24oe1xuICAgICAgICBtaW51dGU6IHByb3BzLnN0b3BTY2hlZHVsZT8ubWludXRlID8/ICc1JyxcbiAgICAgICAgaG91cjogcHJvcHMuc3RvcFNjaGVkdWxlPy5ob3VyID8/ICcxOScsXG4gICAgICAgIHdlZWtEYXk6IHByb3BzLnN0b3BTY2hlZHVsZT8ud2VlayA/PyAnTU9OLUZSSScsXG4gICAgICAgIHRpbWVab25lOiBwcm9wcy5zdG9wU2NoZWR1bGU/LnRpbWV6b25lID8/IFRpbWVab25lLkVUQ19VVEMsXG4gICAgICB9KSxcbiAgICAgIHRhcmdldDogbmV3IHRhcmdldHMuTGFtYmRhSW52b2tlKHJ1bm5pbmdTY2hlZHVsZUZ1bmN0aW9uQWxpYXMsIHtcbiAgICAgICAgaW5wdXQ6IHNjaGVkdWxlci5TY2hlZHVsZVRhcmdldElucHV0LmZyb21PYmplY3Qoe1xuICAgICAgICAgIFBhcmFtczoge1xuICAgICAgICAgICAgVGFnS2V5OiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdLZXksXG4gICAgICAgICAgICBUYWdWYWx1ZXM6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ1ZhbHVlcyxcbiAgICAgICAgICAgIE1vZGU6ICdTdG9wJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Environment variable names for per-instance polling limits.
3
+ *
4
+ * Values are set by {@link EC2InstanceRunningScheduler} and read at handler cold start.
5
+ */
6
+ /**
7
+ * Lambda environment variable name for max poll loop count.
8
+ *
9
+ * @see {@link parseResourcePollingLimitsFromEnv} in `running-scheduler-polling-env.ts`
10
+ */
11
+ export declare const PROCESS_RESOURCE_MAX_LOOP_COUNT_ENV = "PROCESS_RESOURCE_MAX_LOOP_COUNT";
12
+ /**
13
+ * Lambda environment variable name for max poll elapsed seconds.
14
+ *
15
+ * @see {@link parseResourcePollingLimitsFromEnv} in `running-scheduler-polling-env.ts`
16
+ */
17
+ export declare const PROCESS_RESOURCE_MAX_ELAPSED_SECONDS_ENV = "PROCESS_RESOURCE_MAX_ELAPSED_SECONDS";
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ /**
3
+ * Environment variable names for per-instance polling limits.
4
+ *
5
+ * Values are set by {@link EC2InstanceRunningScheduler} and read at handler cold start.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.PROCESS_RESOURCE_MAX_ELAPSED_SECONDS_ENV = exports.PROCESS_RESOURCE_MAX_LOOP_COUNT_ENV = void 0;
9
+ /**
10
+ * Lambda environment variable name for max poll loop count.
11
+ *
12
+ * @see {@link parseResourcePollingLimitsFromEnv} in `running-scheduler-polling-env.ts`
13
+ */
14
+ exports.PROCESS_RESOURCE_MAX_LOOP_COUNT_ENV = 'PROCESS_RESOURCE_MAX_LOOP_COUNT';
15
+ /**
16
+ * Lambda environment variable name for max poll elapsed seconds.
17
+ *
18
+ * @see {@link parseResourcePollingLimitsFromEnv} in `running-scheduler-polling-env.ts`
19
+ */
20
+ exports.PROCESS_RESOURCE_MAX_ELAPSED_SECONDS_ENV = 'PROCESS_RESOURCE_MAX_ELAPSED_SECONDS';
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmluZy1zY2hlZHVsZXItcG9sbGluZy1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZnVuY3MvcnVubmluZy1zY2hlZHVsZXItcG9sbGluZy1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7OztBQUVIOzs7O0dBSUc7QUFDVSxRQUFBLG1DQUFtQyxHQUFHLGlDQUFpQyxDQUFDO0FBRXJGOzs7O0dBSUc7QUFDVSxRQUFBLHdDQUF3QyxHQUFHLHNDQUFzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcyBmb3IgcGVyLWluc3RhbmNlIHBvbGxpbmcgbGltaXRzLlxuICpcbiAqIFZhbHVlcyBhcmUgc2V0IGJ5IHtAbGluayBFQzJJbnN0YW5jZVJ1bm5pbmdTY2hlZHVsZXJ9IGFuZCByZWFkIGF0IGhhbmRsZXIgY29sZCBzdGFydC5cbiAqL1xuXG4vKipcbiAqIExhbWJkYSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lIGZvciBtYXggcG9sbCBsb29wIGNvdW50LlxuICpcbiAqIEBzZWUge0BsaW5rIHBhcnNlUmVzb3VyY2VQb2xsaW5nTGltaXRzRnJvbUVudn0gaW4gYHJ1bm5pbmctc2NoZWR1bGVyLXBvbGxpbmctZW52LnRzYFxuICovXG5leHBvcnQgY29uc3QgUFJPQ0VTU19SRVNPVVJDRV9NQVhfTE9PUF9DT1VOVF9FTlYgPSAnUFJPQ0VTU19SRVNPVVJDRV9NQVhfTE9PUF9DT1VOVCc7XG5cbi8qKlxuICogTGFtYmRhIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWUgZm9yIG1heCBwb2xsIGVsYXBzZWQgc2Vjb25kcy5cbiAqXG4gKiBAc2VlIHtAbGluayBwYXJzZVJlc291cmNlUG9sbGluZ0xpbWl0c0Zyb21FbnZ9IGluIGBydW5uaW5nLXNjaGVkdWxlci1wb2xsaW5nLWVudi50c2BcbiAqL1xuZXhwb3J0IGNvbnN0IFBST0NFU1NfUkVTT1VSQ0VfTUFYX0VMQVBTRURfU0VDT05EU19FTlYgPSAnUFJPQ0VTU19SRVNPVVJDRV9NQVhfRUxBUFNFRF9TRUNPTkRTJztcbiJdfQ==
@@ -0,0 +1,8 @@
1
+ import { type ResourcePollingLimits } from './running-scheduler-predicates';
2
+ /**
3
+ * Reads per-instance polling limits from Lambda environment variables set by the CDK construct.
4
+ *
5
+ * @returns Parsed limits, using {@link DEFAULT_RESOURCE_POLLING_LIMITS} when variables are unset.
6
+ * @throws {Error} When a set variable is not a positive integer.
7
+ */
8
+ export declare const parseResourcePollingLimitsFromEnv: () => ResourcePollingLimits;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseResourcePollingLimitsFromEnv = void 0;
4
+ /**
5
+ * Lambda-only environment parsing for per-instance polling limits.
6
+ *
7
+ * Bundled into the running scheduler function; not imported from CDK constructs.
8
+ */
9
+ const safe_env_getter_1 = require("safe-env-getter");
10
+ const running_scheduler_polling_config_1 = require("./running-scheduler-polling-config");
11
+ const running_scheduler_predicates_1 = require("./running-scheduler-predicates");
12
+ /**
13
+ * Ensures a parsed env integer is strictly positive.
14
+ *
15
+ * `SafeEnvType.Number` accepts any decimal integer (including zero and negatives);
16
+ * polling limits require values greater than zero.
17
+ *
18
+ * @param key - Environment variable name used in error messages.
19
+ * @param value - Parsed integer from {@link SafeEnvGetter.getEnvs}.
20
+ * @returns `value` when it is greater than zero.
21
+ * @throws {Error} When `value` is zero or negative.
22
+ */
23
+ const assertPositiveEnvInt = (key, value) => {
24
+ if (value <= 0) {
25
+ const raw = process.env[key];
26
+ throw new Error(`Invalid ${key}: must be a positive integer (got "${raw ?? ''}")`);
27
+ }
28
+ return value;
29
+ };
30
+ /**
31
+ * Reads per-instance polling limits from Lambda environment variables set by the CDK construct.
32
+ *
33
+ * @returns Parsed limits, using {@link DEFAULT_RESOURCE_POLLING_LIMITS} when variables are unset.
34
+ * @throws {Error} When a set variable is not a positive integer.
35
+ */
36
+ const parseResourcePollingLimitsFromEnv = () => {
37
+ const parsed = safe_env_getter_1.SafeEnvGetter.getEnvs({
38
+ [running_scheduler_polling_config_1.PROCESS_RESOURCE_MAX_LOOP_COUNT_ENV]: [
39
+ safe_env_getter_1.SafeEnvType.Number,
40
+ { default: running_scheduler_predicates_1.DEFAULT_RESOURCE_POLLING_LIMITS.maxLoopCount },
41
+ ],
42
+ [running_scheduler_polling_config_1.PROCESS_RESOURCE_MAX_ELAPSED_SECONDS_ENV]: [
43
+ safe_env_getter_1.SafeEnvType.Number,
44
+ { default: running_scheduler_predicates_1.DEFAULT_RESOURCE_POLLING_LIMITS.maxElapsedSeconds },
45
+ ],
46
+ });
47
+ return {
48
+ maxLoopCount: assertPositiveEnvInt(running_scheduler_polling_config_1.PROCESS_RESOURCE_MAX_LOOP_COUNT_ENV, parsed[running_scheduler_polling_config_1.PROCESS_RESOURCE_MAX_LOOP_COUNT_ENV]),
49
+ maxElapsedSeconds: assertPositiveEnvInt(running_scheduler_polling_config_1.PROCESS_RESOURCE_MAX_ELAPSED_SECONDS_ENV, parsed[running_scheduler_polling_config_1.PROCESS_RESOURCE_MAX_ELAPSED_SECONDS_ENV]),
50
+ };
51
+ };
52
+ exports.parseResourcePollingLimitsFromEnv = parseResourcePollingLimitsFromEnv;
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmluZy1zY2hlZHVsZXItcG9sbGluZy1lbnYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZnVuY3MvcnVubmluZy1zY2hlZHVsZXItcG9sbGluZy1lbnYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7R0FJRztBQUNILHFEQUE2RDtBQUM3RCx5RkFHNEM7QUFDNUMsaUZBR3dDO0FBRXhDOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBVyxFQUFFLEtBQWEsRUFBVSxFQUFFO0lBQ2xFLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2YsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsR0FBRyxzQ0FBc0MsR0FBRyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSSxNQUFNLGlDQUFpQyxHQUFHLEdBQTBCLEVBQUU7SUFDM0UsTUFBTSxNQUFNLEdBQUcsK0JBQWEsQ0FBQyxPQUFPLENBQUM7UUFDbkMsQ0FBQyxzRUFBbUMsQ0FBQyxFQUFFO1lBQ3JDLDZCQUFXLENBQUMsTUFBTTtZQUNsQixFQUFFLE9BQU8sRUFBRSw4REFBK0IsQ0FBQyxZQUFZLEVBQUU7U0FDMUQ7UUFDRCxDQUFDLDJFQUF3QyxDQUFDLEVBQUU7WUFDMUMsNkJBQVcsQ0FBQyxNQUFNO1lBQ2xCLEVBQUUsT0FBTyxFQUFFLDhEQUErQixDQUFDLGlCQUFpQixFQUFFO1NBQy9EO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsT0FBTztRQUNMLFlBQVksRUFBRSxvQkFBb0IsQ0FDaEMsc0VBQW1DLEVBQ25DLE1BQU0sQ0FBQyxzRUFBbUMsQ0FBQyxDQUM1QztRQUNELGlCQUFpQixFQUFFLG9CQUFvQixDQUNyQywyRUFBd0MsRUFDeEMsTUFBTSxDQUFDLDJFQUF3QyxDQUFDLENBQ2pEO0tBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQztBQXRCVyxRQUFBLGlDQUFpQyxxQ0FzQjVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMYW1iZGEtb25seSBlbnZpcm9ubWVudCBwYXJzaW5nIGZvciBwZXItaW5zdGFuY2UgcG9sbGluZyBsaW1pdHMuXG4gKlxuICogQnVuZGxlZCBpbnRvIHRoZSBydW5uaW5nIHNjaGVkdWxlciBmdW5jdGlvbjsgbm90IGltcG9ydGVkIGZyb20gQ0RLIGNvbnN0cnVjdHMuXG4gKi9cbmltcG9ydCB7IFNhZmVFbnZHZXR0ZXIsIFNhZmVFbnZUeXBlIH0gZnJvbSAnc2FmZS1lbnYtZ2V0dGVyJztcbmltcG9ydCB7XG4gIFBST0NFU1NfUkVTT1VSQ0VfTUFYX0VMQVBTRURfU0VDT05EU19FTlYsXG4gIFBST0NFU1NfUkVTT1VSQ0VfTUFYX0xPT1BfQ09VTlRfRU5WLFxufSBmcm9tICcuL3J1bm5pbmctc2NoZWR1bGVyLXBvbGxpbmctY29uZmlnJztcbmltcG9ydCB7XG4gIERFRkFVTFRfUkVTT1VSQ0VfUE9MTElOR19MSU1JVFMsXG4gIHR5cGUgUmVzb3VyY2VQb2xsaW5nTGltaXRzLFxufSBmcm9tICcuL3J1bm5pbmctc2NoZWR1bGVyLXByZWRpY2F0ZXMnO1xuXG4vKipcbiAqIEVuc3VyZXMgYSBwYXJzZWQgZW52IGludGVnZXIgaXMgc3RyaWN0bHkgcG9zaXRpdmUuXG4gKlxuICogYFNhZmVFbnZUeXBlLk51bWJlcmAgYWNjZXB0cyBhbnkgZGVjaW1hbCBpbnRlZ2VyIChpbmNsdWRpbmcgemVybyBhbmQgbmVnYXRpdmVzKTtcbiAqIHBvbGxpbmcgbGltaXRzIHJlcXVpcmUgdmFsdWVzIGdyZWF0ZXIgdGhhbiB6ZXJvLlxuICpcbiAqIEBwYXJhbSBrZXkgLSBFbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lIHVzZWQgaW4gZXJyb3IgbWVzc2FnZXMuXG4gKiBAcGFyYW0gdmFsdWUgLSBQYXJzZWQgaW50ZWdlciBmcm9tIHtAbGluayBTYWZlRW52R2V0dGVyLmdldEVudnN9LlxuICogQHJldHVybnMgYHZhbHVlYCB3aGVuIGl0IGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLlxuICogQHRocm93cyB7RXJyb3J9IFdoZW4gYHZhbHVlYCBpcyB6ZXJvIG9yIG5lZ2F0aXZlLlxuICovXG5jb25zdCBhc3NlcnRQb3NpdGl2ZUVudkludCA9IChrZXk6IHN0cmluZywgdmFsdWU6IG51bWJlcik6IG51bWJlciA9PiB7XG4gIGlmICh2YWx1ZSA8PSAwKSB7XG4gICAgY29uc3QgcmF3ID0gcHJvY2Vzcy5lbnZba2V5XTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgJHtrZXl9OiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciAoZ290IFwiJHtyYXcgPz8gJyd9XCIpYCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuLyoqXG4gKiBSZWFkcyBwZXItaW5zdGFuY2UgcG9sbGluZyBsaW1pdHMgZnJvbSBMYW1iZGEgZW52aXJvbm1lbnQgdmFyaWFibGVzIHNldCBieSB0aGUgQ0RLIGNvbnN0cnVjdC5cbiAqXG4gKiBAcmV0dXJucyBQYXJzZWQgbGltaXRzLCB1c2luZyB7QGxpbmsgREVGQVVMVF9SRVNPVVJDRV9QT0xMSU5HX0xJTUlUU30gd2hlbiB2YXJpYWJsZXMgYXJlIHVuc2V0LlxuICogQHRocm93cyB7RXJyb3J9IFdoZW4gYSBzZXQgdmFyaWFibGUgaXMgbm90IGEgcG9zaXRpdmUgaW50ZWdlci5cbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlUmVzb3VyY2VQb2xsaW5nTGltaXRzRnJvbUVudiA9ICgpOiBSZXNvdXJjZVBvbGxpbmdMaW1pdHMgPT4ge1xuICBjb25zdCBwYXJzZWQgPSBTYWZlRW52R2V0dGVyLmdldEVudnMoe1xuICAgIFtQUk9DRVNTX1JFU09VUkNFX01BWF9MT09QX0NPVU5UX0VOVl06IFtcbiAgICAgIFNhZmVFbnZUeXBlLk51bWJlcixcbiAgICAgIHsgZGVmYXVsdDogREVGQVVMVF9SRVNPVVJDRV9QT0xMSU5HX0xJTUlUUy5tYXhMb29wQ291bnQgfSxcbiAgICBdLFxuICAgIFtQUk9DRVNTX1JFU09VUkNFX01BWF9FTEFQU0VEX1NFQ09ORFNfRU5WXTogW1xuICAgICAgU2FmZUVudlR5cGUuTnVtYmVyLFxuICAgICAgeyBkZWZhdWx0OiBERUZBVUxUX1JFU09VUkNFX1BPTExJTkdfTElNSVRTLm1heEVsYXBzZWRTZWNvbmRzIH0sXG4gICAgXSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBtYXhMb29wQ291bnQ6IGFzc2VydFBvc2l0aXZlRW52SW50KFxuICAgICAgUFJPQ0VTU19SRVNPVVJDRV9NQVhfTE9PUF9DT1VOVF9FTlYsXG4gICAgICBwYXJzZWRbUFJPQ0VTU19SRVNPVVJDRV9NQVhfTE9PUF9DT1VOVF9FTlZdLFxuICAgICksXG4gICAgbWF4RWxhcHNlZFNlY29uZHM6IGFzc2VydFBvc2l0aXZlRW52SW50KFxuICAgICAgUFJPQ0VTU19SRVNPVVJDRV9NQVhfRUxBUFNFRF9TRUNPTkRTX0VOVixcbiAgICAgIHBhcnNlZFtQUk9DRVNTX1JFU09VUkNFX01BWF9FTEFQU0VEX1NFQ09ORFNfRU5WXSxcbiAgICApLFxuICB9O1xufTtcbiJdfQ==
@@ -3,6 +3,23 @@
3
3
  */
4
4
  /** Value of `Params.Mode` from the EventBridge Scheduler payload. */
5
5
  export type RunningSchedulerMode = 'Start' | 'Stop';
6
+ /** Upper bounds for per-instance stable-state polling in the running scheduler Lambda. */
7
+ export interface ResourcePollingLimits {
8
+ /** Maximum describe/poll iterations before failing (each loop may include a durable wait). */
9
+ readonly maxLoopCount: number;
10
+ /** Maximum wall-clock seconds from the first poll iteration before failing. */
11
+ readonly maxElapsedSeconds: number;
12
+ }
13
+ /** Default polling limits (90 loops × 20s wait ≈ 30 minutes of waits; 30 minutes elapsed). */
14
+ export declare const DEFAULT_RESOURCE_POLLING_LIMITS: ResourcePollingLimits;
15
+ /**
16
+ * Why per-instance polling stopped with an error.
17
+ *
18
+ * - `MaxLoopCountExceeded` – {@link getPollingAbortReason} hit {@link ResourcePollingLimits.maxLoopCount}.
19
+ * - `MaxElapsedTimeExceeded` – elapsed wall-clock time exceeded {@link ResourcePollingLimits.maxElapsedSeconds}.
20
+ * - `UnexpectedInstanceState` – state is neither stable, actionable, nor a known transition.
21
+ */
22
+ export type ResourcePollingFailureReason = 'MaxLoopCountExceeded' | 'MaxElapsedTimeExceeded' | 'UnexpectedInstanceState';
6
23
  /**
7
24
  * Whether the instance is already in the goal state for the scheduler mode (no start/stop needed).
8
25
  *
@@ -11,3 +28,42 @@ export type RunningSchedulerMode = 'Start' | 'Stop';
11
28
  * @returns `true` when the instance matches the target state for `mode`.
12
29
  */
13
30
  export declare const isDesiredStableState: (mode: RunningSchedulerMode, currentState: string) => boolean;
31
+ /**
32
+ * Whether the instance is in a known transitional state for the scheduler mode.
33
+ *
34
+ * @param mode - `Start` or `Stop`.
35
+ * @param currentState - Instance state from `DescribeInstances`.
36
+ * @returns `true` when the instance is moving toward the goal state for `mode`.
37
+ */
38
+ export declare const isTransitioningState: (mode: RunningSchedulerMode, currentState: string) => boolean;
39
+ /**
40
+ * Returns a polling abort reason when loop count or elapsed time exceeds configured limits.
41
+ *
42
+ * @param loopCount - Zero-based iteration count for the current poll loop.
43
+ * @param startedAtMs - Epoch milliseconds recorded at the start of polling (durable step).
44
+ * @param nowMs - Current epoch milliseconds (from a durable step when replay matters).
45
+ * @param limits - Configured {@link ResourcePollingLimits}.
46
+ * @returns Abort reason, or `undefined` when polling may continue.
47
+ */
48
+ export declare const getPollingAbortReason: (loopCount: number, startedAtMs: number, nowMs: number, limits: ResourcePollingLimits) => "MaxLoopCountExceeded" | "MaxElapsedTimeExceeded" | undefined;
49
+ /** Inputs for {@link formatResourcePollingFailure}. */
50
+ export interface ResourcePollingFailureContext {
51
+ /** EC2 instance id parsed from the target ARN. */
52
+ readonly identifier: string;
53
+ /** Scheduler mode from the invocation payload. */
54
+ readonly mode: RunningSchedulerMode;
55
+ /** Last observed instance state from `DescribeInstances`. */
56
+ readonly currentState: string;
57
+ /** Zero-based poll loop iteration when the failure occurred. */
58
+ readonly loopCount: number;
59
+ /** Active polling limits for limit-related failure messages. */
60
+ readonly limits: ResourcePollingLimits;
61
+ }
62
+ /**
63
+ * Builds a stable, grep-friendly error message for polling failures.
64
+ *
65
+ * @param reason - Failure category.
66
+ * @param context - Instance id, mode, state, loop count, and limits.
67
+ * @returns Message prefixed with `ResourcePollingFailed:` (e.g. `ResourcePollingFailed:MaxLoopCountExceeded: ...`).
68
+ */
69
+ export declare const formatResourcePollingFailure: (reason: ResourcePollingFailureReason, context: ResourcePollingFailureContext) => string;
@@ -3,7 +3,12 @@
3
3
  * Pure predicates for the EC2 running scheduler Lambda (no AWS SDK).
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.isDesiredStableState = void 0;
6
+ exports.formatResourcePollingFailure = exports.getPollingAbortReason = exports.isTransitioningState = exports.isDesiredStableState = exports.DEFAULT_RESOURCE_POLLING_LIMITS = void 0;
7
+ /** Default polling limits (90 loops × 20s wait ≈ 30 minutes of waits; 30 minutes elapsed). */
8
+ exports.DEFAULT_RESOURCE_POLLING_LIMITS = {
9
+ maxLoopCount: 90,
10
+ maxElapsedSeconds: 1800,
11
+ };
7
12
  /**
8
13
  * Whether the instance is already in the goal state for the scheduler mode (no start/stop needed).
9
14
  *
@@ -13,4 +18,52 @@ exports.isDesiredStableState = void 0;
13
18
  */
14
19
  const isDesiredStableState = (mode, currentState) => (mode === 'Start' && currentState === 'running') || (mode === 'Stop' && currentState === 'stopped');
15
20
  exports.isDesiredStableState = isDesiredStableState;
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmluZy1zY2hlZHVsZXItcHJlZGljYXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mdW5jcy9ydW5uaW5nLXNjaGVkdWxlci1wcmVkaWNhdGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBS0g7Ozs7OztHQU1HO0FBQ0ksTUFBTSxvQkFBb0IsR0FBRyxDQUFDLElBQTBCLEVBQUUsWUFBb0IsRUFBVyxFQUFFLENBQ2hHLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxZQUFZLEtBQUssU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLFlBQVksS0FBSyxTQUFTLENBQUMsQ0FBQztBQUR6RixRQUFBLG9CQUFvQix3QkFDcUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFB1cmUgcHJlZGljYXRlcyBmb3IgdGhlIEVDMiBydW5uaW5nIHNjaGVkdWxlciBMYW1iZGEgKG5vIEFXUyBTREspLlxuICovXG5cbi8qKiBWYWx1ZSBvZiBgUGFyYW1zLk1vZGVgIGZyb20gdGhlIEV2ZW50QnJpZGdlIFNjaGVkdWxlciBwYXlsb2FkLiAqL1xuZXhwb3J0IHR5cGUgUnVubmluZ1NjaGVkdWxlck1vZGUgPSAnU3RhcnQnIHwgJ1N0b3AnO1xuXG4vKipcbiAqIFdoZXRoZXIgdGhlIGluc3RhbmNlIGlzIGFscmVhZHkgaW4gdGhlIGdvYWwgc3RhdGUgZm9yIHRoZSBzY2hlZHVsZXIgbW9kZSAobm8gc3RhcnQvc3RvcCBuZWVkZWQpLlxuICpcbiAqIEBwYXJhbSBtb2RlIC0gYFN0YXJ0YCBleHBlY3RzIGBydW5uaW5nYDsgYFN0b3BgIGV4cGVjdHMgYHN0b3BwZWRgLlxuICogQHBhcmFtIGN1cnJlbnRTdGF0ZSAtIEluc3RhbmNlIHN0YXRlIGZyb20gYERlc2NyaWJlSW5zdGFuY2VzYCAoZS5nLiBgcnVubmluZ2AsIGBwZW5kaW5nYCkuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgd2hlbiB0aGUgaW5zdGFuY2UgbWF0Y2hlcyB0aGUgdGFyZ2V0IHN0YXRlIGZvciBgbW9kZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0Rlc2lyZWRTdGFibGVTdGF0ZSA9IChtb2RlOiBSdW5uaW5nU2NoZWR1bGVyTW9kZSwgY3VycmVudFN0YXRlOiBzdHJpbmcpOiBib29sZWFuID0+XG4gIChtb2RlID09PSAnU3RhcnQnICYmIGN1cnJlbnRTdGF0ZSA9PT0gJ3J1bm5pbmcnKSB8fCAobW9kZSA9PT0gJ1N0b3AnICYmIGN1cnJlbnRTdGF0ZSA9PT0gJ3N0b3BwZWQnKTtcbiJdfQ==
21
+ /**
22
+ * Whether the instance is in a known transitional state for the scheduler mode.
23
+ *
24
+ * @param mode - `Start` or `Stop`.
25
+ * @param currentState - Instance state from `DescribeInstances`.
26
+ * @returns `true` when the instance is moving toward the goal state for `mode`.
27
+ */
28
+ const isTransitioningState = (mode, currentState) => (mode === 'Start' && currentState === 'pending') ||
29
+ (mode === 'Stop' && (currentState === 'stopping' || currentState === 'shutting-down'));
30
+ exports.isTransitioningState = isTransitioningState;
31
+ /**
32
+ * Returns a polling abort reason when loop count or elapsed time exceeds configured limits.
33
+ *
34
+ * @param loopCount - Zero-based iteration count for the current poll loop.
35
+ * @param startedAtMs - Epoch milliseconds recorded at the start of polling (durable step).
36
+ * @param nowMs - Current epoch milliseconds (from a durable step when replay matters).
37
+ * @param limits - Configured {@link ResourcePollingLimits}.
38
+ * @returns Abort reason, or `undefined` when polling may continue.
39
+ */
40
+ const getPollingAbortReason = (loopCount, startedAtMs, nowMs, limits) => {
41
+ if (loopCount >= limits.maxLoopCount) {
42
+ return 'MaxLoopCountExceeded';
43
+ }
44
+ const elapsedSeconds = (nowMs - startedAtMs) / 1000;
45
+ if (elapsedSeconds >= limits.maxElapsedSeconds) {
46
+ return 'MaxElapsedTimeExceeded';
47
+ }
48
+ return undefined;
49
+ };
50
+ exports.getPollingAbortReason = getPollingAbortReason;
51
+ /**
52
+ * Builds a stable, grep-friendly error message for polling failures.
53
+ *
54
+ * @param reason - Failure category.
55
+ * @param context - Instance id, mode, state, loop count, and limits.
56
+ * @returns Message prefixed with `ResourcePollingFailed:` (e.g. `ResourcePollingFailed:MaxLoopCountExceeded: ...`).
57
+ */
58
+ const formatResourcePollingFailure = (reason, context) => {
59
+ const common = `identifier=${context.identifier} mode=${context.mode} currentState=${context.currentState} loopCount=${context.loopCount}`;
60
+ if (reason === 'MaxLoopCountExceeded') {
61
+ return `ResourcePollingFailed:MaxLoopCountExceeded: ${common} maxLoopCount=${context.limits.maxLoopCount}`;
62
+ }
63
+ if (reason === 'MaxElapsedTimeExceeded') {
64
+ return `ResourcePollingFailed:MaxElapsedTimeExceeded: ${common} maxElapsedSeconds=${context.limits.maxElapsedSeconds}`;
65
+ }
66
+ return `ResourcePollingFailed:UnexpectedInstanceState: ${common}`;
67
+ };
68
+ exports.formatResourcePollingFailure = formatResourcePollingFailure;
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmluZy1zY2hlZHVsZXItcHJlZGljYXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mdW5jcy9ydW5uaW5nLXNjaGVkdWxlci1wcmVkaWNhdGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBYUgsOEZBQThGO0FBQ2pGLFFBQUEsK0JBQStCLEdBQTBCO0lBQ3BFLFlBQVksRUFBRSxFQUFFO0lBQ2hCLGlCQUFpQixFQUFFLElBQUk7Q0FDeEIsQ0FBQztBQWNGOzs7Ozs7R0FNRztBQUNJLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxJQUEwQixFQUFFLFlBQW9CLEVBQVcsRUFBRSxDQUNoRyxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksWUFBWSxLQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxZQUFZLEtBQUssU0FBUyxDQUFDLENBQUM7QUFEekYsUUFBQSxvQkFBb0Isd0JBQ3FFO0FBRXRHOzs7Ozs7R0FNRztBQUNJLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxJQUEwQixFQUFFLFlBQW9CLEVBQVcsRUFBRSxDQUNoRyxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksWUFBWSxLQUFLLFNBQVMsQ0FBQztJQUNoRCxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksQ0FBQyxZQUFZLEtBQUssVUFBVSxJQUFJLFlBQVksS0FBSyxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBRjVFLFFBQUEsb0JBQW9CLHdCQUV3RDtBQUV6Rjs7Ozs7Ozs7R0FRRztBQUNJLE1BQU0scUJBQXFCLEdBQUcsQ0FDbkMsU0FBaUIsRUFDakIsV0FBbUIsRUFDbkIsS0FBYSxFQUNiLE1BQTZCLEVBQ2tDLEVBQUU7SUFDakUsSUFBSSxTQUFTLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3JDLE9BQU8sc0JBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUNELE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNwRCxJQUFJLGNBQWMsSUFBSSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMvQyxPQUFPLHdCQUF3QixDQUFDO0lBQ2xDLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDLENBQUM7QUFkVyxRQUFBLHFCQUFxQix5QkFjaEM7QUFnQkY7Ozs7OztHQU1HO0FBQ0ksTUFBTSw0QkFBNEIsR0FBRyxDQUMxQyxNQUFvQyxFQUNwQyxPQUFzQyxFQUM5QixFQUFFO0lBQ1YsTUFBTSxNQUFNLEdBQ1YsY0FBYyxPQUFPLENBQUMsVUFBVSxTQUFTLE9BQU8sQ0FBQyxJQUFJLGlCQUFpQixPQUFPLENBQUMsWUFBWSxjQUFjLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM5SCxJQUFJLE1BQU0sS0FBSyxzQkFBc0IsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sK0NBQStDLE1BQU0saUJBQWlCLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0csQ0FBQztJQUNELElBQUksTUFBTSxLQUFLLHdCQUF3QixFQUFFLENBQUM7UUFDeEMsT0FBTyxpREFBaUQsTUFBTSxzQkFBc0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ3pILENBQUM7SUFDRCxPQUFPLGtEQUFrRCxNQUFNLEVBQUUsQ0FBQztBQUNwRSxDQUFDLENBQUM7QUFiVyxRQUFBLDRCQUE0QixnQ0FhdkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFB1cmUgcHJlZGljYXRlcyBmb3IgdGhlIEVDMiBydW5uaW5nIHNjaGVkdWxlciBMYW1iZGEgKG5vIEFXUyBTREspLlxuICovXG5cbi8qKiBWYWx1ZSBvZiBgUGFyYW1zLk1vZGVgIGZyb20gdGhlIEV2ZW50QnJpZGdlIFNjaGVkdWxlciBwYXlsb2FkLiAqL1xuZXhwb3J0IHR5cGUgUnVubmluZ1NjaGVkdWxlck1vZGUgPSAnU3RhcnQnIHwgJ1N0b3AnO1xuXG4vKiogVXBwZXIgYm91bmRzIGZvciBwZXItaW5zdGFuY2Ugc3RhYmxlLXN0YXRlIHBvbGxpbmcgaW4gdGhlIHJ1bm5pbmcgc2NoZWR1bGVyIExhbWJkYS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VQb2xsaW5nTGltaXRzIHtcbiAgLyoqIE1heGltdW0gZGVzY3JpYmUvcG9sbCBpdGVyYXRpb25zIGJlZm9yZSBmYWlsaW5nIChlYWNoIGxvb3AgbWF5IGluY2x1ZGUgYSBkdXJhYmxlIHdhaXQpLiAqL1xuICByZWFkb25seSBtYXhMb29wQ291bnQ6IG51bWJlcjtcbiAgLyoqIE1heGltdW0gd2FsbC1jbG9jayBzZWNvbmRzIGZyb20gdGhlIGZpcnN0IHBvbGwgaXRlcmF0aW9uIGJlZm9yZSBmYWlsaW5nLiAqL1xuICByZWFkb25seSBtYXhFbGFwc2VkU2Vjb25kczogbnVtYmVyO1xufVxuXG4vKiogRGVmYXVsdCBwb2xsaW5nIGxpbWl0cyAoOTAgbG9vcHMgw5cgMjBzIHdhaXQg4omIIDMwIG1pbnV0ZXMgb2Ygd2FpdHM7IDMwIG1pbnV0ZXMgZWxhcHNlZCkuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9SRVNPVVJDRV9QT0xMSU5HX0xJTUlUUzogUmVzb3VyY2VQb2xsaW5nTGltaXRzID0ge1xuICBtYXhMb29wQ291bnQ6IDkwLFxuICBtYXhFbGFwc2VkU2Vjb25kczogMTgwMCxcbn07XG5cbi8qKlxuICogV2h5IHBlci1pbnN0YW5jZSBwb2xsaW5nIHN0b3BwZWQgd2l0aCBhbiBlcnJvci5cbiAqXG4gKiAtIGBNYXhMb29wQ291bnRFeGNlZWRlZGAg4oCTIHtAbGluayBnZXRQb2xsaW5nQWJvcnRSZWFzb259IGhpdCB7QGxpbmsgUmVzb3VyY2VQb2xsaW5nTGltaXRzLm1heExvb3BDb3VudH0uXG4gKiAtIGBNYXhFbGFwc2VkVGltZUV4Y2VlZGVkYCDigJMgZWxhcHNlZCB3YWxsLWNsb2NrIHRpbWUgZXhjZWVkZWQge0BsaW5rIFJlc291cmNlUG9sbGluZ0xpbWl0cy5tYXhFbGFwc2VkU2Vjb25kc30uXG4gKiAtIGBVbmV4cGVjdGVkSW5zdGFuY2VTdGF0ZWAg4oCTIHN0YXRlIGlzIG5laXRoZXIgc3RhYmxlLCBhY3Rpb25hYmxlLCBub3IgYSBrbm93biB0cmFuc2l0aW9uLlxuICovXG5leHBvcnQgdHlwZSBSZXNvdXJjZVBvbGxpbmdGYWlsdXJlUmVhc29uID1cbiAgfCAnTWF4TG9vcENvdW50RXhjZWVkZWQnXG4gIHwgJ01heEVsYXBzZWRUaW1lRXhjZWVkZWQnXG4gIHwgJ1VuZXhwZWN0ZWRJbnN0YW5jZVN0YXRlJztcblxuLyoqXG4gKiBXaGV0aGVyIHRoZSBpbnN0YW5jZSBpcyBhbHJlYWR5IGluIHRoZSBnb2FsIHN0YXRlIGZvciB0aGUgc2NoZWR1bGVyIG1vZGUgKG5vIHN0YXJ0L3N0b3AgbmVlZGVkKS5cbiAqXG4gKiBAcGFyYW0gbW9kZSAtIGBTdGFydGAgZXhwZWN0cyBgcnVubmluZ2A7IGBTdG9wYCBleHBlY3RzIGBzdG9wcGVkYC5cbiAqIEBwYXJhbSBjdXJyZW50U3RhdGUgLSBJbnN0YW5jZSBzdGF0ZSBmcm9tIGBEZXNjcmliZUluc3RhbmNlc2AgKGUuZy4gYHJ1bm5pbmdgLCBgcGVuZGluZ2ApLlxuICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIGluc3RhbmNlIG1hdGNoZXMgdGhlIHRhcmdldCBzdGF0ZSBmb3IgYG1vZGVgLlxuICovXG5leHBvcnQgY29uc3QgaXNEZXNpcmVkU3RhYmxlU3RhdGUgPSAobW9kZTogUnVubmluZ1NjaGVkdWxlck1vZGUsIGN1cnJlbnRTdGF0ZTogc3RyaW5nKTogYm9vbGVhbiA9PlxuICAobW9kZSA9PT0gJ1N0YXJ0JyAmJiBjdXJyZW50U3RhdGUgPT09ICdydW5uaW5nJykgfHwgKG1vZGUgPT09ICdTdG9wJyAmJiBjdXJyZW50U3RhdGUgPT09ICdzdG9wcGVkJyk7XG5cbi8qKlxuICogV2hldGhlciB0aGUgaW5zdGFuY2UgaXMgaW4gYSBrbm93biB0cmFuc2l0aW9uYWwgc3RhdGUgZm9yIHRoZSBzY2hlZHVsZXIgbW9kZS5cbiAqXG4gKiBAcGFyYW0gbW9kZSAtIGBTdGFydGAgb3IgYFN0b3BgLlxuICogQHBhcmFtIGN1cnJlbnRTdGF0ZSAtIEluc3RhbmNlIHN0YXRlIGZyb20gYERlc2NyaWJlSW5zdGFuY2VzYC5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBtb3ZpbmcgdG93YXJkIHRoZSBnb2FsIHN0YXRlIGZvciBgbW9kZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBpc1RyYW5zaXRpb25pbmdTdGF0ZSA9IChtb2RlOiBSdW5uaW5nU2NoZWR1bGVyTW9kZSwgY3VycmVudFN0YXRlOiBzdHJpbmcpOiBib29sZWFuID0+XG4gIChtb2RlID09PSAnU3RhcnQnICYmIGN1cnJlbnRTdGF0ZSA9PT0gJ3BlbmRpbmcnKSB8fFxuICAobW9kZSA9PT0gJ1N0b3AnICYmIChjdXJyZW50U3RhdGUgPT09ICdzdG9wcGluZycgfHwgY3VycmVudFN0YXRlID09PSAnc2h1dHRpbmctZG93bicpKTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcG9sbGluZyBhYm9ydCByZWFzb24gd2hlbiBsb29wIGNvdW50IG9yIGVsYXBzZWQgdGltZSBleGNlZWRzIGNvbmZpZ3VyZWQgbGltaXRzLlxuICpcbiAqIEBwYXJhbSBsb29wQ291bnQgLSBaZXJvLWJhc2VkIGl0ZXJhdGlvbiBjb3VudCBmb3IgdGhlIGN1cnJlbnQgcG9sbCBsb29wLlxuICogQHBhcmFtIHN0YXJ0ZWRBdE1zIC0gRXBvY2ggbWlsbGlzZWNvbmRzIHJlY29yZGVkIGF0IHRoZSBzdGFydCBvZiBwb2xsaW5nIChkdXJhYmxlIHN0ZXApLlxuICogQHBhcmFtIG5vd01zIC0gQ3VycmVudCBlcG9jaCBtaWxsaXNlY29uZHMgKGZyb20gYSBkdXJhYmxlIHN0ZXAgd2hlbiByZXBsYXkgbWF0dGVycykuXG4gKiBAcGFyYW0gbGltaXRzIC0gQ29uZmlndXJlZCB7QGxpbmsgUmVzb3VyY2VQb2xsaW5nTGltaXRzfS5cbiAqIEByZXR1cm5zIEFib3J0IHJlYXNvbiwgb3IgYHVuZGVmaW5lZGAgd2hlbiBwb2xsaW5nIG1heSBjb250aW51ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFBvbGxpbmdBYm9ydFJlYXNvbiA9IChcbiAgbG9vcENvdW50OiBudW1iZXIsXG4gIHN0YXJ0ZWRBdE1zOiBudW1iZXIsXG4gIG5vd01zOiBudW1iZXIsXG4gIGxpbWl0czogUmVzb3VyY2VQb2xsaW5nTGltaXRzLFxuKTogJ01heExvb3BDb3VudEV4Y2VlZGVkJyB8ICdNYXhFbGFwc2VkVGltZUV4Y2VlZGVkJyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChsb29wQ291bnQgPj0gbGltaXRzLm1heExvb3BDb3VudCkge1xuICAgIHJldHVybiAnTWF4TG9vcENvdW50RXhjZWVkZWQnO1xuICB9XG4gIGNvbnN0IGVsYXBzZWRTZWNvbmRzID0gKG5vd01zIC0gc3RhcnRlZEF0TXMpIC8gMTAwMDtcbiAgaWYgKGVsYXBzZWRTZWNvbmRzID49IGxpbWl0cy5tYXhFbGFwc2VkU2Vjb25kcykge1xuICAgIHJldHVybiAnTWF4RWxhcHNlZFRpbWVFeGNlZWRlZCc7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKiBJbnB1dHMgZm9yIHtAbGluayBmb3JtYXRSZXNvdXJjZVBvbGxpbmdGYWlsdXJlfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VQb2xsaW5nRmFpbHVyZUNvbnRleHQge1xuICAvKiogRUMyIGluc3RhbmNlIGlkIHBhcnNlZCBmcm9tIHRoZSB0YXJnZXQgQVJOLiAqL1xuICByZWFkb25seSBpZGVudGlmaWVyOiBzdHJpbmc7XG4gIC8qKiBTY2hlZHVsZXIgbW9kZSBmcm9tIHRoZSBpbnZvY2F0aW9uIHBheWxvYWQuICovXG4gIHJlYWRvbmx5IG1vZGU6IFJ1bm5pbmdTY2hlZHVsZXJNb2RlO1xuICAvKiogTGFzdCBvYnNlcnZlZCBpbnN0YW5jZSBzdGF0ZSBmcm9tIGBEZXNjcmliZUluc3RhbmNlc2AuICovXG4gIHJlYWRvbmx5IGN1cnJlbnRTdGF0ZTogc3RyaW5nO1xuICAvKiogWmVyby1iYXNlZCBwb2xsIGxvb3AgaXRlcmF0aW9uIHdoZW4gdGhlIGZhaWx1cmUgb2NjdXJyZWQuICovXG4gIHJlYWRvbmx5IGxvb3BDb3VudDogbnVtYmVyO1xuICAvKiogQWN0aXZlIHBvbGxpbmcgbGltaXRzIGZvciBsaW1pdC1yZWxhdGVkIGZhaWx1cmUgbWVzc2FnZXMuICovXG4gIHJlYWRvbmx5IGxpbWl0czogUmVzb3VyY2VQb2xsaW5nTGltaXRzO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhIHN0YWJsZSwgZ3JlcC1mcmllbmRseSBlcnJvciBtZXNzYWdlIGZvciBwb2xsaW5nIGZhaWx1cmVzLlxuICpcbiAqIEBwYXJhbSByZWFzb24gLSBGYWlsdXJlIGNhdGVnb3J5LlxuICogQHBhcmFtIGNvbnRleHQgLSBJbnN0YW5jZSBpZCwgbW9kZSwgc3RhdGUsIGxvb3AgY291bnQsIGFuZCBsaW1pdHMuXG4gKiBAcmV0dXJucyBNZXNzYWdlIHByZWZpeGVkIHdpdGggYFJlc291cmNlUG9sbGluZ0ZhaWxlZDpgIChlLmcuIGBSZXNvdXJjZVBvbGxpbmdGYWlsZWQ6TWF4TG9vcENvdW50RXhjZWVkZWQ6IC4uLmApLlxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0UmVzb3VyY2VQb2xsaW5nRmFpbHVyZSA9IChcbiAgcmVhc29uOiBSZXNvdXJjZVBvbGxpbmdGYWlsdXJlUmVhc29uLFxuICBjb250ZXh0OiBSZXNvdXJjZVBvbGxpbmdGYWlsdXJlQ29udGV4dCxcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGNvbW1vbiA9XG4gICAgYGlkZW50aWZpZXI9JHtjb250ZXh0LmlkZW50aWZpZXJ9IG1vZGU9JHtjb250ZXh0Lm1vZGV9IGN1cnJlbnRTdGF0ZT0ke2NvbnRleHQuY3VycmVudFN0YXRlfSBsb29wQ291bnQ9JHtjb250ZXh0Lmxvb3BDb3VudH1gO1xuICBpZiAocmVhc29uID09PSAnTWF4TG9vcENvdW50RXhjZWVkZWQnKSB7XG4gICAgcmV0dXJuIGBSZXNvdXJjZVBvbGxpbmdGYWlsZWQ6TWF4TG9vcENvdW50RXhjZWVkZWQ6ICR7Y29tbW9ufSBtYXhMb29wQ291bnQ9JHtjb250ZXh0LmxpbWl0cy5tYXhMb29wQ291bnR9YDtcbiAgfVxuICBpZiAocmVhc29uID09PSAnTWF4RWxhcHNlZFRpbWVFeGNlZWRlZCcpIHtcbiAgICByZXR1cm4gYFJlc291cmNlUG9sbGluZ0ZhaWxlZDpNYXhFbGFwc2VkVGltZUV4Y2VlZGVkOiAke2NvbW1vbn0gbWF4RWxhcHNlZFNlY29uZHM9JHtjb250ZXh0LmxpbWl0cy5tYXhFbGFwc2VkU2Vjb25kc31gO1xuICB9XG4gIHJldHVybiBgUmVzb3VyY2VQb2xsaW5nRmFpbGVkOlVuZXhwZWN0ZWRJbnN0YW5jZVN0YXRlOiAke2NvbW1vbn1gO1xufTtcbiJdfQ==
@@ -6,8 +6,13 @@
6
6
  *
7
7
  * @see https://docs.aws.amazon.com/lambda/latest/dg/durable-execution-sdk.html
8
8
  */
9
- /** Event payload from EventBridge Scheduler invoking this Lambda. */
9
+ /**
10
+ * Event payload from EventBridge Scheduler invoking this Lambda.
11
+ *
12
+ * @see {@link handler}
13
+ */
10
14
  export interface SchedulerEvent {
15
+ /** Scheduler invocation parameters (tag filter and start/stop mode). */
11
16
  Params: {
12
17
  /** Tag key used to select EC2 instances. */
13
18
  TagKey: string;
@@ -24,11 +29,15 @@ export interface SchedulerEvent {
24
29
  * in parallel (bounded concurrency), posts a parent Slack message and per-instance thread replies,
25
30
  * and uses durable `step` / `wait` / `map` so the run can resume across suspensions.
26
31
  *
32
+ * Reads per-instance polling limits from `PROCESS_RESOURCE_MAX_LOOP_COUNT` and
33
+ * `PROCESS_RESOURCE_MAX_ELAPSED_SECONDS` via {@link parseResourcePollingLimitsFromEnv}.
34
+ *
27
35
  * @param event - Payload from EventBridge Scheduler; must include `Params.TagKey`, `Params.TagValues`, `Params.Mode`.
28
36
  * @param ctx - Root durable execution context.
29
37
  * @returns
30
38
  * - `{ status: 'TargetResourcesNotFound' }` when no instances match the tag filter.
31
- * - `{ status: 'Completed', processed, results }` when instances were handled (`results` entries match {@link processOneResource}).
32
- * @throws {Error} If `Params` is invalid, `SLACK_SECRET_NAME` is unset, the Slack secret is incomplete, or instance processing fails.
39
+ * - `{ status: 'Completed', processed, results }` when instances were handled (`results` entries match {@link processOneResource} return shape).
40
+ * @throws {Error} If `Params` is invalid, polling env vars are invalid, `SLACK_SECRET_NAME` is unset,
41
+ * the Slack secret is incomplete, or instance processing fails (including `ResourcePollingFailed:*` errors).
33
42
  */
34
43
  export declare const handler: import("@aws/durable-execution-sdk-js").DurableLambdaHandler;