@pipeline-builder/pipeline-manager 3.4.125 → 3.4.127

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/dist/agent/health.js +5 -4
  2. package/dist/agent/post-steps.d.ts.map +1 -1
  3. package/dist/agent/post-steps.js +7 -2
  4. package/dist/agent/targets.d.ts.map +1 -1
  5. package/dist/agent/targets.js +17 -2
  6. package/dist/boilerplate.js +3 -2
  7. package/dist/cli.js +3 -3
  8. package/dist/commands/create-pipeline.d.ts.map +1 -1
  9. package/dist/commands/create-pipeline.js +2 -1
  10. package/dist/commands/deploy.d.ts.map +1 -1
  11. package/dist/commands/deploy.js +11 -49
  12. package/dist/commands/get-plugin.d.ts.map +1 -1
  13. package/dist/commands/get-plugin.js +3 -2
  14. package/dist/commands/login.d.ts.map +1 -1
  15. package/dist/commands/login.js +18 -11
  16. package/dist/commands/status.d.ts.map +1 -1
  17. package/dist/commands/status.js +4 -4
  18. package/dist/commands/store-token.d.ts.map +1 -1
  19. package/dist/commands/store-token.js +103 -4
  20. package/dist/commands/synth.d.ts.map +1 -1
  21. package/dist/commands/synth.js +9 -53
  22. package/dist/commands/upload-plugin.d.ts.map +1 -1
  23. package/dist/commands/upload-plugin.js +2 -1
  24. package/dist/config/cli.constants.d.ts +0 -4
  25. package/dist/config/cli.constants.d.ts.map +1 -1
  26. package/dist/config/cli.constants.js +9 -4
  27. package/dist/lambda/token-renew-handler.d.ts +2 -0
  28. package/dist/lambda/token-renew-handler.d.ts.map +1 -0
  29. package/dist/lambda/token-renew-handler.js +75 -0
  30. package/dist/templates/token-renew-stack.json +116 -0
  31. package/dist/utils/api-client.d.ts.map +1 -1
  32. package/dist/utils/api-client.js +8 -15
  33. package/dist/utils/audit-log.d.ts.map +1 -1
  34. package/dist/utils/audit-log.js +22 -12
  35. package/dist/utils/aws-secrets.d.ts.map +1 -1
  36. package/dist/utils/aws-secrets.js +8 -2
  37. package/dist/utils/config-loader.d.ts +0 -4
  38. package/dist/utils/config-loader.d.ts.map +1 -1
  39. package/dist/utils/config-loader.js +4 -3
  40. package/dist/utils/cron.d.ts +28 -0
  41. package/dist/utils/cron.d.ts.map +1 -0
  42. package/dist/utils/cron.js +115 -0
  43. package/dist/utils/pipeline-config.d.ts +33 -0
  44. package/dist/utils/pipeline-config.d.ts.map +1 -0
  45. package/dist/utils/pipeline-config.js +54 -0
  46. package/dist/utils/platform-secret.d.ts.map +1 -1
  47. package/dist/utils/platform-secret.js +5 -2
  48. package/dist/utils/rate-limiter.d.ts +7 -6
  49. package/dist/utils/rate-limiter.d.ts.map +1 -1
  50. package/dist/utils/rate-limiter.js +49 -19
  51. package/dist/utils/tls.d.ts +16 -0
  52. package/dist/utils/tls.d.ts.map +1 -0
  53. package/dist/utils/tls.js +35 -0
  54. package/package.json +3 -3
@@ -0,0 +1,116 @@
1
+ {
2
+ "AWSTemplateFormatVersion": "2010-09-09",
3
+ "Description": "Pipeline Builder platform-token renewal — a scheduled Lambda that re-mints the platform JWT in Secrets Manager before it expires, so CodeBuild/Lambda credentials never lapse. Lambda code is deployed separately via pipeline-manager store-token.",
4
+ "Parameters": {
5
+ "PlatformBaseUrl": {
6
+ "Type": "String",
7
+ "Description": "Base URL of the platform (e.g. https://app.example.com)"
8
+ },
9
+ "PlatformSecretName": {
10
+ "Type": "String",
11
+ "Description": "Secrets Manager secret name holding the platform JWT (e.g. pipeline-builder/{orgId}/platform)"
12
+ },
13
+ "RenewDays": {
14
+ "Type": "Number",
15
+ "Default": 30,
16
+ "MinValue": 1,
17
+ "MaxValue": 365,
18
+ "Description": "Lifetime in days requested for each renewed token"
19
+ },
20
+ "ScheduleExpression": {
21
+ "Type": "String",
22
+ "Default": "cron(0 0 * * ? *)",
23
+ "Description": "EventBridge schedule expression for the renewal (default: daily at 00:00 UTC)"
24
+ },
25
+ "PipelineManagerVersion": {
26
+ "Type": "String",
27
+ "Default": "latest",
28
+ "Description": "Version of @pipeline-builder/pipeline-manager the handler installs from npm at runtime (pin for reproducible renewals)"
29
+ }
30
+ },
31
+ "Resources": {
32
+ "LambdaRole": {
33
+ "Type": "AWS::IAM::Role",
34
+ "Properties": {
35
+ "RoleName": "pipeline-builder-token-renew",
36
+ "AssumeRolePolicyDocument": {
37
+ "Version": "2012-10-17",
38
+ "Statement": [{
39
+ "Effect": "Allow",
40
+ "Principal": { "Service": "lambda.amazonaws.com" },
41
+ "Action": "sts:AssumeRole"
42
+ }]
43
+ },
44
+ "ManagedPolicyArns": [
45
+ "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
46
+ ],
47
+ "Policies": [{
48
+ "PolicyName": "token-renew",
49
+ "PolicyDocument": {
50
+ "Statement": [{
51
+ "Effect": "Allow",
52
+ "Action": [
53
+ "secretsmanager:GetSecretValue",
54
+ "secretsmanager:PutSecretValue",
55
+ "secretsmanager:UpdateSecret",
56
+ "secretsmanager:DescribeSecret",
57
+ "secretsmanager:CreateSecret"
58
+ ],
59
+ "Resource": { "Fn::Sub": "arn:aws:secretsmanager:${AWS::Region}:${AWS::AccountId}:secret:pipeline-builder/*/platform-*" }
60
+ }]
61
+ }
62
+ }]
63
+ }
64
+ },
65
+ "TokenRenewHandler": {
66
+ "Type": "AWS::Lambda::Function",
67
+ "Properties": {
68
+ "FunctionName": "pipeline-builder-token-renew",
69
+ "Runtime": "nodejs24.x",
70
+ "Handler": "index.handler",
71
+ "Code": {
72
+ "ZipFile": "exports.handler=async()=>{console.log('Placeholder handler — run pipeline-manager store-token to deploy real code');return{statusCode:200}}"
73
+ },
74
+ "Role": { "Fn::GetAtt": ["LambdaRole", "Arn"] },
75
+ "Timeout": 300,
76
+ "MemorySize": 1024,
77
+ "EphemeralStorage": { "Size": 1024 },
78
+ "Environment": {
79
+ "Variables": {
80
+ "PLATFORM_BASE_URL": { "Ref": "PlatformBaseUrl" },
81
+ "PLATFORM_SECRET_NAME": { "Ref": "PlatformSecretName" },
82
+ "RENEW_DAYS": { "Ref": "RenewDays" },
83
+ "PIPELINE_MANAGER_VERSION": { "Ref": "PipelineManagerVersion" }
84
+ }
85
+ }
86
+ }
87
+ },
88
+ "ScheduleRule": {
89
+ "Type": "AWS::Events::Rule",
90
+ "Properties": {
91
+ "Name": "pipeline-builder-token-renew",
92
+ "Description": "Scheduled platform-token renewal",
93
+ "State": "ENABLED",
94
+ "ScheduleExpression": { "Ref": "ScheduleExpression" },
95
+ "Targets": [{
96
+ "Id": "token-renew-lambda",
97
+ "Arn": { "Fn::GetAtt": ["TokenRenewHandler", "Arn"] }
98
+ }]
99
+ }
100
+ },
101
+ "InvokePermission": {
102
+ "Type": "AWS::Lambda::Permission",
103
+ "Properties": {
104
+ "FunctionName": { "Ref": "TokenRenewHandler" },
105
+ "Action": "lambda:InvokeFunction",
106
+ "Principal": "events.amazonaws.com",
107
+ "SourceArn": { "Fn::GetAtt": ["ScheduleRule", "Arn"] }
108
+ }
109
+ }
110
+ },
111
+ "Outputs": {
112
+ "LambdaFunctionArn": { "Value": { "Fn::GetAtt": ["TokenRenewHandler", "Arn"] } },
113
+ "ScheduleRuleName": { "Value": { "Ref": "ScheduleRule" } },
114
+ "ScheduleExpression": { "Value": { "Ref": "ScheduleExpression" } }
115
+ }
116
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/utils/api-client.ts"],"names":[],"mappings":"AAKA,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAMjD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAwD1B,OAAO,CAAC,WAAW;IAkDb,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAK7G,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAK5F,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAWpG,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAK3F,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAK9E,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAKnG,SAAS,IAAI,MAAM;IACnB,UAAU,IAAI,MAAM;IACpB,eAAe,IAAI,OAAO;IAE1B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CAezB"}
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/utils/api-client.ts"],"names":[],"mappings":"AAKA,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAOjD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAwD1B,OAAO,CAAC,WAAW;IAkDb,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAK7G,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAK5F,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAWpG,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAK3F,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAK9E,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAKnG,SAAS,IAAI,MAAM;IACnB,UAAU,IAAI,MAAM;IACpB,eAAe,IAAI,OAAO;IAE1B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CASzB"}
@@ -4,6 +4,7 @@ import https from 'https';
4
4
  import axios, { AxiosError } from 'axios';
5
5
  import FormData from 'form-data';
6
6
  import {} from './config-loader.js';
7
+ import { decodeTokenPayload } from './auth-guard.js';
7
8
  import { NetworkError } from './error-handler.js';
8
9
  import { printDebug, printError, printWarning } from './output-utils.js';
9
10
  import { TIMEOUTS } from '../config/cli.constants.js';
@@ -93,7 +94,7 @@ export class ApiClient {
93
94
  };
94
95
  const hint = hints[code] || 'Check network connectivity and server status';
95
96
  const message = `${code}: ${hint} (url: ${url})`;
96
- return Promise.reject(new NetworkError(message, url, error));
97
+ return Promise.reject(new NetworkError(message, url, error, timeout));
97
98
  }
