@softchef/cdk-iot-device-management
Version:
IoT device management is composed of things, thing types, thing groups, jobs, files API services. The constructs can be used independently, that are based on full-managed service to create an API Gateway & Lambda function.
173 lines • 20.3 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ThingTypeApi = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const path = require("path");
const cdk_restapi_1 = require("@softchef/cdk-restapi");
const aws_apigateway_1 = require("aws-cdk-lib/aws-apigateway");
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
const aws_lambda_nodejs_1 = require("aws-cdk-lib/aws-lambda-nodejs");
const constructs_1 = require("constructs");
const LAMBDA_ASSETS_PATH = path.resolve(__dirname, '../lambda-assets/thing-types');
/**
* @stability stable
*/
class ThingTypeApi extends constructs_1.Construct {
/**
* @stability stable
*/
constructor(scope, id, props) {
var _b, _c;
super(scope, id);
this._restApi = new cdk_restapi_1.RestApi(this, 'ThingTypeRestApi', {
enableCors: true,
authorizationType: (_b = props === null || props === void 0 ? void 0 : props.authorizationType) !== null && _b !== void 0 ? _b : aws_apigateway_1.AuthorizationType.NONE,
authorizer: (_c = props === null || props === void 0 ? void 0 : props.authorizer) !== null && _c !== void 0 ? _c : undefined,
resources: [
{
path: '/thing-types',
httpMethod: cdk_restapi_1.HttpMethod.POST,
lambdaFunction: this.createCreateThingTypeFunction(),
},
{
path: '/thing-types',
httpMethod: cdk_restapi_1.HttpMethod.GET,
lambdaFunction: this.createListThingTypesFunction(),
},
{
path: '/thing-types/{thingTypeName}',
httpMethod: cdk_restapi_1.HttpMethod.GET,
lambdaFunction: this.createGetThingTypeFunction(),
},
{
path: '/thing-types/{thingTypeName}/deprecate',
httpMethod: cdk_restapi_1.HttpMethod.PUT,
lambdaFunction: this.createDeprecateThingTypeFunction(),
},
{
path: '/thing-types/{thingTypeName}/undeprecate',
httpMethod: cdk_restapi_1.HttpMethod.PUT,
lambdaFunction: this.createUndeprecateThingTypeFunction(),
},
{
path: '/thing-types/{thingTypeName}',
httpMethod: cdk_restapi_1.HttpMethod.DELETE,
lambdaFunction: this.createDeleteThingTypeFunction(),
},
],
});
}
/**
* @stability stable
*/
get restApiId() {
return this._restApi.restApiId;
}
createCreateThingTypeFunction() {
var _b;
const createThingTypeFunction = new aws_lambda_nodejs_1.NodejsFunction(this, 'CreateThingTypeFunction', {
entry: `${LAMBDA_ASSETS_PATH}/get-thing-type/app.ts`,
});
(_b = createThingTypeFunction.role) === null || _b === void 0 ? void 0 : _b.attachInlinePolicy(new aws_iam_1.Policy(this, 'iot-create-thing-type-policy', {
statements: [
new aws_iam_1.PolicyStatement({
actions: [
'iot:CreateThingType',
],
resources: ['*'],
}),
],
}));
return createThingTypeFunction;
}
createListThingTypesFunction() {
var _b;
const listThingTypesFunction = new aws_lambda_nodejs_1.NodejsFunction(this, 'ListThingTypesFunction', {
entry: `${LAMBDA_ASSETS_PATH}/list-thing-types/app.ts`,
});
(_b = listThingTypesFunction.role) === null || _b === void 0 ? void 0 : _b.attachInlinePolicy(new aws_iam_1.Policy(this, 'iot-list-thing-types-policy', {
statements: [
new aws_iam_1.PolicyStatement({
actions: [
'iot:ListThingTypes',
],
resources: ['*'],
}),
],
}));
return listThingTypesFunction;
}
createGetThingTypeFunction() {
var _b;
const getThingTypeFunction = new aws_lambda_nodejs_1.NodejsFunction(this, 'GetThingTypeFunction', {
entry: `${LAMBDA_ASSETS_PATH}/get-thing-type/app.ts`,
});
(_b = getThingTypeFunction.role) === null || _b === void 0 ? void 0 : _b.attachInlinePolicy(new aws_iam_1.Policy(this, 'iot-describe-thing-type-policy', {
statements: [
new aws_iam_1.PolicyStatement({
actions: [
'iot:DescribeThingType',
],
resources: ['*'],
}),
],
}));
return getThingTypeFunction;
}
createDeprecateThingTypeFunction() {
var _b;
const deprecateThingTypeFunction = new aws_lambda_nodejs_1.NodejsFunction(this, 'DeprecateThingTypeFunction', {
entry: `${LAMBDA_ASSETS_PATH}/deprecate-thing-type/app.ts`,
});
(_b = deprecateThingTypeFunction.role) === null || _b === void 0 ? void 0 : _b.attachInlinePolicy(new aws_iam_1.Policy(this, 'iot-deprecate-thing-type-policy', {
statements: [
new aws_iam_1.PolicyStatement({
actions: [
'iot:DeprecateThingType',
],
resources: ['*'],
}),
],
}));
return deprecateThingTypeFunction;
}
createUndeprecateThingTypeFunction() {
var _b;
const undeprecateThingTypeFunction = new aws_lambda_nodejs_1.NodejsFunction(this, 'UndeprecateThingTypeFunction', {
entry: `${LAMBDA_ASSETS_PATH}/undeprecate-thing-type/app.ts`,
});
(_b = undeprecateThingTypeFunction.role) === null || _b === void 0 ? void 0 : _b.attachInlinePolicy(new aws_iam_1.Policy(this, 'iot-undeprecated-thing-type-policy', {
statements: [
new aws_iam_1.PolicyStatement({
actions: [
'iot:DeprecateThingType',
],
resources: ['*'],
}),
],
}));
return undeprecateThingTypeFunction;
}
createDeleteThingTypeFunction() {
var _b;
const deleteThingTypeFunction = new aws_lambda_nodejs_1.NodejsFunction(this, 'DeleteThingTypeFunction', {
entry: `${LAMBDA_ASSETS_PATH}/delete-thing-type/app.ts`,
});
(_b = deleteThingTypeFunction.role) === null || _b === void 0 ? void 0 : _b.attachInlinePolicy(new aws_iam_1.Policy(this, 'iot-delete-thing-type-policy', {
statements: [
new aws_iam_1.PolicyStatement({
actions: [
'iot:DeleteThingType',
],
resources: ['*'],
}),
],
}));
return deleteThingTypeFunction;
}
}
exports.ThingTypeApi = ThingTypeApi;
_a = JSII_RTTI_SYMBOL_1;
ThingTypeApi[_a] = { fqn: "@softchef/cdk-iot-device-management.ThingTypeApi", version: "2.0.0" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhpbmctdHlwZS1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdGhpbmctdHlwZS1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBNkI7QUFDN0IsdURBRytCO0FBQy9CLCtEQUdvQztBQUNwQyxpREFHNkI7QUFDN0IscUVBRXVDO0FBQ3ZDLDJDQUVvQjtBQUVwQixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLDhCQUE4QixDQUFDLENBQUM7Ozs7QUFTbkYsTUFBYSxZQUFhLFNBQVEsc0JBQVM7Ozs7SUFNekMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5Qjs7UUFDakUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUkscUJBQU8sQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7WUFDcEQsVUFBVSxFQUFFLElBQUk7WUFDaEIsaUJBQWlCLFFBQUUsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLGlCQUFpQixtQ0FBSSxrQ0FBaUIsQ0FBQyxJQUFJO1lBQ3JFLFVBQVUsUUFBRSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsVUFBVSxtQ0FBSSxTQUFTO1lBQzFDLFNBQVMsRUFBRTtnQkFDVDtvQkFDRSxJQUFJLEVBQUUsY0FBYztvQkFDcEIsVUFBVSxFQUFFLHdCQUFVLENBQUMsSUFBSTtvQkFDM0IsY0FBYyxFQUFFLElBQUksQ0FBQyw2QkFBNkIsRUFBRTtpQkFDckQ7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLGNBQWM7b0JBQ3BCLFVBQVUsRUFBRSx3QkFBVSxDQUFDLEdBQUc7b0JBQzFCLGNBQWMsRUFBRSxJQUFJLENBQUMsNEJBQTRCLEVBQUU7aUJBQ3BEO2dCQUNEO29CQUNFLElBQUksRUFBRSw4QkFBOEI7b0JBQ3BDLFVBQVUsRUFBRSx3QkFBVSxDQUFDLEdBQUc7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O1NBQ0YsQ0FBQyxFQUNGO1FBQ0YsT0FBTyx1QkFBdUIsQ0FBQztJQUNqQyxDQUFDOztBQW5LSCxvQ0FxS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtcbiAgUmVzdEFwaSxcbiAgSHR0cE1ldGhvZCxcbn0gZnJvbSAnQHNvZnRjaGVmL2Nkay1yZXN0YXBpJztcbmltcG9ydCB7XG4gIEF1dGhvcml6YXRpb25UeXBlLFxuICBJQXV0aG9yaXplcixcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXknO1xuaW1wb3J0IHtcbiAgUG9saWN5LFxuICBQb2xpY3lTdGF0ZW1lbnQsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHtcbiAgTm9kZWpzRnVuY3Rpb24sXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzJztcbmltcG9ydCB7XG4gIENvbnN0cnVjdCxcbn0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmNvbnN0IExBTUJEQV9BU1NFVFNfUEFUSCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLi9sYW1iZGEtYXNzZXRzL3RoaW5nLXR5cGVzJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGhpbmdUeXBlQXBpUHJvcHMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBhdXRob3JpemF0aW9uVHlwZT86IEF1dGhvcml6YXRpb25UeXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBhdXRob3JpemVyPzogSUF1dGhvcml6ZXIgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBUaGluZ1R5cGVBcGkgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIFRoaW5nVHlwZSBBUEkgR2F0ZXdheVxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfcmVzdEFwaTogUmVzdEFwaTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IFRoaW5nVHlwZUFwaVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLl9yZXN0QXBpID0gbmV3IFJlc3RBcGkodGhpcywgJ1RoaW5nVHlwZVJlc3RBcGknLCB7XG4gICAgICBlbmFibGVDb3JzOiB0cnVlLFxuICAgICAgYXV0aG9yaXphdGlvblR5cGU6IHByb3BzPy5hdXRob3JpemF0aW9uVHlwZSA/PyBBdXRob3JpemF0aW9uVHlwZS5OT05FLFxuICAgICAgYXV0aG9yaXplcjogcHJvcHM/LmF1dGhvcml6ZXIgPz8gdW5kZWZpbmVkLFxuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwYXRoOiAnL3RoaW5nLXR5cGVzJyxcbiAgICAgICAgICBodHRwTWV0aG9kOiBIdHRwTWV0aG9kLlBPU1QsXG4gICAgICAgICAgbGFtYmRhRnVuY3Rpb246IHRoaXMuY3JlYXRlQ3JlYXRlVGhpbmdUeXBlRnVuY3Rpb24oKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhdGg6ICcvdGhpbmctdHlwZXMnLFxuICAgICAgICAgIGh0dHBNZXRob2Q6IEh0dHBNZXRob2QuR0VULFxuICAgICAgICAgIGxhbWJkYUZ1bmN0aW9uOiB0aGlzLmNyZWF0ZUxpc3RUaGluZ1R5cGVzRnVuY3Rpb24oKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhdGg6ICcvdGhpbmctdHlwZXMve3RoaW5nVHlwZU5hbWV9JyxcbiAgICAgICAgICBodHRwTWV0aG9kOiBIdHRwTWV0aG9kLkdFVCxcbiAgICAgICAgICBsYW1iZGFGdW5jdGlvbjogdGhpcy5jcmVhdGVHZXRUaGluZ1R5cGVGdW5jdGlvbigpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGF0aDogJy90aGluZy10eXBlcy97dGhpbmdUeXBlTmFtZX0vZGVwcmVjYXRlJyxcbiAgICAgICAgICBodHRwTWV0aG9kOiBIdHRwTWV0aG9kLlBVVCxcbiAgICAgICAgICBsYW1iZGFGdW5jdGlvbjogdGhpcy5jcmVhdGVEZXByZWNhdGVUaGluZ1R5cGVGdW5jdGlvbigpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGF0aDogJy90aGluZy10eXBlcy97dGhpbmdUeXBlTmFtZX0vdW5kZXByZWNhdGUnLFxuICAgICAgICAgIGh0dHBNZXRob2Q6IEh0dHBNZXRob2QuUFVULFxuICAgICAgICAgIGxhbWJkYUZ1bmN0aW9uOiB0aGlzLmNyZWF0ZVVuZGVwcmVjYXRlVGhpbmdUeXBlRnVuY3Rpb24oKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhdGg6ICcvdGhpbmctdHlwZXMve3RoaW5nVHlwZU5hbWV9JyxcbiAgICAgICAgICBodHRwTWV0aG9kOiBIdHRwTWV0aG9kLkRFTEVURSxcbiAgICAgICAgICBsYW1iZGFGdW5jdGlvbjogdGhpcy5jcmVhdGVEZWxldGVUaGluZ1R5cGVGdW5jdGlvbigpLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIGdldCByZXN0QXBpSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzdEFwaS5yZXN0QXBpSWQ7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNyZWF0ZVRoaW5nVHlwZUZ1bmN0aW9uKCk6IE5vZGVqc0Z1bmN0aW9uIHtcbiAgICBjb25zdCBjcmVhdGVUaGluZ1R5cGVGdW5jdGlvbiA9IG5ldyBOb2RlanNGdW5jdGlvbih0aGlzLCAnQ3JlYXRlVGhpbmdUeXBlRnVuY3Rpb24nLCB7XG4gICAgICBlbnRyeTogYCR7TEFNQkRBX0FTU0VUU19QQVRIfS9nZXQtdGhpbmctdHlwZS9hcHAudHNgLFxuICAgIH0pO1xuICAgIGNyZWF0ZVRoaW5nVHlwZUZ1bmN0aW9uLnJvbGU/LmF0dGFjaElubGluZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3kodGhpcywgJ2lvdC1jcmVhdGUtdGhpbmctdHlwZS1wb2xpY3knLCB7XG4gICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgJ2lvdDpDcmVhdGVUaGluZ1R5cGUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApO1xuICAgIHJldHVybiBjcmVhdGVUaGluZ1R5cGVGdW5jdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTGlzdFRoaW5nVHlwZXNGdW5jdGlvbigpOiBOb2RlanNGdW5jdGlvbiB7XG4gICAgY29uc3QgbGlzdFRoaW5nVHlwZXNGdW5jdGlvbiA9IG5ldyBOb2RlanNGdW5jdGlvbih0aGlzLCAnTGlzdFRoaW5nVHlwZXNGdW5jdGlvbicsIHtcbiAgICAgIGVudHJ5OiBgJHtMQU1CREFfQVNTRVRTX1BBVEh9L2xpc3QtdGhpbmctdHlwZXMvYXBwLnRzYCxcbiAgICB9KTtcbiAgICBsaXN0VGhpbmdUeXBlc0Z1bmN0aW9uLnJvbGU/LmF0dGFjaElubGluZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3kodGhpcywgJ2lvdC1saXN0LXRoaW5nLXR5cGVzLXBvbGljeScsIHtcbiAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAnaW90Okxpc3RUaGluZ1R5cGVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKTtcbiAgICByZXR1cm4gbGlzdFRoaW5nVHlwZXNGdW5jdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlR2V0VGhpbmdUeXBlRnVuY3Rpb24oKTogTm9kZWpzRnVuY3Rpb24ge1xuICAgIGNvbnN0IGdldFRoaW5nVHlwZUZ1bmN0aW9uID0gbmV3IE5vZGVqc0Z1bmN0aW9uKHRoaXMsICdHZXRUaGluZ1R5cGVGdW5jdGlvbicsIHtcbiAgICAgIGVudHJ5OiBgJHtMQU1CREFfQVNTRVRTX1BBVEh9L2dldC10aGluZy10eXBlL2FwcC50c2AsXG4gICAgfSk7XG4gICAgZ2V0VGhpbmdUeXBlRnVuY3Rpb24ucm9sZT8uYXR0YWNoSW5saW5lUG9saWN5KFxuICAgICAgbmV3IFBvbGljeSh0aGlzLCAnaW90LWRlc2NyaWJlLXRoaW5nLXR5cGUtcG9saWN5Jywge1xuICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICdpb3Q6RGVzY3JpYmVUaGluZ1R5cGUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApO1xuICAgIHJldHVybiBnZXRUaGluZ1R5cGVGdW5jdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRGVwcmVjYXRlVGhpbmdUeXBlRnVuY3Rpb24oKTogTm9kZWpzRnVuY3Rpb24ge1xuICAgIGNvbnN0IGRlcHJlY2F0ZVRoaW5nVHlwZUZ1bmN0aW9uID0gbmV3IE5vZGVqc0Z1bmN0aW9uKHRoaXMsICdEZXByZWNhdGVUaGluZ1R5cGVGdW5jdGlvbicsIHtcbiAgICAgIGVudHJ5OiBgJHtMQU1CREFfQVNTRVRTX1BBVEh9L2RlcHJlY2F0ZS10aGluZy10eXBlL2FwcC50c2AsXG4gICAgfSk7XG4gICAgZGVwcmVjYXRlVGhpbmdUeXBlRnVuY3Rpb24ucm9sZT8uYXR0YWNoSW5saW5lUG9saWN5KFxuICAgICAgbmV3IFBvbGljeSh0aGlzLCAnaW90LWRlcHJlY2F0ZS10aGluZy10eXBlLXBvbGljeScsIHtcbiAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAnaW90OkRlcHJlY2F0ZVRoaW5nVHlwZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgcmV0dXJuIGRlcHJlY2F0ZVRoaW5nVHlwZUZ1bmN0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVVbmRlcHJlY2F0ZVRoaW5nVHlwZUZ1bmN0aW9uKCk6IE5vZGVqc0Z1bmN0aW9uIHtcbiAgICBjb25zdCB1bmRlcHJlY2F0ZVRoaW5nVHlwZUZ1bmN0aW9uID0gbmV3IE5vZGVqc0Z1bmN0aW9uKHRoaXMsICdVbmRlcHJlY2F0ZVRoaW5nVHlwZUZ1bmN0aW9uJywge1xuICAgICAgZW50cnk6IGAke0xBTUJEQV9BU1NFVFNfUEFUSH0vdW5kZXByZWNhdGUtdGhpbmctdHlwZS9hcHAudHNgLFxuICAgIH0pO1xuICAgIHVuZGVwcmVjYXRlVGhpbmdUeXBlRnVuY3Rpb24ucm9sZT8uYXR0YWNoSW5saW5lUG9saWN5KFxuICAgICAgbmV3IFBvbGljeSh0aGlzLCAnaW90LXVuZGVwcmVjYXRlZC10aGluZy10eXBlLXBvbGljeScsIHtcbiAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAnaW90OkRlcHJlY2F0ZVRoaW5nVHlwZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVwcmVjYXRlVGhpbmdUeXBlRnVuY3Rpb247XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURlbGV0ZVRoaW5nVHlwZUZ1bmN0aW9uKCk6IE5vZGVqc0Z1bmN0aW9uIHtcbiAgICBjb25zdCBkZWxldGVUaGluZ1R5cGVGdW5jdGlvbiA9IG5ldyBOb2RlanNGdW5jdGlvbih0aGlzLCAnRGVsZXRlVGhpbmdUeXBlRnVuY3Rpb24nLCB7XG4gICAgICBlbnRyeTogYCR7TEFNQkRBX0FTU0VUU19QQVRIfS9kZWxldGUtdGhpbmctdHlwZS9hcHAudHNgLFxuICAgIH0pO1xuICAgIGRlbGV0ZVRoaW5nVHlwZUZ1bmN0aW9uLnJvbGU/LmF0dGFjaElubGluZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3kodGhpcywgJ2lvdC1kZWxldGUtdGhpbmctdHlwZS1wb2xpY3knLCB7XG4gICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgJ2lvdDpEZWxldGVUaGluZ1R5cGUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApO1xuICAgIHJldHVybiBkZWxldGVUaGluZ1R5cGVGdW5jdGlvbjtcbiAgfVxuXG59Il19