cdk-amazon-chime-resources
Version:

128 lines • 16.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DeleteSIPRule = exports.CreateSIPRule = void 0;
const client_chime_sdk_voice_1 = require("@aws-sdk/client-chime-sdk-voice");
const client_ssm_1 = require("@aws-sdk/client-ssm");
const chimeSDKVoiceClient = new client_chime_sdk_voice_1.ChimeSDKVoiceClient({
region: process.env.AWS_REGION,
});
const ssmClient = new client_ssm_1.SSMClient({ region: process.env.AWS_REGION });
let createSipRuleParams;
let createSipRuleResponse;
let getParameterCommandOutput;
let sipRuleToDelete;
let sipRuleTargetApplications;
const CreateSIPRule = async (uid, props) => {
console.log(`Creating SIP media application rule: ${uid}`);
console.log(`Create SIP media application rule props: ${JSON.stringify(props)}`);
sipRuleTargetApplications = [];
props.targetApplications?.forEach((targetApplication) => {
sipRuleTargetApplications.push({
AwsRegion: targetApplication.region,
SipMediaApplicationId: targetApplication.sipMediaApplicationId,
Priority: parseInt(targetApplication.priority),
});
});
createSipRuleParams = {
Name: props.name,
TriggerType: props.triggerType,
TriggerValue: props.triggerValue,
TargetApplications: sipRuleTargetApplications,
};
console.log(`Create SIP media application rule params: ${JSON.stringify(createSipRuleParams)}`);
let attempt = 0;
while (attempt < 10) {
try {
console.log(`Attempt ${attempt + 1}: Creating SIP rule`);
createSipRuleResponse = await chimeSDKVoiceClient.send(new client_chime_sdk_voice_1.CreateSipRuleCommand(createSipRuleParams));
console.log(`SIP rule created: ${JSON.stringify(createSipRuleResponse)}`);
break;
}
catch (error) {
if (error instanceof client_chime_sdk_voice_1.ChimeSDKVoiceServiceException &&
error.name === 'BadRequestException') {
console.error('Bad Request Exception, retrying...', error);
attempt++;
await sleep(10000);
continue;
}
else {
console.error('An unexpected error occurred:', error);
throw error;
}
}
}
if (!createSipRuleResponse) {
throw new Error('Failed to create SIP rule after 3 attempts.');
}
try {
await ssmClient.send(new client_ssm_1.PutParameterCommand({
Name: '/chime/sipRule' + uid,
Value: createSipRuleResponse.SipRule?.SipRuleId,
Description: 'SIP Rule ID',
Overwrite: true,
Type: 'String',
}));
}
catch (error) {
if (error instanceof Error) {
console.error(error);
throw error;
}
}
return {
sipRuleId: createSipRuleResponse.SipRule?.SipRuleId,
};
};
exports.CreateSIPRule = CreateSIPRule;
const DeleteSIPRule = async (uid) => {
try {
getParameterCommandOutput = await ssmClient.send(new client_ssm_1.GetParameterCommand({ Name: '/chime/sipRule' + uid }));
if (getParameterCommandOutput.Parameter &&
getParameterCommandOutput.Parameter.Value) {
sipRuleToDelete = getParameterCommandOutput.Parameter.Value;
}
}
catch (error) {
if (error instanceof Error) {
console.error(error);
throw error;
}
}
try {
await chimeSDKVoiceClient.send(new client_chime_sdk_voice_1.UpdateSipRuleCommand({
SipRuleId: sipRuleToDelete,
Name: uid,
Disabled: true,
}));
}
catch (error) {
if (error instanceof Error) {
console.error(error);
throw error;
}
}
let getSipRuleCommandCount = 0;
while (!(await chimeSDKVoiceClient.send(new client_chime_sdk_voice_1.GetSipRuleCommand({ SipRuleId: sipRuleToDelete })))) {
getSipRuleCommandCount++;
if (getSipRuleCommandCount > 15) {
throw new Error('Could not disable SIP rule');
}
await sleep(5000);
}
try {
await chimeSDKVoiceClient.send(new client_chime_sdk_voice_1.DeleteSipRuleCommand({
SipRuleId: sipRuleToDelete,
}));
await ssmClient.send(new client_ssm_1.DeleteParameterCommand({ Name: '/chime/sipRule' + uid }));
}
catch (error) {
if (error instanceof Error) {
console.error(error);
throw error;
}
}
};
exports.DeleteSIPRule = DeleteSIPRule;
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lwUnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZXNvdXJjZXMvcHN0bi9zaXBSdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDRFQVd5QztBQUV6QyxvREFNNkI7QUFFN0IsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLDRDQUFtQixDQUFDO0lBQ2xELE1BQU0sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVU7Q0FDL0IsQ0FBQyxDQUFDO0FBRUgsTUFBTSxTQUFTLEdBQUcsSUFBSSxzQkFBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUVwRSxJQUFJLG1CQUE4QyxDQUFDO0FBQ25ELElBQUkscUJBQTZELENBQUM7QUFDbEUsSUFBSSx5QkFBb0QsQ0FBQztBQUN6RCxJQUFJLGVBQXVCLENBQUM7QUFDNUIsSUFBSSx5QkFBcUQsQ0FBQztBQVduRCxNQUFNLGFBQWEsR0FBRyxLQUFLLEVBQUUsR0FBVyxFQUFFLEtBQXlCLEVBQUUsRUFBRTtJQUM1RSxPQUFPLENBQUMsR0FBRyxDQUFDLHdDQUF3QyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzNELE9BQU8sQ0FBQyxHQUFHLENBQ1QsNENBQTRDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDcEUsQ0FBQztJQUNGLHlCQUF5QixHQUFHLEVBQUUsQ0FBQztJQUMvQixLQUFLLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsRUFBRTtRQUN0RCx5QkFBeUIsQ0FBQyxJQUFJLENBQUM7WUFDN0IsU0FBUyxFQUFFLGlCQUFpQixDQUFDLE1BQU07WUFDbkMscUJBQXFCLEVBQUUsaUJBQWlCLENBQUMscUJBQXFCO1lBQzlELFFBQVEsRUFBRSxRQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDO1NBQy9DLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0gsbUJBQW1CLEdBQUc7UUFDcEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1FBQ2hCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztRQUM5QixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7UUFDaEMsa0JBQWtCLEVBQUUseUJBQXlCO0tBQzlDLENBQUM7SUFDRixPQUFPLENBQUMsR0FBRyxDQUNULDZDQUE2QyxJQUFJLENBQUMsU0FBUyxDQUN6RCxtQkFBbUIsQ0FDcEIsRUFBRSxDQUNKLENBQUM7SUFFRixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFFaEIsT0FBTyxPQUFPLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDO1lBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLE9BQU8sR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDekQscUJBQXFCLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxJQUFJLENBQ3BELElBQUksNkNBQW9CLENBQUMsbUJBQW1CLENBQUMsQ0FDOUMsQ0FBQztZQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUUsTUFBTTtRQUNSLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFDRSxLQUFLLFlBQVksc0RBQTZCO2dCQUM5QyxLQUFLLENBQUMsSUFBSSxLQUFLLHFCQUFxQixFQUNwQyxDQUFDO2dCQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzNELE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuQixTQUFTO1lBQ1gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3RELE1BQU0sS0FBSyxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQ2xCLElBQUksZ0NBQW1CLENBQUM7WUFDdEIsSUFBSSxFQUFFLGdCQUFnQixHQUFHLEdBQUc7WUFDNUIsS0FBSyxFQUFFLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxTQUFTO1lBQy9DLFdBQVcsRUFBRSxhQUFhO1lBQzFCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsSUFBSSxFQUFFLFFBQVE7U0FDZixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUM7WUFDM0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsU0FBUztLQUNwRCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBM0VXLFFBQUEsYUFBYSxpQkEyRXhCO0FBRUssTUFBTSxhQUFhLEdBQUcsS0FBSyxFQUFFLEdBQVcsRUFBRSxFQUFFO0lBQ2pELElBQUksQ0FBQztRQUNILHlCQUF5QixHQUFHLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FDOUMsSUFBSSxnQ0FBbUIsQ0FBQyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUMxRCxDQUFDO1FBQ0YsSUFDRSx5QkFBeUIsQ0FBQyxTQUFTO1lBQ25DLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQ3pDLENBQUM7WUFDRCxlQUFlLEdBQUcseUJBQXlCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUM5RCxDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUUsQ0FBQztZQUMzQixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLG1CQUFtQixDQUFDLElBQUksQ0FDNUIsSUFBSSw2Q0FBb0IsQ0FBQztZQUN2QixTQUFTLEVBQUUsZUFBZTtZQUMxQixJQUFJLEVBQUUsR0FBRztZQUNULFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUksS0FBSyxZQUFZLEtBQUssRUFBRSxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksc0JBQXNCLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLE9BQ0UsQ0FBQyxDQUFDLE1BQU0sbUJBQW1CLENBQUMsSUFBSSxDQUM5QixJQUFJLDBDQUFpQixDQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQ3RELENBQUMsRUFDRixDQUFDO1FBQ0Qsc0JBQXNCLEVBQUUsQ0FBQztRQUN6QixJQUFJLHNCQUFzQixHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE1BQU0sbUJBQW1CLENBQUMsSUFBSSxDQUM1QixJQUFJLDZDQUFvQixDQUFDO1lBQ3ZCLFNBQVMsRUFBRSxlQUFlO1NBQzNCLENBQUMsQ0FDSCxDQUFDO1FBQ0YsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUNsQixJQUFJLG1DQUFzQixDQUFDLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxDQUFDLENBQzdELENBQUM7SUFDSixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUksS0FBSyxZQUFZLEtBQUssRUFBRSxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMsQ0FBQztBQTdEVyxRQUFBLGFBQWEsaUJBNkR4QjtBQUVGLE1BQU0sS0FBSyxHQUFHLENBQUMsRUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hpbWVTREtWb2ljZUNsaWVudCxcbiAgR2V0U2lwUnVsZUNvbW1hbmQsXG4gIENyZWF0ZVNpcFJ1bGVDb21tYW5kLFxuICBVcGRhdGVTaXBSdWxlQ29tbWFuZCxcbiAgRGVsZXRlU2lwUnVsZUNvbW1hbmQsXG4gIENyZWF0ZVNpcFJ1bGVDb21tYW5kSW5wdXQsXG4gIENyZWF0ZVNpcFJ1bGVDb21tYW5kT3V0cHV0LFxuICBTaXBSdWxlVGFyZ2V0QXBwbGljYXRpb24sXG4gIFNpcFJ1bGVUcmlnZ2VyVHlwZSxcbiAgQ2hpbWVTREtWb2ljZVNlcnZpY2VFeGNlcHRpb24sXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jaGltZS1zZGstdm9pY2UnO1xuXG5pbXBvcnQge1xuICBTU01DbGllbnQsXG4gIERlbGV0ZVBhcmFtZXRlckNvbW1hbmQsXG4gIEdldFBhcmFtZXRlckNvbW1hbmQsXG4gIEdldFBhcmFtZXRlckNvbW1hbmRPdXRwdXQsXG4gIFB1dFBhcmFtZXRlckNvbW1hbmQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zc20nO1xuXG5jb25zdCBjaGltZVNES1ZvaWNlQ2xpZW50ID0gbmV3IENoaW1lU0RLVm9pY2VDbGllbnQoe1xuICByZWdpb246IHByb2Nlc3MuZW52LkFXU19SRUdJT04sXG59KTtcblxuY29uc3Qgc3NtQ2xpZW50ID0gbmV3IFNTTUNsaWVudCh7IHJlZ2lvbjogcHJvY2Vzcy5lbnYuQVdTX1JFR0lPTiB9KTtcblxubGV0IGNyZWF0ZVNpcFJ1bGVQYXJhbXM6IENyZWF0ZVNpcFJ1bGVDb21tYW5kSW5wdXQ7XG5sZXQgY3JlYXRlU2lwUnVsZVJlc3BvbnNlOiBDcmVhdGVTaXBSdWxlQ29tbWFuZE91dHB1dCB8IHVuZGVmaW5lZDtcbmxldCBnZXRQYXJhbWV0ZXJDb21tYW5kT3V0cHV0OiBHZXRQYXJhbWV0ZXJDb21tYW5kT3V0cHV0O1xubGV0IHNpcFJ1bGVUb0RlbGV0ZTogc3RyaW5nO1xubGV0IHNpcFJ1bGVUYXJnZXRBcHBsaWNhdGlvbnM6IFNpcFJ1bGVUYXJnZXRBcHBsaWNhdGlvbltdO1xuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVNJUFJ1bGVQcm9wcyB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHRyaWdnZXJUeXBlPzogU2lwUnVsZVRyaWdnZXJUeXBlO1xuICB0cmlnZ2VyVmFsdWU/OiBzdHJpbmc7XG4gIHRhcmdldEFwcGxpY2F0aW9ucz86IFtcbiAgICB7IHJlZ2lvbjogc3RyaW5nOyBwcmlvcml0eTogc3RyaW5nOyBzaXBNZWRpYUFwcGxpY2F0aW9uSWQ6IHN0cmluZyB9LFxuICBdO1xufVxuXG5leHBvcnQgY29uc3QgQ3JlYXRlU0lQUnVsZSA9IGFzeW5jICh1aWQ6IHN0cmluZywgcHJvcHM6IENyZWF0ZVNJUFJ1bGVQcm9wcykgPT4ge1xuICBjb25zb2xlLmxvZyhgQ3JlYXRpbmcgU0lQIG1lZGlhIGFwcGxpY2F0aW9uIHJ1bGU6ICR7dWlkfWApO1xuICBjb25zb2xlLmxvZyhcbiAgICBgQ3JlYXRlIFNJUCBtZWRpYSBhcHBsaWNhdGlvbiBydWxlIHByb3BzOiAke0pTT04uc3RyaW5naWZ5KHByb3BzKX1gLFxuICApO1xuICBzaXBSdWxlVGFyZ2V0QXBwbGljYXRpb25zID0gW107XG4gIHByb3BzLnRhcmdldEFwcGxpY2F0aW9ucz8uZm9yRWFjaCgodGFyZ2V0QXBwbGljYXRpb24pID0+IHtcbiAgICBzaXBSdWxlVGFyZ2V0QXBwbGljYXRpb25zLnB1c2goe1xuICAgICAgQXdzUmVnaW9uOiB0YXJnZXRBcHBsaWNhdGlvbi5yZWdpb24sXG4gICAgICBTaXBNZWRpYUFwcGxpY2F0aW9uSWQ6IHRhcmdldEFwcGxpY2F0aW9uLnNpcE1lZGlhQXBwbGljYXRpb25JZCxcbiAgICAgIFByaW9yaXR5OiBwYXJzZUludCh0YXJnZXRBcHBsaWNhdGlvbi5wcmlvcml0eSksXG4gICAgfSk7XG4gIH0pO1xuICBjcmVhdGVTaXBSdWxlUGFyYW1zID0ge1xuICAgIE5hbWU6IHByb3BzLm5hbWUsXG4gICAgVHJpZ2dlclR5cGU6IHByb3BzLnRyaWdnZXJUeXBlLFxuICAgIFRyaWdnZXJWYWx1ZTogcHJvcHMudHJpZ2dlclZhbHVlLFxuICAgIFRhcmdldEFwcGxpY2F0aW9uczogc2lwUnVsZVRhcmdldEFwcGxpY2F0aW9ucyxcbiAgfTtcbiAgY29uc29sZS5sb2coXG4gICAgYENyZWF0ZSBTSVAgbWVkaWEgYXBwbGljYXRpb24gcnVsZSBwYXJhbXM6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICBjcmVhdGVTaXBSdWxlUGFyYW1zLFxuICAgICl9YCxcbiAgKTtcblxuICBsZXQgYXR0ZW1wdCA9IDA7XG5cbiAgd2hpbGUgKGF0dGVtcHQgPCAxMCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zb2xlLmxvZyhgQXR0ZW1wdCAke2F0dGVtcHQgKyAxfTogQ3JlYXRpbmcgU0lQIHJ1bGVgKTtcbiAgICAgIGNyZWF0ZVNpcFJ1bGVSZXNwb25zZSA9IGF3YWl0IGNoaW1lU0RLVm9pY2VDbGllbnQuc2VuZChcbiAgICAgICAgbmV3IENyZWF0ZVNpcFJ1bGVDb21tYW5kKGNyZWF0ZVNpcFJ1bGVQYXJhbXMpLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKGBTSVAgcnVsZSBjcmVhdGVkOiAke0pTT04uc3RyaW5naWZ5KGNyZWF0ZVNpcFJ1bGVSZXNwb25zZSl9YCk7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKFxuICAgICAgICBlcnJvciBpbnN0YW5jZW9mIENoaW1lU0RLVm9pY2VTZXJ2aWNlRXhjZXB0aW9uICYmXG4gICAgICAgIGVycm9yLm5hbWUgPT09ICdCYWRSZXF1ZXN0RXhjZXB0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0JhZCBSZXF1ZXN0IEV4Y2VwdGlvbiwgcmV0cnlpbmcuLi4nLCBlcnJvcik7XG4gICAgICAgIGF0dGVtcHQrKztcbiAgICAgICAgYXdhaXQgc2xlZXAoMTAwMDApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQ6JywgZXJyb3IpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWNyZWF0ZVNpcFJ1bGVSZXNwb25zZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGNyZWF0ZSBTSVAgcnVsZSBhZnRlciAzIGF0dGVtcHRzLicpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBzc21DbGllbnQuc2VuZChcbiAgICAgIG5ldyBQdXRQYXJhbWV0ZXJDb21tYW5kKHtcbiAgICAgICAgTmFtZTogJy9jaGltZS9zaXBSdWxlJyArIHVpZCxcbiAgICAgICAgVmFsdWU6IGNyZWF0ZVNpcFJ1bGVSZXNwb25zZS5TaXBSdWxlPy5TaXBSdWxlSWQsXG4gICAgICAgIERlc2NyaXB0aW9uOiAnU0lQIFJ1bGUgSUQnLFxuICAgICAgICBPdmVyd3JpdGU6IHRydWUsXG4gICAgICAgIFR5cGU6ICdTdHJpbmcnLFxuICAgICAgfSksXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNpcFJ1bGVJZDogY3JlYXRlU2lwUnVsZVJlc3BvbnNlLlNpcFJ1bGU/LlNpcFJ1bGVJZCxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBEZWxldGVTSVBSdWxlID0gYXN5bmMgKHVpZDogc3RyaW5nKSA9PiB7XG4gIHRyeSB7XG4gICAgZ2V0UGFyYW1ldGVyQ29tbWFuZE91dHB1dCA9IGF3YWl0IHNzbUNsaWVudC5zZW5kKFxuICAgICAgbmV3IEdldFBhcmFtZXRlckNvbW1hbmQoeyBOYW1lOiAnL2NoaW1lL3NpcFJ1bGUnICsgdWlkIH0pLFxuICAgICk7XG4gICAgaWYgKFxuICAgICAgZ2V0UGFyYW1ldGVyQ29tbWFuZE91dHB1dC5QYXJhbWV0ZXIgJiZcbiAgICAgIGdldFBhcmFtZXRlckNvbW1hbmRPdXRwdXQuUGFyYW1ldGVyLlZhbHVlXG4gICAgKSB7XG4gICAgICBzaXBSdWxlVG9EZWxldGUgPSBnZXRQYXJhbWV0ZXJDb21tYW5kT3V0cHV0LlBhcmFtZXRlci5WYWx1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBjaGltZVNES1ZvaWNlQ2xpZW50LnNlbmQoXG4gICAgICBuZXcgVXBkYXRlU2lwUnVsZUNvbW1hbmQoe1xuICAgICAgICBTaXBSdWxlSWQ6IHNpcFJ1bGVUb0RlbGV0ZSxcbiAgICAgICAgTmFtZTogdWlkLFxuICAgICAgICBEaXNhYmxlZDogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgbGV0IGdldFNpcFJ1bGVDb21tYW5kQ291bnQgPSAwO1xuICB3aGlsZSAoXG4gICAgIShhd2FpdCBjaGltZVNES1ZvaWNlQ2xpZW50LnNlbmQoXG4gICAgICBuZXcgR2V0U2lwUnVsZUNvbW1hbmQoeyBTaXBSdWxlSWQ6IHNpcFJ1bGVUb0RlbGV0ZSB9KSxcbiAgICApKVxuICApIHtcbiAgICBnZXRTaXBSdWxlQ29tbWFuZENvdW50Kys7XG4gICAgaWYgKGdldFNpcFJ1bGVDb21tYW5kQ291bnQgPiAxNSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZGlzYWJsZSBTSVAgcnVsZScpO1xuICAgIH1cbiAgICBhd2FpdCBzbGVlcCg1MDAwKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgY2hpbWVTREtWb2ljZUNsaWVudC5zZW5kKFxuICAgICAgbmV3IERlbGV0ZVNpcFJ1bGVDb21tYW5kKHtcbiAgICAgICAgU2lwUnVsZUlkOiBzaXBSdWxlVG9EZWxldGUsXG4gICAgICB9KSxcbiAgICApO1xuICAgIGF3YWl0IHNzbUNsaWVudC5zZW5kKFxuICAgICAgbmV3IERlbGV0ZVBhcmFtZXRlckNvbW1hbmQoeyBOYW1lOiAnL2NoaW1lL3NpcFJ1bGUnICsgdWlkIH0pLFxuICAgICk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBzbGVlcCA9IChtczogbnVtYmVyKSA9PiBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCBtcykpO1xuIl19