98
99
  else {
99
100
  printError('API request error', { error: error.message });
@@ -138,21 +139,13 @@ export class ApiClient {
138
139
  * Does NOT verify signature — server handles that.
139
140
  */
140
141
  checkTokenExpiry(token) {
141
- try {
142
- const parts = token.split('.');
143
- if (parts.length !== 3 || !parts[1])
144
- return;
145
- const payload = JSON.parse(Buffer.from(parts[1], 'base64url').toString('utf-8'));
146
- if (payload.exp && typeof payload.exp === 'number') {
147
- const expiresAt = new Date(payload.exp * 1000);
148
- if (expiresAt.getTime() < Date.now()) {
149
- printWarning(`Token expired at ${expiresAt.toISOString()} — run "pipeline-manager login" to refresh`);
150
- }
142
+ const payload = decodeTokenPayload(token);
143
+ if (payload && typeof payload.exp === 'number') {
144
+ const expiresAt = new Date(payload.exp * 1000);
145
+ if (expiresAt.getTime() < Date.now()) {
146
+ printWarning(`Token expired at ${expiresAt.toISOString()} — run "pipeline-manager login" to refresh`);
151
147
  }
152
148
  }
153
- catch {
154
- // Silently ignore decode errors — server will reject invalid tokens
155
- }
156
149
  }
157
150
  }
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9hcGktY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sS0FBSyxFQUFFLEVBQXNCLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5RCxPQUFPLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFlLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFN0M7O0dBRUc7QUFDSCxNQUFNLE9BQU8sU0FBUztJQUNaLE1BQU0sQ0FBZ0I7SUFDdEIsTUFBTSxDQUFTO0lBRXZCLFlBQVksTUFBYztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUVyQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLDRFQUE0RSxDQUFDLENBQUM7UUFDaEcsQ0FBQztRQUVELDhFQUE4RTtRQUM5RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV6QyxNQUFNLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDakMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsSUFBSSxJQUFJO1NBQzFELENBQUMsQ0FBQztRQUVI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LENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFBRSxPQUFPO1lBQzVDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDakYsSUFBSSxPQUFPLENBQUMsR0FBRyxJQUFJLE9BQU8sT0FBTyxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDbkQsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7b0JBQ3JDLFlBQVksQ0FBQyxvQkFBb0IsU0FBUyxDQUFDLFdBQVcsRUFBRSw0Q0FBNEMsQ0FBQyxDQUFDO2dCQUN4RyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxvRUFBb0U7UUFDdEUsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnO1xuaW1wb3J0IGF4aW9zLCB7IHR5cGUgQXhpb3NJbnN0YW5jZSwgQXhpb3NFcnJvciB9IGZyb20gJ2F4aW9zJztcbmltcG9ydCBGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IHsgdHlwZSBDb25maWcgfSBmcm9tICcuL2NvbmZpZy1sb2FkZXIuanMnO1xuaW1wb3J0IHsgTmV0d29ya0Vycm9yIH0gZnJvbSAnLi9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IHByaW50RGVidWcsIHByaW50RXJyb3IsIHByaW50V2FybmluZyB9IGZyb20gJy4vb3V0cHV0LXV0aWxzLmpzJztcbmltcG9ydCB7IFRJTUVPVVRTIH0gZnJvbSAnLi4vY29uZmlnL2NsaS5jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgQXBpRXJyb3IgfSBmcm9tICcuLi90eXBlcy9pbmRleC5qcyc7XG5cbi8qKlxuICogQVBJIENsaWVudCBmb3IgbWFraW5nIEhUVFAgcmVxdWVzdHMgdG8gdGhlIHBsYXRmb3JtIEFQSVxuICovXG5leHBvcnQgY2xhc3MgQXBpQ2xpZW50IHtcbiAgcHJpdmF0ZSBjbGllbnQ6IEF4aW9zSW5zdGFuY2U7XG4gIHByaXZhdGUgY29uZmlnOiBDb25maWc7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcblxuICAgIGlmICghY29uZmlnLmF1dGg/LnRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F1dGhlbnRpY2F0aW9uIHRva2VuIGlzIHJlcXVpcmVkLiBTZXQgUExBVEZPUk1fVE9LRU4gZW52aXJvbm1lbnQgdmFyaWFibGUuJyk7XG4gICAgfVxuXG4gICAgLy8gV2FybiBpZiB0b2tlbiBhcHBlYXJzIGV4cGlyZWQgKGFkdmlzb3J5IOKAlCBzZXJ2ZXIgdmFsaWRhdGVzIGF1dGhvcml0YXRpdmVseSlcbiAgICB0aGlzLmNoZWNrVG9rZW5FeHBpcnkoY29uZmlnLmF1dGgudG9rZW4pO1xuXG4gICAgY29uc3QgaHR0cHNBZ2VudCA9IG5ldyBodHRwcy5BZ2VudCh7XG4gICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGNvbmZpZy5hcGkucmVqZWN0VW5hdXRob3JpemVkID8/IHRydWUsXG4gICAgfSk7XG5cbiAgICBpZiAoY29uZmlnLmFwaS5yZWplY3RVbmF1dGhvcml6ZWQgPT09IGZhbHNlKSB7XG4gICAgICBwcmludFdhcm5pbmcoJ0NlcnRpZmljYXRlIHZhbGlkYXRpb24gaXMgZGlzYWJsZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmNsaWVudCA9IGF4aW9zLmNyZWF0ZSh7XG4gICAgICBiYXNlVVJMOiBjb25maWcuYXBpLmJhc2VVcmwsXG4gICAgICB0aW1lb3V0OiBjb25maWcuYXBpLnRpbWVvdXQgfHwgVElNRU9VVFMuSFRUUF9SRVFVRVNULFxuICAgICAgaHR0cHNBZ2VudCxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgIH0pO1xuXG4gICAgLy8gQXV0aCBpbnRlcmNlcHRvclxuICAgIHRoaXMuY2xpZW50LmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZShcbiAgICAgIChyZXF1ZXN0Q29uZmlnKSA9PiB7XG4gICAgICAgIHJlcXVlc3RDb25maWcuaGVhZGVycy5BdXRob3JpemF0aW9uID0gYEJlYXJlciAke2NvbmZpZy5hdXRoLnRva2VufWA7XG4gICAgICAgIHByaW50RGVidWcoJ0FQSSBSZXF1ZXN0Jywge1xuICAgICAgICAgIG1ldGhvZDogcmVxdWVzdENvbmZpZy5tZXRob2Q/LnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgdXJsOiByZXF1ZXN0Q29uZmlnLnVybCxcbiAgICAgICAgICBiYXNlVVJMOiByZXF1ZXN0Q29uZmlnLmJhc2VVUkwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVxdWVzdENvbmZpZztcbiAgICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgcHJpbnRFcnJvcignUmVxdWVzdCBpbnRlcmNlcHRvciBlcnJvcicsIHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBSZXNwb25zZSBpbnRlcmNlcHRvclxuICAgIHRoaXMuY2xpZW50LmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoXG4gICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgcHJpbnREZWJ1ZygnQVBJIFJlc3BvbnNlJywge1xuICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgICAgdXJsOiByZXNwb25zZS5jb25maWcudXJsLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgfSxcbiAgICAgIChlcnJvcjogQXhpb3NFcnJvcikgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnJvciksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXJyb3IoZXJyb3I6IEF4aW9zRXJyb3IpOiBQcm9taXNlPG5ldmVyPiB7XG4gICAgaWYgKGVycm9yLnJlc3BvbnNlKSB7XG4gICAgICBjb25zdCB7IHN0YXR1cywgc3RhdHVzVGV4dCwgZGF0YSB9ID0gZXJyb3IucmVzcG9uc2U7XG4gICAgICBjb25zdCB1cmwgPSBlcnJvci5jb25maWc/LnVybDtcblxuICAgICAgLy8gVGhlIHJlc3BvbnNlIGJvZHkgKGBkYXRhYCkgY2FuIGNhcnJ5IHRva2Vucy9QSUksIGFuZCBwcmludEVycm9yIGFsd2F5cyB3cml0ZXNcbiAgICAgIC8vIChub3QgZ2F0ZWQgb24gREVCVUcpIOKAlCBrZWVwIGl0IG91dCBvZiB0aGUgYWx3YXlzLW9uIGxpbmU7IHN1cmZhY2UgaXQgb25seSB1bmRlciBERUJVRy5cbiAgICAgIHByaW50RXJyb3IoJ0FQSSByZXF1ZXN0IGZhaWxlZCcsIHsgc3RhdHVzLCBzdGF0dXNUZXh0LCB1cmwgfSk7XG4gICAgICBwcmludERlYnVnKCdBUEkgZXJyb3IgcmVzcG9uc2UgYm9keScsIHsgZGF0YSB9KTtcblxuICAgICAgbGV0IG1lc3NhZ2UgPSBgQVBJIHJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzICR7c3RhdHVzfWA7XG4gICAgICBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ21lc3NhZ2UnIGluIGRhdGEpIHtcbiAgICAgICAgbWVzc2FnZSA9IChkYXRhIGFzIHsgbWVzc2FnZTogc3RyaW5nIH0pLm1lc3NhZ2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQXBpRXJyb3IobWVzc2FnZSwgc3RhdHVzLCBlcnJvci5yZXNwb25zZSkpO1xuICAgIH0gZWxzZSBpZiAoZXJyb3IucmVxdWVzdCkge1xuICAgICAgY29uc3QgY29kZSA9IGVycm9yLmNvZGUgfHwgJ1VOS05PV04nO1xuICAgICAgY29uc3QgdXJsID0gZXJyb3IuY29uZmlnPy51cmw7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gZXJyb3IuY29uZmlnPy50aW1lb3V0O1xuICAgICAgY29uc3QgY2F1c2UgPSBlcnJvci5jYXVzZTtcblxuICAgICAgcHJpbnRFcnJvcignTm8gcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSBBUEknLCB7XG4gICAgICAgIHVybCxcbiAgICAgICAgdGltZW91dCxcbiAgICAgICAgY29kZSxcbiAgICAgICAgLi4uKGNhdXNlIGluc3RhbmNlb2YgRXJyb3IgPyB7IGNhdXNlOiBjYXVzZS5tZXNzYWdlIH0gOiB7fSksXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgaGludHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgIEVDT05OUkVGVVNFRDogJ1NlcnZlciBpcyBub3QgcnVubmluZyBvciBwb3J0IGlzIHdyb25nJyxcbiAgICAgICAgRUNPTk5SRVNFVDogJ1NlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gdW5leHBlY3RlZGx5JyxcbiAgICAgICAgRVRJTUVET1VUOiAnQ29ubmVjdGlvbiB0aW1lZCBvdXQg4oCUIHNlcnZlciB1bnJlYWNoYWJsZSBvciB0b28gc2xvdycsXG4gICAgICAgIEVOT1RGT1VORDogJ0ROUyBsb29rdXAgZmFpbGVkIOKAlCBjaGVjayB0aGUgaG9zdG5hbWUgaW4gYmFzZVVybCcsXG4gICAgICAgIEVSUl9CQURfUkVRVUVTVDogJ1JlcXVlc3Qgd2FzIG1hbGZvcm1lZCDigJQgY2hlY2sgdGhlIGVuZHBvaW50IGFuZCBwYXlsb2FkJyxcbiAgICAgICAgQ0VSVF9IQVNfRVhQSVJFRDogJ1NTTCBjZXJ0aWZpY2F0ZSBleHBpcmVkIOKAlCB1c2UgLS1uby12ZXJpZnktc3NsIGZvciBkZXYnLFxuICAgICAgICBERVBUSF9aRVJPX1NFTEZfU0lHTkVEX0NFUlQ6ICdTZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSDigJQgdXNlIC0tbm8tdmVyaWZ5LXNzbCcsXG4gICAgICAgIFVOQUJMRV9UT19WRVJJRllfTEVBRl9TSUdOQVRVUkU6ICdTU0wgY2hhaW4gaW5jb21wbGV0ZSDigJQgdXNlIC0tbm8tdmVyaWZ5LXNzbCBmb3IgZGV2JyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGhpbnQgPSBoaW50c1tjb2RlXSB8fCAnQ2hlY2sgbmV0d29yayBjb25uZWN0aXZpdHkgYW5kIHNlcnZlciBzdGF0dXMnO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGAke2NvZGV9OiAke2hpbnR9ICh1cmw6ICR7dXJsfSlgO1xuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IE5ldHdvcmtFcnJvcihtZXNzYWdlLCB1cmwsIGVycm9yKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByaW50RXJyb3IoJ0FQSSByZXF1ZXN0IGVycm9yJywgeyBlcnJvcjogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0PFQgPSB1bmtub3duPih1cmw6IHN0cmluZywgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXQ8VD4odXJsLCB7IHBhcmFtcywgaGVhZGVycyB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIHBvc3Q8VCA9IHVua25vd24+KHVybDogc3RyaW5nLCBkYXRhPzogdW5rbm93biwgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnBvc3Q8VD4odXJsLCBkYXRhLCB7IGhlYWRlcnMgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH1cblxuICBhc3luYyBwb3N0Rm9ybTxUID0gdW5rbm93bj4odXJsOiBzdHJpbmcsIGZvcm1EYXRhOiBGb3JtRGF0YSwgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCB1cGxvYWRUaW1lb3V0ID0gdGhpcy5jb25maWcuYXBpLnVwbG9hZFRpbWVvdXQgfHwgMTUgKiA2MCAqIDEwMDA7IC8vIGRlZmF1bHQgMTUgbWludXRlc1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucG9zdDxUPih1cmwsIGZvcm1EYXRhLCB7XG4gICAgICBoZWFkZXJzOiB7IC4uLmZvcm1EYXRhLmdldEhlYWRlcnMoKSwgLi4uaGVhZGVycyB9LFxuICAgICAgbWF4Q29udGVudExlbmd0aDogSW5maW5pdHksXG4gICAgICBtYXhCb2R5TGVuZ3RoOiBJbmZpbml0eSxcbiAgICAgIHRpbWVvdXQ6IHVwbG9hZFRpbWVvdXQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH1cblxuICBhc3luYyBwdXQ8VCA9IHVua25vd24+KHVybDogc3RyaW5nLCBkYXRhPzogdW5rbm93biwgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnB1dDxUPih1cmwsIGRhdGEsIHsgaGVhZGVycyB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZTxUID0gdW5rbm93bj4odXJsOiBzdHJpbmcsIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5kZWxldGU8VD4odXJsLCB7IGhlYWRlcnMgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH1cblxuICBhc3luYyBwYXRjaDxUID0gdW5rbm93bj4odXJsOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duLCBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucGF0Y2g8VD4odXJsLCBkYXRhLCB7IGhlYWRlcnMgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH1cblxuICBnZXRDb25maWcoKTogQ29uZmlnIHsgcmV0dXJuIHRoaXMuY29uZmlnOyB9XG4gIGdldEJhc2VVcmwoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY29uZmlnLmFwaS5iYXNlVXJsOyB9XG4gIGlzQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHsgcmV0dXJuICEhdGhpcy5jb25maWcuYXV0aD8udG9rZW47IH1cblxuICAvKipcbiAgICogQWR2aXNvcnkgY2hlY2s6IGRlY29kZSBKV1QgZXhwIGNsYWltIGFuZCB3YXJuIGlmIGV4cGlyZWQuXG4gICAqIERvZXMgTk9UIHZlcmlmeSBzaWduYXR1cmUg4oCUIHNlcnZlciBoYW5kbGVzIHRoYXQuXG4gICAqL1xuICBwcml2YXRlIGNoZWNrVG9rZW5FeHBpcnkodG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHRva2VuLnNwbGl0KCcuJyk7XG4gICAgICBpZiAocGFydHMubGVuZ3RoICE9PSAzIHx8ICFwYXJ0c1sxXSkgcmV0dXJuO1xuICAgICAgY29uc3QgcGF5bG9hZCA9IEpTT04ucGFyc2UoQnVmZmVyLmZyb20ocGFydHNbMV0sICdiYXNlNjR1cmwnKS50b1N0cmluZygndXRmLTgnKSk7XG4gICAgICBpZiAocGF5bG9hZC5leHAgJiYgdHlwZW9mIHBheWxvYWQuZXhwID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25zdCBleHBpcmVzQXQgPSBuZXcgRGF0ZShwYXlsb2FkLmV4cCAqIDEwMDApO1xuICAgICAgICBpZiAoZXhwaXJlc0F0LmdldFRpbWUoKSA8IERhdGUubm93KCkpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoYFRva2VuIGV4cGlyZWQgYXQgJHtleHBpcmVzQXQudG9JU09TdHJpbmcoKX0g4oCUIHJ1biBcInBpcGVsaW5lLW1hbmFnZXIgbG9naW5cIiB0byByZWZyZXNoYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFNpbGVudGx5IGlnbm9yZSBkZWNvZGUgZXJyb3JzIOKAlCBzZXJ2ZXIgd2lsbCByZWplY3QgaW52YWxpZCB0b2tlbnNcbiAgICB9XG4gIH1cbn1cbiJdfQ==
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9hcGktY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sS0FBSyxFQUFFLEVBQXNCLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5RCxPQUFPLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFlLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFN0M7O0dBRUc7QUFDSCxNQUFNLE9BQU8sU0FBUztJQUNaLE1BQU0sQ0FBZ0I7SUFDdEIsTUFBTSxDQUFTO0lBRXZCLFlBQVksTUFBYztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUVyQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLDRFQUE0RSxDQUFDLENBQUM7UUFDaEcsQ0FBQztRQUVELDhFQUE4RTtRQUM5RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV6QyxNQUFNLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDakMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLEdB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QUksT0FBTyxJQUFJLE9BQU8sT0FBTyxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMvQyxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQy9DLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO2dCQUNyQyxZQUFZLENBQUMsb0JBQW9CLFNBQVMsQ0FBQyxXQUFXLEVBQUUsNENBQTRDLENBQUMsQ0FBQztZQUN4RyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnO1xuaW1wb3J0IGF4aW9zLCB7IHR5cGUgQXhpb3NJbnN0YW5jZSwgQXhpb3NFcnJvciB9IGZyb20gJ2F4aW9zJztcbmltcG9ydCBGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IHsgdHlwZSBDb25maWcgfSBmcm9tICcuL2NvbmZpZy1sb2FkZXIuanMnO1xuaW1wb3J0IHsgZGVjb2RlVG9rZW5QYXlsb2FkIH0gZnJvbSAnLi9hdXRoLWd1YXJkLmpzJztcbmltcG9ydCB7IE5ldHdvcmtFcnJvciB9IGZyb20gJy4vZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludERlYnVnLCBwcmludEVycm9yLCBwcmludFdhcm5pbmcgfSBmcm9tICcuL291dHB1dC11dGlscy5qcyc7XG5pbXBvcnQgeyBUSU1FT1VUUyB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IEFwaUVycm9yIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXguanMnO1xuXG4vKipcbiAqIEFQSSBDbGllbnQgZm9yIG1ha2luZyBIVFRQIHJlcXVlc3RzIHRvIHRoZSBwbGF0Zm9ybSBBUElcbiAqL1xuZXhwb3J0IGNsYXNzIEFwaUNsaWVudCB7XG4gIHByaXZhdGUgY2xpZW50OiBBeGlvc0luc3RhbmNlO1xuICBwcml2YXRlIGNvbmZpZzogQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG5cbiAgICBpZiAoIWNvbmZpZy5hdXRoPy50b2tlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdXRoZW50aWNhdGlvbiB0b2tlbiBpcyByZXF1aXJlZC4gU2V0IFBMQVRGT1JNX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlLicpO1xuICAgIH1cblxuICAgIC8vIFdhcm4gaWYgdG9rZW4gYXBwZWFycyBleHBpcmVkIChhZHZpc29yeSDigJQgc2VydmVyIHZhbGlkYXRlcyBhdXRob3JpdGF0aXZlbHkpXG4gICAgdGhpcy5jaGVja1Rva2VuRXhwaXJ5KGNvbmZpZy5hdXRoLnRva2VuKTtcblxuICAgIGNvbnN0IGh0dHBzQWdlbnQgPSBuZXcgaHR0cHMuQWdlbnQoe1xuICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBjb25maWcuYXBpLnJlamVjdFVuYXV0aG9yaXplZCA/PyB0cnVlLFxuICAgIH0pO1xuXG4gICAgaWYgKGNvbmZpZy5hcGkucmVqZWN0VW5hdXRob3JpemVkID09PSBmYWxzZSkge1xuICAgICAgcHJpbnRXYXJuaW5nKCdDZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIGlzIGRpc2FibGVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jbGllbnQgPSBheGlvcy5jcmVhdGUoe1xuICAgICAgYmFzZVVSTDogY29uZmlnLmFwaS5iYXNlVXJsLFxuICAgICAgdGltZW91dDogY29uZmlnLmFwaS50aW1lb3V0IHx8IFRJTUVPVVRTLkhUVFBfUkVRVUVTVCxcbiAgICAgIGh0dHBzQWdlbnQsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICB9KTtcblxuICAgIC8vIEF1dGggaW50ZXJjZXB0b3JcbiAgICB0aGlzLmNsaWVudC5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoXG4gICAgICAocmVxdWVzdENvbmZpZykgPT4ge1xuICAgICAgICByZXF1ZXN0Q29uZmlnLmhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGBCZWFyZXIgJHtjb25maWcuYXV0aC50b2tlbn1gO1xuICAgICAgICBwcmludERlYnVnKCdBUEkgUmVxdWVzdCcsIHtcbiAgICAgICAgICBtZXRob2Q6IHJlcXVlc3RDb25maWcubWV0aG9kPy50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgIHVybDogcmVxdWVzdENvbmZpZy51cmwsXG4gICAgICAgICAgYmFzZVVSTDogcmVxdWVzdENvbmZpZy5iYXNlVVJMLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlcXVlc3RDb25maWc7XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIHByaW50RXJyb3IoJ1JlcXVlc3QgaW50ZXJjZXB0b3IgZXJyb3InLCB7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gUmVzcG9uc2UgaW50ZXJjZXB0b3JcbiAgICB0aGlzLmNsaWVudC5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKFxuICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHByaW50RGVidWcoJ0FQSSBSZXNwb25zZScsIHtcbiAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICAgIHVybDogcmVzcG9uc2UuY29uZmlnLnVybCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IEF4aW9zRXJyb3IpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBBeGlvc0Vycm9yKTogUHJvbWlzZTxuZXZlcj4ge1xuICAgIGlmIChlcnJvci5yZXNwb25zZSkge1xuICAgICAgY29uc3QgeyBzdGF0dXMsIHN0YXR1c1RleHQsIGRhdGEgfSA9IGVycm9yLnJlc3BvbnNlO1xuICAgICAgY29uc3QgdXJsID0gZXJyb3IuY29uZmlnPy51cmw7XG5cbiAgICAgIC8vIFRoZSByZXNwb25zZSBib2R5IChgZGF0YWApIGNhbiBjYXJyeSB0b2tlbnMvUElJLCBhbmQgcHJpbnRFcnJvciBhbHdheXMgd3JpdGVzXG4gICAgICAvLyAobm90IGdhdGVkIG9uIERFQlVHKSDigJQga2VlcCBpdCBvdXQgb2YgdGhlIGFsd2F5cy1vbiBsaW5lOyBzdXJmYWNlIGl0IG9ubHkgdW5kZXIgREVCVUcuXG4gICAgICBwcmludEVycm9yKCdBUEkgcmVxdWVzdCBmYWlsZWQnLCB7IHN0YXR1cywgc3RhdHVzVGV4dCwgdXJsIH0pO1xuICAgICAgcHJpbnREZWJ1ZygnQVBJIGVycm9yIHJlc3BvbnNlIGJvZHknLCB7IGRhdGEgfSk7XG5cbiAgICAgIGxldCBtZXNzYWdlID0gYEFQSSByZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyAke3N0YXR1c31gO1xuICAgICAgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICdtZXNzYWdlJyBpbiBkYXRhKSB7XG4gICAgICAgIG1lc3NhZ2UgPSAoZGF0YSBhcyB7IG1lc3NhZ2U6IHN0cmluZyB9KS5tZXNzYWdlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEFwaUVycm9yKG1lc3NhZ2UsIHN0YXR1cywgZXJyb3IucmVzcG9uc2UpKTtcbiAgICB9IGVsc2UgaWYgKGVycm9yLnJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSBlcnJvci5jb2RlIHx8ICdVTktOT1dOJztcbiAgICAgIGNvbnN0IHVybCA9IGVycm9yLmNvbmZpZz8udXJsO1xuICAgICAgY29uc3QgdGltZW91dCA9IGVycm9yLmNvbmZpZz8udGltZW91dDtcbiAgICAgIGNvbnN0IGNhdXNlID0gZXJyb3IuY2F1c2U7XG5cbiAgICAgIHByaW50RXJyb3IoJ05vIHJlc3BvbnNlIHJlY2VpdmVkIGZyb20gQVBJJywge1xuICAgICAgICB1cmwsXG4gICAgICAgIHRpbWVvdXQsXG4gICAgICAgIGNvZGUsXG4gICAgICAgIC4uLihjYXVzZSBpbnN0YW5jZW9mIEVycm9yID8geyBjYXVzZTogY2F1c2UubWVzc2FnZSB9IDoge30pLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGhpbnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICBFQ09OTlJFRlVTRUQ6ICdTZXJ2ZXIgaXMgbm90IHJ1bm5pbmcgb3IgcG9ydCBpcyB3cm9uZycsXG4gICAgICAgIEVDT05OUkVTRVQ6ICdTZXJ2ZXIgY2xvc2VkIHRoZSBjb25uZWN0aW9uIHVuZXhwZWN0ZWRseScsXG4gICAgICAgIEVUSU1FRE9VVDogJ0Nvbm5lY3Rpb24gdGltZWQgb3V0IOKAlCBzZXJ2ZXIgdW5yZWFjaGFibGUgb3IgdG9vIHNsb3cnLFxuICAgICAgICBFTk9URk9VTkQ6ICdETlMgbG9va3VwIGZhaWxlZCDigJQgY2hlY2sgdGhlIGhvc3RuYW1lIGluIGJhc2VVcmwnLFxuICAgICAgICBFUlJfQkFEX1JFUVVFU1Q6ICdSZXF1ZXN0IHdhcyBtYWxmb3JtZWQg4oCUIGNoZWNrIHRoZSBlbmRwb2ludCBhbmQgcGF5bG9hZCcsXG4gICAgICAgIENFUlRfSEFTX0VYUElSRUQ6ICdTU0wgY2VydGlmaWNhdGUgZXhwaXJlZCDigJQgdXNlIC0tbm8tdmVyaWZ5LXNzbCBmb3IgZGV2JyxcbiAgICAgICAgREVQVEhfWkVST19TRUxGX1NJR05FRF9DRVJUOiAnU2VsZi1zaWduZWQgY2VydGlmaWNhdGUg4oCUIHVzZSAtLW5vLXZlcmlmeS1zc2wnLFxuICAgICAgICBVTkFCTEVfVE9fVkVSSUZZX0xFQUZfU0lHTkFUVVJFOiAnU1NMIGNoYWluIGluY29tcGxldGUg4oCUIHVzZSAtLW5vLXZlcmlmeS1zc2wgZm9yIGRldicsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBoaW50ID0gaGludHNbY29kZV0gfHwgJ0NoZWNrIG5ldHdvcmsgY29ubmVjdGl2aXR5IGFuZCBzZXJ2ZXIgc3RhdHVzJztcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgJHtjb2RlfTogJHtoaW50fSAodXJsOiAke3VybH0pYDtcblxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBOZXR3b3JrRXJyb3IobWVzc2FnZSwgdXJsLCBlcnJvciwgdGltZW91dCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmludEVycm9yKCdBUEkgcmVxdWVzdCBlcnJvcicsIHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldDxUID0gdW5rbm93bj4odXJsOiBzdHJpbmcsIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0PFQ+KHVybCwgeyBwYXJhbXMsIGhlYWRlcnMgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH1cblxuICBhc3luYyBwb3N0PFQgPSB1bmtub3duPih1cmw6IHN0cmluZywgZGF0YT86IHVua25vd24sIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5wb3N0PFQ+KHVybCwgZGF0YSwgeyBoZWFkZXJzIH0pO1xuICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICB9XG5cbiAgYXN5bmMgcG9zdEZvcm08VCA9IHVua25vd24+KHVybDogc3RyaW5nLCBmb3JtRGF0YTogRm9ybURhdGEsIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgdXBsb2FkVGltZW91dCA9IHRoaXMuY29uZmlnLmFwaS51cGxvYWRUaW1lb3V0IHx8IDE1ICogNjAgKiAxMDAwOyAvLyBkZWZhdWx0IDE1IG1pbnV0ZXNcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnBvc3Q8VD4odXJsLCBmb3JtRGF0YSwge1xuICAgICAgaGVhZGVyczogeyAuLi5mb3JtRGF0YS5nZXRIZWFkZXJzKCksIC4uLmhlYWRlcnMgfSxcbiAgICAgIG1heENvbnRlbnRMZW5ndGg6IEluZmluaXR5LFxuICAgICAgbWF4Qm9keUxlbmd0aDogSW5maW5pdHksXG4gICAgICB0aW1lb3V0OiB1cGxvYWRUaW1lb3V0LFxuICAgIH0pO1xuICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICB9XG5cbiAgYXN5bmMgcHV0PFQgPSB1bmtub3duPih1cmw6IHN0cmluZywgZGF0YT86IHVua25vd24sIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5wdXQ8VD4odXJsLCBkYXRhLCB7IGhlYWRlcnMgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH1cblxuICBhc3luYyBkZWxldGU8VCA9IHVua25vd24+KHVybDogc3RyaW5nLCBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQuZGVsZXRlPFQ+KHVybCwgeyBoZWFkZXJzIH0pO1xuICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICB9XG5cbiAgYXN5bmMgcGF0Y2g8VCA9IHVua25vd24+KHVybDogc3RyaW5nLCBkYXRhPzogdW5rbm93biwgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnBhdGNoPFQ+KHVybCwgZGF0YSwgeyBoZWFkZXJzIH0pO1xuICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICB9XG5cbiAgZ2V0Q29uZmlnKCk6IENvbmZpZyB7IHJldHVybiB0aGlzLmNvbmZpZzsgfVxuICBnZXRCYXNlVXJsKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNvbmZpZy5hcGkuYmFzZVVybDsgfVxuICBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7IHJldHVybiAhIXRoaXMuY29uZmlnLmF1dGg/LnRva2VuOyB9XG5cbiAgLyoqXG4gICAqIEFkdmlzb3J5IGNoZWNrOiBkZWNvZGUgSldUIGV4cCBjbGFpbSBhbmQgd2FybiBpZiBleHBpcmVkLlxuICAgKiBEb2VzIE5PVCB2ZXJpZnkgc2lnbmF0dXJlIOKAlCBzZXJ2ZXIgaGFuZGxlcyB0aGF0LlxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja1Rva2VuRXhwaXJ5KHRva2VuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwYXlsb2FkID0gZGVjb2RlVG9rZW5QYXlsb2FkKHRva2VuKTtcbiAgICBpZiAocGF5bG9hZCAmJiB0eXBlb2YgcGF5bG9hZC5leHAgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25zdCBleHBpcmVzQXQgPSBuZXcgRGF0ZShwYXlsb2FkLmV4cCAqIDEwMDApO1xuICAgICAgaWYgKGV4cGlyZXNBdC5nZXRUaW1lKCkgPCBEYXRlLm5vdygpKSB7XG4gICAgICAgIHByaW50V2FybmluZyhgVG9rZW4gZXhwaXJlZCBhdCAke2V4cGlyZXNBdC50b0lTT1N0cmluZygpfSDigJQgcnVuIFwicGlwZWxpbmUtbWFuYWdlciBsb2dpblwiIHRvIHJlZnJlc2hgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"audit-log.d.ts","sourceRoot":"","sources":["../../src/utils/audit-log.ts"],"names":[],"mappings":"AAwBA;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CA2BjF"}
1
+ {"version":3,"file":"audit-log.d.ts","sourceRoot":"","sources":["../../src/utils/audit-log.ts"],"names":[],"mappings":"AAqCA;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAwBjF"}
@@ -3,6 +3,7 @@
3
3
  import fs from 'fs';
4
4
  import os from 'os';
5
5
  import path from 'path';
6
+ import { printDebug } from './output-utils.js';
6
7
  /**
7
8
  * Local audit logger for sensitive CLI operations.
8
9
  * Writes timestamped entries to ~/.pipeline-manager/audit.log.
@@ -11,6 +12,19 @@ import path from 'path';
11
12
  const AUDIT_DIR = path.join(os.homedir(), '.pipeline-manager');
12
13
  const AUDIT_FILE = path.join(AUDIT_DIR, 'audit.log');
13
14
  const MAX_AUDIT_SIZE = 1024 * 1024; // 1MB — rotate when exceeded
15
+ const MAX_ROTATED = 5; // keep audit.log.1 .. .5 (history isn't lost on repeated rotations)
16
+ /** Shift audit.log.{n} → .{n+1} (dropping the oldest), then audit.log → .1. */
17
+ function rotate() {
18
+ const oldest = `${AUDIT_FILE}.${MAX_ROTATED}`;
19
+ if (fs.existsSync(oldest))
20
+ fs.unlinkSync(oldest);
21
+ for (let i = MAX_ROTATED - 1; i >= 1; i--) {
22
+ const src = `${AUDIT_FILE}.${i}`;
23
+ if (fs.existsSync(src))
24
+ fs.renameSync(src, `${AUDIT_FILE}.${i + 1}`);
25
+ }
26
+ fs.renameSync(AUDIT_FILE, `${AUDIT_FILE}.1`);
27
+ }
14
28
  /**
15
29
  * Log a sensitive operation to the local audit file.
16
30
  *
@@ -22,15 +36,9 @@ export function auditLog(command, details) {
22
36
  if (!fs.existsSync(AUDIT_DIR)) {
23
37
  fs.mkdirSync(AUDIT_DIR, { recursive: true, mode: 0o700 });
24
38
  }
25
- // Rotate if file is too large
26
- if (fs.existsSync(AUDIT_FILE)) {
27
- const stats = fs.statSync(AUDIT_FILE);
28
- if (stats.size > MAX_AUDIT_SIZE) {
29
- const rotated = `${AUDIT_FILE}.1`;
30
- if (fs.existsSync(rotated))
31
- fs.unlinkSync(rotated);
32
- fs.renameSync(AUDIT_FILE, rotated);
33
- }
39
+ // Rotate if file is too large (keeps MAX_ROTATED archives)
40
+ if (fs.existsSync(AUDIT_FILE) && fs.statSync(AUDIT_FILE).size > MAX_AUDIT_SIZE) {
41
+ rotate();
34
42
  }
35
43
  const entry = {
36
44
  timestamp: new Date().toISOString(),
@@ -40,8 +48,10 @@ export function auditLog(command, details) {
40
48
  };
41
49
  fs.appendFileSync(AUDIT_FILE, JSON.stringify(entry) + '\n', { mode: 0o600 });
42
50
  }
43
- catch {
44
- // Audit logging is best-effort — never block the CLI
51
+ catch (err) {
52
+ // Audit logging is best-effort — never block the CLI — but surface the failure
53
+ // in debug so a silently-unrecorded sensitive op is at least diagnosable.
54
+ printDebug('Audit log write failed', { command, error: err instanceof Error ? err.message : String(err) });
45
55
  }
46
56
  }
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2F1ZGl0LWxvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRXhCOzs7O0dBSUc7QUFFSCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBQy9ELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3JELE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyw2QkFBNkI7QUFTakU7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLE9BQWUsRUFBRSxPQUFpQztJQUN6RSxJQUFJLENBQUM7UUFDSCxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzlCLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBRUQsOEJBQThCO1FBQzlCLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzlCLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdEMsSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLGNBQWMsRUFBRSxDQUFDO2dCQUNoQyxNQUFNLE9BQU8sR0FBRyxHQUFHLFVBQVUsSUFBSSxDQUFDO2dCQUNsQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO29CQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ25ELEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3JDLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQWU7WUFDeEIsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ25DLE9BQU87WUFDUCxJQUFJLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVE7WUFDNUIsT0FBTztTQUNSLENBQUM7UUFFRixFQUFFLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxxREFBcUQ7SUFDdkQsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuLyoqXG4gKiBMb2NhbCBhdWRpdCBsb2dnZXIgZm9yIHNlbnNpdGl2ZSBDTEkgb3BlcmF0aW9ucy5cbiAqIFdyaXRlcyB0aW1lc3RhbXBlZCBlbnRyaWVzIHRvIH4vLnBpcGVsaW5lLW1hbmFnZXIvYXVkaXQubG9nLlxuICogTmV2ZXIgbG9ncyBjcmVkZW50aWFscyBvciB0b2tlbnMg4oCUIG9ubHkgb3BlcmF0aW9uIG1ldGFkYXRhLlxuICovXG5cbmNvbnN0IEFVRElUX0RJUiA9IHBhdGguam9pbihvcy5ob21lZGlyKCksICcucGlwZWxpbmUtbWFuYWdlcicpO1xuY29uc3QgQVVESVRfRklMRSA9IHBhdGguam9pbihBVURJVF9ESVIsICdhdWRpdC5sb2cnKTtcbmNvbnN0IE1BWF9BVURJVF9TSVpFID0gMTAyNCAqIDEwMjQ7IC8vIDFNQiDigJQgcm90YXRlIHdoZW4gZXhjZWVkZWRcblxuaW50ZXJmYWNlIEF1ZGl0RW50cnkge1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgY29tbWFuZDogc3RyaW5nO1xuICB1c2VyPzogc3RyaW5nO1xuICBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKlxuICogTG9nIGEgc2Vuc2l0aXZlIG9wZXJhdGlvbiB0byB0aGUgbG9jYWwgYXVkaXQgZmlsZS5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIG5hbWUgKGUuZy4sICdzdG9yZS10b2tlbicsICdkZXBsb3knLCAnYm9vdHN0cmFwJylcbiAqIEBwYXJhbSBkZXRhaWxzIC0gTm9uLXNlbnNpdGl2ZSBtZXRhZGF0YSBhYm91dCB0aGUgb3BlcmF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdWRpdExvZyhjb21tYW5kOiBzdHJpbmcsIGRldGFpbHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICB0cnkge1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhBVURJVF9ESVIpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoQVVESVRfRElSLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgbW9kZTogMG83MDAgfSk7XG4gICAgfVxuXG4gICAgLy8gUm90YXRlIGlmIGZpbGUgaXMgdG9vIGxhcmdlXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoQVVESVRfRklMRSkpIHtcbiAgICAgIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMoQVVESVRfRklMRSk7XG4gICAgICBpZiAoc3RhdHMuc2l6ZSA+IE1BWF9BVURJVF9TSVpFKSB7XG4gICAgICAgIGNvbnN0IHJvdGF0ZWQgPSBgJHtBVURJVF9GSUxFfS4xYDtcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMocm90YXRlZCkpIGZzLnVubGlua1N5bmMocm90YXRlZCk7XG4gICAgICAgIGZzLnJlbmFtZVN5bmMoQVVESVRfRklMRSwgcm90YXRlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZW50cnk6IEF1ZGl0RW50cnkgPSB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGNvbW1hbmQsXG4gICAgICB1c2VyOiBvcy51c2VySW5mbygpLnVzZXJuYW1lLFxuICAgICAgZGV0YWlscyxcbiAgICB9O1xuXG4gICAgZnMuYXBwZW5kRmlsZVN5bmMoQVVESVRfRklMRSwgSlNPTi5zdHJpbmdpZnkoZW50cnkpICsgJ1xcbicsIHsgbW9kZTogMG82MDAgfSk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIEF1ZGl0IGxvZ2dpbmcgaXMgYmVzdC1lZmZvcnQg4oCUIG5ldmVyIGJsb2NrIHRoZSBDTElcbiAgfVxufVxuIl19
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2F1ZGl0LWxvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUUvQzs7OztHQUlHO0FBRUgsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUMvRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNyRCxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsNkJBQTZCO0FBQ2pFLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLG9FQUFvRTtBQUUzRiwrRUFBK0U7QUFDL0UsU0FBUyxNQUFNO0lBQ2IsTUFBTSxNQUFNLEdBQUcsR0FBRyxVQUFVLElBQUksV0FBVyxFQUFFLENBQUM7SUFDOUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakQsS0FBSyxJQUFJLENBQUMsR0FBRyxXQUFXLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUMxQyxNQUFNLEdBQUcsR0FBRyxHQUFHLFVBQVUsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNqQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxVQUFVLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUNELEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLEdBQUcsVUFBVSxJQUFJLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBU0Q7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLE9BQWUsRUFBRSxPQUFpQztJQUN6RSxJQUFJLENBQUM7UUFDSCxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzlCLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBRUQsMkRBQTJEO1FBQzNELElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksR0FBRyxjQUFjLEVBQUUsQ0FBQztZQUMvRSxNQUFNLEVBQUUsQ0FBQztRQUNYLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBZTtZQUN4QixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDbkMsT0FBTztZQUNQLElBQUksRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUTtZQUM1QixPQUFPO1NBQ1IsQ0FBQztRQUVGLEVBQUUsQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYiwrRUFBK0U7UUFDL0UsMEVBQTBFO1FBQzFFLFVBQVUsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3RyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcHJpbnREZWJ1ZyB9IGZyb20gJy4vb3V0cHV0LXV0aWxzLmpzJztcblxuLyoqXG4gKiBMb2NhbCBhdWRpdCBsb2dnZXIgZm9yIHNlbnNpdGl2ZSBDTEkgb3BlcmF0aW9ucy5cbiAqIFdyaXRlcyB0aW1lc3RhbXBlZCBlbnRyaWVzIHRvIH4vLnBpcGVsaW5lLW1hbmFnZXIvYXVkaXQubG9nLlxuICogTmV2ZXIgbG9ncyBjcmVkZW50aWFscyBvciB0b2tlbnMg4oCUIG9ubHkgb3BlcmF0aW9uIG1ldGFkYXRhLlxuICovXG5cbmNvbnN0IEFVRElUX0RJUiA9IHBhdGguam9pbihvcy5ob21lZGlyKCksICcucGlwZWxpbmUtbWFuYWdlcicpO1xuY29uc3QgQVVESVRfRklMRSA9IHBhdGguam9pbihBVURJVF9ESVIsICdhdWRpdC5sb2cnKTtcbmNvbnN0IE1BWF9BVURJVF9TSVpFID0gMTAyNCAqIDEwMjQ7IC8vIDFNQiDigJQgcm90YXRlIHdoZW4gZXhjZWVkZWRcbmNvbnN0IE1BWF9ST1RBVEVEID0gNTsgLy8ga2VlcCBhdWRpdC5sb2cuMSAuLiAuNSAoaGlzdG9yeSBpc24ndCBsb3N0IG9uIHJlcGVhdGVkIHJvdGF0aW9ucylcblxuLyoqIFNoaWZ0IGF1ZGl0LmxvZy57bn0g4oaSIC57bisxfSAoZHJvcHBpbmcgdGhlIG9sZGVzdCksIHRoZW4gYXVkaXQubG9nIOKGkiAuMS4gKi9cbmZ1bmN0aW9uIHJvdGF0ZSgpOiB2b2lkIHtcbiAgY29uc3Qgb2xkZXN0ID0gYCR7QVVESVRfRklMRX0uJHtNQVhfUk9UQVRFRH1gO1xuICBpZiAoZnMuZXhpc3RzU3luYyhvbGRlc3QpKSBmcy51bmxpbmtTeW5jKG9sZGVzdCk7XG4gIGZvciAobGV0IGkgPSBNQVhfUk9UQVRFRCAtIDE7IGkgPj0gMTsgaS0tKSB7XG4gICAgY29uc3Qgc3JjID0gYCR7QVVESVRfRklMRX0uJHtpfWA7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoc3JjKSkgZnMucmVuYW1lU3luYyhzcmMsIGAke0FVRElUX0ZJTEV9LiR7aSArIDF9YCk7XG4gIH1cbiAgZnMucmVuYW1lU3luYyhBVURJVF9GSUxFLCBgJHtBVURJVF9GSUxFfS4xYCk7XG59XG5cbmludGVyZmFjZSBBdWRpdEVudHJ5IHtcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIGNvbW1hbmQ6IHN0cmluZztcbiAgdXNlcj86IHN0cmluZztcbiAgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIExvZyBhIHNlbnNpdGl2ZSBvcGVyYXRpb24gdG8gdGhlIGxvY2FsIGF1ZGl0IGZpbGUuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCBuYW1lIChlLmcuLCAnc3RvcmUtdG9rZW4nLCAnZGVwbG95JywgJ2Jvb3RzdHJhcCcpXG4gKiBAcGFyYW0gZGV0YWlscyAtIE5vbi1zZW5zaXRpdmUgbWV0YWRhdGEgYWJvdXQgdGhlIG9wZXJhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gYXVkaXRMb2coY29tbWFuZDogc3RyaW5nLCBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoQVVESVRfRElSKSkge1xuICAgICAgZnMubWtkaXJTeW5jKEFVRElUX0RJUiwgeyByZWN1cnNpdmU6IHRydWUsIG1vZGU6IDBvNzAwIH0pO1xuICAgIH1cblxuICAgIC8vIFJvdGF0ZSBpZiBmaWxlIGlzIHRvbyBsYXJnZSAoa2VlcHMgTUFYX1JPVEFURUQgYXJjaGl2ZXMpXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoQVVESVRfRklMRSkgJiYgZnMuc3RhdFN5bmMoQVVESVRfRklMRSkuc2l6ZSA+IE1BWF9BVURJVF9TSVpFKSB7XG4gICAgICByb3RhdGUoKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnRyeTogQXVkaXRFbnRyeSA9IHtcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgY29tbWFuZCxcbiAgICAgIHVzZXI6IG9zLnVzZXJJbmZvKCkudXNlcm5hbWUsXG4gICAgICBkZXRhaWxzLFxuICAgIH07XG5cbiAgICBmcy5hcHBlbmRGaWxlU3luYyhBVURJVF9GSUxFLCBKU09OLnN0cmluZ2lmeShlbnRyeSkgKyAnXFxuJywgeyBtb2RlOiAwbzYwMCB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gQXVkaXQgbG9nZ2luZyBpcyBiZXN0LWVmZm9ydCDigJQgbmV2ZXIgYmxvY2sgdGhlIENMSSDigJQgYnV0IHN1cmZhY2UgdGhlIGZhaWx1cmVcbiAgICAvLyBpbiBkZWJ1ZyBzbyBhIHNpbGVudGx5LXVucmVjb3JkZWQgc2Vuc2l0aXZlIG9wIGlzIGF0IGxlYXN0IGRpYWdub3NhYmxlLlxuICAgIHByaW50RGVidWcoJ0F1ZGl0IGxvZyB3cml0ZSBmYWlsZWQnLCB7IGNvbW1hbmQsIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycikgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"aws-secrets.d.ts","sourceRoot":"","sources":["../../src/utils/aws-secrets.ts"],"names":[],"mappings":"AAcA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAmBD;;;GAGG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CA+Bf;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,MAAM,CAAC,CASjB;AAED,sDAAsD;AACtD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,IAAI,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,cAAc,EACvB,QAAQ,SAAK,GACZ,OAAO,CAAC,aAAa,EAAE,CAAC,CA0B1B"}
1
+ {"version":3,"file":"aws-secrets.d.ts","sourceRoot":"","sources":["../../src/utils/aws-secrets.ts"],"names":[],"mappings":"AAcA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA0BD;;;GAGG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CA+Bf;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,MAAM,CAAC,CASjB;AAED,sDAAsD;AACtD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,IAAI,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,cAAc,EACvB,QAAQ,SAAK,GACZ,OAAO,CAAC,aAAa,EAAE,CAAC,CA0B1B"}
@@ -1,7 +1,7 @@
1
1
  // Copyright 2026 Pipeline Builder Contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  import { SecretsManagerClient, CreateSecretCommand, PutSecretValueCommand, UpdateSecretCommand, DescribeSecretCommand, GetSecretValueCommand, ListSecretsCommand, } from '@aws-sdk/client-secrets-manager';
4
- import { printInfo, printSuccess } from './output-utils.js';
4
+ import { printInfo, printSuccess, printWarning } from './output-utils.js';
5
5
  function createClient(options) {
6
6
  // Leave `credentials` unset so the SDK's standard provider chain resolves them:
7
7
  // environment variables (AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY /
@@ -14,6 +14,12 @@ function createClient(options) {
14
14
  if (options.profile && !process.env.AWS_ACCESS_KEY_ID && !process.env.AWS_PROFILE) {
15
15
  process.env.AWS_PROFILE = options.profile;
16
16
  }
17
+ else if (options.profile && options.profile !== 'default') {
18
+ // The flag was set to a non-default profile but ambient env creds win — surface
19
+ // it so an explicit --profile that silently has no effect isn't a surprise.
20
+ printWarning(`--profile ${options.profile} ignored: existing AWS credentials in the environment ` +
21
+ `(${process.env.AWS_ACCESS_KEY_ID ? 'AWS_ACCESS_KEY_ID' : 'AWS_PROFILE'}) take precedence.`);
22
+ }
17
23
  return new SecretsManagerClient({
18
24
  region: options.region || process.env.AWS_REGION || process.env.CDK_DEFAULT_REGION,
19
25
  });
@@ -112,4 +118,4 @@ export async function listSecrets(namePrefix, options, maxPages = 10) {
112
118
  } while (nextToken && page < maxPages);
113
119
  return out;
114
120
  }
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXNlY3JldHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvYXdzLXNlY3JldHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDckIsa0JBQWtCLEdBQ25CLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQVU1RCxTQUFTLFlBQVksQ0FBQyxPQUF1QjtJQUMzQyxnRkFBZ0Y7SUFDaEYscUVBQXFFO0lBQ3JFLG9FQUFvRTtJQUNwRSwrRUFBK0U7SUFDL0UsK0VBQStFO0lBQy9FLDhFQUE4RTtJQUM5RSw4RUFBOEU7SUFDOUUsNENBQTRDO0lBQzVDLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2xGLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7SUFDNUMsQ0FBQztJQUNELE9BQU8sSUFBSSxvQkFBb0IsQ0FBQztRQUM5QixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQjtLQUNuRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZLENBQ2hDLFVBQWtCLEVBQ2xCLFdBQW1CLEVBQ25CLFdBQW1CLEVBQ25CLE9BQXVCO0lBRXZCLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUVyQyxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxtQkFBbUIsQ0FBQztZQUN4QyxJQUFJLEVBQUUsVUFBVTtZQUNoQixXQUFXLEVBQUUsV0FBVztZQUN4QixZQUFZLEVBQUUsV0FBVztTQUMxQixDQUFDLENBQUMsQ0FBQztRQUNKLFlBQVksQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsZ0ZBQWdGO1FBQ2hGLHlFQUF5RTtRQUN6RSw4RUFBOEU7UUFDOUUsTUFBTSxHQUFHLEdBQUcsS0FBNEMsQ0FBQztRQUN6RCxNQUFNLE1BQU0sR0FBRyxHQUFHLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNsQyxJQUFJLEdBQUcsRUFBRSxJQUFJLEtBQUsseUJBQXlCLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQy9ILFNBQVMsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1lBQ2hELE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLHFCQUFxQixDQUFDO2dCQUMxQyxRQUFRLEVBQUUsVUFBVTtnQkFDcEIsWUFBWSxFQUFFLFdBQVc7YUFDMUIsQ0FBQyxDQUFDLENBQUM7WUFDSixNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxtQkFBbUIsQ0FBQztnQkFDeEMsUUFBUSxFQUFFLFVBQVU7Z0JBQ3BCLFdBQVcsRUFBRSxXQUFXO2FBQ3pCLENBQUMsQ0FBQyxDQUFDO1lBQ0osWUFBWSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDcEQsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZLENBQ2hDLFVBQWtCLEVBQ2xCLE9BQXVCO0lBRXZCLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyQyxNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxxQkFBcUIsQ0FBQztRQUMzRCxRQUFRLEVBQUUsVUFBVTtLQUNyQixDQUFDLENBQUMsQ0FBQztJQUNKLE9BQU8sUUFBUSxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUM7QUFDckMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjLENBQ2xDLFVBQWtCLEVBQ2xCLE9BQXVCO0lBRXZCLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyQyxNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxxQkFBcUIsQ0FBQztRQUMzRCxRQUFRLEVBQUUsVUFBVTtLQUNyQixDQUFDLENBQUMsQ0FBQztJQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLFVBQVUsWUFBWSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDLFlBQVksQ0FBQztBQUMvQixDQUFDO0FBVUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFdBQVcsQ0FDL0IsVUFBOEIsRUFDOUIsT0FBdUIsRUFDdkIsUUFBUSxHQUFHLEVBQUU7SUFFYixNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsTUFBTSxHQUFHLEdBQW9CLEVBQUUsQ0FBQztJQUNoQyxJQUFJLFNBQTZCLENBQUM7SUFDbEMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsR0FBRyxDQUFDO1FBQ0YsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksa0JBQWtCLENBQUM7WUFDeEQsVUFBVSxFQUFFLEdBQUc7WUFDZixTQUFTLEVBQUUsU0FBUztZQUNwQixHQUFHLENBQUMsVUFBVSxJQUFJO2dCQUNoQixPQUFPLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQzthQUNqRCxDQUFDO1NBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSixLQUFLLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxVQUFVLElBQUksRUFBRSxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRztnQkFBRSxTQUFTO1lBQ2hDLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ1AsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO2dCQUNaLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRztnQkFDVixXQUFXLEVBQUUsQ0FBQyxDQUFDLFdBQVc7Z0JBQzFCLGVBQWUsRUFBRSxDQUFDLENBQUMsZUFBZTthQUNuQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDL0IsSUFBSSxFQUFFLENBQUM7SUFDVCxDQUFDLFFBQVEsU0FBUyxJQUFJLElBQUksR0FBRyxRQUFRLEVBQUU7SUFDdkMsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7XG4gIFNlY3JldHNNYW5hZ2VyQ2xpZW50LFxuICBDcmVhdGVTZWNyZXRDb21tYW5kLFxuICBQdXRTZWNyZXRWYWx1ZUNvbW1hbmQsXG4gIFVwZGF0ZVNlY3JldENvbW1hbmQsXG4gIERlc2NyaWJlU2VjcmV0Q29tbWFuZCxcbiAgR2V0U2VjcmV0VmFsdWVDb21tYW5kLFxuICBMaXN0U2VjcmV0c0NvbW1hbmQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zZWNyZXRzLW1hbmFnZXInO1xuaW1wb3J0IHsgcHJpbnRJbmZvLCBwcmludFN1Y2Nlc3MgfSBmcm9tICcuL291dHB1dC11dGlscy5qcyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgU2VjcmV0cyBNYW5hZ2VyIG9wZXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjcmV0c09wdGlvbnMge1xuICByZWdpb24/OiBzdHJpbmc7XG4gIHByb2ZpbGU/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNsaWVudChvcHRpb25zOiBTZWNyZXRzT3B0aW9ucyk6IFNlY3JldHNNYW5hZ2VyQ2xpZW50IHtcbiAgLy8gTGVhdmUgYGNyZWRlbnRpYWxzYCB1bnNldCBzbyB0aGUgU0RLJ3Mgc3RhbmRhcmQgcHJvdmlkZXIgY2hhaW4gcmVzb2x2ZXMgdGhlbTpcbiAgLy8gZW52aXJvbm1lbnQgdmFyaWFibGVzIChBV1NfQUNDRVNTX0tFWV9JRCAvIEFXU19TRUNSRVRfQUNDRVNTX0tFWSAvXG4gIC8vIEFXU19TRVNTSU9OX1RPS0VOKSB0YWtlIHByZWNlZGVuY2Ugd2hlbiBzZXQsIG90aGVyd2lzZSB0aGUgc2hhcmVkXG4gIC8vIH4vLmF3cy9jb25maWcgKyB+Ly5hd3MvY3JlZGVudGlhbHMgZmlsZXMgKGhvbm9yaW5nIEFXU19QUk9GSUxFKS4gQW4gZXhwbGljaXRcbiAgLy8gLS1wcm9maWxlIHNlbGVjdHMgd2hpY2ggc2hhcmVkIHByb2ZpbGUgdG8gcmVhZCDigJQgYnV0IG9ubHkgd2hlbiBlbnYtdmFyIGNyZWRzXG4gIC8vIGFuZCBhbiBpbmhlcml0ZWQgQVdTX1BST0ZJTEUgYXJlbid0IGFscmVhZHkgcHJlc2VudCwgc28gZW52IHZhcnMgYWx3YXlzIHdpblxuICAvLyBhbmQgd2UgbmV2ZXIgY2xvYmJlciB0aGUgY2FsbGVyJ3MgZW52aXJvbm1lbnQuIFJlZ2lvbiByZXNvbHZlcyB0aGUgc2FtZSB3YXlcbiAgLy8gKGZsYWcg4oaSIEFXU19SRUdJT04gLyBDREtfREVGQVVMVF9SRUdJT04pLlxuICBpZiAob3B0aW9ucy5wcm9maWxlICYmICFwcm9jZXNzLmVudi5BV1NfQUNDRVNTX0tFWV9JRCAmJiAhcHJvY2Vzcy5lbnYuQVdTX1BST0ZJTEUpIHtcbiAgICBwcm9jZXNzLmVudi5BV1NfUFJPRklMRSA9IG9wdGlvbnMucHJvZmlsZTtcbiAgfVxuICByZXR1cm4gbmV3IFNlY3JldHNNYW5hZ2VyQ2xpZW50KHtcbiAgICByZWdpb246IG9wdGlvbnMucmVnaW9uIHx8IHByb2Nlc3MuZW52LkFXU19SRUdJT04gfHwgcHJvY2Vzcy5lbnYuQ0RLX0RFRkFVTFRfUkVHSU9OLFxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgb3IgdXBkYXRlIGEgc2VjcmV0IGluIEFXUyBTZWNyZXRzIE1hbmFnZXIuXG4gKiBUcmllcyBjcmVhdGUgZmlyc3Q7IGlmIGl0IGV4aXN0cywgdXBkYXRlcyB0aGUgdmFsdWUgYW5kIGRlc2NyaXB0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBzZXJ0U2VjcmV0KFxuICBzZWNyZXROYW1lOiBzdHJpbmcsXG4gIHNlY3JldFZhbHVlOiBzdHJpbmcsXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFNlY3JldHNPcHRpb25zLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNsaWVudCA9IGNyZWF0ZUNsaWVudChvcHRpb25zKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGNsaWVudC5zZW5kKG5ldyBDcmVhdGVTZWNyZXRDb21tYW5kKHtcbiAgICAgIE5hbWU6IHNlY3JldE5hbWUsXG4gICAgICBEZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgICBTZWNyZXRTdHJpbmc6IHNlY3JldFZhbHVlLFxuICAgIH0pKTtcbiAgICBwcmludFN1Y2Nlc3MoJ1NlY3JldCBjcmVhdGVkIGluIFNlY3JldHMgTWFuYWdlcicpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIEFXUyBTREsgdjMgY2FycmllcyB0aGUgbW9kZWxlZCBleGNlcHRpb24gdHlwZSBvbiBgZXJyb3IubmFtZWA7IGBtZXNzYWdlYCBkb2VzXG4gICAgLy8gTk9UIHJlbGlhYmx5IGNvbnRhaW4gaXQsIHNvIGEgbWVzc2FnZS1vbmx5IGNoZWNrIHdvdWxkIG1pcy1jbGFzc2lmeSBhblxuICAgIC8vIGFscmVhZHktZXhpc3RzIGVycm9yIGFzIGZhdGFsIGFuZCByZXRocm93IGluc3RlYWQgb2YgdXBkYXRpbmcuIFByZWZlciBuYW1lLlxuICAgIGNvbnN0IGVyciA9IGVycm9yIGFzIHsgbmFtZT86IHN0cmluZzsgbWVzc2FnZT86IHN0cmluZyB9O1xuICAgIGNvbnN0IGVyck1zZyA9IGVycj8ubWVzc2FnZSA/PyAnJztcbiAgICBpZiAoZXJyPy5uYW1lID09PSAnUmVzb3VyY2VFeGlzdHNFeGNlcHRpb24nIHx8IGVyck1zZy5pbmNsdWRlcygnUmVzb3VyY2VFeGlzdHNFeGNlcHRpb24nKSB8fCBlcnJNc2cuaW5jbHVkZXMoJ2FscmVhZHkgZXhpc3RzJykpIHtcbiAgICAgIHByaW50SW5mbygnU2VjcmV0IGFscmVhZHkgZXhpc3RzLCB1cGRhdGluZy4uLicpO1xuICAgICAgYXdhaXQgY2xpZW50LnNlbmQobmV3IFB1dFNlY3JldFZhbHVlQ29tbWFuZCh7XG4gICAgICAgIFNlY3JldElkOiBzZWNyZXROYW1lLFxuICAgICAgICBTZWNyZXRTdHJpbmc6IHNlY3JldFZhbHVlLFxuICAgICAgfSkpO1xuICAgICAgYXdhaXQgY2xpZW50LnNlbmQobmV3IFVwZGF0ZVNlY3JldENvbW1hbmQoe1xuICAgICAgICBTZWNyZXRJZDogc2VjcmV0TmFtZSxcbiAgICAgICAgRGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLFxuICAgICAgfSkpO1xuICAgICAgcHJpbnRTdWNjZXNzKCdTZWNyZXQgdXBkYXRlZCBpbiBTZWNyZXRzIE1hbmFnZXInKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSBBUk4gb2YgYSBzZWNyZXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRTZWNyZXRBcm4oXG4gIHNlY3JldE5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogU2VjcmV0c09wdGlvbnMsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBjbGllbnQgPSBjcmVhdGVDbGllbnQob3B0aW9ucyk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlU2VjcmV0Q29tbWFuZCh7XG4gICAgU2VjcmV0SWQ6IHNlY3JldE5hbWUsXG4gIH0pKTtcbiAgcmV0dXJuIHJlc3BvbnNlLkFSTiA/PyAnKHVua25vd24pJztcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIG9mIGEgc2VjcmV0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U2VjcmV0VmFsdWUoXG4gIHNlY3JldE5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogU2VjcmV0c09wdGlvbnMsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBjbGllbnQgPSBjcmVhdGVDbGllbnQob3B0aW9ucyk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IEdldFNlY3JldFZhbHVlQ29tbWFuZCh7XG4gICAgU2VjcmV0SWQ6IHNlY3JldE5hbWUsXG4gIH0pKTtcbiAgaWYgKCFyZXNwb25zZS5TZWNyZXRTdHJpbmcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNlY3JldCBcIiR7c2VjcmV0TmFtZX1cIiBpcyBlbXB0eWApO1xuICB9XG4gIHJldHVybiByZXNwb25zZS5TZWNyZXRTdHJpbmc7XG59XG5cbi8qKiBNaW5pbWFsIHNlY3JldCBzdW1tYXJ5IHJldHVybmVkIGJ5IGxpc3RTZWNyZXRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRTdW1tYXJ5IHtcbiAgbmFtZTogc3RyaW5nO1xuICBhcm46IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxhc3RDaGFuZ2VkRGF0ZT86IERhdGU7XG59XG5cbi8qKlxuICogTGlzdCBzZWNyZXRzIG1hdGNoaW5nIGEgbmFtZSBwcmVmaXguIFBhZ2VzIGludGVybmFsbHkgdXAgdG8gYG1heFBhZ2VzYCAoZGVmYXVsdCAxMCkuXG4gKlxuICogQHBhcmFtIG5hbWVQcmVmaXggLSBGaWx0ZXIgYnkgYE5hbWVgIHByZWZpeCAoY2FzZS1zZW5zaXRpdmUpLiBGYWxscyBiYWNrIHRvXG4gKiAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBhbGwgc2VjcmV0cyB3aGVuIG9taXR0ZWQgKHVzZSBzcGFyaW5nbHkpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFNlY3JldHMoXG4gIG5hbWVQcmVmaXg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgb3B0aW9uczogU2VjcmV0c09wdGlvbnMsXG4gIG1heFBhZ2VzID0gMTAsXG4pOiBQcm9taXNlPFNlY3JldFN1bW1hcnlbXT4ge1xuICBjb25zdCBjbGllbnQgPSBjcmVhdGVDbGllbnQob3B0aW9ucyk7XG4gIGNvbnN0IG91dDogU2VjcmV0U3VtbWFyeVtdID0gW107XG4gIGxldCBuZXh0VG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGV0IHBhZ2UgPSAwO1xuICBkbyB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuc2VuZChuZXcgTGlzdFNlY3JldHNDb21tYW5kKHtcbiAgICAgIE1heFJlc3VsdHM6IDEwMCxcbiAgICAgIE5leHRUb2tlbjogbmV4dFRva2VuLFxuICAgICAgLi4uKG5hbWVQcmVmaXggJiYge1xuICAgICAgICBGaWx0ZXJzOiBbeyBLZXk6ICduYW1lJywgVmFsdWVzOiBbbmFtZVByZWZpeF0gfV0sXG4gICAgICB9KSxcbiAgICB9KSk7XG4gICAgZm9yIChjb25zdCBzIG9mIHJlc3BvbnNlLlNlY3JldExpc3QgPz8gW10pIHtcbiAgICAgIGlmICghcy5OYW1lIHx8ICFzLkFSTikgY29udGludWU7XG4gICAgICBvdXQucHVzaCh7XG4gICAgICAgIG5hbWU6IHMuTmFtZSxcbiAgICAgICAgYXJuOiBzLkFSTixcbiAgICAgICAgZGVzY3JpcHRpb246IHMuRGVzY3JpcHRpb24sXG4gICAgICAgIGxhc3RDaGFuZ2VkRGF0ZTogcy5MYXN0Q2hhbmdlZERhdGUsXG4gICAgICB9KTtcbiAgICB9XG4gICAgbmV4dFRva2VuID0gcmVzcG9uc2UuTmV4dFRva2VuO1xuICAgIHBhZ2UrKztcbiAgfSB3aGlsZSAobmV4dFRva2VuICYmIHBhZ2UgPCBtYXhQYWdlcyk7XG4gIHJldHVybiBvdXQ7XG59XG4iXX0=
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXNlY3JldHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvYXdzLXNlY3JldHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDckIsa0JBQWtCLEdBQ25CLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFVMUUsU0FBUyxZQUFZLENBQUMsT0FBdUI7SUFDM0MsZ0ZBQWdGO0lBQ2hGLHFFQUFxRTtJQUNyRSxvRUFBb0U7SUFDcEUsK0VBQStFO0lBQy9FLCtFQUErRTtJQUMvRSw4RUFBOEU7SUFDOUUsOEVBQThFO0lBQzlFLDRDQUE0QztJQUM1QyxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsRixPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQzVDLENBQUM7U0FBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM1RCxnRkFBZ0Y7UUFDaEYsNEVBQTRFO1FBQzVFLFlBQVksQ0FDVixhQUFhLE9BQU8sQ0FBQyxPQUFPLHdEQUF3RDtZQUNwRixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxhQUFhLG9CQUFvQixDQUM1RixDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sSUFBSSxvQkFB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YixNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsTUFBTSxHQUFHLEdBQW9CLEVBQUUsQ0FBQztJQUNoQyxJQUFJLFNBQTZCLENBQUM7SUFDbEMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsR0FBRyxDQUFDO1FBQ0YsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksa0JBQWtCLENBQUM7WUFDeEQsVUFBVSxFQUFFLEdBQUc7WUFDZixTQUFTLEVBQUUsU0FBUztZQUNwQixHQUFHLENBQUMsVUFBVSxJQUFJO2dCQUNoQixPQUFPLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQzthQUNqRCxDQUFDO1NBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSixLQUFLLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxVQUFVLElBQUksRUFBRSxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRztnQkFBRSxTQUFTO1lBQ2hDLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ1AsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO2dCQUNaLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRztnQkFDVixXQUFXLEVBQUUsQ0FBQyxDQUFDLFdBQVc7Z0JBQzFCLGVBQWUsRUFBRSxDQUFDLENBQUMsZUFBZTthQUNuQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDL0IsSUFBSSxFQUFFLENBQUM7SUFDVCxDQUFDLFFBQVEsU0FBUyxJQUFJLElBQUksR0FBRyxRQUFRLEVBQUU7SUFDdkMsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7XG4gIFNlY3JldHNNYW5hZ2VyQ2xpZW50LFxuICBDcmVhdGVTZWNyZXRDb21tYW5kLFxuICBQdXRTZWNyZXRWYWx1ZUNvbW1hbmQsXG4gIFVwZGF0ZVNlY3JldENvbW1hbmQsXG4gIERlc2NyaWJlU2VjcmV0Q29tbWFuZCxcbiAgR2V0U2VjcmV0VmFsdWVDb21tYW5kLFxuICBMaXN0U2VjcmV0c0NvbW1hbmQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zZWNyZXRzLW1hbmFnZXInO1xuaW1wb3J0IHsgcHJpbnRJbmZvLCBwcmludFN1Y2Nlc3MsIHByaW50V2FybmluZyB9IGZyb20gJy4vb3V0cHV0LXV0aWxzLmpzJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciBTZWNyZXRzIE1hbmFnZXIgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRzT3B0aW9ucyB7XG4gIHJlZ2lvbj86IHN0cmluZztcbiAgcHJvZmlsZT86IHN0cmluZztcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2xpZW50KG9wdGlvbnM6IFNlY3JldHNPcHRpb25zKTogU2VjcmV0c01hbmFnZXJDbGllbnQge1xuICAvLyBMZWF2ZSBgY3JlZGVudGlhbHNgIHVuc2V0IHNvIHRoZSBTREsncyBzdGFuZGFyZCBwcm92aWRlciBjaGFpbiByZXNvbHZlcyB0aGVtOlxuICAvLyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKEFXU19BQ0NFU1NfS0VZX0lEIC8gQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZIC9cbiAgLy8gQVdTX1NFU1NJT05fVE9LRU4pIHRha2UgcHJlY2VkZW5jZSB3aGVuIHNldCwgb3RoZXJ3aXNlIHRoZSBzaGFyZWRcbiAgLy8gfi8uYXdzL2NvbmZpZyArIH4vLmF3cy9jcmVkZW50aWFscyBmaWxlcyAoaG9ub3JpbmcgQVdTX1BST0ZJTEUpLiBBbiBleHBsaWNpdFxuICAvLyAtLXByb2ZpbGUgc2VsZWN0cyB3aGljaCBzaGFyZWQgcHJvZmlsZSB0byByZWFkIOKAlCBidXQgb25seSB3aGVuIGVudi12YXIgY3JlZHNcbiAgLy8gYW5kIGFuIGluaGVyaXRlZCBBV1NfUFJPRklMRSBhcmVuJ3QgYWxyZWFkeSBwcmVzZW50LCBzbyBlbnYgdmFycyBhbHdheXMgd2luXG4gIC8vIGFuZCB3ZSBuZXZlciBjbG9iYmVyIHRoZSBjYWxsZXIncyBlbnZpcm9ubWVudC4gUmVnaW9uIHJlc29sdmVzIHRoZSBzYW1lIHdheVxuICAvLyAoZmxhZyDihpIgQVdTX1JFR0lPTiAvIENES19ERUZBVUxUX1JFR0lPTikuXG4gIGlmIChvcHRpb25zLnByb2ZpbGUgJiYgIXByb2Nlc3MuZW52LkFXU19BQ0NFU1NfS0VZX0lEICYmICFwcm9jZXNzLmVudi5BV1NfUFJPRklMRSkge1xuICAgIHByb2Nlc3MuZW52LkFXU19QUk9GSUxFID0gb3B0aW9ucy5wcm9maWxlO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMucHJvZmlsZSAmJiBvcHRpb25zLnByb2ZpbGUgIT09ICdkZWZhdWx0Jykge1xuICAgIC8vIFRoZSBmbGFnIHdhcyBzZXQgdG8gYSBub24tZGVmYXVsdCBwcm9maWxlIGJ1dCBhbWJpZW50IGVudiBjcmVkcyB3aW4g4oCUIHN1cmZhY2VcbiAgICAvLyBpdCBzbyBhbiBleHBsaWNpdCAtLXByb2ZpbGUgdGhhdCBzaWxlbnRseSBoYXMgbm8gZWZmZWN0IGlzbid0IGEgc3VycHJpc2UuXG4gICAgcHJpbnRXYXJuaW5nKFxuICAgICAgYC0tcHJvZmlsZSAke29wdGlvbnMucHJvZmlsZX0gaWdub3JlZDogZXhpc3RpbmcgQVdTIGNyZWRlbnRpYWxzIGluIHRoZSBlbnZpcm9ubWVudCBgICtcbiAgICAgIGAoJHtwcm9jZXNzLmVudi5BV1NfQUNDRVNTX0tFWV9JRCA/ICdBV1NfQUNDRVNTX0tFWV9JRCcgOiAnQVdTX1BST0ZJTEUnfSkgdGFrZSBwcmVjZWRlbmNlLmAsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbmV3IFNlY3JldHNNYW5hZ2VyQ2xpZW50KHtcbiAgICByZWdpb246IG9wdGlvbnMucmVnaW9uIHx8IHByb2Nlc3MuZW52LkFXU19SRUdJT04gfHwgcHJvY2Vzcy5lbnYuQ0RLX0RFRkFVTFRfUkVHSU9OLFxuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgb3IgdXBkYXRlIGEgc2VjcmV0IGluIEFXUyBTZWNyZXRzIE1hbmFnZXIuXG4gKiBUcmllcyBjcmVhdGUgZmlyc3Q7IGlmIGl0IGV4aXN0cywgdXBkYXRlcyB0aGUgdmFsdWUgYW5kIGRlc2NyaXB0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBzZXJ0U2VjcmV0KFxuICBzZWNyZXROYW1lOiBzdHJpbmcsXG4gIHNlY3JldFZhbHVlOiBzdHJpbmcsXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFNlY3JldHNPcHRpb25zLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNsaWVudCA9IGNyZWF0ZUNsaWVudChvcHRpb25zKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGNsaWVudC5zZW5kKG5ldyBDcmVhdGVTZWNyZXRDb21tYW5kKHtcbiAgICAgIE5hbWU6IHNlY3JldE5hbWUsXG4gICAgICBEZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgICBTZWNyZXRTdHJpbmc6IHNlY3JldFZhbHVlLFxuICAgIH0pKTtcbiAgICBwcmludFN1Y2Nlc3MoJ1NlY3JldCBjcmVhdGVkIGluIFNlY3JldHMgTWFuYWdlcicpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIEFXUyBTREsgdjMgY2FycmllcyB0aGUgbW9kZWxlZCBleGNlcHRpb24gdHlwZSBvbiBgZXJyb3IubmFtZWA7IGBtZXNzYWdlYCBkb2VzXG4gICAgLy8gTk9UIHJlbGlhYmx5IGNvbnRhaW4gaXQsIHNvIGEgbWVzc2FnZS1vbmx5IGNoZWNrIHdvdWxkIG1pcy1jbGFzc2lmeSBhblxuICAgIC8vIGFscmVhZHktZXhpc3RzIGVycm9yIGFzIGZhdGFsIGFuZCByZXRocm93IGluc3RlYWQgb2YgdXBkYXRpbmcuIFByZWZlciBuYW1lLlxuICAgIGNvbnN0IGVyciA9IGVycm9yIGFzIHsgbmFtZT86IHN0cmluZzsgbWVzc2FnZT86IHN0cmluZyB9O1xuICAgIGNvbnN0IGVyck1zZyA9IGVycj8ubWVzc2FnZSA/PyAnJztcbiAgICBpZiAoZXJyPy5uYW1lID09PSAnUmVzb3VyY2VFeGlzdHNFeGNlcHRpb24nIHx8IGVyck1zZy5pbmNsdWRlcygnUmVzb3VyY2VFeGlzdHNFeGNlcHRpb24nKSB8fCBlcnJNc2cuaW5jbHVkZXMoJ2FscmVhZHkgZXhpc3RzJykpIHtcbiAgICAgIHByaW50SW5mbygnU2VjcmV0IGFscmVhZHkgZXhpc3RzLCB1cGRhdGluZy4uLicpO1xuICAgICAgYXdhaXQgY2xpZW50LnNlbmQobmV3IFB1dFNlY3JldFZhbHVlQ29tbWFuZCh7XG4gICAgICAgIFNlY3JldElkOiBzZWNyZXROYW1lLFxuICAgICAgICBTZWNyZXRTdHJpbmc6IHNlY3JldFZhbHVlLFxuICAgICAgfSkpO1xuICAgICAgYXdhaXQgY2xpZW50LnNlbmQobmV3IFVwZGF0ZVNlY3JldENvbW1hbmQoe1xuICAgICAgICBTZWNyZXRJZDogc2VjcmV0TmFtZSxcbiAgICAgICAgRGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLFxuICAgICAgfSkpO1xuICAgICAgcHJpbnRTdWNjZXNzKCdTZWNyZXQgdXBkYXRlZCBpbiBTZWNyZXRzIE1hbmFnZXInKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSBBUk4gb2YgYSBzZWNyZXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRTZWNyZXRBcm4oXG4gIHNlY3JldE5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogU2VjcmV0c09wdGlvbnMsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBjbGllbnQgPSBjcmVhdGVDbGllbnQob3B0aW9ucyk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlU2VjcmV0Q29tbWFuZCh7XG4gICAgU2VjcmV0SWQ6IHNlY3JldE5hbWUsXG4gIH0pKTtcbiAgcmV0dXJuIHJlc3BvbnNlLkFSTiA/PyAnKHVua25vd24pJztcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIG9mIGEgc2VjcmV0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U2VjcmV0VmFsdWUoXG4gIHNlY3JldE5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogU2VjcmV0c09wdGlvbnMsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBjbGllbnQgPSBjcmVhdGVDbGllbnQob3B0aW9ucyk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IEdldFNlY3JldFZhbHVlQ29tbWFuZCh7XG4gICAgU2VjcmV0SWQ6IHNlY3JldE5hbWUsXG4gIH0pKTtcbiAgaWYgKCFyZXNwb25zZS5TZWNyZXRTdHJpbmcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNlY3JldCBcIiR7c2VjcmV0TmFtZX1cIiBpcyBlbXB0eWApO1xuICB9XG4gIHJldHVybiByZXNwb25zZS5TZWNyZXRTdHJpbmc7XG59XG5cbi8qKiBNaW5pbWFsIHNlY3JldCBzdW1tYXJ5IHJldHVybmVkIGJ5IGxpc3RTZWNyZXRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRTdW1tYXJ5IHtcbiAgbmFtZTogc3RyaW5nO1xuICBhcm46IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxhc3RDaGFuZ2VkRGF0ZT86IERhdGU7XG59XG5cbi8qKlxuICogTGlzdCBzZWNyZXRzIG1hdGNoaW5nIGEgbmFtZSBwcmVmaXguIFBhZ2VzIGludGVybmFsbHkgdXAgdG8gYG1heFBhZ2VzYCAoZGVmYXVsdCAxMCkuXG4gKlxuICogQHBhcmFtIG5hbWVQcmVmaXggLSBGaWx0ZXIgYnkgYE5hbWVgIHByZWZpeCAoY2FzZS1zZW5zaXRpdmUpLiBGYWxscyBiYWNrIHRvXG4gKiAgICAgICAgICAgICAgICAgICAgbGlzdGluZyBhbGwgc2VjcmV0cyB3aGVuIG9taXR0ZWQgKHVzZSBzcGFyaW5nbHkpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFNlY3JldHMoXG4gIG5hbWVQcmVmaXg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgb3B0aW9uczogU2VjcmV0c09wdGlvbnMsXG4gIG1heFBhZ2VzID0gMTAsXG4pOiBQcm9taXNlPFNlY3JldFN1bW1hcnlbXT4ge1xuICBjb25zdCBjbGllbnQgPSBjcmVhdGVDbGllbnQob3B0aW9ucyk7XG4gIGNvbnN0IG91dDogU2VjcmV0U3VtbWFyeVtdID0gW107XG4gIGxldCBuZXh0VG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGV0IHBhZ2UgPSAwO1xuICBkbyB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuc2VuZChuZXcgTGlzdFNlY3JldHNDb21tYW5kKHtcbiAgICAgIE1heFJlc3VsdHM6IDEwMCxcbiAgICAgIE5leHRUb2tlbjogbmV4dFRva2VuLFxuICAgICAgLi4uKG5hbWVQcmVmaXggJiYge1xuICAgICAgICBGaWx0ZXJzOiBbeyBLZXk6ICduYW1lJywgVmFsdWVzOiBbbmFtZVByZWZpeF0gfV0sXG4gICAgICB9KSxcbiAgICB9KSk7XG4gICAgZm9yIChjb25zdCBzIG9mIHJlc3BvbnNlLlNlY3JldExpc3QgPz8gW10pIHtcbiAgICAgIGlmICghcy5OYW1lIHx8ICFzLkFSTikgY29udGludWU7XG4gICAgICBvdXQucHVzaCh7XG4gICAgICAgIG5hbWU6IHMuTmFtZSxcbiAgICAgICAgYXJuOiBzLkFSTixcbiAgICAgICAgZGVzY3JpcHRpb246IHMuRGVzY3JpcHRpb24sXG4gICAgICAgIGxhc3RDaGFuZ2VkRGF0ZTogcy5MYXN0Q2hhbmdlZERhdGUsXG4gICAgICB9KTtcbiAgICB9XG4gICAgbmV4dFRva2VuID0gcmVzcG9uc2UuTmV4dFRva2VuO1xuICAgIHBhZ2UrKztcbiAgfSB3aGlsZSAobmV4dFRva2VuICYmIHBhZ2UgPCBtYXhQYWdlcyk7XG4gIHJldHVybiBvdXQ7XG59XG4iXX0=
@@ -12,10 +12,6 @@ export type { Config };
12
12
  * Auth token MUST come from PLATFORM_TOKEN env var (never from config file).
13
13
  */
14
14
  export declare function getConfig(): Config;
15
- /**
16
- * Return a copy of `config` with SSL verification disabled.
17
- */
18
- export declare function withSSLDisabled(config: Config): Config;
19
15
  /**
20
16
  * Load configuration, optionally disabling SSL based on command options.
21
17
  * Replaces the repeated pattern:
@@ -1 +1 @@
1
- {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAKhD,YAAY,EAAE,MAAM,EAAE,CAAC;AA4CvB;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAyDlC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAG7E"}
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAKhD,YAAY,EAAE,MAAM,EAAE,CAAC;AA4CvB;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAyDlC;AAaD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAG7E"}
@@ -111,9 +111,10 @@ export function getConfig() {
111
111
  };
112
112
  }
113
113
  /**
114
- * Return a copy of `config` with SSL verification disabled.
114
+ * Return a copy of `config` with SSL verification disabled. Module-private — the
115
+ * only caller is `getConfigWithOptions` below.
115
116
  */
116
- export function withSSLDisabled(config) {
117
+ function withSSLDisabled(config) {
117
118
  return {
118
119
  ...config,
119
120
  api: { ...config.api, rejectUnauthorized: false },
@@ -128,4 +129,4 @@ export function getConfigWithOptions(options) {
128
129
  const config = getConfig();
129
130
  return options.verifySsl === false ? withSSLDisabled(config) : config;
130
131
  }
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLWxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jb25maWctbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RSxPQUFPLEVBQWUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRCwwREFBMEQ7QUFDMUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBSS9EOztHQUVHO0FBQ0gsTUFBTSxhQUFhLEdBQXlCO0lBQzFDLEdBQUcsRUFBRTtRQUNILE9BQU8sRUFBRSx3QkFBd0I7UUFDakMsT0FBTyxFQUFFLE1BQU07UUFDZixXQUFXLEVBQUUsZUFBZTtRQUM1QixlQUFlLEVBQUUsZ0JBQWdCO1FBQ2pDLFNBQVMsRUFBRSxhQUFhO1FBQ3hCLGFBQWEsRUFBRSxjQUFjO1FBQzdCLGVBQWUsRUFBRSxvQkFBb0I7UUFDckMsa0JBQWtCLEVBQUUsSUFBSTtLQUN6QjtDQUNGLENBQUM7QUFFRiw0REFBNEQ7QUFDNUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUVwRjs7O0dBR0c7QUFDSCxT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RyxTQUFTLEVBQUUsQ0FBQztJQUMzQixPQUFPLE9BQU8sQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUN4RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tICd5YW1sJztcbmltcG9ydCB7IHByaW50RGVidWcsIHByaW50RXJyb3IsIHByaW50V2FybmluZyB9IGZyb20gJy4vb3V0cHV0LXV0aWxzLmpzJztcbmltcG9ydCB7IHR5cGUgQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXguanMnO1xuXG4vLyBFU00gaGFzIG5vIF9fZGlybmFtZTsgZGVyaXZlIGl0IGZyb20gdGhpcyBtb2R1bGUncyBVUkwuXG5jb25zdCBfX2Rpcm5hbWUgPSBwYXRoLmRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcblxuZXhwb3J0IHR5cGUgeyBDb25maWcgfTtcblxuLyoqXG4gKiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24g4oCUIEFQSSBlbmRwb2ludCBwYXRocyBhbmQgY29ubmVjdGlvbiBzZXR0aW5ncy5cbiAqL1xuY29uc3QgZGVmYXVsdENvbmZpZzogT21pdDxDb25maWcsICdhdXRoJz4gPSB7XG4gIGFwaToge1xuICAgIGJhc2VVcmw6ICdodHRwczovL2xvY2FsaG9zdDo4NDQzJyxcbiAgICB0aW1lb3V0OiAzMF8wMDAsXG4gICAgcGlwZWxpbmVVcmw6ICcvYXBpL3BpcGVsaW5lJyxcbiAgICBwaXBlbGluZUxpc3RVcmw6ICcvYXBpL3BpcGVsaW5lcycsXG4gICAgcGx1Z2luVXJsOiAnL2FwaS9wbHVnaW4nLFxuICAgIHBsdWdpbkxpc3RVcmw6ICcvYXBpL3BsdWdpbnMnLFxuICAgIHBsdWdpblVwbG9hZFVybDogJy9hcGkvcGx1Z2luL3VwbG9hZCcsXG4gICAgcmVqZWN0VW5hdXRob3JpemVkOiB0cnVlLFxuICB9LFxufTtcblxuLyoqIFVzZXIgY29uZmlnIGZpbGUgcGF0aDogfi8ucGlwZWxpbmUtbWFuYWdlci9jb25maWcueW1sICovXG5jb25zdCBVU0VSX0NPTkZJR19QQVRIID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy5waXBlbGluZS1tYW5hZ2VyJywgJ2NvbmZpZy55bWwnKTtcblxuLyoqXG4gKiBMb2FkIGEgWUFNTCBjb25maWcgZmlsZSBhbmQgbWVyZ2UgaXRzIGBhcGlgIHNlY3Rpb24gaW50byB0aGUgY29uZmlnLlxuICogUmV0dXJucyB0aGUgbWVyZ2VkIGNvbmZpZyBvciB0aGUgb3JpZ2luYWwgaWYgZmlsZSBkb2Vzbid0IGV4aXN0IG9yIGZhaWxzLlxuICovXG5mdW5jdGlvbiBsb2FkQ29uZmlnRmlsZShmaWxlUGF0aDogc3RyaW5nLCBjb25maWc6IE9taXQ8Q29uZmlnLCAnYXV0aCc+KTogT21pdDxDb25maWcsICdhdXRoJz4ge1xuICBpZiAoIWZzLmV4aXN0c1N5bmMoZmlsZVBhdGgpKSByZXR1cm4gY29uZmlnO1xuXG4gIHRyeSB7XG4gICAgcHJpbnREZWJ1ZygnTG9hZGluZyBjb25maWd1cmF0aW9uJywgeyBwYXRoOiBmaWxlUGF0aCB9KTtcbiAgICBjb25zdCBwYXJzZWQgPSB5YW1sLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0Zi04JykpO1xuICAgIGlmIChwYXJzZWQ/LmF1dGgpIHtcbiAgICAgIHByaW50V2FybmluZygnQXV0aCBzZWN0aW9uIGluIGNvbmZpZyBmaWxlIGlzIGlnbm9yZWQg4oCUIHVzZSBQTEFURk9STV9UT0tFTiBlbnYgdmFyJyk7XG4gICAgfVxuICAgIHJldHVybiB7IGFwaTogeyAuLi5jb25maWcuYXBpLCAuLi5wYXJzZWQ/LmFwaSB9IH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcHJpbnRXYXJuaW5nKCdGYWlsZWQgdG8gbG9hZCBjb25maWcgZmlsZSwgdXNpbmcgZGVmYXVsdHMnLCB7XG4gICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxufVxuXG4vKipcbiAqIExvYWQgY29uZmlndXJhdGlvbiBmcm9tIGZpbGVzIGFuZCBlbnZpcm9ubWVudC5cbiAqXG4gKiBQcmlvcml0eSAobGFzdCB3aW5zKTpcbiAqIDEuIEJ1aWx0LWluIGRlZmF1bHRzXG4gKiAyLiBVc2VyIGNvbmZpZyBmaWxlOiB+Ly5waXBlbGluZS1tYW5hZ2VyL2NvbmZpZy55bWxcbiAqIDMuIFByb2plY3QgY29uZmlnIGZpbGU6IENMSV9DT05GSUdfUEFUSCBvciAuL2NvbmZpZy55bWxcbiAqIDQuIEVudmlyb25tZW50IHZhcmlhYmxlc1xuICpcbiAqIEF1dGggdG9rZW4gTVVTVCBjb21lIGZyb20gUExBVEZPUk1fVE9LRU4gZW52IHZhciAobmV2ZXIgZnJvbSBjb25maWcgZmlsZSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWcoKTogQ29uZmlnIHtcbiAgY29uc3QgcHJvamVjdENvbmZpZ1BhdGggPSBwcm9jZXNzLmVudi5DTElfQ09ORklHX1BBVEggfHwgcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2NvbmZpZy55bWwnKTtcblxuICAvLyBMYXllciAxOiBkZWZhdWx0cyDihpIgTGF5ZXIgMjogdXNlciBjb25maWcg4oaSIExheWVyIDM6IHByb2plY3QgY29uZmlnXG4gIGxldCBjb25maWcgPSBsb2FkQ29uZmlnRmlsZShVU0VSX0NPTkZJR19QQVRILCB7IC4uLmRlZmF1bHRDb25maWcgfSk7XG4gIGNvbmZpZyA9IGxvYWRDb25maWdGaWxlKHByb2plY3RDb25maWdQYXRoLCBjb25maWcpO1xuXG4gIC8vIExheWVyIDQ6IGVudmlyb25tZW50IHZhcmlhYmxlIG92ZXJyaWRlc1xuICBpZiAocHJvY2Vzcy5lbnYuUExBVEZPUk1fQkFTRV9VUkwpIHtcbiAgICBjb25maWcuYXBpLmJhc2VVcmwgPSBwcm9jZXNzLmVudi5QTEFURk9STV9CQVNFX1VSTDtcbiAgICBwcmludERlYnVnKCdVc2luZyBQTEFURk9STV9CQVNFX1VSTCBmcm9tIGVudmlyb25tZW50JywgeyBiYXNlVXJsOiBjb25maWcuYXBpLmJhc2VVcmwgfSk7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuVExTX1JFSkVDVF9VTkFVVEhPUklaRUQgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGRpc2FibGUgPSBwcm9jZXNzLmVudi5UTFNfUkVKRUNUX1VOQVVUSE9SSVpFRCA9PT0gJzAnO1xuICAgIGlmIChkaXNhYmxlICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHByaW50V2FybmluZygnSWdub3JpbmcgVExTX1JFSkVDVF9VTkFVVEhPUklaRUQ9MCBpbiBwcm9kdWN0aW9uIOKAlCBTU0wgdmVyaWZpY2F0aW9uIHJlbWFpbnMgZW5hYmxlZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcuYXBpLnJlamVjdFVuYXV0aG9yaXplZCA9ICFkaXNhYmxlO1xuICAgICAgaWYgKGRpc2FibGUpIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKCdTU0wgY2VydGlmaWNhdGUgdmFsaWRhdGlvbiBkaXNhYmxlZCB2aWEgVExTX1JFSkVDVF9VTkFVVEhPUklaRUQ9MCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5VUExPQURfVElNRU9VVCkge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KHByb2Nlc3MuZW52LlVQTE9BRF9USU1FT1VULCAxMCk7XG4gICAgaWYgKCFpc05hTihwYXJzZWQpICYmIHBhcnNlZCA+IDApIHtcbiAgICAgIGNvbmZpZy5hcGkudXBsb2FkVGltZW91dCA9IHBhcnNlZDtcbiAgICAgIHByaW50RGVidWcoJ1VzaW5nIFVQTE9BRF9USU1FT1VUIGZyb20gZW52aXJvbm1lbnQnLCB7IHVwbG9hZFRpbWVvdXQ6IGAke3BhcnNlZH1tc2AgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByaW50V2FybmluZygnSW52YWxpZCBVUExPQURfVElNRU9VVCB2YWx1ZSwgdXNpbmcgZGVmYXVsdCcsIHsgcHJvdmlkZWQ6IHByb2Nlc3MuZW52LlVQTE9BRF9USU1FT1VUIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRva2VuIGlzIFJFUVVJUkVEIGZyb20gZW52aXJvbm1lbnRcbiAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudi5QTEFURk9STV9UT0tFTjtcblxuICBpZiAoIXRva2VuKSB7XG4gICAgcHJpbnRFcnJvcignUExBVEZPUk1fVE9LRU4gZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCcpO1xuICAgIHRocm93IG5ldyBFcnJvcignUExBVEZPUk1fVE9LRU4gZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGlmICh0b2tlbi50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQTEFURk9STV9UT0tFTiBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICB9XG5cbiAgaWYgKHRva2VuLmluY2x1ZGVzKCcgJykpIHtcbiAgICBwcmludFdhcm5pbmcoJ1BMQVRGT1JNX1RPS0VOIGNvbnRhaW5zIHdoaXRlc3BhY2Ug4oCUIHRoaXMgbWF5IGNhdXNlIGlzc3VlcycpO1xuICB9XG5cbiAgcHJpbnREZWJ1ZygnQ29uZmlndXJhdGlvbiBsb2FkZWQgc3VjY2Vzc2Z1bGx5Jyk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5jb25maWcsXG4gICAgYXV0aDogeyB0b2tlbiB9LFxuICB9O1xufVxuXG4vKipcbiAqIFJldHVybiBhIGNvcHkgb2YgYGNvbmZpZ2Agd2l0aCBTU0wgdmVyaWZpY2F0aW9uIGRpc2FibGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFNTTERpc2FibGVkKGNvbmZpZzogQ29uZmlnKTogQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5jb25maWcsXG4gICAgYXBpOiB7IC4uLmNvbmZpZy5hcGksIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBMb2FkIGNvbmZpZ3VyYXRpb24sIG9wdGlvbmFsbHkgZGlzYWJsaW5nIFNTTCBiYXNlZCBvbiBjb21tYW5kIG9wdGlvbnMuXG4gKiBSZXBsYWNlcyB0aGUgcmVwZWF0ZWQgcGF0dGVybjpcbiAqICAgYG9wdGlvbnMudmVyaWZ5U3NsID09PSBmYWxzZSA/IHdpdGhTU0xEaXNhYmxlZChnZXRDb25maWcoKSkgOiBnZXRDb25maWcoKWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZ1dpdGhPcHRpb25zKG9wdGlvbnM6IHsgdmVyaWZ5U3NsPzogYm9vbGVhbiB9KTogQ29uZmlnIHtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIHJldHVybiBvcHRpb25zLnZlcmlmeVNzbCA9PT0gZmFsc2UgPyB3aXRoU1NMRGlzYWJsZWQoY29uZmlnKSA6IGNvbmZpZztcbn1cbiJdfQ==
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLWxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jb25maWctbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RSxPQUFPLEVBQWUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRCwwREFBMEQ7QUFDMUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBSS9EOztHQUVHO0FBQ0gsTUFBTSxhQUFhLEdBQXlCO0lBQzFDLEdBQUcsRUFBRTtRQUNILE9BQU8sRUFBRSx3QkFBd0I7UUFDakMsT0FBTyxFQUFFLE1BQU07UUFDZixXQUFXLEVBQUUsZUFBZTtRQUM1QixlQUFlLEVBQUUsZ0JBQWdCO1FBQ2pDLFNBQVMsRUFBRSxhQUFhO1FBQ3hCLGFBQWEsRUFBRSxjQUFjO1FBQzdCLGVBQWUsRUFBRSxvQkFBb0I7UUFDckMsa0JBQWtCLEVBQUUsSUFBSTtLQUN6QjtDQUNGLENBQUM7QUFFRiw0REFBNEQ7QUFDNUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUVwRjs7O0dBR0c7QUFDSCxT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QVMsRUFBRSxDQUFDO0lBQzNCLE9BQU8sT0FBTyxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3hFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ3lhbWwnO1xuaW1wb3J0IHsgcHJpbnREZWJ1ZywgcHJpbnRFcnJvciwgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi9vdXRwdXQtdXRpbHMuanMnO1xuaW1wb3J0IHsgdHlwZSBDb25maWcgfSBmcm9tICcuLi90eXBlcy9pbmRleC5qcyc7XG5cbi8vIEVTTSBoYXMgbm8gX19kaXJuYW1lOyBkZXJpdmUgaXQgZnJvbSB0aGlzIG1vZHVsZSdzIFVSTC5cbmNvbnN0IF9fZGlybmFtZSA9IHBhdGguZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuXG5leHBvcnQgdHlwZSB7IENvbmZpZyB9O1xuXG4vKipcbiAqIERlZmF1bHQgY29uZmlndXJhdGlvbiDigJQgQVBJIGVuZHBvaW50IHBhdGhzIGFuZCBjb25uZWN0aW9uIHNldHRpbmdzLlxuICovXG5jb25zdCBkZWZhdWx0Q29uZmlnOiBPbWl0PENvbmZpZywgJ2F1dGgnPiA9IHtcbiAgYXBpOiB7XG4gICAgYmFzZVVybDogJ2h0dHBzOi8vbG9jYWxob3N0Ojg0NDMnLFxuICAgIHRpbWVvdXQ6IDMwXzAwMCxcbiAgICBwaXBlbGluZVVybDogJy9hcGkvcGlwZWxpbmUnLFxuICAgIHBpcGVsaW5lTGlzdFVybDogJy9hcGkvcGlwZWxpbmVzJyxcbiAgICBwbHVnaW5Vcmw6ICcvYXBpL3BsdWdpbicsXG4gICAgcGx1Z2luTGlzdFVybDogJy9hcGkvcGx1Z2lucycsXG4gICAgcGx1Z2luVXBsb2FkVXJsOiAnL2FwaS9wbHVnaW4vdXBsb2FkJyxcbiAgICByZWplY3RVbmF1dGhvcml6ZWQ6IHRydWUsXG4gIH0sXG59O1xuXG4vKiogVXNlciBjb25maWcgZmlsZSBwYXRoOiB+Ly5waXBlbGluZS1tYW5hZ2VyL2NvbmZpZy55bWwgKi9cbmNvbnN0IFVTRVJfQ09ORklHX1BBVEggPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLnBpcGVsaW5lLW1hbmFnZXInLCAnY29uZmlnLnltbCcpO1xuXG4vKipcbiAqIExvYWQgYSBZQU1MIGNvbmZpZyBmaWxlIGFuZCBtZXJnZSBpdHMgYGFwaWAgc2VjdGlvbiBpbnRvIHRoZSBjb25maWcuXG4gKiBSZXR1cm5zIHRoZSBtZXJnZWQgY29uZmlnIG9yIHRoZSBvcmlnaW5hbCBpZiBmaWxlIGRvZXNuJ3QgZXhpc3Qgb3IgZmFpbHMuXG4gKi9cbmZ1bmN0aW9uIGxvYWRDb25maWdGaWxlKGZpbGVQYXRoOiBzdHJpbmcsIGNvbmZpZzogT21pdDxDb25maWcsICdhdXRoJz4pOiBPbWl0PENvbmZpZywgJ2F1dGgnPiB7XG4gIGlmICghZnMuZXhpc3RzU3luYyhmaWxlUGF0aCkpIHJldHVybiBjb25maWc7XG5cbiAgdHJ5IHtcbiAgICBwcmludERlYnVnKCdMb2FkaW5nIGNvbmZpZ3VyYXRpb24nLCB7IHBhdGg6IGZpbGVQYXRoIH0pO1xuICAgIGNvbnN0IHBhcnNlZCA9IHlhbWwucGFyc2UoZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKSk7XG4gICAgaWYgKHBhcnNlZD8uYXV0aCkge1xuICAgICAgcHJpbnRXYXJuaW5nKCdBdXRoIHNlY3Rpb24gaW4gY29uZmlnIGZpbGUgaXMgaWdub3JlZCDigJQgdXNlIFBMQVRGT1JNX1RPS0VOIGVudiB2YXInKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgYXBpOiB7IC4uLmNvbmZpZy5hcGksIC4uLnBhcnNlZD8uYXBpIH0gfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBwcmludFdhcm5pbmcoJ0ZhaWxlZCB0byBsb2FkIGNvbmZpZyBmaWxlLCB1c2luZyBkZWZhdWx0cycsIHtcbiAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICB9KTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG59XG5cbi8qKlxuICogTG9hZCBjb25maWd1cmF0aW9uIGZyb20gZmlsZXMgYW5kIGVudmlyb25tZW50LlxuICpcbiAqIFByaW9yaXR5IChsYXN0IHdpbnMpOlxuICogMS4gQnVpbHQtaW4gZGVmYXVsdHNcbiAqIDIuIFVzZXIgY29uZmlnIGZpbGU6IH4vLnBpcGVsaW5lLW1hbmFnZXIvY29uZmlnLnltbFxuICogMy4gUHJvamVjdCBjb25maWcgZmlsZTogQ0xJX0NPTkZJR19QQVRIIG9yIC4vY29uZmlnLnltbFxuICogNC4gRW52aXJvbm1lbnQgdmFyaWFibGVzXG4gKlxuICogQXV0aCB0b2tlbiBNVVNUIGNvbWUgZnJvbSBQTEFURk9STV9UT0tFTiBlbnYgdmFyIChuZXZlciBmcm9tIGNvbmZpZyBmaWxlKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZygpOiBDb25maWcge1xuICBjb25zdCBwcm9qZWN0Q29uZmlnUGF0aCA9IHByb2Nlc3MuZW52LkNMSV9DT05GSUdfUEFUSCB8fCBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vY29uZmlnLnltbCcpO1xuXG4gIC8vIExheWVyIDE6IGRlZmF1bHRzIOKGkiBMYXllciAyOiB1c2VyIGNvbmZpZyDihpIgTGF5ZXIgMzogcHJvamVjdCBjb25maWdcbiAgbGV0IGNvbmZpZyA9IGxvYWRDb25maWdGaWxlKFVTRVJfQ09ORklHX1BBVEgsIHsgLi4uZGVmYXVsdENvbmZpZyB9KTtcbiAgY29uZmlnID0gbG9hZENvbmZpZ0ZpbGUocHJvamVjdENvbmZpZ1BhdGgsIGNvbmZpZyk7XG5cbiAgLy8gTGF5ZXIgNDogZW52aXJvbm1lbnQgdmFyaWFibGUgb3ZlcnJpZGVzXG4gIGlmIChwcm9jZXNzLmVudi5QTEFURk9STV9CQVNFX1VSTCkge1xuICAgIGNvbmZpZy5hcGkuYmFzZVVybCA9IHByb2Nlc3MuZW52LlBMQVRGT1JNX0JBU0VfVVJMO1xuICAgIHByaW50RGVidWcoJ1VzaW5nIFBMQVRGT1JNX0JBU0VfVVJMIGZyb20gZW52aXJvbm1lbnQnLCB7IGJhc2VVcmw6IGNvbmZpZy5hcGkuYmFzZVVybCB9KTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5UTFNfUkVKRUNUX1VOQVVUSE9SSVpFRCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgZGlzYWJsZSA9IHByb2Nlc3MuZW52LlRMU19SRUpFQ1RfVU5BVVRIT1JJWkVEID09PSAnMCc7XG4gICAgaWYgKGRpc2FibGUgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgcHJpbnRXYXJuaW5nKCdJZ25vcmluZyBUTFNfUkVKRUNUX1VOQVVUSE9SSVpFRD0wIGluIHByb2R1Y3Rpb24g4oCUIFNTTCB2ZXJpZmljYXRpb24gcmVtYWlucyBlbmFibGVkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZy5hcGkucmVqZWN0VW5hdXRob3JpemVkID0gIWRpc2FibGU7XG4gICAgICBpZiAoZGlzYWJsZSkge1xuICAgICAgICBwcmludFdhcm5pbmcoJ1NTTCBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIGRpc2FibGVkIHZpYSBUTFNfUkVKRUNUX1VOQVVUSE9SSVpFRD0wJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52LlVQTE9BRF9USU1FT1VUKSB7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuVVBMT0FEX1RJTUVPVVQsIDEwKTtcbiAgICBpZiAoIWlzTmFOKHBhcnNlZCkgJiYgcGFyc2VkID4gMCkge1xuICAgICAgY29uZmlnLmFwaS51cGxvYWRUaW1lb3V0ID0gcGFyc2VkO1xuICAgICAgcHJpbnREZWJ1ZygnVXNpbmcgVVBMT0FEX1RJTUVPVVQgZnJvbSBlbnZpcm9ubWVudCcsIHsgdXBsb2FkVGltZW91dDogYCR7cGFyc2VkfW1zYCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJpbnRXYXJuaW5nKCdJbnZhbGlkIFVQTE9BRF9USU1FT1VUIHZhbHVlLCB1c2luZyBkZWZhdWx0JywgeyBwcm92aWRlZDogcHJvY2Vzcy5lbnYuVVBMT0FEX1RJTUVPVVQgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gVG9rZW4gaXMgUkVRVUlSRUQgZnJvbSBlbnZpcm9ubWVudFxuICBjb25zdCB0b2tlbiA9IHByb2Nlc3MuZW52LlBMQVRGT1JNX1RPS0VOO1xuXG4gIGlmICghdG9rZW4pIHtcbiAgICBwcmludEVycm9yKCdQTEFURk9STV9UT0tFTiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0Jyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQTEFURk9STV9UT0tFTiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKHRva2VuLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BMQVRGT1JNX1RPS0VOIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gIH1cblxuICBpZiAodG9rZW4uaW5jbHVkZXMoJyAnKSkge1xuICAgIHByaW50V2FybmluZygnUExBVEZPUk1fVE9LRU4gY29udGFpbnMgd2hpdGVzcGFjZSDigJQgdGhpcyBtYXkgY2F1c2UgaXNzdWVzJyk7XG4gIH1cblxuICBwcmludERlYnVnKCdDb25maWd1cmF0aW9uIGxvYWRlZCBzdWNjZXNzZnVsbHknKTtcblxuICByZXR1cm4ge1xuICAgIC4uLmNvbmZpZyxcbiAgICBhdXRoOiB7IHRva2VuIH0sXG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJuIGEgY29weSBvZiBgY29uZmlnYCB3aXRoIFNTTCB2ZXJpZmljYXRpb24gZGlzYWJsZWQuIE1vZHVsZS1wcml2YXRlIOKAlCB0aGVcbiAqIG9ubHkgY2FsbGVyIGlzIGBnZXRDb25maWdXaXRoT3B0aW9uc2AgYmVsb3cuXG4gKi9cbmZ1bmN0aW9uIHdpdGhTU0xEaXNhYmxlZChjb25maWc6IENvbmZpZyk6IENvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgLi4uY29uZmlnLFxuICAgIGFwaTogeyAuLi5jb25maWcuYXBpLCByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlIH0sXG4gIH07XG59XG5cbi8qKlxuICogTG9hZCBjb25maWd1cmF0aW9uLCBvcHRpb25hbGx5IGRpc2FibGluZyBTU0wgYmFzZWQgb24gY29tbWFuZCBvcHRpb25zLlxuICogUmVwbGFjZXMgdGhlIHJlcGVhdGVkIHBhdHRlcm46XG4gKiAgIGBvcHRpb25zLnZlcmlmeVNzbCA9PT0gZmFsc2UgPyB3aXRoU1NMRGlzYWJsZWQoZ2V0Q29uZmlnKCkpIDogZ2V0Q29uZmlnKClgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWdXaXRoT3B0aW9ucyhvcHRpb25zOiB7IHZlcmlmeVNzbD86IGJvb2xlYW4gfSk6IENvbmZpZyB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICByZXR1cm4gb3B0aW9ucy52ZXJpZnlTc2wgPT09IGZhbHNlID8gd2l0aFNTTERpc2FibGVkKGNvbmZpZykgOiBjb25maWc7XG59XG4iXX0=
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Convert a standard 5-field cron expression into an AWS EventBridge cron
3
+ * expression, and guard against schedules that fire more often than every
4
+ * 15 minutes.
5
+ *
6
+ * Standard cron: `minute hour day-of-month month day-of-week`
7
+ * EventBridge cron: `cron(minute hour day-of-month month day-of-week year)`
8
+ *
9
+ * The non-obvious differences EventBridge imposes:
10
+ * - a 6th field (year), which we always set to `*`;
11
+ * - day-of-month and day-of-week may NOT both be `*` — exactly one must be `?`;
12
+ * - day-of-week is 1–7 with 1 = Sunday, whereas standard cron is 0–6 (or 7)
13
+ * with 0/7 = Sunday — so numeric day-of-week values must be remapped.
14
+ */
15
+ /** Minimum allowed spacing between fires, in minutes. */
16
+ export declare const MIN_SCHEDULE_INTERVAL_MIN = 15;
17
+ /**
18
+ * Throw if `fiveField` would fire more often than every {@link MIN_SCHEDULE_INTERVAL_MIN}
19
+ * minutes. Conservative: the smallest cyclic gap in the minute field is the worst-case
20
+ * spacing (it's only ever larger once the hour/day fields restrict things further).
21
+ */
22
+ export declare function assertScheduleInterval(fiveField: string): void;
23
+ /**
24
+ * Convert a validated 5-field cron expression to an AWS EventBridge `cron(...)`
25
+ * expression. Also enforces the 15-minute guard.
26
+ */
27
+ export declare function toEventBridgeCron(fiveField: string): string;
28
+ //# sourceMappingURL=cron.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../../src/utils/cron.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;GAaG;AAEH,yDAAyD;AACzD,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAgC5C;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAuB9D;AAaD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAmB3D"}