@firestartr/cli 0.1.10 â 0.1.12
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.
- package/build/index.js +705 -205
- package/build/provisioner/dist-cdktf/index.js +142 -4
- package/build/provisioner/dist-cdktf/index.js.map +1 -1
- package/build/provisioner/dist-cdktf/src/handlers/index.d.ts +1 -1
- package/build/provisioner/dist-cdktf/tsconfig.cdktf.tsbuildinfo +1 -1
- package/package.json +1 -1
package/build/index.js
CHANGED
|
@@ -226501,6 +226501,7 @@ const types_1 = __importDefault(__nccwpck_require__(30130));
|
|
|
226501
226501
|
const environment_1 = __importDefault(__nccwpck_require__(92938));
|
|
226502
226502
|
const defaults_1 = __importDefault(__nccwpck_require__(30195));
|
|
226503
226503
|
const features_1 = __importDefault(__nccwpck_require__(69727));
|
|
226504
|
+
const policies_1 = __importDefault(__nccwpck_require__(8141));
|
|
226504
226505
|
var github_1 = __nccwpck_require__(86666);
|
|
226505
226506
|
Object.defineProperty(exports, "BranchStrategy", ({ enumerable: true, get: function () { return github_1.BranchStrategy; } }));
|
|
226506
226507
|
exports["default"] = {
|
|
@@ -226509,7 +226510,8 @@ exports["default"] = {
|
|
|
226509
226510
|
types: types_1.default,
|
|
226510
226511
|
environment: environment_1.default,
|
|
226511
226512
|
defaults: defaults_1.default,
|
|
226512
|
-
features: features_1.default
|
|
226513
|
+
features: features_1.default,
|
|
226514
|
+
policies: policies_1.default
|
|
226513
226515
|
};
|
|
226514
226516
|
|
|
226515
226517
|
|
|
@@ -227750,6 +227752,108 @@ function writeLogFile(fileName, log) {
|
|
|
227750
227752
|
exports.writeLogFile = writeLogFile;
|
|
227751
227753
|
|
|
227752
227754
|
|
|
227755
|
+
/***/ }),
|
|
227756
|
+
|
|
227757
|
+
/***/ 8141:
|
|
227758
|
+
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
|
227759
|
+
|
|
227760
|
+
"use strict";
|
|
227761
|
+
|
|
227762
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
227763
|
+
const policies_1 = __nccwpck_require__(43666);
|
|
227764
|
+
exports["default"] = {
|
|
227765
|
+
policiesAreCompatible: policies_1.policiesAreCompatible,
|
|
227766
|
+
getPolicyByName: policies_1.getPolicyByName,
|
|
227767
|
+
FIRESTARTR_POLICIES: policies_1.FIRESTARTR_POLICIES
|
|
227768
|
+
};
|
|
227769
|
+
|
|
227770
|
+
|
|
227771
|
+
/***/ }),
|
|
227772
|
+
|
|
227773
|
+
/***/ 43666:
|
|
227774
|
+
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
|
227775
|
+
|
|
227776
|
+
"use strict";
|
|
227777
|
+
|
|
227778
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
227779
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
227780
|
+
};
|
|
227781
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
227782
|
+
exports.policiesAreCompatible = exports.getPolicyByName = exports.FIRESTARTR_POLICIES = void 0;
|
|
227783
|
+
const debug_1 = __importDefault(__nccwpck_require__(67984));
|
|
227784
|
+
const log = (0, debug_1.default)("firestartr:catalog_common:policies");
|
|
227785
|
+
exports.FIRESTARTR_POLICIES = [
|
|
227786
|
+
{
|
|
227787
|
+
name: "full-control",
|
|
227788
|
+
weight: 10,
|
|
227789
|
+
aliases: [],
|
|
227790
|
+
allowedOps: [
|
|
227791
|
+
"UPDATED",
|
|
227792
|
+
"CREATED",
|
|
227793
|
+
"RENAMED",
|
|
227794
|
+
"SYNC",
|
|
227795
|
+
"MARKED_TO_DELETION",
|
|
227796
|
+
"RETRY",
|
|
227797
|
+
"NOTHING"
|
|
227798
|
+
]
|
|
227799
|
+
},
|
|
227800
|
+
{
|
|
227801
|
+
name: "apply",
|
|
227802
|
+
weight: 9,
|
|
227803
|
+
aliases: [
|
|
227804
|
+
"create-update-only"
|
|
227805
|
+
],
|
|
227806
|
+
allowedOps: [
|
|
227807
|
+
"UPDATED",
|
|
227808
|
+
"CREATED",
|
|
227809
|
+
"RENAMED",
|
|
227810
|
+
"SYNC",
|
|
227811
|
+
"RETRY",
|
|
227812
|
+
"NOTHING"
|
|
227813
|
+
]
|
|
227814
|
+
},
|
|
227815
|
+
{
|
|
227816
|
+
name: "observe",
|
|
227817
|
+
weight: 8,
|
|
227818
|
+
aliases: [
|
|
227819
|
+
"observe-only"
|
|
227820
|
+
],
|
|
227821
|
+
allowedOps: [
|
|
227822
|
+
"SYNC"
|
|
227823
|
+
]
|
|
227824
|
+
},
|
|
227825
|
+
{
|
|
227826
|
+
name: "create-only",
|
|
227827
|
+
weight: 8,
|
|
227828
|
+
aliases: [],
|
|
227829
|
+
allowedOps: [
|
|
227830
|
+
"CREATED",
|
|
227831
|
+
"RETRY",
|
|
227832
|
+
"SYNC",
|
|
227833
|
+
]
|
|
227834
|
+
},
|
|
227835
|
+
];
|
|
227836
|
+
function getPolicyByName(policyName) {
|
|
227837
|
+
return exports.FIRESTARTR_POLICIES.find(p => p.name === policyName || p.aliases.includes(policyName));
|
|
227838
|
+
}
|
|
227839
|
+
exports.getPolicyByName = getPolicyByName;
|
|
227840
|
+
function policiesAreCompatible(syncPolicy, generalPolicy) {
|
|
227841
|
+
log("Validating policy compatibility: %s %s", syncPolicy, generalPolicy);
|
|
227842
|
+
const syncPolicyWeight = getPolicyByName(syncPolicy)?.weight;
|
|
227843
|
+
const generalPolicyWeight = getPolicyByName(generalPolicy)?.weight;
|
|
227844
|
+
if (!syncPolicyWeight || !generalPolicyWeight) {
|
|
227845
|
+
throw new Error(`Policy ${syncPolicy} or ${generalPolicy} not found`);
|
|
227846
|
+
}
|
|
227847
|
+
if (generalPolicyWeight >= syncPolicyWeight) {
|
|
227848
|
+
log("Policies %s %s are compatible", syncPolicy, generalPolicy);
|
|
227849
|
+
return true;
|
|
227850
|
+
}
|
|
227851
|
+
log("Policies %s %s are not compatible", syncPolicy, generalPolicy);
|
|
227852
|
+
return false;
|
|
227853
|
+
}
|
|
227854
|
+
exports.policiesAreCompatible = policiesAreCompatible;
|
|
227855
|
+
|
|
227856
|
+
|
|
227753
227857
|
/***/ }),
|
|
227754
227858
|
|
|
227755
227859
|
/***/ 33591:
|
|
@@ -232157,6 +232261,10 @@ exports["default"] = {
|
|
|
232157
232261
|
{
|
|
232158
232262
|
"type": "object",
|
|
232159
232263
|
"properties": {
|
|
232264
|
+
"policy": {
|
|
232265
|
+
"type": "string",
|
|
232266
|
+
"enum": ["apply", "create-only", "create-update-only", "full-control", "observe", "observe-only"]
|
|
232267
|
+
},
|
|
232160
232268
|
"name": {
|
|
232161
232269
|
"type": "string",
|
|
232162
232270
|
},
|
|
@@ -232164,6 +232272,24 @@ exports["default"] = {
|
|
|
232164
232272
|
"type": "string",
|
|
232165
232273
|
"enum": ["remote", "inline", "Remote", "Inline"]
|
|
232166
232274
|
},
|
|
232275
|
+
"sync": {
|
|
232276
|
+
"type": "object",
|
|
232277
|
+
"properties": {
|
|
232278
|
+
"enabled": {
|
|
232279
|
+
"type": "boolean"
|
|
232280
|
+
},
|
|
232281
|
+
"period": {
|
|
232282
|
+
"type": "string",
|
|
232283
|
+
"pattern": "^[0-9]+[smhd]$"
|
|
232284
|
+
},
|
|
232285
|
+
"policy": {
|
|
232286
|
+
"type": "string",
|
|
232287
|
+
"enum": ["apply", "observe"]
|
|
232288
|
+
}
|
|
232289
|
+
},
|
|
232290
|
+
"required": ["enabled"],
|
|
232291
|
+
"additionalProperties": false
|
|
232292
|
+
},
|
|
232167
232293
|
"valuesSchema": {
|
|
232168
232294
|
"type": "string",
|
|
232169
232295
|
"description": "a locator for a json schema to validate values"
|
|
@@ -232211,7 +232337,7 @@ exports["default"] = {
|
|
|
232211
232337
|
}
|
|
232212
232338
|
}
|
|
232213
232339
|
};
|
|
232214
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
232340
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLnNjaGVtYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jbGFpbXMvdGZ3b3Jrc3BhY2VzL3RlcnJhZm9ybS5zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQkFBZTtJQUVYLFNBQVMsRUFBRSx5Q0FBeUM7SUFFcEQsS0FBSyxFQUFFLG1CQUFtQjtJQUUxQixhQUFhLEVBQUU7UUFFYixtQkFBbUIsRUFBRTtZQUVuQixLQUFLLEVBQUUsOENBQThDO1lBRXJELE1BQU0sRUFBRSxRQUFRO1lBRWhCLGFBQWEsRUFBRSx1QkFBdUI7WUFFdEMsT0FBTyxFQUFFO2dCQUVQLEVBQUMsTUFBTSxFQUFFLCtDQUErQyxFQUFDO2dCQUV6RDtvQkFDRSxNQUFNLEVBQUUsUUFBUTtvQkFFaEIsWUFBWSxFQUFFO3dCQUVaLFFBQVEsRUFBRTs0QkFFUixNQUFNLEVBQUUsUUFBUTs0QkFFaEIsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLGNBQWMsQ0FBQzt5QkFFbEc7d0JBRUQsTUFBTSxFQUFFOzRCQUVOLE1BQU0sRUFBRSxRQUFRO3lCQUNqQjt3QkFFRCxRQUFRLEVBQUU7NEJBRVIsTUFBTSxFQUFFLFFBQVE7NEJBRWhCLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQzt5QkFFakQ7d0JBQ0QsTUFBTSxFQUFFOzRCQUVKLE1BQU0sRUFBRSxRQUFROzRCQUVoQixZQUFZLEVBQUU7Z0NBRVosU0FBUyxFQUFFO29DQUVULE1BQU0sRUFBRSxTQUFTO2lDQUVsQjtnQ0FFRCxRQUFRLEVBQUU7b0NBRVIsTUFBTSxFQUFFLFFBQVE7b0NBRWhCLFNBQVMsRUFBRSxnQkFBZ0I7aUNBRTVCO2dDQUVELFFBQVEsRUFBRTtvQ0FFUixNQUFNLEVBQUUsUUFBUTtvQ0FFaEIsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQztpQ0FFN0I7NkJBRUY7NEJBRUQsVUFBVSxFQUFFLENBQUMsU0FBUyxDQUFDOzRCQUV2QixzQkFBc0IsRUFBRSxLQUFLO3lCQUNoQzt3QkFFRCxjQUFjLEVBQUU7NEJBRWQsTUFBTSxFQUFFLFFBQVE7NEJBRWhCLGFBQWEsRUFBRSxnREFBZ0Q7eUJBRWhFO3dCQUVELFFBQVEsRUFBQzs0QkFFUCxNQUFNLEVBQUUsUUFBUTs0QkFFaEIsWUFBWSxFQUFFLEVBQUU7NEJBRWhCLHNCQUFzQixFQUFFLElBQUk7eUJBRTdCO3dCQUVELFFBQVEsRUFBRTs0QkFFUixNQUFNLEVBQUUsUUFBUTt5QkFFakI7d0JBRUQsU0FBUyxFQUFFOzRCQUVULE1BQU0sRUFBRSxRQUFROzRCQUVoQixZQUFZLEVBQUU7Z0NBRVosV0FBVyxFQUFFO29DQUVYLE1BQU0sRUFBRSxPQUFPO29DQUVmLE9BQU8sRUFBRTt3Q0FFUCxNQUFNLEVBQUUsUUFBUTt3Q0FFaEIsWUFBWSxFQUFFOzRDQUVaLE1BQU0sRUFBRTtnREFFTixNQUFNLEVBQUUsUUFBUTs2Q0FDakI7eUNBRUY7d0NBRUQsc0JBQXNCLEVBQUUsS0FBSztxQ0FFOUI7aUNBRUY7Z0NBRUQsU0FBUyxFQUFFO29DQUVULE1BQU0sRUFBRSxRQUFRO29DQUVoQixZQUFZLEVBQUU7d0NBRVosTUFBTSxFQUFFOzRDQUVOLE1BQU0sRUFBRSxRQUFRO3lDQUNqQjtxQ0FFRjtvQ0FFRCxzQkFBc0IsRUFBRSxLQUFLO2lDQUM5Qjs2QkFFRjs0QkFFRCxVQUFVLEVBQUUsQ0FBQyxXQUFXLENBQUM7NEJBRXpCLHNCQUFzQixFQUFFLEtBQUs7eUJBRTlCO3FCQUVGO29CQUVELFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQztpQkFFcEQ7YUFFRjtTQUVGO0tBQ0Y7Q0FDSixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQge1xuXG4gICAgXCIkc2NoZW1hXCI6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjXCIsXG5cbiAgICBcIiRpZFwiOiBcIlRlcnJhZm9ybVByb3ZpZGVyXCIsXG5cbiAgICBcImRlZmluaXRpb25zXCI6IHtcblxuICAgICAgXCJUZXJyYWZvcm1Qcm92aWRlclwiOiB7XG5cbiAgICAgICAgXCIkaWRcIjogXCJmaXJlc3RhcnRyLmRldjovL3RlcnJhZm9ybS9UZXJyYWZvcm1Qcm92aWRlclwiLFxuXG4gICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBIHRlcnJhZm9ybSB3b3Jrc3BhY2VcIixcblxuICAgICAgICBcImFsbE9mXCI6IFtcblxuICAgICAgICAgIHtcIiRyZWZcIjogXCJmaXJlc3RhcnRyLmRldjovL2NvbW1vbi9DbGFpbVByb3ZpZGVyRW52ZWxvcGVcIn0sXG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcblxuICAgICAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcblxuICAgICAgICAgICAgICBcInBvbGljeVwiOiB7XG5cbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcblxuICAgICAgICAgICAgICAgIFwiZW51bVwiOiBbXCJhcHBseVwiLCBcImNyZWF0ZS1vbmx5XCIsIFwiY3JlYXRlLXVwZGF0ZS1vbmx5XCIsIFwiZnVsbC1jb250cm9sXCIsIFwib2JzZXJ2ZVwiLCBcIm9ic2VydmUtb25seVwiXVxuXG4gICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgXCJzb3VyY2VcIjoge1xuXG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG5cbiAgICAgICAgICAgICAgICBcImVudW1cIjogW1wicmVtb3RlXCIsIFwiaW5saW5lXCIsIFwiUmVtb3RlXCIsIFwiSW5saW5lXCJdXG5cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCJzeW5jXCI6IHtcbiAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gIFxuICAgICAgICAgICAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgXG4gICAgICAgICAgICAgICAgICAgIFwiZW5hYmxlZFwiOiB7XG4gIFxuICAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIlxuICBcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgXG4gICAgICAgICAgICAgICAgICAgIFwicGVyaW9kXCI6IHtcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gIFxuICAgICAgICAgICAgICAgICAgICAgIFwicGF0dGVyblwiOiBcIl5bMC05XStbc21oZF0kXCJcbiAgXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gIFxuICAgICAgICAgICAgICAgICAgICBcInBvbGljeVwiOiB7XG4gIFxuICAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICBcbiAgICAgICAgICAgICAgICAgICAgICBcImVudW1cIjogW1wiYXBwbHlcIiwgXCJvYnNlcnZlXCJdXG4gIFxuICAgICAgICAgICAgICAgICAgICB9XG4gIFxuICAgICAgICAgICAgICAgICAgfSxcbiAgXG4gICAgICAgICAgICAgICAgICBcInJlcXVpcmVkXCI6IFtcImVuYWJsZWRcIl0sXG4gIFxuICAgICAgICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZVxuICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgIFwidmFsdWVzU2NoZW1hXCI6IHtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG5cbiAgICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiYSBsb2NhdG9yIGZvciBhIGpzb24gc2NoZW1hIHRvIHZhbGlkYXRlIHZhbHVlc1wiXG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgIFwidmFsdWVzXCI6e1xuXG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG5cbiAgICAgICAgICAgICAgICBcInByb3BlcnRpZXNcIjoge30sXG5cbiAgICAgICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHRydWVcblxuICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgIFwibW9kdWxlXCI6IHtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgXCJjb250ZXh0XCI6IHtcblxuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuXG4gICAgICAgICAgICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIFwicHJvdmlkZXJzXCI6IHtcbiAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuXG4gICAgICAgICAgICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcblxuICAgICAgICAgICAgICAgICAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgXCJiYWNrZW5kXCI6IHtcbiAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcblxuICAgICAgICAgICAgICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogZmFsc2VcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgXCJyZXF1aXJlZFwiOiBbXCJwcm92aWRlcnNcIl0sXG5cbiAgICAgICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IGZhbHNlXG5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBcInJlcXVpcmVkXCI6IFtcInZhbHVlc1wiLCBcImNvbnRleHRcIiwgXCJzb3VyY2VcIiwgXCJuYW1lXCJdXG5cbiAgICAgICAgICB9XG5cbiAgICAgICAgXVxuXG4gICAgICB9XG4gICAgfVxufVxuIl19
|
|
232215
232341
|
|
|
232216
232342
|
/***/ }),
|
|
232217
232343
|
|
|
@@ -233767,13 +233893,17 @@ PolicyInitializer.applicableKinds = ["TFWorkspaceClaim"];
|
|
|
233767
233893
|
/***/ }),
|
|
233768
233894
|
|
|
233769
233895
|
/***/ 94227:
|
|
233770
|
-
/***/ ((__unused_webpack_module, exports, __nccwpck_require__)
|
|
233896
|
+
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
|
233771
233897
|
|
|
233772
233898
|
"use strict";
|
|
233773
233899
|
|
|
233900
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
233901
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
233902
|
+
};
|
|
233774
233903
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
233775
233904
|
exports.SyncerInitializer = void 0;
|
|
233776
233905
|
const base_1 = __nccwpck_require__(9204);
|
|
233906
|
+
const catalog_common_1 = __importDefault(__nccwpck_require__(74100));
|
|
233777
233907
|
const patches_1 = __nccwpck_require__(74312);
|
|
233778
233908
|
const PERIOD_VALIDATOR = new RegExp(/^\d+[smhd]$/);
|
|
233779
233909
|
class SyncerInitializer extends base_1.InitializerPatches {
|
|
@@ -233789,6 +233919,16 @@ class SyncerInitializer extends base_1.InitializerPatches {
|
|
|
233789
233919
|
}
|
|
233790
233920
|
return [{
|
|
233791
233921
|
validate(cr) {
|
|
233922
|
+
if (cr.metadata.annotations &&
|
|
233923
|
+
cr.metadata.annotations["firestartr.dev/sync-policy"] &&
|
|
233924
|
+
cr.metadata.annotations["firestartr.dev/policy"]) {
|
|
233925
|
+
const policy = cr.metadata.annotations["firestartr.dev/policy"];
|
|
233926
|
+
const syncPolicy = cr.metadata.annotations["firestartr.dev/sync-policy"];
|
|
233927
|
+
const policiesAreCompatible = catalog_common_1.default.policies.policiesAreCompatible(syncPolicy, policy);
|
|
233928
|
+
if (!policiesAreCompatible) {
|
|
233929
|
+
throw `${this.identify()}: incompatible policies '${policy}' and '${syncPolicy}' for ${cr.kind}/${cr.metadata.name}`;
|
|
233930
|
+
}
|
|
233931
|
+
}
|
|
233792
233932
|
if (cr.metadata.annotations && cr.metadata.annotations["firestartr.dev/sync-period"]) {
|
|
233793
233933
|
if (!PERIOD_VALIDATOR.test(cr.metadata.annotations["firestartr.dev/sync-period"])) {
|
|
233794
233934
|
throw `${this.identify()}: period incorrect "${cr.metadata.annotations["firestartr.dev/sync-period"]}" for ${cr.kind}/${cr.metadata.name}`;
|
|
@@ -233807,6 +233947,10 @@ class SyncerInitializer extends base_1.InitializerPatches {
|
|
|
233807
233947
|
cr.metadata.annotations = cr.metadata.annotations || {};
|
|
233808
233948
|
cr.metadata.annotations["firestartr.dev/sync-period"] = syncInfo(this).period;
|
|
233809
233949
|
}
|
|
233950
|
+
if (syncInfo(this).policy) {
|
|
233951
|
+
cr.metadata.annotations = cr.metadata.annotations || {};
|
|
233952
|
+
cr.metadata.annotations["firestartr.dev/sync-policy"] = syncInfo(this).policy;
|
|
233953
|
+
}
|
|
233810
233954
|
}
|
|
233811
233955
|
return cr;
|
|
233812
233956
|
},
|
|
@@ -233817,8 +233961,8 @@ class SyncerInitializer extends base_1.InitializerPatches {
|
|
|
233817
233961
|
}
|
|
233818
233962
|
}
|
|
233819
233963
|
exports.SyncerInitializer = SyncerInitializer;
|
|
233820
|
-
SyncerInitializer.applicableKinds = ["ComponentClaim", "GroupClaim", "UserClaim"];
|
|
233821
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
233964
|
+
SyncerInitializer.applicableKinds = ["ComponentClaim", "GroupClaim", "UserClaim", "TFWorkspaceClaim"];
|
|
233965
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2luaXRpYWxpemVycy9zeW5jZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsaUNBQTRDO0FBQzVDLG9FQUFvQztBQUVwQyx3Q0FBdUM7QUFFdkMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQTtBQUVsRCxNQUFhLGlCQUFrQixTQUFRLHlCQUFrQjtJQUF6RDs7UUFFRSx3QkFBbUIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBcUdwQyxDQUFDO0lBakdDLEtBQUssQ0FBQyxVQUFVLEtBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRWxDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBVSxFQUFFLFdBQWdCO1FBRTFDLFNBQVMsUUFBUSxDQUFDLEdBQU87WUFFdkIsTUFBTSxRQUFRLEdBQVUsSUFBQSxtQkFBUyxFQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQTtZQUUvQyxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQTtRQUU3QyxDQUFDO1FBRUQsT0FBTyxDQUFDO2dCQUVOLFFBQVEsQ0FBQyxFQUFNO29CQUViLElBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXO3dCQUV4QixFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQzt3QkFFckQsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsRUFFakQ7d0JBRUMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsQ0FBQTt3QkFFL0QsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsNEJBQTRCLENBQUMsQ0FBQTt3QkFFeEUsTUFBTSxxQkFBcUIsR0FBRyx3QkFBTSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FFakUsVUFBVSxFQUVWLE1BQU0sQ0FFUCxDQUFBO3dCQUVELElBQUcsQ0FBQyxxQkFBcUIsRUFBQzs0QkFFeEIsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsNEJBQTRCLE1BQU0sVUFBVSxVQUFVLFNBQVMsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFBO3lCQUVySDtxQkFFRjtvQkFFRCxJQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLDRCQUE0QixDQUFDLEVBQUM7d0JBRWxGLElBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxFQUFDOzRCQUUvRSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSx1QkFBdUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsNEJBQTRCLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUE7eUJBRTNJO3dCQUVELE9BQU8sSUFBSSxDQUFBO3FCQUNaO3lCQUNHO3dCQUVGLE9BQU8sSUFBSSxDQUFBO3FCQUNaO2dCQUVILENBQUM7Z0JBRUQsS0FBSyxDQUFDLEVBQU07b0JBRVYsSUFBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFDO3dCQUV4QixFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7d0JBRXhELEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLDZCQUE2QixDQUFDLEdBQUcsTUFBTSxDQUFBO3dCQUUvRCxJQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUM7NEJBRXZCLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQzs0QkFFeEQsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsNEJBQTRCLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFBO3lCQUU5RTt3QkFFRCxJQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUM7NEJBRXZCLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQzs0QkFFeEQsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsNEJBQTRCLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFBO3lCQUU5RTtxQkFFRjtvQkFFRCxPQUFPLEVBQUUsQ0FBQztnQkFDWixDQUFDO2dCQUVELFFBQVE7b0JBRU4sT0FBTyxnQ0FBZ0MsQ0FBQztnQkFFMUMsQ0FBQzthQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7O0FBdEdILDhDQXVHQztBQW5HUSxpQ0FBZSxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5pdGlhbGl6ZXJQYXRjaGVzIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCBjb21tb24gZnJvbSBcImNhdGFsb2dfY29tbW9uXCI7XG5cbmltcG9ydCB7IGhlbHBlckNUWCB9IGZyb20gJy4uL3BhdGNoZXMnO1xuXG5jb25zdCBQRVJJT0RfVkFMSURBVE9SID0gbmV3IFJlZ0V4cCgvXlxcZCtbc21oZF0kLylcblxuZXhwb3J0IGNsYXNzIFN5bmNlckluaXRpYWxpemVyIGV4dGVuZHMgSW5pdGlhbGl6ZXJQYXRjaGVzIHtcblxuICBhcHBsaWNhYmxlUHJvdmlkZXJzID0gW1wiXmNhdGFsb2dcIl1cblxuICBzdGF0aWMgYXBwbGljYWJsZUtpbmRzID0gW1wiQ29tcG9uZW50Q2xhaW1cIiwgXCJHcm91cENsYWltXCIsIFwiVXNlckNsYWltXCIsIFwiVEZXb3Jrc3BhY2VDbGFpbVwiXVxuXG4gIGFzeW5jIF9fdmFsaWRhdGUoKXsgcmV0dXJuIHRydWU7IH1cblxuICBhc3luYyBfX3BhdGNoZXMoY2xhaW06IGFueSwgX3ByZXZpb3VzQ1I6IGFueSl7XG5cbiAgICBmdW5jdGlvbiBzeW5jSW5mbyhjdHg6YW55KXtcblxuICAgICAgY29uc3QgcHJvdmlkZXI6c3RyaW5nID0gaGVscGVyQ1RYKGN0eCkucHJvdmlkZXJcblxuICAgICAgcmV0dXJuIGNsYWltLnByb3ZpZGVyc1twcm92aWRlcl0uc3luYyB8fCB7fVxuXG4gICAgfVxuXG4gICAgcmV0dXJuIFt7XG5cbiAgICAgIHZhbGlkYXRlKGNyOmFueSl7XG5cbiAgICAgICAgaWYoY3IubWV0YWRhdGEuYW5ub3RhdGlvbnMgJiYgXG4gICAgICAgICAgXG4gICAgICAgICAgY3IubWV0YWRhdGEuYW5ub3RhdGlvbnNbXCJmaXJlc3RhcnRyLmRldi9zeW5jLXBvbGljeVwiXSAmJlxuICAgICAgICAgIFxuICAgICAgICAgIGNyLm1ldGFkYXRhLmFubm90YXRpb25zW1wiZmlyZXN0YXJ0ci5kZXYvcG9saWN5XCJdIFxuICAgICAgICBcbiAgICAgICAgKXtcblxuICAgICAgICAgIGNvbnN0IHBvbGljeSA9IGNyLm1ldGFkYXRhLmFubm90YXRpb25zW1wiZmlyZXN0YXJ0ci5kZXYvcG9saWN5XCJdXG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3Qgc3luY1BvbGljeSA9IGNyLm1ldGFkYXRhLmFubm90YXRpb25zW1wiZmlyZXN0YXJ0ci5kZXYvc3luYy1wb2xpY3lcIl1cblxuICAgICAgICAgIGNvbnN0IHBvbGljaWVzQXJlQ29tcGF0aWJsZSA9IGNvbW1vbi5wb2xpY2llcy5wb2xpY2llc0FyZUNvbXBhdGlibGUoXG5cbiAgICAgICAgICAgIHN5bmNQb2xpY3ksXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHBvbGljeVxuXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgaWYoIXBvbGljaWVzQXJlQ29tcGF0aWJsZSl7XG5cbiAgICAgICAgICAgIHRocm93IGAke3RoaXMuaWRlbnRpZnkoKX06IGluY29tcGF0aWJsZSBwb2xpY2llcyAnJHtwb2xpY3l9JyBhbmQgJyR7c3luY1BvbGljeX0nIGZvciAke2NyLmtpbmR9LyR7Y3IubWV0YWRhdGEubmFtZX1gXG5cbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGNyLm1ldGFkYXRhLmFubm90YXRpb25zICYmIGNyLm1ldGFkYXRhLmFubm90YXRpb25zW1wiZmlyZXN0YXJ0ci5kZXYvc3luYy1wZXJpb2RcIl0pe1xuXG4gICAgICAgICAgaWYoIVBFUklPRF9WQUxJREFUT1IudGVzdChjci5tZXRhZGF0YS5hbm5vdGF0aW9uc1tcImZpcmVzdGFydHIuZGV2L3N5bmMtcGVyaW9kXCJdKSl7XG5cbiAgICAgICAgICAgIHRocm93IGAke3RoaXMuaWRlbnRpZnkoKX06IHBlcmlvZCBpbmNvcnJlY3QgXCIke2NyLm1ldGFkYXRhLmFubm90YXRpb25zW1wiZmlyZXN0YXJ0ci5kZXYvc3luYy1wZXJpb2RcIl19XCIgZm9yICR7Y3Iua2luZH0vJHtjci5tZXRhZGF0YS5uYW1lfWBcblxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cblxuICAgICAgfSxcblxuICAgICAgYXBwbHkoY3I6YW55KXtcblxuICAgICAgICBpZihzeW5jSW5mbyh0aGlzKS5lbmFibGVkKXtcblxuICAgICAgICAgIGNyLm1ldGFkYXRhLmFubm90YXRpb25zID0gY3IubWV0YWRhdGEuYW5ub3RhdGlvbnMgfHwge307XG5cbiAgICAgICAgICBjci5tZXRhZGF0YS5hbm5vdGF0aW9uc1tcImZpcmVzdGFydHIuZGV2L3N5bmMtZW5hYmxlZFwiXSA9IFwidHJ1ZVwiXG5cbiAgICAgICAgICBpZihzeW5jSW5mbyh0aGlzKS5wZXJpb2Qpe1xuXG4gICAgICAgICAgICBjci5tZXRhZGF0YS5hbm5vdGF0aW9ucyA9IGNyLm1ldGFkYXRhLmFubm90YXRpb25zIHx8IHt9O1xuXG4gICAgICAgICAgICBjci5tZXRhZGF0YS5hbm5vdGF0aW9uc1tcImZpcmVzdGFydHIuZGV2L3N5bmMtcGVyaW9kXCJdID0gc3luY0luZm8odGhpcykucGVyaW9kXG5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZihzeW5jSW5mbyh0aGlzKS5wb2xpY3kpe1xuXG4gICAgICAgICAgICBjci5tZXRhZGF0YS5hbm5vdGF0aW9ucyA9IGNyLm1ldGFkYXRhLmFubm90YXRpb25zIHx8IHt9O1xuXG4gICAgICAgICAgICBjci5tZXRhZGF0YS5hbm5vdGF0aW9uc1tcImZpcmVzdGFydHIuZGV2L3N5bmMtcG9saWN5XCJdID0gc3luY0luZm8odGhpcykucG9saWN5XG5cbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjcjtcbiAgICAgIH0sXG5cbiAgICAgIGlkZW50aWZ5KCl7XG5cbiAgICAgICAgcmV0dXJuIFwiaW5pdGlhbGl6ZXJzL1N5bmNlckluaXRpYWxpemVyXCI7XG5cbiAgICAgIH1cbiAgICB9XVxuICB9XG59XG5cbiJdfQ==
|
|
233822
233966
|
|
|
233823
233967
|
/***/ }),
|
|
233824
233968
|
|
|
@@ -235333,6 +235477,7 @@ const crawler_1 = __nccwpck_require__(26675);
|
|
|
235333
235477
|
const fs_1 = __importDefault(__nccwpck_require__(57147));
|
|
235334
235478
|
const path_1 = __importDefault(__nccwpck_require__(71017));
|
|
235335
235479
|
const catalog_common_1 = __importDefault(__nccwpck_require__(74100));
|
|
235480
|
+
const github_1 = __importDefault(__nccwpck_require__(39759));
|
|
235336
235481
|
const CLAIM_REF_ANNOTATION = "firestartr.dev/claim-ref";
|
|
235337
235482
|
const log = (0, debug_1.default)("firestartr:renderer");
|
|
235338
235483
|
/*
|
|
@@ -235390,7 +235535,21 @@ exports.render = render;
|
|
|
235390
235535
|
* Function called when rendering Terraform workspaces Plans
|
|
235391
235536
|
* based on the previous renderer Terraform workspaces
|
|
235392
235537
|
*/
|
|
235393
|
-
async function renderWorkspacePlans(source, destiny, prLink, sha) {
|
|
235538
|
+
async function renderWorkspacePlans(source, destiny, prLink, sha, ghCli = github_1.default) {
|
|
235539
|
+
const [orgRepo, prNumber] = prLink.split("#");
|
|
235540
|
+
const [org, repo] = orgRepo.split("/");
|
|
235541
|
+
const { data: files } = await ghCli.pulls.getPrFiles(parseInt(prNumber), repo, org);
|
|
235542
|
+
if (files && files.length > 0 && files[0].status == "removed") {
|
|
235543
|
+
const content = await ghCli.repo.getContent(files[0].filename, repo, org);
|
|
235544
|
+
const workspace = catalog_common_1.default.io.fromYaml(content);
|
|
235545
|
+
workspace.kind = "FirestartrTerraformWorkspacePlan";
|
|
235546
|
+
workspace.metadata.annotations = Object.assign(Object.assign({}, workspace.metadata.annotations), { [catalog_common_1.default.generic.getFirestartrAnnotation("pull-request-plan")]: prLink, [catalog_common_1.default.generic.getFirestartrAnnotation("plan-sha")]: sha });
|
|
235547
|
+
workspace.metadata.annotations[catalog_common_1.default.generic.getFirestartrAnnotation("policy")] = "destroy";
|
|
235548
|
+
const workspacePlan = catalog_common_1.default.io.toYaml(Object.assign({}, workspace), { quotingType: '"', lineWidth: -1 });
|
|
235549
|
+
const fileName = path_1.default.join(destiny, path_1.default.basename(files[0].filename));
|
|
235550
|
+
fs_1.default.writeFileSync(fileName, workspacePlan);
|
|
235551
|
+
return;
|
|
235552
|
+
}
|
|
235394
235553
|
// Iterate over the source folder and get the list of Terraform workspaces
|
|
235395
235554
|
await (0, crawler_1.crawl)(source, () => true, (entry, data) => {
|
|
235396
235555
|
const fileName = path_1.default.join(destiny, path_1.default.basename(entry));
|
|
@@ -235582,7 +235741,7 @@ function getPreviousCRfromClaim(claim, previousCRs) {
|
|
|
235582
235741
|
function isExcludedFromPreviousCR(crKind) {
|
|
235583
235742
|
return ["FirestartrGithubRepositoryFeature"].includes(crKind);
|
|
235584
235743
|
}
|
|
235585
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxxQ0FBa0Q7QUFDbEQsaURBQWtDO0FBQ2xDLGtEQUEwQjtBQUUxQixpQ0FBdUQ7QUFFdkQscUVBQTBFO0FBRzFFLHlEQUF1SDtBQUN2SCwrQ0FBa0Q7QUFDbEQscUNBQW1FO0FBRW5FLHdEQUFpRTtBQUNqRSx1Q0FBa0M7QUFDbEMsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4QixvRUFBb0M7QUFDcEMsTUFBTSxvQkFBb0IsR0FBRywwQkFBMEIsQ0FBQTtBQUd2RCxNQUFNLEdBQUcsR0FBRyxJQUFBLGVBQUssRUFBQyxxQkFBcUIsQ0FBQyxDQUFBO0FBcUN4Qzs7Ozs7Ozs7Ozs7R0FXRztBQUNJLEtBQUssVUFBVSxpQkFBaUIsQ0FFckMsWUFBMEIsRUFFMUIsTUFBVyxFQUFFLEVBRWIsbUJBQTJCLGVBQWUsRUFFMUMsY0FBc0IsaUJBQWlCO0lBSXZDLE1BQU0sWUFBWSxHQUFHLElBQUksV0FBRyxDQUFDO1FBRTNCLE1BQU0sRUFBRSxnQkFBZ0I7UUFFeEIsbUJBQW1CLEVBQUUsT0FBTztRQUU1QixjQUFjLEVBQUUsc0JBQWMsQ0FBQyxpQkFBaUI7S0FFakQsQ0FBQyxDQUFBO0lBRUYsTUFBTSxlQUFlLEdBQUcsSUFBSSxXQUFHLENBQUM7UUFFOUIsTUFBTSxFQUFFLFdBQVc7UUFFbkIsbUJBQW1CLEVBQUUsT0FBTztRQUU1QixjQUFjLEVBQUUsc0JBQWMsQ0FBQyxpQkFBaUI7S0FFakQsQ0FBQyxDQUFBO0lBRUYsTUFBTSxNQUFNLEdBQVEsTUFBTSxhQUFhLENBRXJDLFlBQVksRUFFWixlQUFlLEVBRWY7UUFDRSxZQUFZO1FBRVosR0FBRztRQUVILE9BQU8sRUFBRSxFQUFFO0tBQ1osQ0FDRixDQUFBO0lBRUQsZUFBZSxDQUFDLEtBQUssRUFBRSxD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QWEsSUFBSSxlQUFlLEVBQUM7UUFFekMsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBRTdDLElBQUcsSUFBQSw0QkFBZSxFQUFDLFVBQVUsQ0FBQztZQUFFLFNBQVE7UUFFeEMsSUFBRyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQUUsU0FBUTtRQUV0RCxJQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBQztZQUV6RixPQUFPLFVBQVUsQ0FBQTtTQUVsQjtLQUVGO0lBRUQsT0FBTyxLQUFLLENBQUE7QUFFZCxDQUFDO0FBR0QsU0FBUyx3QkFBd0IsQ0FBQyxNQUFjO0lBRzlDLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUcvRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IElSZW5hbWVSZXN1bHQsIGxvYWRBbGwgfSBmcm9tIFwiLi9sb2FkZXJcIjtcbmltcG9ydCAqIGFzIGNoYXJ0cyBmcm9tIFwiLi9jaGFydHNcIlxuaW1wb3J0IERlYnVnIGZyb20gXCJkZWJ1Z1wiO1xuaW1wb3J0IHsgQmFzZUNoYXJ0IH0gZnJvbSBcIi4vY2hhcnRzL2Jhc2VcIjtcbmltcG9ydCB7IEFwaU9iamVjdCwgQXBwLCBZYW1sT3V0cHV0VHlwZSB9IGZyb20gXCJjZGs4c1wiO1xuaW1wb3J0IHsgR2xvYmFsU2VjdGlvbiB9IGZyb20gXCIuL2dsb2JhbHMvYmFzZVwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVGZWF0dXJlc1BhdGNoZXMgfSBmcm9tIFwiLi9jaGFydHMvZ2l0aHViL2ZlYXR1cmVSZW5kZXJlclwiO1xuaW1wb3J0IHsgT3ZlcnJpZGVyUGF0Y2hlcyB9IGZyb20gXCIuL292ZXJyaWRlcnMvYmFzZVwiO1xuaW1wb3J0IHsgSUN1c3RvbVJlc291cmNlUGF0Y2ggfSBmcm9tIFwiLi9wYXRjaGVzXCI7XG5pbXBvcnQgeyBpc0NhdGFsb2dFbnRpdHksIHZhbGlkYXRlUmVmZXJlbnRpYWxJbnRlZ3JpdHksIHZhbGlkYXRlVGZTdGF0ZUtleVVuaXF1ZW5lc3MgfSBmcm9tIFwiLi92YWxpZGF0aW9ucy9yZWZlcmVuY2VzXCI7XG5pbXBvcnQgeyAgc2V0UmVuZGVyZWRDbGFpbSB9IGZyb20gXCIuL3JlZnJlc29sdmVyXCI7XG5pbXBvcnQgeyBBbGxvd2VkUHJvdmlkZXJzLCBnZXRDb25maWd1cmVkUHJvdmlkZXIgfSBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCB7IE5vcm1hbGl6ZXIgfSBmcm9tIFwiLi9ub3JtYWxpemVycy9iYXNlXCI7XG5pbXBvcnQgeyBzb3J0UmVuZGVyQ2xhaW1zQnlLaW5kIH0gZnJvbSBcIi4vcmVmc1NvcnRlci9yZWZzU29ydGVyXCI7XG5pbXBvcnQgeyBjcmF3bCB9IGZyb20gXCIuL2NyYXdsZXJcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgY29tbW9uIGZyb20gXCJjYXRhbG9nX2NvbW1vblwiO1xuY29uc3QgQ0xBSU1fUkVGX0FOTk9UQVRJT04gPSBcImZpcmVzdGFydHIuZGV2L2NsYWltLXJlZlwiXG5cblxuY29uc3QgbG9nID0gRGVidWcoXCJmaXJlc3RhcnRyOnJlbmRlcmVyXCIpXG5cbmV4cG9ydCB0eXBlIFJlbmRlckNsYWltRGF0YSA9IHtcblxuICBjbGFpbTogYW55XG5cbiAgY2xhaW1QYXRoPzogc3RyaW5nXG5cbiAgaW5pdGlhbGl6ZXJzOiBhbnkgW11cblxuICBvdmVycmlkZXM6IE92ZXJyaWRlclBhdGNoZXNbXVxuXG4gIGdsb2JhbHM6IEdsb2JhbFNlY3Rpb25bXSxcblxuICBub3JtYWxpemVyczogTm9ybWFsaXplcltdXG5cbn1cblxudHlwZSBDbGFpbUtpbmQgPSBzdHJpbmc7XG50eXBlIENsYWltTmFtZSA9IHN0cmluZztcbmV4cG9ydCB0eXBlIFJlbmRlckNsYWltS2V5ID0gYCR7Q2xhaW1LaW5kfS0ke0NsYWltTmFtZX1gXG5cbnR5cGUgQ1JLaW5kID0gc3RyaW5nO1xudHlwZSBDUk5hbWUgPSBzdHJpbmc7XG50eXBlIFJlbmRlckNSS2V5ID0gYCR7Q1JLaW5kfS0ke0NSTmFtZX1gXG5cbmV4cG9ydCB0eXBlIFJlbmRlcmVkQ3JNYXAgPSB7XG5cbiAgW2tleTogUmVuZGVyQ1JLZXldOiBBcGlPYmplY3Rcbn1cblxuZXhwb3J0IHR5cGUgUmVuZGVyQ2xhaW1zID0ge1xuXG4gIFtrZXk6IFJlbmRlckNsYWltS2V5XTogUmVuZGVyQ2xhaW1EYXRhXG5cbn1cblxuLypcbiAqIEZ1bmN0aW9uIGNhbGxlZCB3aGVuIHJlbmRlcmluZyBmcm9tIHRoZSBpbXBvcnRlciBjbGFzcy5cbiAqXG4gKiBJbnB1dDpcbiAqIC0gcmVuZGVyQ2xhaW1zOiBhIFJlbmRlckNsYWltcyBvYmplY3QsIHdoaWNoIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGNsYWltc1xuICogICB3ZSB3YW50IHRvIHJlbmRlclxuICpcbiAqIFJldHVybjpcbiAqIC0gVGhlIHJlc3VsdCBvZiByZW5kZXJpbmcgdGhlIHJlbmRlckNsYWltcyBvYmplY3QsIHBsdXMgdGhlXG4gKiAgIHJlbmRlcmVkIGZpcmVzdGFydHItYWxsIGdyb3VwXG4gKlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyRnJvbUltcG9ydHMoXG5cbiAgcmVuZGVyQ2xhaW1zOiBSZW5kZXJDbGFpbXMsXG5cbiAgY3JzOiBhbnkgPSB7fSxcblxuICBjYXRhbG9nT3V0cHV0RGlyOiBzdHJpbmcgPSBcIi90bXAvLmNhdGFsb2dcIixcblxuICBjck91dHB1dERpcjogc3RyaW5nID0gXCIvdG1wLy5yZXNvdXJjZXNcIixcblxuKSB7XG5cbiAgY29uc3QgY2F0YWxvZ1Njb3BlID0gbmV3IEFwcCh7XG5cbiAgICBvdXRkaXI6IGNhdGFsb2dPdXRwdXREaXIsXG5cbiAgICBvdXRwdXRGaWxlRXh0ZW5zaW9uOiBcIi55YW1sXCIsXG5cbiAgICB5YW1sT3V0cHV0VHlwZTogWWFtbE91dHB1dFR5cGUuRklMRV9QRVJfUkVTT1VSQ0UsXG5cbiAgfSlcblxuICBjb25zdCBmaXJlc3RhcnRyU2NvcGUgPSBuZXcgQXBwKHtcblxuICAgIG91dGRpcjogY3JPdXRwdXREaXIsXG5cbiAgICBvdXRwdXRGaWxlRXh0ZW5zaW9uOiBcIi55YW1sXCIsXG5cbiAgICB5YW1sT3V0cHV0VHlwZTogWWFtbE91dHB1dFR5cGUuRklMRV9QRVJfUkVTT1VSQ0UsXG5cbiAgfSlcblxuICBjb25zdCByZXN1bHQ6IGFueSA9IGF3YWl0IGZSZW5kZXJDbGFpbXMoXG5cbiAgICBjYXRhbG9nU2NvcGUsXG5cbiAgICBmaXJlc3RhcnRyU2NvcGUsXG5cbiAgICB7XG4gICAgICByZW5kZXJDbGFpbXMsXG5cbiAgICAgIGNycyxcblxuICAgICAgcmVuYW1lczogW11cbiAgICB9LFxuICApXG5cbiAgZmlyZXN0YXJ0clNjb3BlLnN5bnRoKClcblxuICByZXR1cm4gcmVzdWx0XG5cbn1cblxuXG4vKlxuICogRnVuY3Rpb24gY2FsbGVkIHdoZW4gcmVuZGVyaW5nIGJ1dCBub3QgaW1wb3J0aW5nXG4gKlxuICogSW5wdXQ6XG4gKiAtIHNjb3BlOiBhbiBvYmplY3QsIHVzZWQgdG8gcmVwcmVzZW50IENES1RGJ3MgZXhlY3V0aW9uIHNjb3BlXG4gKlxuICogUmV0dXJuOlxuICogLSBUaGUgcmVzdWx0IG9mIHJlbmRlcmluZyB0aGUgcmVuZGVyQ2xhaW1zIG9iamVjdCwgcGx1cyB0aGVcbiAqICAgcmVuZGVyZWQgZmlyZXN0YXJ0ci1hbGwgZ3JvdXBcbiAqXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXIoXG5cbiAgY2F0YWxvZ1Njb3BlOiBDb25zdHJ1Y3QsXG5cbiAgZmlyZXN0YXJ0clNjb3BlOiBDb25zdHJ1Y3QsXG5cbiAgKTogUHJvbWlzZTxSZW5kZXJlZENyTWFwPiB7XG5cbiAgY29uc3QgZGF0YToge1xuXG4gICAgcmVuZGVyQ2xhaW1zOiBSZW5kZXJDbGFpbXMsXG5cbiAgICBjcnM6IGFueSxcblxuICAgIHJlbmFtZXM/OiBJUmVuYW1lUmVzdWx0W11cblxuICB9ID0gYXdhaXQgbG9hZEFsbCgpXG5cbiAgY29uc3QgcmVzdWx0OiBhbnkgPSBhd2FpdCBmUmVuZGVyQ2xhaW1zKGNhdGFsb2dTY29wZSwgZmlyZXN0YXJ0clNjb3BlLCBkYXRhKVxuXG4gIHZhbGlkYXRlUmVmZXJlbnRpYWxJbnRlZ3JpdHkocmVzdWx0KVxuXG4gIHZhbGlkYXRlVGZTdGF0ZUtleVVuaXF1ZW5lc3MocmVzdWx0KVxuXG4gIHJldHVybiByZXN1bHRcblxufVxuXG4vKlxuICogRnVuY3Rpb24gY2FsbGVkIHdoZW4gcmVuZGVyaW5nIFRlcnJhZm9ybSB3b3Jrc3BhY2VzIFBsYW5zXG4gKiBiYXNlZCBvbiB0aGUgcHJldmlvdXMgcmVuZGVyZXIgVGVycmFmb3JtIHdvcmtzcGFjZXNcbiovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyV29ya3NwYWNlUGxhbnMoc291cmNlOiBzdHJpbmcsIGRlc3Rpbnk6IHN0cmluZywgcHJMaW5rOiBzdHJpbmcsIHNoYTogc3RyaW5nKSB7XG5cbiAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBzb3VyY2UgZm9sZGVyIGFuZCBnZXQgdGhlIGxpc3Qgb2YgVGVycmFmb3JtIHdvcmtzcGFjZXNcblxuICBhd2FpdCBjcmF3bChzb3VyY2UsICgpID0+IHRydWUsIChlbnRyeTogc3RyaW5nLCBkYXRhOiBhbnkpID0+IHtcblxuICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5qb2luKGRlc3RpbnksIHBhdGguYmFzZW5hbWUoZW50cnkpKVxuXG4gICAgY29uc3Qgd29ya3NwYWNlOiBhbnkgPSBjb21tb24uaW8uZnJvbVlhbWwoZGF0YSlcblxuICAgIHdvcmtzcGFjZS5raW5kID0gXCJGaXJlc3RhcnRyVGVycmFmb3JtV29ya3NwYWNlUGxhblwiXG4gICAgd29ya3NwYWNlLm1ldGFkYXRhLmFubm90YXRpb25zID0ge1xuICAgICAgLi4ud29ya3NwYWNlLm1ldGFkYXRhLmFubm90YXRpb25zLFxuICAgICAgW2NvbW1vbi5nZW5lcmljLmdldEZpcmVzdGFydHJBbm5vdGF0aW9uKFwicHVsbC1yZXF1ZXN0LXBsYW5cIildOiBwckxpbmssXG4gICAgICBbY29tbW9uLmdlbmVyaWMuZ2V0RmlyZXN0YXJ0ckFubm90YXRpb24oXCJwbGFuLXNoYVwiKV06IHNoYVxuICAgIH1cblxuICAgIGNvbnN0IHdvcmtzcGFjZVBsYW4gPSBjb21tb24uaW8udG9ZYW1sKHtcbiAgICAgIC4uLndvcmtzcGFjZVxuICAgIH0sIHsgcXVvdGluZ1R5cGU6ICdcIicsIGxpbmVXaWR0aDogLTEgfSlcblxuICAgIGZzLndyaXRlRmlsZVN5bmMoZmlsZU5hbWUsIHdvcmtzcGFjZVBsYW4pXG5cbiAgfSlcblxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkTGFzdFN0YXRlQW5kTGFzdENsYWltQW5ub3RhdGlvbnMoXG4gIGZpbGVQYXRoOiBzdHJpbmcsIGxhc3RTdGF0ZVBSTGluazogc3RyaW5nLCBsYXN0Q2xhaW1QUkxpbms6IHN0cmluZ1xuKSB7XG5cbiAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBzb3VyY2UgZm9sZGVyIGFuZCBnZXQgdGhlIGxpc3Qgb2YgVGVycmFmb3JtIHdvcmtzcGFjZXNcblxuICBjb25zdCB3b3Jrc3BhY2U6IGFueSA9IGNvbW1vbi5pby5mcm9tWWFtbChmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsIFwidXRmLThcIikpO1xuXG4gIGNvbnN0IHN0YXRlTGlua0FzQXJyYXk6IHN0cmluZ1tdID0gbGFzdFN0YXRlUFJMaW5rLnNwbGl0KFwiL1wiKTtcbiAgY29uc3Qgc3RhdGVBbm5vdGF0aW9uVmFsdWU6IHN0cmluZyA9IGAke3N0YXRlTGlua0FzQXJyYXlbM119LyR7c3RhdGVMaW5rQXNBcnJheVs0XX0jJHtzdGF0ZUxpbmtBc0FycmF5WzZdfWBcblxuICBjb25zdCBjbGFpbUxpbmtBc0FycmF5OiBzdHJpbmdbXSA9IGxhc3RDbGFpbVBSTGluay5zcGxpdChcIi9cIik7XG4gIGNvbnN0IGNsYWltQW5ub3RhdGlvblZhbHVlOiBzdHJpbmcgPSBgJHtjbGFpbUxpbmtBc0FycmF5WzNdfS8ke2NsYWltTGlua0FzQXJyYXlbNF19IyR7Y2xhaW1MaW5rQXNBcnJheVs2XX1gXG5cbiAgd29ya3NwYWNlLm1ldGFkYXRhLmFubm90YXRpb25zID0ge1xuICAgIC4uLndvcmtzcGFjZS5tZXRhZGF0YS5hbm5vdGF0aW9ucyxcbiAgICBbY29tbW9uLmdlbmVyaWMuZ2V0RmlyZXN0YXJ0ckFubm90YXRpb24oXCJsYXN0LXN0YXRlLXByXCIpXTogc3RhdGVBbm5vdGF0aW9uVmFsdWUsXG4gICAgW2NvbW1vbi5nZW5lcmljLmdldEZpcmVzdGFydHJBbm5vdGF0aW9uKFwibGFzdC1jbGFpbS1wclwiKV06IGNsYWltQW5ub3RhdGlvblZhbHVlXG4gIH1cblxuICBmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBjb21tb24uaW8udG9ZYW1sKFxuICAgIHsgLi4ud29ya3NwYWNlIH0sIHsgcXVvdGluZ1R5cGU6ICdcIicsIGxpbmVXaWR0aDogLTEgfVxuICApKVxuXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZSZW5kZXJDbGFpbXMoXG5cbiAgY2F0YWxvZ1Njb3BlOiBDb25zdHJ1Y3QsXG5cbiAgZmlyZXN0YXJ0clNjb3BlOiBDb25zdHJ1Y3QsXG5cbiAgZGF0YToge1xuXG4gICAgcmVuZGVyQ2xhaW1zOiBSZW5kZXJDbGFpbXMsXG5cbiAgICBjcnM6IGFueSxcblxuICAgIHJlbmFtZXM/OiBJUmVuYW1lUmVzdWx0W11cblxuICB9LFxuXG4pOiBQcm9taXNlPFJlbmRlcmVkQ3JNYXA+IHtcblxuICBjb25zdCByZXN1bHQ6IFJlbmRlcmVkQ3JNYXAgPSB7fVxuXG4gIGNvbnN0IHsgcmVuZGVyQ2xhaW1zLCBjcnMgfSA9IGRhdGFcblxuICBjb25zdCBzb3J0ZWRLaW5kcyA9IHNvcnRLaW5kcyhbXCJVc2VyQ2xhaW1cIiwgXCJHcm91cENsYWltXCIsIFwiQ29tcG9uZW50Q2xhaW1cIiwgXCJEb21haW5DbGFpbVwiLCBcIlN5c3RlbUNsYWltXCIsIFwiVEZXb3Jrc3BhY2VDbGFpbVwiLCBcIkFyZ29EZXBsb3lDbGFpbVwiXSwgcmVuZGVyQ2xhaW1zKVxuXG4gIGZvciAoY29uc3QgcmVuZGVyQ2xhaW1zIG9mIHNvcnRlZEtpbmRzKSB7XG5cbiAgICBmb3IgKGNvbnN0IGNsYWltS2V5IG9mIE9iamVjdC5rZXlzKHJlbmRlckNsYWltcykpIHtcblxuICAgICAgY29uc3QgY2xhaW0gPSByZW5kZXJDbGFpbXNbY2xhaW1LZXkgYXMgUmVuZGVyQ2xhaW1LZXldLmNsYWltXG5cbiAgICAgIGNvbnN0IGNvbmZpZ3VyZWRQcm92aWRlciA9IGdldENvbmZpZ3VyZWRQcm92aWRlcigpLnRvU3RyaW5nKClcblxuICAgICAgbGV0IHByb3ZpZGVycyA9IE9iamVjdC5rZXlzKGNsYWltLnByb3ZpZGVycylcblxuICAgICAgaWYoY29uZmlndXJlZFByb3ZpZGVyICE9IEFsbG93ZWRQcm92aWRlcnMuYWxsLnRvU3RyaW5nKCkpe1xuXG4gICAgICAgIHByb3ZpZGVycyA9IHByb3ZpZGVycy5maWx0ZXIoXG5cbiAgICAgICAgICAocHJvdmlkZXI6IHN0cmluZykgPT4gcHJvdmlkZXIgPT09IGNvbmZpZ3VyZWRQcm92aWRlclxuXG4gICAgICAgIClcblxuICAgICAgfVxuXG5cbiAgICAgIGNvbnN0IHByZXZpb3VzQ1IgPSBnZXRQcmV2aW91c0NSZnJvbUNsYWltKGNsYWltLCBjcnMpXG5cbiAgICAgIGNvbnN0IHBhdGNoZXMgPSBhd2FpdCBleHRyYWN0UGF0Y2hlcyhyZW5kZXJDbGFpbXNbY2xhaW1LZXkgYXMgUmVuZGVyQ2xhaW1LZXldLCBwcmV2aW91c0NSKVxuXG4gICAgICBpZiAoIXByZXZpb3VzQ1IpIHtcblxuICAgICAgICBsb2coYE5vIENSIGZvdW5kIGZvciBjbGFpbSAke2NsYWltS2V5fSwgaXQgd2lsbCBiZSByZW5kZXJlZCBmcm9tIHNjcmF0Y2hgKVxuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtmaXJlc3RhcnRyRW50aXR5LCBleHRyYUNoYXJ0cywgY2F0YWxvZ0VudGl0eX0gID0gYXdhaXQgcmVuZGVyQ2xhaW0oXG5cbiAgICAgICAgY2F0YWxvZ1Njb3BlLFxuXG4gICAgICAgIGZpcmVzdGFydHJTY29wZSxcblxuICAgICAgICBjbGFpbSxcblxuICAgICAgICBwYXRjaGVzLFxuXG4gICAgICAgIHByZXZpb3VzQ1IsXG5cbiAgICAgIClcblxuICAgICAgaWYoY2F0YWxvZ0VudGl0eSkge1xuXG4gICAgICAgIHJlc3VsdFtgJHtjYXRhbG9nRW50aXR5LmtpbmR9LSR7Y2F0YWxvZ0VudGl0eS5tZXRhZGF0YS5uYW1lfWBdID0gY2F0YWxvZ0VudGl0eS50b0pzb24oKVxuICAgICAgXG4gICAgICB9XG5cbiAgICAgIC8qKlxuXG4gICAgICAqIElmIHRoZXJlIGlzIG5vIHByb3ZpZGVyIGRvbid0IHN0b3JlIHRoZSBDUiBpbiB0aGUgbWFwXG5cbiAgICAgICovXG5cbiAgICAgIGlmICghZmlyZXN0YXJ0ckVudGl0eSkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGZpcmVzdGFydHJFbnRpdHlKc29uID0gZmlyZXN0YXJ0ckVudGl0eS50b0pzb24oKVxuXG4gICAgICBzZXRSZW5kZXJlZENsYWltKGNsYWltLCBmaXJlc3RhcnRyRW50aXR5SnNvbilcblxuICAgICAgZm9yKGNvbnN0IGV4dHJhQ2hhcnQgb2YgZXh0cmFDaGFydHMpe1xuXG4gICAgICAgIGNvbnN0IHtjbGFpbSwgY2hhcnR9ID0gZXh0cmFDaGFydFxuXG4gICAgICAgIHNldFJlbmRlcmVkQ2xhaW0oY2xhaW0sIGNoYXJ0LnRvSnNvbigpKVxuXG4gICAgICAgIHJlc3VsdFtgJHtjaGFydC5raW5kfS0ke2NoYXJ0Lm1ldGFkYXRhLm5hbWV9YF0gPSBjaGFydC50b0pzb24oKVxuXG4gICAgICB9XG5cbiAgICAgIGlmKCFmaXJlc3RhcnRyRW50aXR5SnNvbi5tZXRhZGF0YS5hbm5vdGF0aW9ucyB8fCAhZmlyZXN0YXJ0ckVudGl0eUpzb24ubWV0YWRhdGEubmFtZSkgdGhyb3cgZmlyZXN0YXJ0ckVudGl0eUpzb25cblxuICAgICAgcmVzdWx0W2Ake2ZpcmVzdGFydHJFbnRpdHkua2luZH0tJHtmaXJlc3RhcnRyRW50aXR5SnNvbi5tZXRhZGF0YS5uYW1lfWBdID0gZmlyZXN0YXJ0ckVudGl0eUpzb25cblxuICAgIH1cblxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxuXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RQYXRjaGVzKFxuXG4gIGNsYWltVG9SZW5kZXJEYXRhOiBSZW5kZXJDbGFpbURhdGEsIHByZXZpb3VzQ1I6IGFueVxuXG4pOiBQcm9taXNlPElDdXN0b21SZXNvdXJjZVBhdGNoW10+IHtcblxuICBsZXQgdG90YWxQYXRjaGVzOiBJQ3VzdG9tUmVzb3VyY2VQYXRjaFtdID0gW11cblxuXG4gIGZvciAoY29uc3Qgbm9ybWFsaXplciBvZiBjbGFpbVRvUmVuZGVyRGF0YS5ub3JtYWxpemVycykge1xuXG4gICAgY29uc3QgcGF0Y2hlcyA9IGF3YWl0IG5vcm1hbGl6ZXIucGF0Y2hlcyhjbGFpbVRvUmVuZGVyRGF0YVtcImNsYWltXCJdLCBwcmV2aW91c0NSKVxuXG4gICAgdG90YWxQYXRjaGVzID0gdG90YWxQYXRjaGVzLmNvbmNhdChwYXRjaGVzKS5mbGF0KClcblxuICB9XG5cbiAgZm9yIChjb25zdCBpbml0aWFsaXplciBvZiBjbGFpbVRvUmVuZGVyRGF0YS5pbml0aWFsaXplcnMpIHtcblxuICAgIGNvbnN0IHBhdGNoZXMgPSBhd2FpdCBpbml0aWFsaXplci5wYXRjaGVzKGNsYWltVG9SZW5kZXJEYXRhW1wiY2xhaW1cIl0sIHByZXZpb3VzQ1IpXG5cbiAgICB0b3RhbFBhdGNoZXMgPSB0b3RhbFBhdGNoZXMuY29uY2F0KHBhdGNoZXMpLmZsYXQoKVxuXG4gIH1cblxuICBmb3IgKGNvbnN0IG92ZXJyaWRlciBvZiBjbGFpbVRvUmVuZGVyRGF0YS5vdmVycmlkZXMpIHtcblxuICAgIGNvbnN0IHBhdGNoZXMgPSBhd2FpdCBvdmVycmlkZXIucGF0Y2hlcyhjbGFpbVRvUmVuZGVyRGF0YVtcImNsYWltXCJdLCBwcmV2aW91c0NSKVxuXG4gICAgdG90YWxQYXRjaGVzID0gdG90YWxQYXRjaGVzLmNvbmNhdChwYXRjaGVzKS5mbGF0KClcblxuICB9XG5cblxuICBpZiAoY2xhaW1Ub1JlbmRlckRhdGEuY2xhaW0ua2luZCA9PT0gXCJDb21wb25lbnRDbGFpbVwiKSB7XG5cbiAgICB0b3RhbFBhdGNoZXMgPSB0b3RhbFBhdGNoZXMuY29uY2F0KChhd2FpdCBnZW5lcmF0ZUZlYXR1cmVzUGF0Y2hlcyhjbGFpbVRvUmVuZGVyRGF0YS5jbGFpbSkpKS5mbGF0KClcblxuICB9XG5cblxuICBmb3IgKGNvbnN0IGdsb2JhbCBvZiBjbGFpbVRvUmVuZGVyRGF0YS5nbG9iYWxzKSB7XG5cbiAgICBjb25zdCBwYXRjaGVzID0gYXdhaXQgZ2xvYmFsLnBhdGNoZXMoY2xhaW1Ub1JlbmRlckRhdGEuY2xhaW0sIHByZXZpb3VzQ1IpXG5cbiAgICB0b3RhbFBhdGNoZXMgPSB0b3RhbFBhdGNoZXMuY29uY2F0KHBhdGNoZXMpLmZsYXQoKVxuXG4gIH1cblxuICByZXR1cm4gdG90YWxQYXRjaGVzXG5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUmVuZGVyQ2xhaW1SZXN1bHQge1xuICBjYXRhbG9nRW50aXR5PzogQXBpT2JqZWN0O1xuICBmaXJlc3RhcnRyRW50aXR5PzogQXBpT2JqZWN0O1xuICBleHRyYUNoYXJ0czogeyBjbGFpbToge2tpbmQ6IHN0cmluZywgbmFtZTogc3RyaW5nfSwgY2hhcnQ6IEFwaU9iamVjdH1bXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVuZGVyQ2xhaW0oXG5cbiAgY2F0YWxvZ1Njb3BlOiBDb25zdHJ1Y3QsXG5cbiAgZmlyZXN0YXJ0clNjb3BlOiBDb25zdHJ1Y3QsXG5cbiAgY2xhaW06IGFueSxcblxuICBwYXRjaGVzOiBJQ3VzdG9tUmVzb3VyY2VQYXRjaFtdLFxuXG4gIHByZXZpb3VzQ1I6IGFueSB8IG51bGwgPSBudWxsXG5cbiAgKTogUHJvbWlzZTxJUmVuZGVyQ2xhaW1SZXN1bHQ+IHtcblxuICBsZXQgY2F0YWxvZ0VudGl0eTogQmFzZUNoYXJ0IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBsZXQgZmlyZXN0YXJ0ckVudGl0eTogQmFzZUNoYXJ0IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGNoYXJ0SWQgPSBgJHtjbGFpbS5raW5kfS0ke2NsYWltLm5hbWV9YC50b0xvd2VyQ2FzZSgpO1xuXG4gIGxldCBmaXJlc3RhcnRySWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGlmIChwcmV2aW91c0NSKSB7XG5cbiAgICBmaXJlc3RhcnRySWQgPSBwcmV2aW91c0NSPy5zcGVjPy5maXJlc3RhcnRyPy50ZlN0YXRlS2V5IHx8IG51bGw7XG5cbiAgfVxuXG4gIGNvbnN0IHJlbmRlclBhdGNoZXMgPSBwYXRjaGVzLmZpbHRlcigocGF0Y2g6IGFueSkgPT4gIXBhdGNoLmlzUG9zdFBhdGNoKVxuICBjb25zdCBwb3N0UGF0Y2hlcyA9IHBhdGNoZXMuZmlsdGVyKChwYXRjaDphbnkpID0+IHBhdGNoLmlzUG9zdFBhdGNoKVxuXG4gIGNvbnN0IHByb3ZpZGVyID0gZ2V0Q29uZmlndXJlZFByb3ZpZGVyKClcblxuICBzd2l0Y2ggKGNsYWltLmtpbmQpIHtcblxuICAgIGNhc2UgXCJEb21haW5DbGFpbVwiOlxuXG4gICAgICBjYXRhbG9nRW50aXR5ID0gbmV3IGNoYXJ0cy5kZWZhdWx0LkNhdGFsb2dEb21haW5DaGFydChcbiAgICAgICAgY2F0YWxvZ1Njb3BlLCBcbiAgICAgICAgYGNhdGFsb2ctJHtjaGFydElkfWAsIFxuICAgICAgICBmaXJlc3RhcnRySWQsIFxuICAgICAgICBjbGFpbSwgXG4gICAgICAgIHJlbmRlclBhdGNoZXNcbiAgICAgICk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlN5c3RlbUNsYWltXCI6XG5cbiAgICAgIGNhdGFsb2dFbnRpdHkgPSBuZXcgY2hhcnRzLmRlZmF1bHQuQ2F0YWxvZ1N5c3RlbUNoYXJ0KFxuICAgICAgICBjYXRhbG9nU2NvcGUsIFxuICAgICAgICBgY2F0YWxvZy0ke2NoYXJ0SWR9YCwgXG4gICAgICAgIGZpcmVzdGFydHJJZCwgXG4gICAgICAgIGNsYWltLCBcbiAgICAgICAgcmVuZGVyUGF0Y2hlc1xuICAgICAgKTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiR3JvdXBDbGFpbVwiOlxuXG4gICAgICBjYXRhbG9nRW50aXR5ID0gbmV3IGNoYXJ0cy5kZWZhdWx0LkNhdGFsb2dHcm91cENoYXJ0KGNhdGFsb2dTY29wZSwgYGNhdGFsb2ctJHtjaGFydElkfWAsIGZpcmVzdGFydHJJZCwgY2xhaW0sIHJlbmRlclBhdGNoZXMpO1xuXG4gICAgICBpZiAoY2xhaW0ucHJvdmlkZXJzLmdpdGh1YiAmJiAocHJvdmlkZXIgPT09IEFsbG93ZWRQcm92aWRlcnMuZ2l0aHViIHx8IHByb3ZpZGVyID09PSBBbGxvd2VkUHJvdmlkZXJzLmFsbCkpIHtcblxuICAgICAgICBmaXJlc3RhcnRyRW50aXR5ID0gbmV3IGNoYXJ0cy5kZWZhdWx0LkdpdGh1Ykdyb3VwQ2hhcnQoXG4gICAgICAgICAgZmlyZXN0YXJ0clNjb3BlLFxuICAgICAgICAgIGBnaXRodWItJHtjaGFydElkfWAsXG4gICAgICAgICAgZmlyZXN0YXJ0cklkLFxuICAgICAgICAgIGNsYWltLFxuICAgICAgICAgIHJlbmRlclBhdGNoZXNcbiAgICAgICAgKTtcblxuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJVc2VyQ2xhaW1cIjpcblxuICAgICAgY2F0YWxvZ0VudGl0eSA9IG5ldyBjaGFydHMuZGVmYXVsdC5DYXRhbG9nVXNlckNoYXJ0KGNhdGFsb2dTY29wZSwgY2hhcnRJZCwgZmlyZXN0YXJ0cklkLCBjbGFpbSwgcmVuZGVyUGF0Y2hlcyk7XG5cbiAgICAgIGlmIChjbGFpbS5wcm92aWRlcnMuZ2l0aHViICYmIChwcm92aWRlciA9PT0gQWxsb3dlZFByb3ZpZGVycy5naXRodWIgfHwgcHJvdmlkZXIgPT09IEFsbG93ZWRQcm92aWRlcnMuYWxsKSkge1xuXG4gICAgICAgIGZpcmVzdGFydHJFbnRpdHkgPSBuZXcgY2hhcnRzLmRlZmF1bHQuR2l0aHViTWVtYmVyc2hpcENoYXJ0KFxuICAgICAgICAgIGZpcmVzdGFydHJTY29wZSxcbiAgICAgICAgICBgZ2l0aHViLSR7Y2hhcnRJZH1gLFxuICAgICAgICAgIGZpcmVzdGFydHJJZCxcbiAgICAgICAgICBjbGFpbSxcbiAgICAgICAgICByZW5kZXJQYXRjaGVzXG4gICAgICAgICk7XG5cbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiQ29tcG9uZW50Q2xhaW1cIjpcblxuICAgICAgaWYgKGNsYWltLnByb3ZpZGVycy5naXRodWIgJiYgKHByb3ZpZGVyID09PSBBbGxvd2VkUHJvdmlkZXJzLmdpdGh1YiB8fCBwcm92aWRlciA9PT0gQWxsb3dlZFByb3ZpZGVycy5hbGwpKSB7XG5cbiAgICAgICAgZmlyZXN0YXJ0ckVudGl0eSA9IG5ldyBjaGFydHMuZGVmYXVsdC5HaXRodWJSZXBvc2l0b3J5Q2hhcnQoXG4gICAgICAgICAgZmlyZXN0YXJ0clNjb3BlLFxuICAgICAgICAgIGBnaXRodWItJHtjaGFydElkfWAsXG4gICAgICAgICAgZmlyZXN0YXJ0cklkLFxuICAgICAgICAgIGNsYWltLFxuICAgICAgICAgIHJlbmRlclBhdGNoZXNcbiAgICAgICAgKTtcblxuICAgICAgfVxuICAgICAgY2F0YWxvZ0VudGl0eSA9IG5ldyBjaGFydHMuZGVmYXVsdC5DYXRhbG9nQ29tcG9uZW50Q2hhcnQoXG4gICAgICAgIGNhdGFsb2dTY29wZSwgY2hhcnRJZCwgZmlyZXN0YXJ0cklkLCBjbGFpbSwgcmVuZGVyUGF0Y2hlc1xuICAgICAgKTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiVEZXb3Jrc3BhY2VDbGFpbVwiOlxuXG4gICAgICBpZiAoY2xhaW0ucHJvdmlkZXJzLnRlcnJhZm9ybSAmJiAocHJvdmlkZXIgPT09IEFsbG93ZWRQcm92aWRlcnMudGVycmFmb3JtIHx8IHByb3ZpZGVyID09PSBBbGxvd2VkUHJvdmlkZXJzLmFsbCkpIHtcblxuICAgICAgICBmaXJlc3RhcnRyRW50aXR5ID0gbmV3IGNoYXJ0cy5kZWZhdWx0LlRGV29ya3NwYWNlQ2hhcnQoXG4gICAgICAgICAgZmlyZXN0YXJ0clNjb3BlLCBcbiAgICAgICAgICBgdGVycmFmb3JtLSR7Y2hhcnRJZH1gLCBcbiAgICAgICAgICBmaXJlc3RhcnRySWQsXG4gICAgICAgICAgY2xhaW0sXG4gICAgICAgICAgcmVuZGVyUGF0Y2hlc1xuICAgICAgICApO1xuXG4gICAgICB9XG4gICAgICBjYXRhbG9nRW50aXR5ID0gbmV3IGNoYXJ0cy5kZWZhdWx0LkNhdGFsb2dURldvcmtzcGFjZUNoYXJ0KFxuICAgICAgICBjYXRhbG9nU2NvcGUsIGNoYXJ0SWQsIGZpcmVzdGFydHJJZCwgY2xhaW0sIHJlbmRlclBhdGNoZXNcbiAgICAgICk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIkFyZ29EZXBsb3lDbGFpbVwiOlxuXG4gICAgICBpZiAoY2xhaW0ucHJvdmlkZXJzLmFyZ29jZCAmJiAocHJvdmlkZXIgPT09IEFsbG93ZWRQcm92aWRlcnMuYXJnb2NkIHx8IHByb3ZpZGVyID09PSBBbGxvd2VkUHJvdmlkZXJzLmFsbCkpIHtcblxuICAgICAgICBmaXJlc3RhcnRyRW50aXR5ID0gbmV3IGNoYXJ0cy5kZWZhdWx0LkFyZ29EZXBsb3lDaGFydChcbiAgICAgICAgICBmaXJlc3RhcnRyU2NvcGUsIFxuICAgICAgICAgIGBhcmdvY2QtJHtjaGFydElkfWAsIFxuICAgICAgICAgIGZpcmVzdGFydHJJZCxcbiAgICAgICAgICBjbGFpbSxcbiAgICAgICAgICByZW5kZXJQYXRjaGVzXG4gICAgICAgICk7XG5cbiAgICAgIH1cbiAgICAgIFxuICAgICAgY2F0YWxvZ0VudGl0eSA9IG5ldyBjaGFydHMuZGVmYXVsdC5DYXRhbG9nQXJnb0RlcGxveUNoYXJ0KFxuICAgICAgICBjYXRhbG9nU2NvcGUsIGNoYXJ0SWQsIGZpcmVzdGFydHJJZCwgY2xhaW0sIHJlbmRlclBhdGNoZXNcbiAgICAgICk7XG5cbiAgICAgIGJyZWFrO1xuXG5cbiAgICBkZWZhdWx0OlxuXG4gICAgICBjb25zb2xlLmVycm9yKGBVbmtub3duIGNsYWltIGtpbmQ6ICR7Y2xhaW0ua2luZH1gKTtcblxuICAgICAgYnJlYWs7XG4gIH1cblxuICAvKipcbiAgICogVGhlcmUgaXMgdGhlIHBvc3NpYmlsaXR5IHRvIG9ubHkgcmVuZGVyIHRoZSBjYXRhbG9nIGVudGl0eSwgYnV0IG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZFxuICAgKi9cbiAgaWYgKCFjYXRhbG9nRW50aXR5KSB7XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byByZW5kZXIgY2xhaW0gJHtjbGFpbS5raW5kfS0ke2NsYWltLm5hbWV9YCk7XG5cbiAgfVxuXG4gIC8qXG4gICAqXG4gICAqIFJlbmRlciBwaGFzZVxuICAgKlxuICAgKi9cbiAgY29uc3QgW2NhdGFsb2dDaGFydCwgZmlyZXN0YXJ0ckVudGl0eUNoYXJ0XSA9IGF3YWl0IFByb21pc2UuYWxsKFxuXG4gICAgW1xuICAgICAgcHJvdmlkZXIgPT09IEFsbG93ZWRQcm92aWRlcnMuYWxsID8gY2F0YWxvZ0VudGl0eS5yZW5kZXIoKSA6IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpLFxuXG4gICAgICBmaXJlc3RhcnRyRW50aXR5Py5yZW5kZXIoKSxcblxuICAgIF1cblxuICApXG5cbiAgLypcbiAgICpcbiAgICogUG9zdCByZW5kZXIgcGhhc2UgKGFuZCByZXR1cm4pXG4gICAqXG4gICAqL1xuICByZXR1cm4ge1xuXG4gICAgY2F0YWxvZ0VudGl0eTogY2F0YWxvZ0NoYXJ0ID8gYXdhaXQgY2F0YWxvZ0NoYXJ0LnBvc3RSZW5kZXJlcihwb3N0UGF0Y2hlcykgOiB1bmRlZmluZWQsXG5cbiAgICBmaXJlc3RhcnRyRW50aXR5OiBhd2FpdCAoZmlyZXN0YXJ0ckVudGl0eUNoYXJ0ID8gZmlyZXN0YXJ0ckVudGl0eUNoYXJ0LnBvc3RSZW5kZXJlcihwb3N0UGF0Y2hlcykgOiB1bmRlZmluZWQpLFxuXG4gICAgZXh0cmFDaGFydHM6IGF3YWl0IGZpcmVzdGFydHJFbnRpdHk/LmV4dHJhQ2hhcnRzKCkgfHwgW11cbiAgfTtcblxufVxuXG5cblxuZnVuY3Rpb24gc29ydEtpbmRzKG9yZGVyZWRLaW5kczogc3RyaW5nW10sIGNsYWltczogUmVuZGVyQ2xhaW1zKSB7XG5cbiAgY29uc3QgcmVzdWx0OiBSZW5kZXJDbGFpbXNbXSA9IFtdXG5cbiAgZm9yIChjb25zdCBraW5kIG9mIG9yZGVyZWRLaW5kcykge1xuXG4gICAgY29uc3Qga2luZFJlbmRlckNsYWltczogYW55ID0gc29ydFJlbmRlckNsYWltc0J5S2luZChjbGFpbXMsIFtraW5kXSlcblxuICAgIHJlc3VsdC5wdXNoKGtpbmRSZW5kZXJDbGFpbXMpXG5cbiAgfVxuXG4gIHJldHVybiByZXN1bHRcblxufVxuXG5cblxuXG5cbmZ1bmN0aW9uIGdldFByZXZpb3VzQ1Jmcm9tQ2xhaW0oY2xhaW06IGFueSwgcHJldmlvdXNDUnM6IGFueSkge1xuXG4gIGNvbnN0IHByZXZpb3VzQ1JzS2V5cyA9IE9iamVjdC5rZXlzKHByZXZpb3VzQ1JzKVxuXG4gIGZvcihjb25zdCBwcmV2aW91c0NSS2V5IG9mIHByZXZpb3VzQ1JzS2V5cyl7XG5cbiAgICBjb25zdCBwcmV2aW91c0NSID0gcHJldmlvdXNDUnNbcHJldmlvdXNDUktleV1cblxuICAgIGlmKGlzQ2F0YWxvZ0VudGl0eShwcmV2aW91c0NSKSkgY29udGludWVcblxuICAgIGlmKGlzRXhjbHVkZWRGcm9tUHJldmlvdXNDUihwcmV2aW91c0NSLmtpbmQpKSBjb250aW51ZVxuXG4gICAgaWYocHJldmlvdXNDUi5tZXRhZGF0YS5hbm5vdGF0aW9uc1tDTEFJTV9SRUZfQU5OT1RBVElPTl0gPT09IGAke2NsYWltLmtpbmR9LyR7Y2xhaW0ubmFtZX1gKXtcblxuICAgICAgcmV0dXJuIHByZXZpb3VzQ1JcblxuICAgIH1cblxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG5cbn1cblxuXG5mdW5jdGlvbiBpc0V4Y2x1ZGVkRnJvbVByZXZpb3VzQ1IoY3JLaW5kOiBzdHJpbmcpe1xuXG5cbiAgcmV0dXJuIFtcIkZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVwiXS5pbmNsdWRlcyhjcktpbmQpXG5cblxufVxuIl19
|
|
235744
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxxQ0FBa0Q7QUFDbEQsaURBQWtDO0FBQ2xDLGtEQUEwQjtBQUUxQixpQ0FBdUQ7QUFFdkQscUVBQTBFO0FBRzFFLHlEQUF1SDtBQUN2SCwrQ0FBa0Q7QUFDbEQscUNBQW1FO0FBRW5FLHdEQUFpRTtBQUNqRSx1Q0FBa0M7QUFDbEMsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4QixvRUFBb0M7QUFDcEMsb0RBQTRCO0FBQzVCLE1BQU0sb0JBQW9CLEdBQUcsMEJBQTBCLENBQUE7QUFHdkQsTUFBTSxHQUFHLEdBQUcsSUFBQSxlQUFLLEVBQUMscUJBQXFCLENBQUMsQ0FBQTtBQXFDeEM7Ozs7Ozs7Ozs7O0dBV0c7QUFDSSxLQUFLLFVBQVUsaUJBQWlCLENBRXJDLFlBQTBCLEVBRTFCLE1BQVcsRUFBRSxFQUViLG1CQUEyQixlQUFlLEVBRTFDLGNBQXNCLGlCQUFpQjtJQUl2QyxNQUFNLFlBQVksR0FBRyxJQUFJLFdBQUcsQ0FBQztRQUUzQixNQUFNLEVBQUUsZ0JBQWdCO1FBRXhCLG1CQUFtQixFQUFFLE9BQU87UUFFNUIsY0FBYyxFQUFFLHNCQUFjLENBQUMsaUJBQWlCO0tBRWpELENBQUMsQ0FBQTtJQUVGLE1BQU0sZUFBZSxHQUFHLElBQUksV0FBRyxDQUFDO1FBRTlCLE1BQU0sRUFBRSxXQUFXO1FBRW5CLG1CQUFtQixFQUFFLE9BQU87UUFFNUIsY0FBYyxFQUFFLHNCQUFjLENBQUMsaUJBQWlCO0tBRWpELENBQUMsQ0FBQTtJQUVGLE1BQU0sTUFBTSxHQUFRLE1BQU0sYUFBYSxDQUVyQyxZQUFZLEVBRVosZUFBZSxFQUVmO1FBQ0UsWUFBWTtRQUVaLEdBQUc7UUFFSCxPQUFPLEVBQUUsRUFBRTtLQUNaLENBQ0YsQ0FBQTtJQUVELGVBQWUsQ0FB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RUFBRSxNQUFvQjtJQUU3RCxNQUFNLE1BQU0sR0FBbUIsRUFBRSxDQUFBO0lBRWpDLEtBQUssTUFBTSxJQUFJLElBQUksWUFBWSxFQUFFO1FBRS9CLE1BQU0sZ0JBQWdCLEdBQVEsSUFBQSxtQ0FBc0IsRUFBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBRXBFLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtLQUU5QjtJQUVELE9BQU8sTUFBTSxDQUFBO0FBRWYsQ0FBQztBQU1ELFNBQVMsc0JBQXNCLENBQUMsS0FBVSxFQUFFLFdBQWdCO0lBRTFELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7SUFFaEQsS0FBSSxNQUFNLGFBQWEsSUFBSSxlQUFlLEVBQUM7UUFFekMsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBRTdDLElBQUcsSUFBQSw0QkFBZSxFQUFDLFVBQVUsQ0FBQztZQUFFLFNBQVE7UUFFeEMsSUFBRyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQUUsU0FBUTtRQUV0RCxJQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBQztZQUV6RixPQUFPLFVBQVUsQ0FBQTtTQUVsQjtLQUVGO0lBRUQsT0FBTyxLQUFLLENBQUE7QUFFZCxDQUFDO0FBR0QsU0FBUyx3QkFBd0IsQ0FBQyxNQUFjO0lBRzlDLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUcvRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IElSZW5hbWVSZXN1bHQsIGxvYWRBbGwgfSBmcm9tIFwiLi9sb2FkZXJcIjtcbmltcG9ydCAqIGFzIGNoYXJ0cyBmcm9tIFwiLi9jaGFydHNcIlxuaW1wb3J0IERlYnVnIGZyb20gXCJkZWJ1Z1wiO1xuaW1wb3J0IHsgQmFzZUNoYXJ0IH0gZnJvbSBcIi4vY2hhcnRzL2Jhc2VcIjtcbmltcG9ydCB7IEFwaU9iamVjdCwgQXBwLCBZYW1sT3V0cHV0VHlwZSB9IGZyb20gXCJjZGs4c1wiO1xuaW1wb3J0IHsgR2xvYmFsU2VjdGlvbiB9IGZyb20gXCIuL2dsb2JhbHMvYmFzZVwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVGZWF0dXJlc1BhdGNoZXMgfSBmcm9tIFwiLi9jaGFydHMvZ2l0aHViL2ZlYXR1cmVSZW5kZXJlclwiO1xuaW1wb3J0IHsgT3ZlcnJpZGVyUGF0Y2hlcyB9IGZyb20gXCIuL292ZXJyaWRlcnMvYmFzZVwiO1xuaW1wb3J0IHsgSUN1c3RvbVJlc291cmNlUGF0Y2ggfSBmcm9tIFwiLi9wYXRjaGVzXCI7XG5pbXBvcnQgeyBpc0NhdGFsb2dFbnRpdHksIHZhbGlkYXRlUmVmZXJlbnRpYWxJbnRlZ3JpdHksIHZhbGlkYXRlVGZTdGF0ZUtleVVuaXF1ZW5lc3MgfSBmcm9tIFwiLi92YWxpZGF0aW9ucy9yZWZlcmVuY2VzXCI7XG5pbXBvcnQgeyAgc2V0UmVuZGVyZWRDbGFpbSB9IGZyb20gXCIuL3JlZnJlc29sdmVyXCI7XG5pbXBvcnQgeyBBbGxvd2VkUHJvdmlkZXJzLCBnZXRDb25maWd1cmVkUHJvdmlkZXIgfSBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCB7IE5vcm1hbGl6ZXIgfSBmcm9tIFwiLi9ub3JtYWxpemVycy9iYXNlXCI7XG5pbXBvcnQgeyBzb3J0UmVuZGVyQ2xhaW1zQnlLaW5kIH0gZnJvbSBcIi4vcmVmc1NvcnRlci9yZWZzU29ydGVyXCI7XG5pbXBvcnQgeyBjcmF3bCB9IGZyb20gXCIuL2NyYXdsZXJcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgY29tbW9uIGZyb20gXCJjYXRhbG9nX2NvbW1vblwiO1xuaW1wb3J0IGdpdGh1YiBmcm9tIFwiZ2l0aHViXCI7XG5jb25zdCBDTEFJTV9SRUZfQU5OT1RBVElPTiA9IFwiZmlyZXN0YXJ0ci5kZXYvY2xhaW0tcmVmXCJcblxuXG5jb25zdCBsb2cgPSBEZWJ1ZyhcImZpcmVzdGFydHI6cmVuZGVyZXJcIilcblxuZXhwb3J0IHR5cGUgUmVuZGVyQ2xhaW1EYXRhID0ge1xuXG4gIGNsYWltOiBhbnlcblxuICBjbGFpbVBhdGg/OiBzdHJpbmdcblxuICBpbml0aWFsaXplcnM6IGFueSBbXVxuXG4gIG92ZXJyaWRlczogT3ZlcnJpZGVyUGF0Y2hlc1tdXG5cbiAgZ2xvYmFsczogR2xvYmFsU2VjdGlvbltdLFxuXG4gIG5vcm1hbGl6ZXJzOiBOb3JtYWxpemVyW11cblxufVxuXG50eXBlIENsYWltS2luZCA9IHN0cmluZztcbnR5cGUgQ2xhaW1OYW1lID0gc3RyaW5nO1xuZXhwb3J0IHR5cGUgUmVuZGVyQ2xhaW1LZXkgPSBgJHtDbGFpbUtpbmR9LSR7Q2xhaW1OYW1lfWBcblxudHlwZSBDUktpbmQgPSBzdHJpbmc7XG50eXBlIENSTmFtZSA9IHN0cmluZztcbnR5cGUgUmVuZGVyQ1JLZXkgPSBgJHtDUktpbmR9LSR7Q1JOYW1lfWBcblxuZXhwb3J0IHR5cGUgUmVuZGVyZWRDck1hcCA9IHtcblxuICBba2V5OiBSZW5kZXJDUktleV06IEFwaU9iamVjdFxufVxuXG5leHBvcnQgdHlwZSBSZW5kZXJDbGFpbXMgPSB7XG5cbiAgW2tleTogUmVuZGVyQ2xhaW1LZXldOiBSZW5kZXJDbGFpbURhdGFcblxufVxuXG4vKlxuICogRnVuY3Rpb24gY2FsbGVkIHdoZW4gcmVuZGVyaW5nIGZyb20gdGhlIGltcG9ydGVyIGNsYXNzLlxuICpcbiAqIElucHV0OlxuICogLSByZW5kZXJDbGFpbXM6IGEgUmVuZGVyQ2xhaW1zIG9iamVjdCwgd2hpY2ggY29udGFpbnMgdGhlIGxpc3Qgb2YgY2xhaW1zXG4gKiAgIHdlIHdhbnQgdG8gcmVuZGVyXG4gKlxuICogUmV0dXJuOlxuICogLSBUaGUgcmVzdWx0IG9mIHJlbmRlcmluZyB0aGUgcmVuZGVyQ2xhaW1zIG9iamVjdCwgcGx1cyB0aGVcbiAqICAgcmVuZGVyZWQgZmlyZXN0YXJ0ci1hbGwgZ3JvdXBcbiAqXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXJGcm9tSW1wb3J0cyhcblxuICByZW5kZXJDbGFpbXM6IFJlbmRlckNsYWltcyxcblxuICBjcnM6IGFueSA9IHt9LFxuXG4gIGNhdGFsb2dPdXRwdXREaXI6IHN0cmluZyA9IFwiL3RtcC8uY2F0YWxvZ1wiLFxuXG4gIGNyT3V0cHV0RGlyOiBzdHJpbmcgPSBcIi90bXAvLnJlc291cmNlc1wiLFxuXG4pIHtcblxuICBjb25zdCBjYXRhbG9nU2NvcGUgPSBuZXcgQXBwKHtcblxuICAgIG91dGRpcjogY2F0YWxvZ091dHB1dERpcixcblxuICAgIG91dHB1dEZpbGVFeHRlbnNpb246IFwiLnlhbWxcIixcblxuICAgIHlhbWxPdXRwdXRUeXBlOiBZYW1sT3V0cHV0VHlwZS5GSUxFX1BFUl9SRVNPVVJDRSxcblxuICB9KVxuXG4gIGNvbnN0IGZpcmVzdGFydHJTY29wZSA9IG5ldyBBcHAoe1xuXG4gICAgb3V0ZGlyOiBjck91dHB1dERpcixcblxuICAgIG91dHB1dEZpbGVFeHRlbnNpb246IFwiLnlhbWxcIixcblxuICAgIHlhbWxPdXRwdXRUeXBlOiBZYW1sT3V0cHV0VHlwZS5GSUxFX1BFUl9SRVNPVVJDRSxcblxuICB9KVxuXG4gIGNvbnN0IHJlc3VsdDogYW55ID0gYXdhaXQgZlJlbmRlckNsYWltcyhcblxuICAgIGNhdGFsb2dTY29wZSxcblxuICAgIGZpcmVzdGFydHJTY29wZSxcblxuICAgIHtcbiAgICAgIHJlbmRlckNsYWltcyxcblxuICAgICAgY3JzLFxuXG4gICAgICByZW5hbWVzOiBbXVxuICAgIH0sXG4gIClcblxuICBmaXJlc3RhcnRyU2NvcGUuc3ludGgoKVxuXG4gIHJldHVybiByZXN1bHRcblxufVxuXG5cbi8qXG4gKiBGdW5jdGlvbiBjYWxsZWQgd2hlbiByZW5kZXJpbmcgYnV0IG5vdCBpbXBvcnRpbmdcbiAqXG4gKiBJbnB1dDpcbiAqIC0gc2NvcGU6IGFuIG9iamVjdCwgdXNlZCB0byByZXByZXNlbnQgQ0RLVEYncyBleGVjdXRpb24gc2NvcGVcbiAqXG4gKiBSZXR1cm46XG4gKiAtIFRoZSByZXN1bHQgb2YgcmVuZGVyaW5nIHRoZSByZW5kZXJDbGFpbXMgb2JqZWN0LCBwbHVzIHRoZVxuICogICByZW5kZXJlZCBmaXJlc3RhcnRyLWFsbCBncm91cFxuICpcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlcihcblxuICBjYXRhbG9nU2NvcGU6IENvbnN0cnVjdCxcblxuICBmaXJlc3RhcnRyU2NvcGU6IENvbnN0cnVjdCxcblxuICApOiBQcm9taXNlPFJlbmRlcmVkQ3JNYXA+IHtcblxuICBjb25zdCBkYXRhOiB7XG5cbiAgICByZW5kZXJDbGFpbXM6IFJlbmRlckNsYWltcyxcblxuICAgIGNyczogYW55LFxuXG4gICAgcmVuYW1lcz86IElSZW5hbWVSZXN1bHRbXVxuXG4gIH0gPSBhd2FpdCBsb2FkQWxsKClcblxuICBjb25zdCByZXN1bHQ6IGFueSA9IGF3YWl0IGZSZW5kZXJDbGFpbXMoY2F0YWxvZ1Njb3BlLCBmaXJlc3RhcnRyU2NvcGUsIGRhdGEpXG5cbiAgdmFsaWRhdGVSZWZlcmVudGlhbEludGVncml0eShyZXN1bHQpXG5cbiAgdmFsaWRhdGVUZlN0YXRlS2V5VW5pcXVlbmVzcyhyZXN1bHQpXG5cbiAgcmV0dXJuIHJlc3VsdFxuXG59XG5cbi8qXG4gKiBGdW5jdGlvbiBjYWxsZWQgd2hlbiByZW5kZXJpbmcgVGVycmFmb3JtIHdvcmtzcGFjZXMgUGxhbnNcbiAqIGJhc2VkIG9uIHRoZSBwcmV2aW91cyByZW5kZXJlciBUZXJyYWZvcm0gd29ya3NwYWNlc1xuKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXJXb3Jrc3BhY2VQbGFucyhzb3VyY2U6IHN0cmluZywgZGVzdGlueTogc3RyaW5nLCBwckxpbms6IHN0cmluZywgc2hhOiBzdHJpbmcsIGdoQ2xpOiBhbnkgPSBnaXRodWIpIHtcblxuICBjb25zdCBbb3JnUmVwbywgcHJOdW1iZXJdID0gcHJMaW5rLnNwbGl0KFwiI1wiKVxuXG4gIGNvbnN0IFsgb3JnLCByZXBvIF0gPSBvcmdSZXBvLnNwbGl0KFwiL1wiKVxuXG4gIGNvbnN0IHsgZGF0YTogZmlsZXMgfSA9IGF3YWl0IGdoQ2xpLnB1bGxzLmdldFByRmlsZXMoXG4gICAgcGFyc2VJbnQocHJOdW1iZXIpLFxuICAgIHJlcG8sXG4gICAgb3JnXG4gIClcblxuICBpZihmaWxlcyAmJiBmaWxlcy5sZW5ndGggPiAwICYmIGZpbGVzWzBdLnN0YXR1cyA9PSBcInJlbW92ZWRcIil7XG5cbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZ2hDbGkucmVwby5nZXRDb250ZW50KFxuICAgIFxuICAgICAgZmlsZXNbMF0uZmlsZW5hbWUsXG4gICAgXG4gICAgICByZXBvLFxuICAgIFxuICAgICAgb3JnLFxuICAgIFxuICAgIClcblxuICAgIGNvbnN0IHdvcmtzcGFjZTogYW55ID0gY29tbW9uLmlvLmZyb21ZYW1sKGNvbnRlbnQpXG5cbiAgICB3b3Jrc3BhY2Uua2luZCA9IFwiRmlyZXN0YXJ0clRlcnJhZm9ybVdvcmtzcGFjZVBsYW5cIlxuICAgIFxuICAgIHdvcmtzcGFjZS5tZXRhZGF0YS5hbm5vdGF0aW9ucyA9IHtcbiAgICBcbiAgICAgIC4uLndvcmtzcGFjZS5tZXRhZGF0YS5hbm5vdGF0aW9ucyxcbiAgICAgIFxuICAgICAgW2NvbW1vbi5nZW5lcmljLmdldEZpcmVzdGFydHJBbm5vdGF0aW9uKFwicHVsbC1yZXF1ZXN0LXBsYW5cIildOiBwckxpbmssXG4gICAgICBcbiAgICAgIFtjb21tb24uZ2VuZXJpYy5nZXRGaXJlc3RhcnRyQW5ub3RhdGlvbihcInBsYW4tc2hhXCIpXTogc2hhLFxuICAgIFxuICAgIH1cbiAgICBcbiAgICB3b3Jrc3BhY2UubWV0YWRhdGEuYW5ub3RhdGlvbnNbXG4gICAgXG4gICAgICBjb21tb24uZ2VuZXJpYy5nZXRGaXJlc3RhcnRyQW5ub3RhdGlvbihcInBvbGljeVwiKVxuICAgIFxuICAgIF0gPSBcImRlc3Ryb3lcIlxuXG4gICAgY29uc3Qgd29ya3NwYWNlUGxhbiA9IGNvbW1vbi5pby50b1lhbWwoXG4gICAgXG4gICAgICB7Li4ud29ya3NwYWNlfSwgXG4gICAgXG4gICAgICB7IHF1b3RpbmdUeXBlOiAnXCInLCBsaW5lV2lkdGg6IC0xIH1cbiAgICBcbiAgICApXG4gICAgXG4gICAgY29uc3QgZmlsZU5hbWUgPSBwYXRoLmpvaW4oZGVzdGlueSwgcGF0aC5iYXNlbmFtZShmaWxlc1swXS5maWxlbmFtZSkpXG4gICAgXG4gICAgZnMud3JpdGVGaWxlU3luYyhmaWxlTmFtZSwgd29ya3NwYWNlUGxhbilcbiAgICBcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIEl0ZXJhdGUgb3ZlciB0aGUgc291cmNlIGZvbGRlciBhbmQgZ2V0IHRoZSBsaXN0IG9mIFRlcnJhZm9ybSB3b3Jrc3BhY2VzXG4gIGF3YWl0IGNyYXdsKHNvdXJjZSwgKCkgPT4gdHJ1ZSwgKGVudHJ5OiBzdHJpbmcsIGRhdGE6IGFueSkgPT4ge1xuXG4gICAgY29uc3QgZmlsZU5hbWUgPSBwYXRoLmpvaW4oZGVzdGlueSwgcGF0aC5iYXNlbmFtZShlbnRyeSkpXG5cbiAgICBjb25zdCB3b3Jrc3BhY2U6IGFueSA9IGNvbW1vbi5pby5mcm9tWWFtbChkYXRhKVxuXG4gICAgd29ya3NwYWNlLmtpbmQgPSBcIkZpcmVzdGFydHJUZXJyYWZvcm1Xb3Jrc3BhY2VQbGFuXCJcbiAgICB3b3Jrc3BhY2UubWV0YWRhdGEuYW5ub3RhdGlvbnMgPSB7XG4gICAgICAuLi53b3Jrc3BhY2UubWV0YWRhdGEuYW5ub3RhdGlvbnMsXG4gICAgICBbY29tbW9uLmdlbmVyaWMuZ2V0RmlyZXN0YXJ0ckFubm90YXRpb24oXCJwdWxsLXJlcXVlc3QtcGxhblwiKV06IHByTGluayxcbiAgICAgIFtjb21tb24uZ2VuZXJpYy5nZXRGaXJlc3RhcnRyQW5ub3RhdGlvbihcInBsYW4tc2hhXCIpXTogc2hhXG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHdvcmtzcGFjZVBsYW4gPSBjb21tb24uaW8udG9ZYW1sKHtcbiAgICAgIC4uLndvcmtzcGFjZVxuICAgIH0sIHsgcXVvdGluZ1R5cGU6ICdcIicsIGxpbmVXaWR0aDogLTEgfSlcblxuICAgIGZzLndyaXRlRmlsZVN5bmMoZmlsZU5hbWUsIHdvcmtzcGFjZVBsYW4pXG5cbiAgfSlcblxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkTGFzdFN0YXRlQW5kTGFzdENsYWltQW5ub3RhdGlvbnMoXG4gIGZpbGVQYXRoOiBzdHJpbmcsIGxhc3RTdGF0ZVBSTGluazogc3RyaW5nLCBsYXN0Q2xhaW1QUkxpbms6IHN0cmluZ1xuKSB7XG5cbiAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBzb3VyY2UgZm9sZGVyIGFuZCBnZXQgdGhlIGxpc3Qgb2YgVGVycmFmb3JtIHdvcmtzcGFjZXNcblxuICBjb25zdCB3b3Jrc3BhY2U6IGFueSA9IGNvbW1vbi5pby5mcm9tWWFtbChmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsIFwidXRmLThcIikpO1xuXG4gIGNvbnN0IHN0YXRlTGlua0FzQXJyYXk6IHN0cmluZ1tdID0gbGFzdFN0YXRlUFJMaW5rLnNwbGl0KFwiL1wiKTtcbiAgY29uc3Qgc3RhdGVBbm5vdGF0aW9uVmFsdWU6IHN0cmluZyA9IGAke3N0YXRlTGlua0FzQXJyYXlbM119LyR7c3RhdGVMaW5rQXNBcnJheVs0XX0jJHtzdGF0ZUxpbmtBc0FycmF5WzZdfWBcblxuICBjb25zdCBjbGFpbUxpbmtBc0FycmF5OiBzdHJpbmdbXSA9IGxhc3RDbGFpbVBSTGluay5zcGxpdChcIi9cIik7XG4gIGNvbnN0IGNsYWltQW5ub3RhdGlvblZhbHVlOiBzdHJpbmcgPSBgJHtjbGFpbUxpbmtBc0FycmF5WzNdfS8ke2NsYWltTGlua0FzQXJyYXlbNF19IyR7Y2xhaW1MaW5rQXNBcnJheVs2XX1gXG5cbiAgd29ya3NwYWNlLm1ldGFkYXRhLmFubm90YXRpb25zID0ge1xuICAgIC4uLndvcmtzcGFjZS5tZXRhZGF0YS5hbm5vdGF0aW9ucyxcbiAgICBbY29tbW9uLmdlbmVyaWMuZ2V0RmlyZXN0YXJ0ckFubm90YXRpb24oXCJsYXN0LXN0YXRlLXByXCIpXTogc3RhdGVBbm5vdGF0aW9uVmFsdWUsXG4gICAgW2NvbW1vbi5nZW5lcmljLmdldEZpcmVzdGFydHJBbm5vdGF0aW9uKFwibGFzdC1jbGFpbS1wclwiKV06IGNsYWltQW5ub3RhdGlvblZhbHVlXG4gIH1cblxuICBmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBjb21tb24uaW8udG9ZYW1sKFxuICAgIHsgLi4ud29ya3NwYWNlIH0sIHsgcXVvdGluZ1R5cGU6ICdcIicsIGxpbmVXaWR0aDogLTEgfVxuICApKVxuXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZSZW5kZXJDbGFpbXMoXG5cbiAgY2F0YWxvZ1Njb3BlOiBDb25zdHJ1Y3QsXG5cbiAgZmlyZXN0YXJ0clNjb3BlOiBDb25zdHJ1Y3QsXG5cbiAgZGF0YToge1xuXG4gICAgcmVuZGVyQ2xhaW1zOiBSZW5kZXJDbGFpbXMsXG5cbiAgICBjcnM6IGFueSxcblxuICAgIHJlbmFtZXM/OiBJUmVuYW1lUmVzdWx0W11cblxuICB9LFxuXG4pOiBQcm9taXNlPFJlbmRlcmVkQ3JNYXA+IHtcblxuICBjb25zdCByZXN1bHQ6IFJlbmRlcmVkQ3JNYXAgPSB7fVxuXG4gIGNvbnN0IHsgcmVuZGVyQ2xhaW1zLCBjcnMgfSA9IGRhdGFcblxuICBjb25zdCBzb3J0ZWRLaW5kcyA9IHNvcnRLaW5kcyhbXCJVc2VyQ2xhaW1cIiwgXCJHcm91cENsYWltXCIsIFwiQ29tcG9uZW50Q2xhaW1cIiwgXCJEb21haW5DbGFpbVwiLCBcIlN5c3RlbUNsYWltXCIsIFwiVEZXb3Jrc3BhY2VDbGFpbVwiLCBcIkFyZ29EZXBsb3lDbGFpbVwiXSwgcmVuZGVyQ2xhaW1zKVxuXG4gIGZvciAoY29uc3QgcmVuZGVyQ2xhaW1zIG9mIHNvcnRlZEtpbmRzKSB7XG5cbiAgICBmb3IgKGNvbnN0IGNsYWltS2V5IG9mIE9iamVjdC5rZXlzKHJlbmRlckNsYWltcykpIHtcblxuICAgICAgY29uc3QgY2xhaW0gPSByZW5kZXJDbGFpbXNbY2xhaW1LZXkgYXMgUmVuZGVyQ2xhaW1LZXldLmNsYWltXG5cbiAgICAgIGNvbnN0IGNvbmZpZ3VyZWRQcm92aWRlciA9IGdldENvbmZpZ3VyZWRQcm92aWRlcigpLnRvU3RyaW5nKClcblxuICAgICAgbGV0IHByb3ZpZGVycyA9IE9iamVjdC5rZXlzKGNsYWltLnByb3ZpZGVycylcblxuICAgICAgaWYoY29uZmlndXJlZFByb3ZpZGVyICE9IEFsbG93ZWRQcm92aWRlcnMuYWxsLnRvU3RyaW5nKCkpe1xuXG4gICAgICAgIHByb3ZpZGVycyA9IHByb3ZpZGVycy5maWx0ZXIoXG5cbiAgICAgICAgICAocHJvdmlkZXI6IHN0cmluZykgPT4gcHJvdmlkZXIgPT09IGNvbmZpZ3VyZWRQcm92aWRlclxuXG4gICAgICAgIClcblxuICAgICAgfVxuXG5cbiAgICAgIGNvbnN0IHByZXZpb3VzQ1IgPSBnZXRQcmV2aW91c0NSZnJvbUNsYWltKGNsYWltLCBjcnMpXG5cbiAgICAgIGNvbnN0IHBhdGNoZXMgPSBhd2FpdCBleHRyYWN0UGF0Y2hlcyhyZW5kZXJDbGFpbXNbY2xhaW1LZXkgYXMgUmVuZGVyQ2xhaW1LZXldLCBwcmV2aW91c0NSKVxuXG4gICAgICBpZiAoIXByZXZpb3VzQ1IpIHtcblxuICAgICAgICBsb2coYE5vIENSIGZvdW5kIGZvciBjbGFpbSAke2NsYWltS2V5fSwgaXQgd2lsbCBiZSByZW5kZXJlZCBmcm9tIHNjcmF0Y2hgKVxuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtmaXJlc3RhcnRyRW50aXR5LCBleHRyYUNoYXJ0cywgY2F0YWxvZ0VudGl0eX0gID0gYXdhaXQgcmVuZGVyQ2xhaW0oXG5cbiAgICAgICAgY2F0YWxvZ1Njb3BlLFxuXG4gICAgICAgIGZpcmVzdGFydHJTY29wZSxcblxuICAgICAgICBjbGFpbSxcblxuICAgICAgICBwYXRjaGVzLFxuXG4gICAgICAgIHByZXZpb3VzQ1IsXG5cbiAgICAgIClcblxuICAgICAgaWYoY2F0YWxvZ0VudGl0eSkge1xuXG4gICAgICAgIHJlc3VsdFtgJHtjYXRhbG9nRW50aXR5LmtpbmR9LSR7Y2F0YWxvZ0VudGl0eS5tZXRhZGF0YS5uYW1lfWBdID0gY2F0YWxvZ0VudGl0eS50b0pzb24oKVxuICAgICAgXG4gICAgICB9XG5cbiAgICAgIC8qKlxuXG4gICAgICAqIElmIHRoZXJlIGlzIG5vIHByb3ZpZGVyIGRvbid0IHN0b3JlIHRoZSBDUiBpbiB0aGUgbWFwXG5cbiAgICAgICovXG5cbiAgICAgIGlmICghZmlyZXN0YXJ0ckVudGl0eSkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGZpcmVzdGFydHJFbnRpdHlKc29uID0gZmlyZXN0YXJ0ckVudGl0eS50b0pzb24oKVxuXG4gICAgICBzZXRSZW5kZXJlZENsYWltKGNsYWltLCBmaXJlc3RhcnRyRW50aXR5SnNvbilcblxuICAgICAgZm9yKGNvbnN0IGV4dHJhQ2hhcnQgb2YgZXh0cmFDaGFydHMpe1xuXG4gICAgICAgIGNvbnN0IHtjbGFpbSwgY2hhcnR9ID0gZXh0cmFDaGFydFxuXG4gICAgICAgIHNldFJlbmRlcmVkQ2xhaW0oY2xhaW0sIGNoYXJ0LnRvSnNvbigpKVxuXG4gICAgICAgIHJlc3VsdFtgJHtjaGFydC5raW5kfS0ke2NoYXJ0Lm1ldGFkYXRhLm5hbWV9YF0gPSBjaGFydC50b0pzb24oKVxuXG4gICAgICB9XG5cbiAgICAgIGlmKCFmaXJlc3RhcnRyRW50aXR5SnNvbi5tZXRhZGF0YS5hbm5vdGF0aW9ucyB8fCAhZmlyZXN0YXJ0ckVudGl0eUpzb24ubWV0YWRhdGEubmFtZSkgdGhyb3cgZmlyZXN0YXJ0ckVudGl0eUpzb25cblxuICAgICAgcmVzdWx0W2Ake2ZpcmVzdGFydHJFbnRpdHkua2luZH0tJHtmaXJlc3RhcnRyRW50aXR5SnNvbi5tZXRhZGF0YS5uYW1lfWBdID0gZmlyZXN0YXJ0ckVudGl0eUpzb25cblxuICAgIH1cblxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxuXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RQYXRjaGVzKFxuXG4gIGNsYWltVG9SZW5kZXJEYXRhOiBSZW5kZXJDbGFpbURhdGEsIHByZXZpb3VzQ1I6IGFueVxuXG4pOiBQcm9taXNlPElDdXN0b21SZXNvdXJjZVBhdGNoW10+IHtcblxuICBsZXQgdG90YWxQYXRjaGVzOiBJQ3VzdG9tUmVzb3VyY2VQYXRjaFtdID0gW11cblxuXG4gIGZvciAoY29uc3Qgbm9ybWFsaXplciBvZiBjbGFpbVRvUmVuZGVyRGF0YS5ub3JtYWxpemVycykge1xuXG4gICAgY29uc3QgcGF0Y2hlcyA9IGF3YWl0IG5vcm1hbGl6ZXIucGF0Y2hlcyhjbGFpbVRvUmVuZGVyRGF0YVtcImNsYWltXCJdLCBwcmV2aW91c0NSKVxuXG4gICAgdG90YWxQYXRjaGVzID0gdG90YWxQYXRjaGVzLmNvbmNhdChwYXRjaGVzKS5mbGF0KClcblxuICB9XG5cbiAgZm9yIChjb25zdCBpbml0aWFsaXplciBvZiBjbGFpbVRvUmVuZGVyRGF0YS5pbml0aWFsaXplcnMpIHtcblxuICAgIGNvbnN0IHBhdGNoZXMgPSBhd2FpdCBpbml0aWFsaXplci5wYXRjaGVzKGNsYWltVG9SZW5kZXJEYXRhW1wiY2xhaW1cIl0sIHByZXZpb3VzQ1IpXG5cbiAgICB0b3RhbFBhdGNoZXMgPSB0b3RhbFBhdGNoZXMuY29uY2F0KHBhdGNoZXMpLmZsYXQoKVxuXG4gIH1cblxuICBmb3IgKGNvbnN0IG92ZXJyaWRlciBvZiBjbGFpbVRvUmVuZGVyRGF0YS5vdmVycmlkZXMpIHtcblxuICAgIGNvbnN0IHBhdGNoZXMgPSBhd2FpdCBvdmVycmlkZXIucGF0Y2hlcyhjbGFpbVRvUmVuZGVyRGF0YVtcImNsYWltXCJdLCBwcmV2aW91c0NSKVxuXG4gICAgdG90YWxQYXRjaGVzID0gdG90YWxQYXRjaGVzLmNvbmNhdChwYXRjaGVzKS5mbGF0KClcblxuICB9XG5cblxuICBpZiAoY2xhaW1Ub1JlbmRlckRhdGEuY2xhaW0ua2luZCA9PT0gXCJDb21wb25lbnRDbGFpbVwiKSB7XG5cbiAgICB0b3RhbFBhdGNoZXMgPSB0b3RhbFBhdGNoZXMuY29uY2F0KChhd2FpdCBnZW5lcmF0ZUZlYXR1cmVzUGF0Y2hlcyhjbGFpbVRvUmVuZGVyRGF0YS5jbGFpbSkpKS5mbGF0KClcblxuICB9XG5cblxuICBmb3IgKGNvbnN0IGdsb2JhbCBvZiBjbGFpbVRvUmVuZGVyRGF0YS5nbG9iYWxzKSB7XG5cbiAgICBjb25zdCBwYXRjaGVzID0gYXdhaXQgZ2xvYmFsLnBhdGNoZXMoY2xhaW1Ub1JlbmRlckRhdGEuY2xhaW0sIHByZXZpb3VzQ1IpXG5cbiAgICB0b3RhbFBhdGNoZXMgPSB0b3RhbFBhdGNoZXMuY29uY2F0KHBhdGNoZXMpLmZsYXQoKVxuXG4gIH1cblxuICByZXR1cm4gdG90YWxQYXRjaGVzXG5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUmVuZGVyQ2xhaW1SZXN1bHQge1xuICBjYXRhbG9nRW50aXR5PzogQXBpT2JqZWN0O1xuICBmaXJlc3RhcnRyRW50aXR5PzogQXBpT2JqZWN0O1xuICBleHRyYUNoYXJ0czogeyBjbGFpbToge2tpbmQ6IHN0cmluZywgbmFtZTogc3RyaW5nfSwgY2hhcnQ6IEFwaU9iamVjdH1bXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVuZGVyQ2xhaW0oXG5cbiAgY2F0YWxvZ1Njb3BlOiBDb25zdHJ1Y3QsXG5cbiAgZmlyZXN0YXJ0clNjb3BlOiBDb25zdHJ1Y3QsXG5cbiAgY2xhaW06IGFueSxcblxuICBwYXRjaGVzOiBJQ3VzdG9tUmVzb3VyY2VQYXRjaFtdLFxuXG4gIHByZXZpb3VzQ1I6IGFueSB8IG51bGwgPSBudWxsXG5cbiAgKTogUHJvbWlzZTxJUmVuZGVyQ2xhaW1SZXN1bHQ+IHtcblxuICBsZXQgY2F0YWxvZ0VudGl0eTogQmFzZUNoYXJ0IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBsZXQgZmlyZXN0YXJ0ckVudGl0eTogQmFzZUNoYXJ0IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGNoYXJ0SWQgPSBgJHtjbGFpbS5raW5kfS0ke2NsYWltLm5hbWV9YC50b0xvd2VyQ2FzZSgpO1xuXG4gIGxldCBmaXJlc3RhcnRySWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGlmIChwcmV2aW91c0NSKSB7XG5cbiAgICBmaXJlc3RhcnRySWQgPSBwcmV2aW91c0NSPy5zcGVjPy5maXJlc3RhcnRyPy50ZlN0YXRlS2V5IHx8IG51bGw7XG5cbiAgfVxuXG4gIGNvbnN0IHJlbmRlclBhdGNoZXMgPSBwYXRjaGVzLmZpbHRlcigocGF0Y2g6IGFueSkgPT4gIXBhdGNoLmlzUG9zdFBhdGNoKVxuICBjb25zdCBwb3N0UGF0Y2hlcyA9IHBhdGNoZXMuZmlsdGVyKChwYXRjaDphbnkpID0+IHBhdGNoLmlzUG9zdFBhdGNoKVxuXG4gIGNvbnN0IHByb3ZpZGVyID0gZ2V0Q29uZmlndXJlZFByb3ZpZGVyKClcblxuICBzd2l0Y2ggKGNsYWltLmtpbmQpIHtcblxuICAgIGNhc2UgXCJEb21haW5DbGFpbVwiOlxuXG4gICAgICBjYXRhbG9nRW50aXR5ID0gbmV3IGNoYXJ0cy5kZWZhdWx0LkNhdGFsb2dEb21haW5DaGFydChcbiAgICAgICAgY2F0YWxvZ1Njb3BlLCBcbiAgICAgICAgYGNhdGFsb2ctJHtjaGFydElkfWAsIFxuICAgICAgICBmaXJlc3RhcnRySWQsIFxuICAgICAgICBjbGFpbSwgXG4gICAgICAgIHJlbmRlclBhdGNoZXNcbiAgICAgICk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlN5c3RlbUNsYWltXCI6XG5cbiAgICAgIGNhdGFsb2dFbnRpdHkgPSBuZXcgY2hhcnRzLmRlZmF1bHQuQ2F0YWxvZ1N5c3RlbUNoYXJ0KFxuICAgICAgICBjYXRhbG9nU2NvcGUsIFxuICAgICAgICBgY2F0YWxvZy0ke2NoYXJ0SWR9YCwgXG4gICAgICAgIGZpcmVzdGFydHJJZCwgXG4gICAgICAgIGNsYWltLCBcbiAgICAgICAgcmVuZGVyUGF0Y2hlc1xuICAgICAgKTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiR3JvdXBDbGFpbVwiOlxuXG4gICAgICBjYXRhbG9nRW50aXR5ID0gbmV3IGNoYXJ0cy5kZWZhdWx0LkNhdGFsb2dHcm91cENoYXJ0KGNhdGFsb2dTY29wZSwgYGNhdGFsb2ctJHtjaGFydElkfWAsIGZpcmVzdGFydHJJZCwgY2xhaW0sIHJlbmRlclBhdGNoZXMpO1xuXG4gICAgICBpZiAoY2xhaW0ucHJvdmlkZXJzLmdpdGh1YiAmJiAocHJvdmlkZXIgPT09IEFsbG93ZWRQcm92aWRlcnMuZ2l0aHViIHx8IHByb3ZpZGVyID09PSBBbGxvd2VkUHJvdmlkZXJzLmFsbCkpIHtcblxuICAgICAgICBmaXJlc3RhcnRyRW50aXR5ID0gbmV3IGNoYXJ0cy5kZWZhdWx0LkdpdGh1Ykdyb3VwQ2hhcnQoXG4gICAgICAgICAgZmlyZXN0YXJ0clNjb3BlLFxuICAgICAgICAgIGBnaXRodWItJHtjaGFydElkfWAsXG4gICAgICAgICAgZmlyZXN0YXJ0cklkLFxuICAgICAgICAgIGNsYWltLFxuICAgICAgICAgIHJlbmRlclBhdGNoZXNcbiAgICAgICAgKTtcblxuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJVc2VyQ2xhaW1cIjpcblxuICAgICAgY2F0YWxvZ0VudGl0eSA9IG5ldyBjaGFydHMuZGVmYXVsdC5DYXRhbG9nVXNlckNoYXJ0KGNhdGFsb2dTY29wZSwgY2hhcnRJZCwgZmlyZXN0YXJ0cklkLCBjbGFpbSwgcmVuZGVyUGF0Y2hlcyk7XG5cbiAgICAgIGlmIChjbGFpbS5wcm92aWRlcnMuZ2l0aHViICYmIChwcm92aWRlciA9PT0gQWxsb3dlZFByb3ZpZGVycy5naXRodWIgfHwgcHJvdmlkZXIgPT09IEFsbG93ZWRQcm92aWRlcnMuYWxsKSkge1xuXG4gICAgICAgIGZpcmVzdGFydHJFbnRpdHkgPSBuZXcgY2hhcnRzLmRlZmF1bHQuR2l0aHViTWVtYmVyc2hpcENoYXJ0KFxuICAgICAgICAgIGZpcmVzdGFydHJTY29wZSxcbiAgICAgICAgICBgZ2l0aHViLSR7Y2hhcnRJZH1gLFxuICAgICAgICAgIGZpcmVzdGFydHJJZCxcbiAgICAgICAgICBjbGFpbSxcbiAgICAgICAgICByZW5kZXJQYXRjaGVzXG4gICAgICAgICk7XG5cbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiQ29tcG9uZW50Q2xhaW1cIjpcblxuICAgICAgaWYgKGNsYWltLnByb3ZpZGVycy5naXRodWIgJiYgKHByb3ZpZGVyID09PSBBbGxvd2VkUHJvdmlkZXJzLmdpdGh1YiB8fCBwcm92aWRlciA9PT0gQWxsb3dlZFByb3ZpZGVycy5hbGwpKSB7XG5cbiAgICAgICAgZmlyZXN0YXJ0ckVudGl0eSA9IG5ldyBjaGFydHMuZGVmYXVsdC5HaXRodWJSZXBvc2l0b3J5Q2hhcnQoXG4gICAgICAgICAgZmlyZXN0YXJ0clNjb3BlLFxuICAgICAgICAgIGBnaXRodWItJHtjaGFydElkfWAsXG4gICAgICAgICAgZmlyZXN0YXJ0cklkLFxuICAgICAgICAgIGNsYWltLFxuICAgICAgICAgIHJlbmRlclBhdGNoZXNcbiAgICAgICAgKTtcblxuICAgICAgfVxuICAgICAgY2F0YWxvZ0VudGl0eSA9IG5ldyBjaGFydHMuZGVmYXVsdC5DYXRhbG9nQ29tcG9uZW50Q2hhcnQoXG4gICAgICAgIGNhdGFsb2dTY29wZSwgY2hhcnRJZCwgZmlyZXN0YXJ0cklkLCBjbGFpbSwgcmVuZGVyUGF0Y2hlc1xuICAgICAgKTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiVEZXb3Jrc3BhY2VDbGFpbVwiOlxuXG4gICAgICBpZiAoY2xhaW0ucHJvdmlkZXJzLnRlcnJhZm9ybSAmJiAocHJvdmlkZXIgPT09IEFsbG93ZWRQcm92aWRlcnMudGVycmFmb3JtIHx8IHByb3ZpZGVyID09PSBBbGxvd2VkUHJvdmlkZXJzLmFsbCkpIHtcblxuICAgICAgICBmaXJlc3RhcnRyRW50aXR5ID0gbmV3IGNoYXJ0cy5kZWZhdWx0LlRGV29ya3NwYWNlQ2hhcnQoXG4gICAgICAgICAgZmlyZXN0YXJ0clNjb3BlLCBcbiAgICAgICAgICBgdGVycmFmb3JtLSR7Y2hhcnRJZH1gLCBcbiAgICAgICAgICBmaXJlc3RhcnRySWQsXG4gICAgICAgICAgY2xhaW0sXG4gICAgICAgICAgcmVuZGVyUGF0Y2hlc1xuICAgICAgICApO1xuXG4gICAgICB9XG4gICAgICBjYXRhbG9nRW50aXR5ID0gbmV3IGNoYXJ0cy5kZWZhdWx0LkNhdGFsb2dURldvcmtzcGFjZUNoYXJ0KFxuICAgICAgICBjYXRhbG9nU2NvcGUsIGNoYXJ0SWQsIGZpcmVzdGFydHJJZCwgY2xhaW0sIHJlbmRlclBhdGNoZXNcbiAgICAgICk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIkFyZ29EZXBsb3lDbGFpbVwiOlxuXG4gICAgICBpZiAoY2xhaW0ucHJvdmlkZXJzLmFyZ29jZCAmJiAocHJvdmlkZXIgPT09IEFsbG93ZWRQcm92aWRlcnMuYXJnb2NkIHx8IHByb3ZpZGVyID09PSBBbGxvd2VkUHJvdmlkZXJzLmFsbCkpIHtcblxuICAgICAgICBmaXJlc3RhcnRyRW50aXR5ID0gbmV3IGNoYXJ0cy5kZWZhdWx0LkFyZ29EZXBsb3lDaGFydChcbiAgICAgICAgICBmaXJlc3RhcnRyU2NvcGUsIFxuICAgICAgICAgIGBhcmdvY2QtJHtjaGFydElkfWAsIFxuICAgICAgICAgIGZpcmVzdGFydHJJZCxcbiAgICAgICAgICBjbGFpbSxcbiAgICAgICAgICByZW5kZXJQYXRjaGVzXG4gICAgICAgICk7XG5cbiAgICAgIH1cbiAgICAgIFxuICAgICAgY2F0YWxvZ0VudGl0eSA9IG5ldyBjaGFydHMuZGVmYXVsdC5DYXRhbG9nQXJnb0RlcGxveUNoYXJ0KFxuICAgICAgICBjYXRhbG9nU2NvcGUsIGNoYXJ0SWQsIGZpcmVzdGFydHJJZCwgY2xhaW0sIHJlbmRlclBhdGNoZXNcbiAgICAgICk7XG5cbiAgICAgIGJyZWFrO1xuXG5cbiAgICBkZWZhdWx0OlxuXG4gICAgICBjb25zb2xlLmVycm9yKGBVbmtub3duIGNsYWltIGtpbmQ6ICR7Y2xhaW0ua2luZH1gKTtcblxuICAgICAgYnJlYWs7XG4gIH1cblxuICAvKipcbiAgICogVGhlcmUgaXMgdGhlIHBvc3NpYmlsaXR5IHRvIG9ubHkgcmVuZGVyIHRoZSBjYXRhbG9nIGVudGl0eSwgYnV0IG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZFxuICAgKi9cbiAgaWYgKCFjYXRhbG9nRW50aXR5KSB7XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byByZW5kZXIgY2xhaW0gJHtjbGFpbS5raW5kfS0ke2NsYWltLm5hbWV9YCk7XG5cbiAgfVxuXG4gIC8qXG4gICAqXG4gICAqIFJlbmRlciBwaGFzZVxuICAgKlxuICAgKi9cbiAgY29uc3QgW2NhdGFsb2dDaGFydCwgZmlyZXN0YXJ0ckVudGl0eUNoYXJ0XSA9IGF3YWl0IFByb21pc2UuYWxsKFxuXG4gICAgW1xuICAgICAgcHJvdmlkZXIgPT09IEFsbG93ZWRQcm92aWRlcnMuYWxsID8gY2F0YWxvZ0VudGl0eS5yZW5kZXIoKSA6IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpLFxuXG4gICAgICBmaXJlc3RhcnRyRW50aXR5Py5yZW5kZXIoKSxcblxuICAgIF1cblxuICApXG5cbiAgLypcbiAgICpcbiAgICogUG9zdCByZW5kZXIgcGhhc2UgKGFuZCByZXR1cm4pXG4gICAqXG4gICAqL1xuICByZXR1cm4ge1xuXG4gICAgY2F0YWxvZ0VudGl0eTogY2F0YWxvZ0NoYXJ0ID8gYXdhaXQgY2F0YWxvZ0NoYXJ0LnBvc3RSZW5kZXJlcihwb3N0UGF0Y2hlcykgOiB1bmRlZmluZWQsXG5cbiAgICBmaXJlc3RhcnRyRW50aXR5OiBhd2FpdCAoZmlyZXN0YXJ0ckVudGl0eUNoYXJ0ID8gZmlyZXN0YXJ0ckVudGl0eUNoYXJ0LnBvc3RSZW5kZXJlcihwb3N0UGF0Y2hlcykgOiB1bmRlZmluZWQpLFxuXG4gICAgZXh0cmFDaGFydHM6IGF3YWl0IGZpcmVzdGFydHJFbnRpdHk/LmV4dHJhQ2hhcnRzKCkgfHwgW11cbiAgfTtcblxufVxuXG5cblxuZnVuY3Rpb24gc29ydEtpbmRzKG9yZGVyZWRLaW5kczogc3RyaW5nW10sIGNsYWltczogUmVuZGVyQ2xhaW1zKSB7XG5cbiAgY29uc3QgcmVzdWx0OiBSZW5kZXJDbGFpbXNbXSA9IFtdXG5cbiAgZm9yIChjb25zdCBraW5kIG9mIG9yZGVyZWRLaW5kcykge1xuXG4gICAgY29uc3Qga2luZFJlbmRlckNsYWltczogYW55ID0gc29ydFJlbmRlckNsYWltc0J5S2luZChjbGFpbXMsIFtraW5kXSlcblxuICAgIHJlc3VsdC5wdXNoKGtpbmRSZW5kZXJDbGFpbXMpXG5cbiAgfVxuXG4gIHJldHVybiByZXN1bHRcblxufVxuXG5cblxuXG5cbmZ1bmN0aW9uIGdldFByZXZpb3VzQ1Jmcm9tQ2xhaW0oY2xhaW06IGFueSwgcHJldmlvdXNDUnM6IGFueSkge1xuXG4gIGNvbnN0IHByZXZpb3VzQ1JzS2V5cyA9IE9iamVjdC5rZXlzKHByZXZpb3VzQ1JzKVxuXG4gIGZvcihjb25zdCBwcmV2aW91c0NSS2V5IG9mIHByZXZpb3VzQ1JzS2V5cyl7XG5cbiAgICBjb25zdCBwcmV2aW91c0NSID0gcHJldmlvdXNDUnNbcHJldmlvdXNDUktleV1cblxuICAgIGlmKGlzQ2F0YWxvZ0VudGl0eShwcmV2aW91c0NSKSkgY29udGludWVcblxuICAgIGlmKGlzRXhjbHVkZWRGcm9tUHJldmlvdXNDUihwcmV2aW91c0NSLmtpbmQpKSBjb250aW51ZVxuXG4gICAgaWYocHJldmlvdXNDUi5tZXRhZGF0YS5hbm5vdGF0aW9uc1tDTEFJTV9SRUZfQU5OT1RBVElPTl0gPT09IGAke2NsYWltLmtpbmR9LyR7Y2xhaW0ubmFtZX1gKXtcblxuICAgICAgcmV0dXJuIHByZXZpb3VzQ1JcblxuICAgIH1cblxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG5cbn1cblxuXG5mdW5jdGlvbiBpc0V4Y2x1ZGVkRnJvbVByZXZpb3VzQ1IoY3JLaW5kOiBzdHJpbmcpe1xuXG5cbiAgcmV0dXJuIFtcIkZpcmVzdGFydHJHaXRodWJSZXBvc2l0b3J5RmVhdHVyZVwiXS5pbmNsdWRlcyhjcktpbmQpXG5cblxufVxuIl19
|
|
235586
235745
|
|
|
235587
235746
|
/***/ }),
|
|
235588
235747
|
|
|
@@ -237086,7 +237245,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
237086
237245
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
237087
237246
|
};
|
|
237088
237247
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
237089
|
-
exports.commentInPR = void 0;
|
|
237248
|
+
exports.getPrFiles = exports.commentInPR = void 0;
|
|
237090
237249
|
const auth_1 = __nccwpck_require__(7745);
|
|
237091
237250
|
const debug_1 = __importDefault(__nccwpck_require__(67984));
|
|
237092
237251
|
const messageLog = (0, debug_1.default)('firestartr:github:pull_request');
|
|
@@ -237098,7 +237257,39 @@ async function commentInPR(comment, pr_number, repo, owner = "prefapp") {
|
|
|
237098
237257
|
});
|
|
237099
237258
|
}
|
|
237100
237259
|
exports.commentInPR = commentInPR;
|
|
237101
|
-
|
|
237260
|
+
async function getPrFiles(pr_number, repo, owner = "prefapp") {
|
|
237261
|
+
messageLog(`Getting PR details of PR ${pr_number} of ${owner}/${repo}`);
|
|
237262
|
+
const octokit = await (0, auth_1.getOctokitForOrg)(owner);
|
|
237263
|
+
return await octokit.rest.pulls.listFiles({
|
|
237264
|
+
owner, repo, pull_number: pr_number
|
|
237265
|
+
});
|
|
237266
|
+
}
|
|
237267
|
+
exports.getPrFiles = getPrFiles;
|
|
237268
|
+
async function filterPrBy(filter, opts) {
|
|
237269
|
+
let foundPr = null;
|
|
237270
|
+
let retries = 0;
|
|
237271
|
+
const { title, state, repo, owner, userType } = filter;
|
|
237272
|
+
const { maxRetries } = opts;
|
|
237273
|
+
const octokit = await (0, auth_1.getOctokitForOrg)(owner);
|
|
237274
|
+
while (retries < maxRetries) {
|
|
237275
|
+
const resp = await octokit.rest.pulls.list({
|
|
237276
|
+
owner,
|
|
237277
|
+
repo,
|
|
237278
|
+
state,
|
|
237279
|
+
per_page: 100,
|
|
237280
|
+
page: retries
|
|
237281
|
+
});
|
|
237282
|
+
foundPr = resp.data.find(pr => {
|
|
237283
|
+
return pr.title
|
|
237284
|
+
.includes(title) &&
|
|
237285
|
+
pr?.user?.type === userType;
|
|
237286
|
+
});
|
|
237287
|
+
if (foundPr)
|
|
237288
|
+
return foundPr;
|
|
237289
|
+
retries++;
|
|
237290
|
+
}
|
|
237291
|
+
}
|
|
237292
|
+
exports["default"] = { commentInPR, getPrFiles, filterPrBy };
|
|
237102
237293
|
|
|
237103
237294
|
|
|
237104
237295
|
/***/ }),
|
|
@@ -237145,7 +237336,9 @@ async function listReleases(repo, owner = "prefapp") {
|
|
|
237145
237336
|
const octokit = await (0, auth_1.getOctokitForOrg)(owner);
|
|
237146
237337
|
const response = await octokit.rest.repos.listReleases({
|
|
237147
237338
|
owner,
|
|
237148
|
-
repo
|
|
237339
|
+
repo,
|
|
237340
|
+
per_page: 100,
|
|
237341
|
+
page: 0
|
|
237149
237342
|
});
|
|
237150
237343
|
return response.data;
|
|
237151
237344
|
}
|
|
@@ -239100,7 +239293,7 @@ const informer_1 = __nccwpck_require__(41151);
|
|
|
239100
239293
|
const dummy_1 = __nccwpck_require__(73490);
|
|
239101
239294
|
const processItem_1 = __nccwpck_require__(84766);
|
|
239102
239295
|
const cdktf_1 = __nccwpck_require__(10805);
|
|
239103
|
-
const
|
|
239296
|
+
const process_operation_1 = __nccwpck_require__(3937);
|
|
239104
239297
|
const leader_election_1 = __nccwpck_require__(29856);
|
|
239105
239298
|
const catalog_common_1 = __importDefault(__nccwpck_require__(74100));
|
|
239106
239299
|
const processOperationPlan_1 = __nccwpck_require__(79980);
|
|
@@ -239164,7 +239357,7 @@ function getProvisionImplementation(plural) {
|
|
|
239164
239357
|
let implementation = undefined;
|
|
239165
239358
|
switch (plural) {
|
|
239166
239359
|
case "terraformworkspaces":
|
|
239167
|
-
implementation =
|
|
239360
|
+
implementation = process_operation_1.processOperation;
|
|
239168
239361
|
break;
|
|
239169
239362
|
case "terraformworkspaceplans":
|
|
239170
239363
|
implementation = processOperationPlan_1.processOperationPlan;
|
|
@@ -240193,7 +240386,7 @@ async function inform(pluralKind, item, op, lastWorkItem = null) {
|
|
|
240193
240386
|
};
|
|
240194
240387
|
return workItem;
|
|
240195
240388
|
case "onRename":
|
|
240196
|
-
if (await (0, status_1.needsProvisioningOnCreate)(
|
|
240389
|
+
if (await (0, status_1.needsProvisioningOnCreate)(item)) {
|
|
240197
240390
|
log("onRename - needsProvisioningOnCreate true %s", item.metadata.name);
|
|
240198
240391
|
workItem = {
|
|
240199
240392
|
operation: OperationType.RENAMED,
|
|
@@ -240217,7 +240410,7 @@ async function inform(pluralKind, item, op, lastWorkItem = null) {
|
|
|
240217
240410
|
return workItem;
|
|
240218
240411
|
case "onAdd":
|
|
240219
240412
|
log("onAdd %s", item.metadata.name);
|
|
240220
|
-
if (await (0, status_1.needsProvisioningOnCreate)(
|
|
240413
|
+
if (await (0, status_1.needsProvisioningOnCreate)(item)) {
|
|
240221
240414
|
workItem = {
|
|
240222
240415
|
operation: OperationType.CREATED,
|
|
240223
240416
|
item,
|
|
@@ -240734,11 +240927,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
240734
240927
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
240735
240928
|
exports.observe = void 0;
|
|
240736
240929
|
const ctl_1 = __nccwpck_require__(46679);
|
|
240737
|
-
const fast_json_patch_1 = __importDefault(__nccwpck_require__(75177));
|
|
240738
240930
|
const debug_1 = __importDefault(__nccwpck_require__(67984));
|
|
240739
240931
|
const catalog_common_1 = __importDefault(__nccwpck_require__(74100));
|
|
240740
240932
|
const log = (0, debug_1.default)('firestartr:operator:reflector');
|
|
240741
240933
|
const k8s = __importStar(__nccwpck_require__(54851));
|
|
240934
|
+
const store_1 = __nccwpck_require__(87432);
|
|
240742
240935
|
/**
|
|
240743
240936
|
* Execute the callbacks for each item in the store
|
|
240744
240937
|
* @param {string} kind - Kind to observe
|
|
@@ -240749,7 +240942,7 @@ const k8s = __importStar(__nccwpck_require__(54851));
|
|
|
240749
240942
|
* @param {Function} onRename - Function to call when an item is renamed
|
|
240750
240943
|
*/
|
|
240751
240944
|
async function observe(kind, namespace, onAdd, onChange, onDelete, _onRename) {
|
|
240752
|
-
const store = new Store(kind);
|
|
240945
|
+
const store = new store_1.Store(kind);
|
|
240753
240946
|
const { kc } = await (0, ctl_1.getConnection)();
|
|
240754
240947
|
try {
|
|
240755
240948
|
const k8sApi = kc.makeApiClient(k8s.CustomObjectsApi);
|
|
@@ -240761,29 +240954,37 @@ async function observe(kind, namespace, onAdd, onChange, onDelete, _onRename) {
|
|
|
240761
240954
|
};
|
|
240762
240955
|
const informer = k8s.makeInformer(kc, apiPaths, listFn);
|
|
240763
240956
|
informer.on('add', (obj) => {
|
|
240764
|
-
log(`informer: ADDED ${obj.metadata.name}`);
|
|
240765
240957
|
store.add(obj);
|
|
240766
|
-
|
|
240958
|
+
if (store.hasDeletionTimestamp(obj)) {
|
|
240959
|
+
log(`informer (on add): The item ${obj.metadata.name} has a deletion timestamp, marking for deletion`);
|
|
240960
|
+
store.markToDelete(obj);
|
|
240961
|
+
onDelete(obj);
|
|
240962
|
+
}
|
|
240963
|
+
else {
|
|
240964
|
+
log(`informer (on add): The item ${obj.metadata.name} has been added`);
|
|
240965
|
+
onAdd(obj);
|
|
240966
|
+
}
|
|
240767
240967
|
});
|
|
240768
240968
|
informer.on('update', (obj) => {
|
|
240769
|
-
log(`informer:
|
|
240770
|
-
if (store.getItem(obj).markedToDelete
|
|
240771
|
-
|
|
240772
|
-
|
|
240969
|
+
log(`informer (on update): The item ${obj.kind}: ${obj.metadata.name} has been updated`);
|
|
240970
|
+
if (!store.getItem(obj).markedToDelete &&
|
|
240971
|
+
store.hasDeletionTimestamp(obj) &&
|
|
240972
|
+
(store.hasBeenMarkedToDelete(obj) || store.modified(obj))) {
|
|
240973
|
+
log(`informer (on update): The item ${obj.kind}: ${obj.metadata.name} has a deletion timestamp, marking for deletion`);
|
|
240773
240974
|
store.markToDelete(obj);
|
|
240774
240975
|
onDelete(obj);
|
|
240775
240976
|
}
|
|
240776
240977
|
else if (store.modified(obj)) {
|
|
240978
|
+
log(`informer (on update): The item ${obj.kind}: ${obj.metadata.name} has been modified`);
|
|
240777
240979
|
onChange(obj);
|
|
240778
240980
|
}
|
|
240779
240981
|
});
|
|
240780
240982
|
informer.on('delete', (obj) => {
|
|
240781
|
-
log(`informer:
|
|
240983
|
+
log(`informer (on delete): The item ${obj.metadata.name} :${obj.metadata.name} has been deleted from etcd`);
|
|
240782
240984
|
store.remove(obj);
|
|
240783
240985
|
});
|
|
240784
240986
|
informer.on('error', (err) => {
|
|
240785
|
-
|
|
240786
|
-
// Restart informer after 5sec
|
|
240987
|
+
log(`informer (on error): ERROR %O`, err);
|
|
240787
240988
|
setTimeout(() => {
|
|
240788
240989
|
informer.start();
|
|
240789
240990
|
}, 5000);
|
|
@@ -240797,52 +240998,6 @@ async function observe(kind, namespace, onAdd, onChange, onDelete, _onRename) {
|
|
|
240797
240998
|
}
|
|
240798
240999
|
}
|
|
240799
241000
|
exports.observe = observe;
|
|
240800
|
-
class Store {
|
|
240801
|
-
kind;
|
|
240802
|
-
store = {};
|
|
240803
|
-
constructor(kind) {
|
|
240804
|
-
this.kind = kind;
|
|
240805
|
-
}
|
|
240806
|
-
add(item) {
|
|
240807
|
-
this.store[itemPath(this.kind, item)] = {
|
|
240808
|
-
item
|
|
240809
|
-
};
|
|
240810
|
-
}
|
|
240811
|
-
isMarkedToDelete(item) {
|
|
240812
|
-
return "deletionTimestamp" in item.metadata;
|
|
240813
|
-
}
|
|
240814
|
-
markToDelete(item) {
|
|
240815
|
-
this.store[itemPath(this.kind, item)] = {
|
|
240816
|
-
item,
|
|
240817
|
-
markedToDelete: true
|
|
240818
|
-
};
|
|
240819
|
-
}
|
|
240820
|
-
modified(item) {
|
|
240821
|
-
const oldItem = this.getItem(item).item;
|
|
240822
|
-
const patches = fast_json_patch_1.default.compare(item, oldItem);
|
|
240823
|
-
let updated = false;
|
|
240824
|
-
for (const patch of patches) {
|
|
240825
|
-
if (patch.path.match(/^\/spec/) || patch.path.match(/\/metadata.*annotations/)) {
|
|
240826
|
-
updated = true;
|
|
240827
|
-
break;
|
|
240828
|
-
}
|
|
240829
|
-
}
|
|
240830
|
-
this.store[itemPath(this.kind, item)] = {
|
|
240831
|
-
item
|
|
240832
|
-
};
|
|
240833
|
-
console.log(Object.keys(this.store));
|
|
240834
|
-
return updated;
|
|
240835
|
-
}
|
|
240836
|
-
remove(item) {
|
|
240837
|
-
delete this.store[itemPath(this.kind, item)];
|
|
240838
|
-
}
|
|
240839
|
-
getItem(item) {
|
|
240840
|
-
return this.store[itemPath(this.kind, item)];
|
|
240841
|
-
}
|
|
240842
|
-
}
|
|
240843
|
-
function itemPath(kind, item) {
|
|
240844
|
-
return `${item.metadata.namespace}/${kind}/${item.metadata.name}`;
|
|
240845
|
-
}
|
|
240846
241001
|
|
|
240847
241002
|
|
|
240848
241003
|
/***/ }),
|
|
@@ -240991,7 +241146,7 @@ const ctl_1 = __nccwpck_require__(46679);
|
|
|
240991
241146
|
const debug_1 = __importDefault(__nccwpck_require__(67984));
|
|
240992
241147
|
const log = (0, debug_1.default)('firestartr:operator:retry');
|
|
240993
241148
|
const NEXT_RETRY_SECS = 1000 * 60;
|
|
240994
|
-
const MAXRETRY =
|
|
241149
|
+
const MAXRETRY = 5;
|
|
240995
241150
|
const retryWatchers = {};
|
|
240996
241151
|
async function initRetry(enqueue) {
|
|
240997
241152
|
loop(enqueue);
|
|
@@ -241011,6 +241166,9 @@ exports.initRetry = initRetry;
|
|
|
241011
241166
|
function retry(itemPath) {
|
|
241012
241167
|
if (retryWatchers[itemPath]) {
|
|
241013
241168
|
retryWatchers[itemPath].retryCounter++;
|
|
241169
|
+
log(`đ Retrying failed for: ${itemPath}, increasing retry counter to ${retryWatchers[itemPath].retryCounter}`);
|
|
241170
|
+
log(`đ Remaining retries for ${itemPath}: ${MAXRETRY - retryWatchers[itemPath].retryCounter}`);
|
|
241171
|
+
log(`đ Next retry for ${itemPath} in ${NEXT_RETRY_SECS * retryWatchers[itemPath].retryCounter} seconds`);
|
|
241014
241172
|
retryWatchers[itemPath].retry = false;
|
|
241015
241173
|
retryWatchers[itemPath].nextRetry = setTimeout(() => {
|
|
241016
241174
|
if (itemPath in retryWatchers)
|
|
@@ -241090,67 +241248,47 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
241090
241248
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
241091
241249
|
};
|
|
241092
241250
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
241093
|
-
exports.updateTransition = exports.
|
|
241251
|
+
exports.updateTransition = exports.needsProvisioningOnCreate = void 0;
|
|
241094
241252
|
const ctl_1 = __nccwpck_require__(46679);
|
|
241095
241253
|
const debug_1 = __importDefault(__nccwpck_require__(67984));
|
|
241096
241254
|
const log = (0, debug_1.default)('firestartr:operator:status');
|
|
241097
|
-
|
|
241098
|
-
|
|
241099
|
-
|
|
241100
|
-
if (!("status" in
|
|
241101
|
-
|
|
241102
|
-
try {
|
|
241103
|
-
const errorCondition = getConditionByType(k8sItem.status.conditions, "ERROR");
|
|
241104
|
-
if (errorCondition.status === "True" &&
|
|
241105
|
-
errorCondition.observedGeneration >= k8sItem.metadata.generation) {
|
|
241106
|
-
return true;
|
|
241107
|
-
}
|
|
241108
|
-
}
|
|
241109
|
-
catch (e) {
|
|
241110
|
-
catalog_common_1.default.io.writeFunctionLog("needsProvisioningOnCreate", `Error getting error condition: ${e}`);
|
|
241111
|
-
}
|
|
241112
|
-
try {
|
|
241113
|
-
const provisionedCondition = getConditionByType(k8sItem.status.conditions, "PROVISIONED");
|
|
241114
|
-
if (provisionedCondition.status === "True" &&
|
|
241115
|
-
provisionedCondition.observedGeneration >= k8sItem.metadata.generation) {
|
|
241116
|
-
return false;
|
|
241117
|
-
}
|
|
241255
|
+
async function needsProvisioningOnCreate(cr) {
|
|
241256
|
+
const fCrLog = (cr) => `The item ${cr.kind}: ${cr.metadata.name}`;
|
|
241257
|
+
// NO STATUS
|
|
241258
|
+
if (!("status" in cr) || !("conditions" in cr.status)) {
|
|
241259
|
+
log(`${fCrLog(cr)} has no status or conditions, provisioning...`);
|
|
241118
241260
|
return true;
|
|
241119
241261
|
}
|
|
241120
|
-
|
|
241121
|
-
|
|
241122
|
-
|
|
241262
|
+
// ERROR
|
|
241263
|
+
const errCond = getConditionByType(cr.status.conditions, "ERROR");
|
|
241264
|
+
if (errCond && errCond.status === "True") {
|
|
241265
|
+
log(`${fCrLog(cr)} has an error condition, skipping provisioning...`);
|
|
241266
|
+
return false;
|
|
241123
241267
|
}
|
|
241124
|
-
|
|
241125
|
-
|
|
241126
|
-
|
|
241127
|
-
|
|
241128
|
-
|
|
241129
|
-
return true;
|
|
241130
|
-
try {
|
|
241131
|
-
const errorCondition = getConditionByType(k8sItem.status.conditions, "ERROR");
|
|
241132
|
-
if (errorCondition.status === "True" &&
|
|
241133
|
-
errorCondition.observedGeneration >= k8sItem.metadata.generation) {
|
|
241134
|
-
return true;
|
|
241135
|
-
}
|
|
241268
|
+
// PROVISIONED
|
|
241269
|
+
const provCond = getConditionByType(cr.status.conditions, "PROVISIONED");
|
|
241270
|
+
if (provCond && provCond.status === "True" && provCond.observedGeneration >= cr.metadata.generation) {
|
|
241271
|
+
log(`${fCrLog(cr)} has already been provisioned, skipping provisioning...`);
|
|
241272
|
+
return false;
|
|
241136
241273
|
}
|
|
241137
|
-
|
|
241138
|
-
|
|
241139
|
-
|
|
241140
|
-
|
|
241141
|
-
|
|
241142
|
-
return false;
|
|
241143
|
-
}
|
|
241144
|
-
const provisioningCondition = getConditionByType(k8sItem.status.conditions, "PROVISIONING");
|
|
241145
|
-
return provisioningCondition.status !== "True";
|
|
241274
|
+
// DELETED
|
|
241275
|
+
const delCond = getConditionByType(cr.status.conditions, "DELETED");
|
|
241276
|
+
if (delCond && delCond.status === "True" && delCond.observedGeneration >= cr.metadata.generation) {
|
|
241277
|
+
log(`${fCrLog(cr)} has been deleted, skipping provisioning`);
|
|
241278
|
+
return false;
|
|
241146
241279
|
}
|
|
241147
|
-
|
|
241280
|
+
// PROVISIONING
|
|
241281
|
+
const provisioningCondition = getConditionByType(cr.status.conditions, "PROVISIONING");
|
|
241282
|
+
if (provisioningCondition && provisioningCondition.status === "True") {
|
|
241283
|
+
log(`${fCrLog(cr)} is in PROVISIONING state, it was not finished, provisioning again...`);
|
|
241148
241284
|
return true;
|
|
241149
241285
|
}
|
|
241286
|
+
log(`${fCrLog(cr)} is in a not handled state, skipping provisioning...`);
|
|
241287
|
+
return false;
|
|
241150
241288
|
}
|
|
241151
|
-
exports.
|
|
241289
|
+
exports.needsProvisioningOnCreate = needsProvisioningOnCreate;
|
|
241152
241290
|
async function updateTransition(itemPath, reason, type, statusValue, message = "", updateStatusOnly = false) {
|
|
241153
|
-
log("
|
|
241291
|
+
log("Update transition for item: %s, reason: %s, type: %s, status: %s, message: %s, updateStatusOnly: %s", itemPath, reason, type, statusValue, message, updateStatusOnly);
|
|
241154
241292
|
const k8sItem = await (0, ctl_1.getItemByItemPath)(itemPath);
|
|
241155
241293
|
if (!("status" in k8sItem))
|
|
241156
241294
|
k8sItem.status = {};
|
|
@@ -241169,20 +241307,18 @@ async function updateTransition(itemPath, reason, type, statusValue, message = "
|
|
|
241169
241307
|
}
|
|
241170
241308
|
exports.updateTransition = updateTransition;
|
|
241171
241309
|
function getRelevantCondition(conditionList, type) {
|
|
241172
|
-
|
|
241173
|
-
|
|
241174
|
-
|
|
241175
|
-
|
|
241176
|
-
|
|
241177
|
-
|
|
241178
|
-
|
|
241179
|
-
|
|
241180
|
-
|
|
241181
|
-
|
|
241182
|
-
|
|
241183
|
-
|
|
241184
|
-
};
|
|
241185
|
-
}
|
|
241310
|
+
const condition = getConditionByType(conditionList, type);
|
|
241311
|
+
if (condition)
|
|
241312
|
+
return condition;
|
|
241313
|
+
return {
|
|
241314
|
+
"lastTransitionTime": new Date().toJSON(),
|
|
241315
|
+
"lastUpdateTime": new Date().toJSON(),
|
|
241316
|
+
"message": "",
|
|
241317
|
+
"observedGeneration": -1,
|
|
241318
|
+
"reason": "",
|
|
241319
|
+
"status": "",
|
|
241320
|
+
"type": type,
|
|
241321
|
+
};
|
|
241186
241322
|
}
|
|
241187
241323
|
function updateCondition(condition, reason, status, message, generation) {
|
|
241188
241324
|
condition.lastUpdateTime = new Date().toJSON();
|
|
@@ -241197,7 +241333,7 @@ function getConditionByType(conditionList, type) {
|
|
|
241197
241333
|
if (conditionList[i].type === type)
|
|
241198
241334
|
return conditionList[i];
|
|
241199
241335
|
}
|
|
241200
|
-
|
|
241336
|
+
return false;
|
|
241201
241337
|
}
|
|
241202
241338
|
function updateConditionByType(conditionList, type, newCondition) {
|
|
241203
241339
|
let typeFound = false;
|
|
@@ -241213,6 +241349,82 @@ function updateConditionByType(conditionList, type, newCondition) {
|
|
|
241213
241349
|
}
|
|
241214
241350
|
|
|
241215
241351
|
|
|
241352
|
+
/***/ }),
|
|
241353
|
+
|
|
241354
|
+
/***/ 87432:
|
|
241355
|
+
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
|
241356
|
+
|
|
241357
|
+
"use strict";
|
|
241358
|
+
|
|
241359
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
241360
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
241361
|
+
};
|
|
241362
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
241363
|
+
exports.itemPath = exports.Store = void 0;
|
|
241364
|
+
const fast_json_patch_1 = __importDefault(__nccwpck_require__(75177));
|
|
241365
|
+
const debug_1 = __importDefault(__nccwpck_require__(67984));
|
|
241366
|
+
const log = (0, debug_1.default)('firestartr:operator:store');
|
|
241367
|
+
class Store {
|
|
241368
|
+
kind;
|
|
241369
|
+
store = {};
|
|
241370
|
+
constructor(kind) {
|
|
241371
|
+
this.kind = kind;
|
|
241372
|
+
}
|
|
241373
|
+
add(item) {
|
|
241374
|
+
this.store[itemPath(this.kind, item)] = {
|
|
241375
|
+
item
|
|
241376
|
+
};
|
|
241377
|
+
}
|
|
241378
|
+
hasDeletionTimestamp(item) {
|
|
241379
|
+
return "deletionTimestamp" in item.metadata;
|
|
241380
|
+
}
|
|
241381
|
+
markToDelete(item) {
|
|
241382
|
+
this.store[itemPath(this.kind, item)] = {
|
|
241383
|
+
item,
|
|
241384
|
+
markedToDelete: true
|
|
241385
|
+
};
|
|
241386
|
+
}
|
|
241387
|
+
hasBeenMarkedToDelete(item) {
|
|
241388
|
+
const oldItem = this.getItem(item).item;
|
|
241389
|
+
const patches = fast_json_patch_1.default.compare(item, oldItem);
|
|
241390
|
+
let updated = false;
|
|
241391
|
+
for (const patch of patches) {
|
|
241392
|
+
if (patch.path.match(/^\/metadata\/deletionTimestamp/)) {
|
|
241393
|
+
updated = true;
|
|
241394
|
+
break;
|
|
241395
|
+
}
|
|
241396
|
+
}
|
|
241397
|
+
return updated;
|
|
241398
|
+
}
|
|
241399
|
+
modified(item) {
|
|
241400
|
+
const oldItem = this.getItem(item).item;
|
|
241401
|
+
const patches = fast_json_patch_1.default.compare(item, oldItem);
|
|
241402
|
+
let updated = false;
|
|
241403
|
+
for (const patch of patches) {
|
|
241404
|
+
if (patch.path.match(/^\/spec/) || patch.path.match(/\/metadata.*annotations/)) {
|
|
241405
|
+
updated = true;
|
|
241406
|
+
break;
|
|
241407
|
+
}
|
|
241408
|
+
}
|
|
241409
|
+
this.store[itemPath(this.kind, item)] = {
|
|
241410
|
+
item
|
|
241411
|
+
};
|
|
241412
|
+
return updated;
|
|
241413
|
+
}
|
|
241414
|
+
remove(item) {
|
|
241415
|
+
delete this.store[itemPath(this.kind, item)];
|
|
241416
|
+
}
|
|
241417
|
+
getItem(item) {
|
|
241418
|
+
return this.store[itemPath(this.kind, item)];
|
|
241419
|
+
}
|
|
241420
|
+
}
|
|
241421
|
+
exports.Store = Store;
|
|
241422
|
+
function itemPath(kind, item) {
|
|
241423
|
+
return `${item.metadata.namespace}/${kind}/${item.metadata.name}`;
|
|
241424
|
+
}
|
|
241425
|
+
exports.itemPath = itemPath;
|
|
241426
|
+
|
|
241427
|
+
|
|
241216
241428
|
/***/ }),
|
|
241217
241429
|
|
|
241218
241430
|
/***/ 74298:
|
|
@@ -241383,7 +241595,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
241383
241595
|
};
|
|
241384
241596
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
241385
241597
|
exports.buildProvisionerContext = exports.processOperationPlan = void 0;
|
|
241386
|
-
const informer_1 = __nccwpck_require__(41151);
|
|
241387
241598
|
const debug_1 = __importDefault(__nccwpck_require__(67984));
|
|
241388
241599
|
const terraform_provisioner_1 = __nccwpck_require__(6777);
|
|
241389
241600
|
const github_1 = __importDefault(__nccwpck_require__(39759));
|
|
@@ -241394,12 +241605,15 @@ const TF_PROJECTS_PATH = "/tmp/tfworkspaces";
|
|
|
241394
241605
|
function processOperationPlan(item, op, handler) {
|
|
241395
241606
|
try {
|
|
241396
241607
|
clearLocalTfProjects();
|
|
241397
|
-
|
|
241398
|
-
|
|
241399
|
-
|
|
241400
|
-
|
|
241401
|
-
|
|
241402
|
-
|
|
241608
|
+
const policy = getPolicy(item);
|
|
241609
|
+
if (policy === "observe" || policy === "apply") {
|
|
241610
|
+
return plan(item, op, handler);
|
|
241611
|
+
}
|
|
241612
|
+
else if (policy === "destroy") {
|
|
241613
|
+
return plan(item, op, handler, "plain-text", "plan-destroy");
|
|
241614
|
+
}
|
|
241615
|
+
else {
|
|
241616
|
+
return nothing(item, op, handler);
|
|
241403
241617
|
}
|
|
241404
241618
|
}
|
|
241405
241619
|
catch (e) {
|
|
@@ -241408,7 +241622,7 @@ function processOperationPlan(item, op, handler) {
|
|
|
241408
241622
|
}
|
|
241409
241623
|
}
|
|
241410
241624
|
exports.processOperationPlan = processOperationPlan;
|
|
241411
|
-
async function* nothing(item, op,
|
|
241625
|
+
async function* nothing(item, op, _handler) {
|
|
241412
241626
|
yield {
|
|
241413
241627
|
item,
|
|
241414
241628
|
reason: op,
|
|
@@ -241417,19 +241631,19 @@ async function* nothing(item, op, handler) {
|
|
|
241417
241631
|
message: "NOTHING"
|
|
241418
241632
|
};
|
|
241419
241633
|
}
|
|
241420
|
-
async function* plan(item, op, handler, format = "plain-text") {
|
|
241634
|
+
async function* plan(item, op, handler, format = "plain-text", action = "plan") {
|
|
241421
241635
|
if (format == "plain-text") {
|
|
241422
|
-
for await (const transition of doPlanPlainTextFormat(item, op, handler)) {
|
|
241636
|
+
for await (const transition of doPlanPlainTextFormat(item, op, handler, action)) {
|
|
241423
241637
|
yield transition;
|
|
241424
241638
|
}
|
|
241425
241639
|
}
|
|
241426
241640
|
else if (format == "json") {
|
|
241427
|
-
for await (const transition of doPlanJSONFormat(item, op, handler)) {
|
|
241641
|
+
for await (const transition of doPlanJSONFormat(item, op, handler, action)) {
|
|
241428
241642
|
yield transition;
|
|
241429
241643
|
}
|
|
241430
241644
|
}
|
|
241431
241645
|
}
|
|
241432
|
-
async function* doPlanPlainTextFormat(item, op, handler) {
|
|
241646
|
+
async function* doPlanPlainTextFormat(item, op, handler, action) {
|
|
241433
241647
|
try {
|
|
241434
241648
|
yield {
|
|
241435
241649
|
item,
|
|
@@ -241455,7 +241669,7 @@ async function* doPlanPlainTextFormat(item, op, handler) {
|
|
|
241455
241669
|
const deps = await handler.resolveReferences();
|
|
241456
241670
|
log('Item %s has the following dependencies: %O', item.metadata.name, deps);
|
|
241457
241671
|
const context = buildProvisionerContext(item, deps);
|
|
241458
|
-
const tfPlanOutput = await (0, terraform_provisioner_1.runTerraformProvisioner)(context,
|
|
241672
|
+
const tfPlanOutput = await (0, terraform_provisioner_1.runTerraformProvisioner)(context, action);
|
|
241459
241673
|
await publishPlan(item, tfPlanOutput);
|
|
241460
241674
|
yield {
|
|
241461
241675
|
item,
|
|
@@ -241509,7 +241723,7 @@ async function* doPlanPlainTextFormat(item, op, handler) {
|
|
|
241509
241723
|
}
|
|
241510
241724
|
}
|
|
241511
241725
|
}
|
|
241512
|
-
async function* doPlanJSONFormat(item, op, handler) {
|
|
241726
|
+
async function* doPlanJSONFormat(item, op, handler, action) {
|
|
241513
241727
|
try {
|
|
241514
241728
|
yield {
|
|
241515
241729
|
item,
|
|
@@ -241535,7 +241749,7 @@ async function* doPlanJSONFormat(item, op, handler) {
|
|
|
241535
241749
|
const deps = await handler.resolveReferences();
|
|
241536
241750
|
log('Item %s has the following dependencies: %O', item.metadata.name, deps);
|
|
241537
241751
|
const context = buildProvisionerContext(item, deps);
|
|
241538
|
-
const tfPlan = await (0, terraform_provisioner_1.runTerraformProvisioner)(context,
|
|
241752
|
+
const tfPlan = await (0, terraform_provisioner_1.runTerraformProvisioner)(context, action);
|
|
241539
241753
|
if (tfPlan.summary.hasChanges()) {
|
|
241540
241754
|
yield {
|
|
241541
241755
|
item,
|
|
@@ -241843,6 +242057,11 @@ async function publishPlan(item, planOutput) {
|
|
|
241843
242057
|
console.error(e);
|
|
241844
242058
|
}
|
|
241845
242059
|
}
|
|
242060
|
+
function getPolicy(item) {
|
|
242061
|
+
const policy = item.metadata.annotations && item.metadata.annotations["firestartr.dev/policy"];
|
|
242062
|
+
if (policy)
|
|
242063
|
+
return policy;
|
|
242064
|
+
}
|
|
241846
242065
|
|
|
241847
242066
|
|
|
241848
242067
|
/***/ }),
|
|
@@ -241941,7 +242160,7 @@ const terraform_provisioner_1 = __nccwpck_require__(6777);
|
|
|
241941
242160
|
const ctl_1 = __nccwpck_require__(46679);
|
|
241942
242161
|
const ctx_1 = __nccwpck_require__(15284);
|
|
241943
242162
|
const resolver_1 = __nccwpck_require__(31022);
|
|
241944
|
-
const
|
|
242163
|
+
const process_operation_1 = __nccwpck_require__(3937);
|
|
241945
242164
|
const cdk8s_renderer_1 = __importDefault(__nccwpck_require__(80318));
|
|
241946
242165
|
const ctl_2 = __nccwpck_require__(59018);
|
|
241947
242166
|
const debug_1 = __importDefault(__nccwpck_require__(67984));
|
|
@@ -241988,7 +242207,7 @@ async function buildContext(claim, namespace, command) {
|
|
|
241988
242207
|
};
|
|
241989
242208
|
compute["runProvision"] = async () => {
|
|
241990
242209
|
infolog("đ Running terraform process...");
|
|
241991
|
-
const data = await (0,
|
|
242210
|
+
const data = await (0, process_operation_1.buildProvisionerContext)(cr, deps);
|
|
241992
242211
|
const result = await (0, terraform_provisioner_1.runTerraformProvisioner)(data, command);
|
|
241993
242212
|
infolog("â
Terraform process finished");
|
|
241994
242213
|
return result;
|
|
@@ -242000,7 +242219,64 @@ exports.buildContext = buildContext;
|
|
|
242000
242219
|
|
|
242001
242220
|
/***/ }),
|
|
242002
242221
|
|
|
242003
|
-
/***/
|
|
242222
|
+
/***/ 31058:
|
|
242223
|
+
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
|
242224
|
+
|
|
242225
|
+
"use strict";
|
|
242226
|
+
|
|
242227
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
242228
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
242229
|
+
};
|
|
242230
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
242231
|
+
exports.errorPolicyCompatibility = exports.policyAllowsOp = void 0;
|
|
242232
|
+
const informer_1 = __nccwpck_require__(41151);
|
|
242233
|
+
const debug_1 = __importDefault(__nccwpck_require__(67984));
|
|
242234
|
+
const user_feedback_ops_1 = __nccwpck_require__(36322);
|
|
242235
|
+
const catalog_common_1 = __importDefault(__nccwpck_require__(74100));
|
|
242236
|
+
const log = (0, debug_1.default)("firestartr:operator:tfworkspaces:policies");
|
|
242237
|
+
function policyAllowsOp(policy, op, item) {
|
|
242238
|
+
const foundPolicy = catalog_common_1.default.policies.getPolicyByName(policy);
|
|
242239
|
+
if (op === informer_1.OperationType.RETRY.toString() && foundPolicy?.allowedOps.includes(op)) {
|
|
242240
|
+
if ("deletionTimestamp" in item.metadata && "full-control" !== policy) {
|
|
242241
|
+
return false;
|
|
242242
|
+
}
|
|
242243
|
+
else {
|
|
242244
|
+
return true;
|
|
242245
|
+
}
|
|
242246
|
+
}
|
|
242247
|
+
if (!foundPolicy)
|
|
242248
|
+
return false;
|
|
242249
|
+
return foundPolicy.allowedOps.includes(op);
|
|
242250
|
+
}
|
|
242251
|
+
exports.policyAllowsOp = policyAllowsOp;
|
|
242252
|
+
async function* errorPolicyCompatibility(syncPolicy, generalPolicy, item, op) {
|
|
242253
|
+
const message = `Conflict: 'sync-policy': ${syncPolicy} and 'policy': ${generalPolicy} are not compatible`;
|
|
242254
|
+
for (const typeStatus of [
|
|
242255
|
+
["ERROR", "True"],
|
|
242256
|
+
["PROVISIONED", "False"],
|
|
242257
|
+
["PROVISIONING", "False"],
|
|
242258
|
+
["OUT_OF_SYNC", "False"],
|
|
242259
|
+
["DELETED", "False"],
|
|
242260
|
+
["PLANNING", "False"],
|
|
242261
|
+
["DELETING", "False"],
|
|
242262
|
+
]) {
|
|
242263
|
+
const [type, status] = typeStatus;
|
|
242264
|
+
yield {
|
|
242265
|
+
item,
|
|
242266
|
+
reason: op,
|
|
242267
|
+
type,
|
|
242268
|
+
status,
|
|
242269
|
+
message
|
|
242270
|
+
};
|
|
242271
|
+
}
|
|
242272
|
+
await (0, user_feedback_ops_1.tryPublishError)(item, op, message);
|
|
242273
|
+
}
|
|
242274
|
+
exports.errorPolicyCompatibility = errorPolicyCompatibility;
|
|
242275
|
+
|
|
242276
|
+
|
|
242277
|
+
/***/ }),
|
|
242278
|
+
|
|
242279
|
+
/***/ 3937:
|
|
242004
242280
|
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
|
242005
242281
|
|
|
242006
242282
|
"use strict";
|
|
@@ -242036,38 +242312,41 @@ exports.buildProvisionerContext = exports.processOperation = void 0;
|
|
|
242036
242312
|
const informer_1 = __nccwpck_require__(41151);
|
|
242037
242313
|
const debug_1 = __importDefault(__nccwpck_require__(67984));
|
|
242038
242314
|
const terraform_provisioner_1 = __nccwpck_require__(6777);
|
|
242039
|
-
const log = (0, debug_1.default)('firestartr:operator:terraform');
|
|
242040
|
-
const github_1 = __importDefault(__nccwpck_require__(39759));
|
|
242041
242315
|
const fs = __importStar(__nccwpck_require__(57147));
|
|
242042
242316
|
const path = __importStar(__nccwpck_require__(71017));
|
|
242043
|
-
const
|
|
242317
|
+
const user_feedback_ops_1 = __nccwpck_require__(36322);
|
|
242318
|
+
const policies_1 = __nccwpck_require__(31058);
|
|
242319
|
+
const catalog_common_1 = __importDefault(__nccwpck_require__(74100));
|
|
242320
|
+
const log = (0, debug_1.default)('firestartr:operator:terraform');
|
|
242044
242321
|
const TF_PROJECTS_PATH = "/tmp/tfworkspaces";
|
|
242045
242322
|
function processOperation(item, op, handler) {
|
|
242046
242323
|
try {
|
|
242047
242324
|
clearLocalTfProjects();
|
|
242048
|
-
const policy = getPolicy(item);
|
|
242049
|
-
|
|
242325
|
+
const policy = getPolicy(item, "firestartr.dev/policy");
|
|
242326
|
+
const syncPolicy = getPolicy(item, "firestartr.dev/sync-policy");
|
|
242327
|
+
if (!policy || policy === "observe" || policy === "observe-only") {
|
|
242050
242328
|
return observe(item, op, handler);
|
|
242051
242329
|
}
|
|
242052
|
-
|
|
242053
|
-
|
|
242054
|
-
|
|
242055
|
-
|
|
242056
|
-
|
|
242057
|
-
|
|
242058
|
-
|
|
242059
|
-
|
|
242060
|
-
|
|
242061
|
-
|
|
242062
|
-
|
|
242063
|
-
|
|
242064
|
-
|
|
242065
|
-
|
|
242066
|
-
|
|
242067
|
-
|
|
242068
|
-
|
|
242069
|
-
|
|
242070
|
-
|
|
242330
|
+
if (!(0, policies_1.policyAllowsOp)(policy, op, item)) {
|
|
242331
|
+
return errorPolicyNotAllowsOp(item, op, policy, handler);
|
|
242332
|
+
}
|
|
242333
|
+
switch (op) {
|
|
242334
|
+
case informer_1.OperationType.UPDATED:
|
|
242335
|
+
return updated(item, op, handler);
|
|
242336
|
+
case informer_1.OperationType.CREATED:
|
|
242337
|
+
return created(item, op, handler);
|
|
242338
|
+
case informer_1.OperationType.RENAMED:
|
|
242339
|
+
return renamed(item, op, handler);
|
|
242340
|
+
case informer_1.OperationType.SYNC:
|
|
242341
|
+
return sync(item, op, handler, syncPolicy, policy);
|
|
242342
|
+
case informer_1.OperationType.MARKED_TO_DELETION:
|
|
242343
|
+
return markedToDeletion(item, op, handler);
|
|
242344
|
+
case informer_1.OperationType.RETRY:
|
|
242345
|
+
return retry(item, op, handler);
|
|
242346
|
+
case informer_1.OperationType.NOTHING:
|
|
242347
|
+
return nothing(item, op, handler);
|
|
242348
|
+
default:
|
|
242349
|
+
throw new Error(`Operation ${op} not supported`);
|
|
242071
242350
|
}
|
|
242072
242351
|
}
|
|
242073
242352
|
catch (e) {
|
|
@@ -242107,7 +242386,11 @@ async function* doPlanJSONFormat(item, op, handler) {
|
|
|
242107
242386
|
const deps = await handler.resolveReferences();
|
|
242108
242387
|
log('Item %s has the following dependencies: %O', item.metadata.name, deps);
|
|
242109
242388
|
const context = buildProvisionerContext(item, deps);
|
|
242110
|
-
|
|
242389
|
+
let planType = "plan-json";
|
|
242390
|
+
if ("deletionTimestamp" in item.metadata) {
|
|
242391
|
+
planType = "plan-destroy-json";
|
|
242392
|
+
}
|
|
242393
|
+
const tfPlan = await (0, terraform_provisioner_1.runTerraformProvisioner)(context, planType);
|
|
242111
242394
|
if (tfPlan.summary.hasChanges()) {
|
|
242112
242395
|
yield {
|
|
242113
242396
|
item,
|
|
@@ -242116,6 +242399,7 @@ async function* doPlanJSONFormat(item, op, handler) {
|
|
|
242116
242399
|
status: "False",
|
|
242117
242400
|
message: "Plan has changes"
|
|
242118
242401
|
};
|
|
242402
|
+
policies_1.policyAllowsOp;
|
|
242119
242403
|
yield {
|
|
242120
242404
|
item,
|
|
242121
242405
|
reason: op,
|
|
@@ -242202,8 +242486,8 @@ async function* renamed(item, op, handler) {
|
|
|
242202
242486
|
yield transition;
|
|
242203
242487
|
}
|
|
242204
242488
|
}
|
|
242205
|
-
function getPolicy(item) {
|
|
242206
|
-
const policy = item.metadata.annotations && item.metadata.annotations[
|
|
242489
|
+
function getPolicy(item, annotation) {
|
|
242490
|
+
const policy = item.metadata.annotations && item.metadata.annotations[annotation];
|
|
242207
242491
|
if (policy)
|
|
242208
242492
|
return policy;
|
|
242209
242493
|
}
|
|
@@ -242213,7 +242497,7 @@ async function* updated(item, op, handler) {
|
|
|
242213
242497
|
}
|
|
242214
242498
|
}
|
|
242215
242499
|
async function* retry(item, op, handler) {
|
|
242216
|
-
if (
|
|
242500
|
+
if (isDestroyRetry(item)) {
|
|
242217
242501
|
for await (const transition of markedToDeletion(item, op, handler)) {
|
|
242218
242502
|
yield transition;
|
|
242219
242503
|
}
|
|
@@ -242224,28 +242508,71 @@ async function* retry(item, op, handler) {
|
|
|
242224
242508
|
}
|
|
242225
242509
|
}
|
|
242226
242510
|
}
|
|
242227
|
-
|
|
242511
|
+
function isDestroyRetry(item) {
|
|
242512
|
+
if ("deletionTimestamp" in item.metadata) {
|
|
242513
|
+
return true;
|
|
242514
|
+
}
|
|
242515
|
+
return false;
|
|
242516
|
+
}
|
|
242517
|
+
async function* sync(item, op, handler, syncPolicy, generalPolicy) {
|
|
242228
242518
|
yield {
|
|
242229
242519
|
item,
|
|
242230
242520
|
reason: op,
|
|
242231
242521
|
type: "SYNCHRONIZED",
|
|
242232
242522
|
status: "False",
|
|
242233
|
-
message: "
|
|
242523
|
+
message: "Sync process started"
|
|
242234
242524
|
};
|
|
242235
|
-
|
|
242236
|
-
|
|
242525
|
+
if (!syncPolicy) {
|
|
242526
|
+
log("No sync policy defined, allowing operation by default (observe)");
|
|
242527
|
+
yield* doPlanJSONFormat(item, op, handler);
|
|
242528
|
+
return;
|
|
242529
|
+
}
|
|
242530
|
+
else if (!catalog_common_1.default.policies.policiesAreCompatible(syncPolicy, generalPolicy)) {
|
|
242531
|
+
yield* (0, policies_1.errorPolicyCompatibility)(syncPolicy, generalPolicy, item, op);
|
|
242532
|
+
return;
|
|
242533
|
+
}
|
|
242534
|
+
else {
|
|
242535
|
+
switch (syncPolicy) {
|
|
242536
|
+
case "apply": {
|
|
242537
|
+
yield* doApply(item, op, handler);
|
|
242538
|
+
break;
|
|
242539
|
+
}
|
|
242540
|
+
case "observe": {
|
|
242541
|
+
yield* doPlanJSONFormat(item, op, handler);
|
|
242542
|
+
break;
|
|
242543
|
+
}
|
|
242544
|
+
default: {
|
|
242545
|
+
log("Policy %s not supported, switching to observe", syncPolicy);
|
|
242546
|
+
yield* doPlanJSONFormat(item, op, handler);
|
|
242547
|
+
break;
|
|
242548
|
+
}
|
|
242549
|
+
}
|
|
242237
242550
|
}
|
|
242238
242551
|
yield {
|
|
242239
242552
|
item,
|
|
242240
242553
|
reason: op,
|
|
242241
242554
|
type: "SYNCHRONIZED",
|
|
242242
242555
|
status: "True",
|
|
242243
|
-
message: "
|
|
242556
|
+
message: "Sync process finished"
|
|
242244
242557
|
};
|
|
242245
242558
|
}
|
|
242246
242559
|
async function* markedToDeletion(item, op, handler) {
|
|
242247
242560
|
try {
|
|
242248
242561
|
let type = "DELETING";
|
|
242562
|
+
yield {
|
|
242563
|
+
item,
|
|
242564
|
+
reason: op,
|
|
242565
|
+
type: "PROVISIONING",
|
|
242566
|
+
status: "False",
|
|
242567
|
+
message: "markedToDeletion"
|
|
242568
|
+
};
|
|
242569
|
+
yield {
|
|
242570
|
+
item,
|
|
242571
|
+
reason: op,
|
|
242572
|
+
type: "DELETED",
|
|
242573
|
+
status: "False",
|
|
242574
|
+
message: "markedToDeletion"
|
|
242575
|
+
};
|
|
242249
242576
|
yield {
|
|
242250
242577
|
item,
|
|
242251
242578
|
reason: op,
|
|
@@ -242284,7 +242611,7 @@ async function* markedToDeletion(item, op, handler) {
|
|
|
242284
242611
|
const deps = await handler.resolveReferences();
|
|
242285
242612
|
const context = buildProvisionerContext(item, deps);
|
|
242286
242613
|
const destroyOutput = await (0, terraform_provisioner_1.runTerraformProvisioner)(context, "destroy");
|
|
242287
|
-
await
|
|
242614
|
+
await (0, user_feedback_ops_1.tryPublishDestroy)(item, destroyOutput);
|
|
242288
242615
|
yield {
|
|
242289
242616
|
item,
|
|
242290
242617
|
reason: op,
|
|
@@ -242292,6 +242619,13 @@ async function* markedToDeletion(item, op, handler) {
|
|
|
242292
242619
|
status: "False",
|
|
242293
242620
|
message: "Destroying process finished"
|
|
242294
242621
|
};
|
|
242622
|
+
yield {
|
|
242623
|
+
item,
|
|
242624
|
+
reason: op,
|
|
242625
|
+
type: "DELETED",
|
|
242626
|
+
status: "True",
|
|
242627
|
+
message: "destroyed"
|
|
242628
|
+
};
|
|
242295
242629
|
await handler.finalize(handler.pluralKind, item.metadata.namespace, item, "firestartr.dev/finalizer");
|
|
242296
242630
|
await handler.writeTerraformOutputInTfResult(item, destroyOutput);
|
|
242297
242631
|
handler.success();
|
|
@@ -242325,6 +242659,13 @@ async function* nothing(item, op, handler) {
|
|
|
242325
242659
|
*/
|
|
242326
242660
|
async function* doApply(item, op, handler) {
|
|
242327
242661
|
try {
|
|
242662
|
+
yield {
|
|
242663
|
+
item,
|
|
242664
|
+
reason: op,
|
|
242665
|
+
type: "DELETED",
|
|
242666
|
+
status: "False",
|
|
242667
|
+
message: "markedToDeletion"
|
|
242668
|
+
};
|
|
242328
242669
|
yield {
|
|
242329
242670
|
item,
|
|
242330
242671
|
reason: op,
|
|
@@ -242366,7 +242707,7 @@ async function* doApply(item, op, handler) {
|
|
|
242366
242707
|
log('Item %s has the following dependencies: %O', item.metadata.name, deps);
|
|
242367
242708
|
const context = buildProvisionerContext(item, deps);
|
|
242368
242709
|
const applyOutput = await (0, terraform_provisioner_1.runTerraformProvisioner)(context, "apply");
|
|
242369
|
-
await tryPublishApply(item, applyOutput);
|
|
242710
|
+
await (0, user_feedback_ops_1.tryPublishApply)(item, applyOutput);
|
|
242370
242711
|
const terraformOutputJson = await (0, terraform_provisioner_1.runTerraformProvisioner)(context, "output");
|
|
242371
242712
|
if (!terraformOutputJson) {
|
|
242372
242713
|
throw new Error(`Terraform output is empty for ${item.kind}/${item.metadata.name}`);
|
|
@@ -242399,7 +242740,7 @@ async function* doApply(item, op, handler) {
|
|
|
242399
242740
|
}
|
|
242400
242741
|
catch (e) {
|
|
242401
242742
|
console.error(e);
|
|
242402
|
-
await tryPublishApply(item, e);
|
|
242743
|
+
await (0, user_feedback_ops_1.tryPublishApply)(item, e);
|
|
242403
242744
|
log("Error applying item %s: %O", item.metadata.name, e);
|
|
242404
242745
|
yield {
|
|
242405
242746
|
item,
|
|
@@ -242428,6 +242769,73 @@ async function* doApply(item, op, handler) {
|
|
|
242428
242769
|
}
|
|
242429
242770
|
}
|
|
242430
242771
|
}
|
|
242772
|
+
async function* errorPolicyNotAllowsOp(item, op, policy, handler) {
|
|
242773
|
+
const fSearchAllowedPoliciesForOp = (op) => {
|
|
242774
|
+
let allowedPolicies = [];
|
|
242775
|
+
for (const policy of catalog_common_1.default.policies.FIRESTARTR_POLICIES) {
|
|
242776
|
+
if (policy.allowedOps.includes(op)) {
|
|
242777
|
+
allowedPolicies.push(policy.name);
|
|
242778
|
+
}
|
|
242779
|
+
}
|
|
242780
|
+
if (allowedPolicies.length > 0)
|
|
242781
|
+
return allowedPolicies.join(", ");
|
|
242782
|
+
return "none";
|
|
242783
|
+
};
|
|
242784
|
+
const errorMessage = `Operation ${op} not allowed by policy \`${policy}\`, to allow this operation, switch to one of the following policies: \`${fSearchAllowedPoliciesForOp(op)}\``;
|
|
242785
|
+
const reason = "POLICY CONFLICT";
|
|
242786
|
+
await (0, user_feedback_ops_1.tryPublishError)(item, reason, errorMessage);
|
|
242787
|
+
yield {
|
|
242788
|
+
item,
|
|
242789
|
+
reason: op,
|
|
242790
|
+
type: "ERROR",
|
|
242791
|
+
status: "True",
|
|
242792
|
+
message: errorMessage
|
|
242793
|
+
};
|
|
242794
|
+
yield {
|
|
242795
|
+
item,
|
|
242796
|
+
reason: op,
|
|
242797
|
+
type: "PROVISIONED",
|
|
242798
|
+
status: "False",
|
|
242799
|
+
message: errorMessage
|
|
242800
|
+
};
|
|
242801
|
+
yield {
|
|
242802
|
+
item,
|
|
242803
|
+
reason: op,
|
|
242804
|
+
type: "PROVISIONING",
|
|
242805
|
+
status: "False",
|
|
242806
|
+
message: errorMessage
|
|
242807
|
+
};
|
|
242808
|
+
yield {
|
|
242809
|
+
item,
|
|
242810
|
+
reason: op,
|
|
242811
|
+
type: "OUT_OF_SYNC",
|
|
242812
|
+
status: "False",
|
|
242813
|
+
message: errorMessage
|
|
242814
|
+
};
|
|
242815
|
+
yield {
|
|
242816
|
+
item,
|
|
242817
|
+
reason: op,
|
|
242818
|
+
type: "DELETED",
|
|
242819
|
+
status: "False",
|
|
242820
|
+
message: errorMessage
|
|
242821
|
+
};
|
|
242822
|
+
yield {
|
|
242823
|
+
item,
|
|
242824
|
+
reason: op,
|
|
242825
|
+
type: "PLANNING",
|
|
242826
|
+
status: "False",
|
|
242827
|
+
message: errorMessage
|
|
242828
|
+
};
|
|
242829
|
+
yield {
|
|
242830
|
+
item,
|
|
242831
|
+
reason: op,
|
|
242832
|
+
type: "DELETING",
|
|
242833
|
+
status: "False",
|
|
242834
|
+
message: errorMessage
|
|
242835
|
+
};
|
|
242836
|
+
await handler.writeTerraformOutputInTfResult(item, errorMessage);
|
|
242837
|
+
handler.error();
|
|
242838
|
+
}
|
|
242431
242839
|
/**
|
|
242432
242840
|
* @description Adapts the CR to the format expected by the terraform provisioner
|
|
242433
242841
|
* @param item - CR to be applied
|
|
@@ -242619,6 +243027,23 @@ function getErrorOutputMessage(cr, key, ref) {
|
|
|
242619
243027
|
throw new Error(`â Source ${cr.spec.source} not supported`);
|
|
242620
243028
|
}
|
|
242621
243029
|
}
|
|
243030
|
+
|
|
243031
|
+
|
|
243032
|
+
/***/ }),
|
|
243033
|
+
|
|
243034
|
+
/***/ 36322:
|
|
243035
|
+
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
|
243036
|
+
|
|
243037
|
+
"use strict";
|
|
243038
|
+
|
|
243039
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
243040
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
243041
|
+
};
|
|
243042
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
243043
|
+
exports.publishError = exports.tryPublishError = exports.publishApply = exports.tryPublishDestroy = exports.tryPublishApply = void 0;
|
|
243044
|
+
const github_1 = __importDefault(__nccwpck_require__(39759));
|
|
243045
|
+
const debug_1 = __importDefault(__nccwpck_require__(67984));
|
|
243046
|
+
const log = (0, debug_1.default)('firestartr:operator:terraform');
|
|
242622
243047
|
async function tryPublishApply(item, planOutput) {
|
|
242623
243048
|
try {
|
|
242624
243049
|
if (!("firestartr.dev/last-state-pr" in item.metadata.annotations)) {
|
|
@@ -242631,7 +243056,63 @@ async function tryPublishApply(item, planOutput) {
|
|
|
242631
243056
|
log(`Error publishing apply: ${e}`);
|
|
242632
243057
|
}
|
|
242633
243058
|
}
|
|
243059
|
+
exports.tryPublishApply = tryPublishApply;
|
|
243060
|
+
async function tryPublishDestroy(item, destroyOutput) {
|
|
243061
|
+
try {
|
|
243062
|
+
log("Trying to publish destroy");
|
|
243063
|
+
const { repo, org } = extractPrInfo(item);
|
|
243064
|
+
const lastPr = await github_1.default.pulls.filterPrBy({
|
|
243065
|
+
title: `hydrate: ${item.metadata.name}`,
|
|
243066
|
+
state: 'closed',
|
|
243067
|
+
repo,
|
|
243068
|
+
owner: org,
|
|
243069
|
+
userType: 'Bot'
|
|
243070
|
+
}, {
|
|
243071
|
+
maxRetries: 3
|
|
243072
|
+
});
|
|
243073
|
+
if (!lastPr) {
|
|
243074
|
+
log(`CR ${item.metadata.name} has no last state PR. Skipping terraform destroy publish.`);
|
|
243075
|
+
return;
|
|
243076
|
+
}
|
|
243077
|
+
const comment = `<h1>
|
|
243078
|
+
<img width="25" src="https://static-00.iconduck.com/assets.00/file-type-terraform-icon-1821x2048-mbxeegff.png"> Terraform destroy
|
|
243079
|
+
</h1>
|
|
243080
|
+
<p><b>TFWorkspace: </b>${item.metadata.name}</p>
|
|
243081
|
+
|
|
243082
|
+
<details id=github>
|
|
243083
|
+
<summary>DESTROY LOGS</summary>
|
|
243084
|
+
|
|
243085
|
+
\`\`\`shell
|
|
243086
|
+
${destroyOutput}
|
|
243087
|
+
\`\`\`
|
|
243088
|
+
</details>`;
|
|
243089
|
+
log("Publishing comment in PR number: ", lastPr.number);
|
|
243090
|
+
await github_1.default.pulls.commentInPR(comment, lastPr.number, repo, org);
|
|
243091
|
+
log("Published destroy comment in PR number: ", lastPr.number);
|
|
243092
|
+
}
|
|
243093
|
+
catch (e) {
|
|
243094
|
+
log(`Error publishing apply: ${e}`);
|
|
243095
|
+
}
|
|
243096
|
+
}
|
|
243097
|
+
exports.tryPublishDestroy = tryPublishDestroy;
|
|
242634
243098
|
async function publishApply(item, applyOutput) {
|
|
243099
|
+
const { prNumber, repo, org } = extractPrInfo(item);
|
|
243100
|
+
const comment = `<h1>
|
|
243101
|
+
<img width="25" src="https://static-00.iconduck.com/assets.00/file-type-terraform-icon-1821x2048-mbxeegff.png"> Terraform apply
|
|
243102
|
+
</h1>
|
|
243103
|
+
<p><b>TFWorkspace: </b>${item.metadata.name}</p>
|
|
243104
|
+
|
|
243105
|
+
<details id=github>
|
|
243106
|
+
<summary>APPLY LOGS</summary>
|
|
243107
|
+
|
|
243108
|
+
\`\`\`shell
|
|
243109
|
+
${applyOutput}
|
|
243110
|
+
\`\`\`
|
|
243111
|
+
</details>`;
|
|
243112
|
+
await github_1.default.pulls.commentInPR(comment, parseInt(prNumber), repo, org);
|
|
243113
|
+
}
|
|
243114
|
+
exports.publishApply = publishApply;
|
|
243115
|
+
function extractPrInfo(item) {
|
|
242635
243116
|
const prInfo = item.metadata.annotations["firestartr.dev/last-state-pr"];
|
|
242636
243117
|
const prNumber = prInfo.split("#")[1];
|
|
242637
243118
|
if (!prNumber)
|
|
@@ -242642,20 +243123,27 @@ async function publishApply(item, applyOutput) {
|
|
|
242642
243123
|
const repo = prInfo.split("#")[0].split("/")[1];
|
|
242643
243124
|
if (!repo)
|
|
242644
243125
|
throw new Error("No repo found in CR");
|
|
242645
|
-
|
|
242646
|
-
|
|
242647
|
-
|
|
242648
|
-
|
|
242649
|
-
|
|
242650
|
-
|
|
242651
|
-
|
|
242652
|
-
|
|
242653
|
-
|
|
242654
|
-
|
|
242655
|
-
|
|
242656
|
-
|
|
243126
|
+
return { prNumber, repo, org };
|
|
243127
|
+
}
|
|
243128
|
+
async function tryPublishError(item, reason, message) {
|
|
243129
|
+
try {
|
|
243130
|
+
await publishError(item, reason, message);
|
|
243131
|
+
}
|
|
243132
|
+
catch (e) {
|
|
243133
|
+
log(`Error publishing warning: ${e}`);
|
|
243134
|
+
}
|
|
243135
|
+
}
|
|
243136
|
+
exports.tryPublishError = tryPublishError;
|
|
243137
|
+
async function publishError(item, reason, message) {
|
|
243138
|
+
const { prNumber, repo, org } = extractPrInfo(item);
|
|
243139
|
+
const comment = `# â Error on claim ${item.metadata.annotations["firestartr.dev/claim-ref"].split("/")[1]}
|
|
243140
|
+
### đ Reason: ${reason}
|
|
243141
|
+
#### âšī¸ Details:
|
|
243142
|
+
${message}
|
|
243143
|
+
`;
|
|
242657
243144
|
await github_1.default.pulls.commentInPR(comment, parseInt(prNumber), repo, org);
|
|
242658
243145
|
}
|
|
243146
|
+
exports.publishError = publishError;
|
|
242659
243147
|
|
|
242660
243148
|
|
|
242661
243149
|
/***/ }),
|
|
@@ -243864,6 +244352,12 @@ async function execCommand(command, tfProject) {
|
|
|
243864
244352
|
case "apply":
|
|
243865
244353
|
await tfProject.apply();
|
|
243866
244354
|
break;
|
|
244355
|
+
case "plan-destroy":
|
|
244356
|
+
await tfProject.planDestroy("human");
|
|
244357
|
+
break;
|
|
244358
|
+
case "plan-destroy-json":
|
|
244359
|
+
await tfProject.planDestroy("json");
|
|
244360
|
+
break;
|
|
243867
244361
|
case "destroy":
|
|
243868
244362
|
await tfProject.destroy();
|
|
243869
244363
|
break;
|
|
@@ -243965,6 +244459,12 @@ class TFProjectManager {
|
|
|
243965
244459
|
this.tfOutput = null;
|
|
243966
244460
|
this.tfOutput = await (0, utils_1.plan)(this.projectPath, this.secrets, format);
|
|
243967
244461
|
}
|
|
244462
|
+
async planDestroy(format) {
|
|
244463
|
+
await this.__init();
|
|
244464
|
+
if (format == "json")
|
|
244465
|
+
this.tfOutput = null;
|
|
244466
|
+
this.tfOutput = await (0, utils_1.plan)(this.projectPath, this.secrets, format, ["plan", "-destroy"]);
|
|
244467
|
+
}
|
|
243968
244468
|
async apply() {
|
|
243969
244469
|
await this.__init();
|
|
243970
244470
|
this.tfOutput += await (0, utils_1.apply)(this.projectPath, this.secrets);
|
|
@@ -244389,8 +244889,8 @@ async function initFromModule(path, source, secrets) {
|
|
|
244389
244889
|
], secrets, []);
|
|
244390
244890
|
}
|
|
244391
244891
|
exports.initFromModule = initFromModule;
|
|
244392
|
-
async function plan(path, secrets, format) {
|
|
244393
|
-
const plan = await tfExec(path,
|
|
244892
|
+
async function plan(path, secrets, format, args = ["plan"]) {
|
|
244893
|
+
const plan = await tfExec(path, args
|
|
244394
244894
|
.concat(format == "json" ?
|
|
244395
244895
|
["-json"]
|
|
244396
244896
|
:
|
|
@@ -244419,7 +244919,7 @@ async function tfExec(path, args, secrets, extraArgs = ["-input=false"]) {
|
|
|
244419
244919
|
for (const secret of secrets) {
|
|
244420
244920
|
process.env[`${secret.key}`] = secret.value;
|
|
244421
244921
|
}
|
|
244422
|
-
process.env["TF_PLUGIN_CACHE_DIR"] = "/
|
|
244922
|
+
process.env["TF_PLUGIN_CACHE_DIR"] = "/home/terraform-plugins-cache";
|
|
244423
244923
|
return new Promise((ok, ko) => {
|
|
244424
244924
|
const tfProcess = (0, child_process_1.spawn)("terraform", args.concat(extraArgs), { cwd: path });
|
|
244425
244925
|
tfProcess.stdout.pipe(process.stdout);
|