@cometchat/chat-uikit-angular
Version:
Ready-to-use Chat UI Components for Angular (JavaScript/Web)
125 lines • 20.7 kB
JavaScript
import { DataSourceDecorator } from "../../Shared/Framework/DataSourceDecorator";
import { CometChatMessageEvents, CometChatUIKitConstants, MessageStatus, } from "@cometchat/uikit-resources";
import { CometChatMessageTemplate } from "@cometchat/uikit-resources";
import { CometChat } from "@cometchat/chat-sdk-javascript";
import { localize } from "@cometchat/uikit-resources";
import { CometChatUIKitLoginListener, StickersConfiguration } from "@cometchat/uikit-shared";
import { StickersConstants } from "@cometchat/uikit-shared";
import { CometChatSoundManager, CometChatUIKitUtility, } from "@cometchat/uikit-shared";
import { ChatConfigurator } from "../../Shared/Framework/ChatConfigurator";
import { CometChatException } from "../../Shared/Utils/ComeChatException";
export class StickersExtensionDecorator extends DataSourceDecorator {
constructor(dataSource) {
super(dataSource);
this.sendStickerMessage = (sticker, loggedInUser, user, group, parentMessageid, onError, customSoundForMessages = "", disableSoundForMessages = false) => {
let receiverId = user?.getUid() || group?.getGuid();
let receiverType = user
? CometChatUIKitConstants.MessageReceiverType.user
: CometChatUIKitConstants.MessageReceiverType.group;
try {
const customData = {
sticker_url: sticker.url,
sticker_name: sticker.name,
};
const customType = StickersConstants.sticker;
const customMessage = new CometChat.CustomMessage(receiverId, receiverType, customType, customData);
if (parentMessageid) {
customMessage.setParentMessageId(parentMessageid);
}
customMessage.shouldUpdateConversation(true);
customMessage.setMetadata({ incrementUnreadCount: true });
customMessage.setSentAt(CometChatUIKitUtility.getUnixTimestamp());
customMessage.setMuid(CometChatUIKitUtility.ID());
if (CometChatUIKitLoginListener.getLoggedInUser()) {
customMessage.setSender(CometChatUIKitLoginListener.getLoggedInUser());
}
CometChatMessageEvents.ccMessageSent.next({
message: customMessage,
status: MessageStatus.inprogress,
});
if (!disableSoundForMessages) {
CometChatSoundManager.play(customSoundForMessages ?? CometChatSoundManager.Sound.outgoingMessage);
}
CometChat.sendCustomMessage(customMessage)
.then((message) => {
CometChatMessageEvents.ccMessageSent.next({
message: message,
status: MessageStatus.success,
});
})
.catch((error) => {
customMessage.setMetadata({
error: true,
});
CometChatMessageEvents.ccMessageSent.next({
message: customMessage,
status: MessageStatus.error,
});
});
}
catch (error) {
if (onError) {
onError(CometChatException(error));
}
}
};
this.newDataScorce = dataSource;
this.configuration = new StickersConfiguration({});
this.configuration.ccStickerClicked = this.sendStickerMessage;
}
getDataScorce() {
return this.newDataScorce;
}
getAllMessageTemplates() {
let template = super.getAllMessageTemplates();
if (!this.checkIfTemplateExist(template, StickersConstants.sticker)) {
template.push(this.getStickerTemplate());
return template;
}
return template;
}
getAuxiliaryOptions(id, user, group) {
return { configuration: this.configuration, id: StickersConstants.sticker };
}
getStickerTemplate() {
return new CometChatMessageTemplate({
type: StickersConstants.sticker,
category: CometChatUIKitConstants.MessageCategory.custom,
options: (loggedInUser, messageObject, theme, group) => {
return ChatConfigurator.getDataSource().getCommonOptions(loggedInUser, messageObject, theme, group);
},
});
}
checkIfTemplateExist(template, type) {
return template.some((obj) => obj.type === type);
}
getAllMessageCategories() {
let categories = super.getAllMessageCategories();
if (!categories.some((category) => category === CometChatUIKitConstants.MessageCategory.custom)) {
categories.push(CometChatUIKitConstants.MessageCategory.custom);
}
return categories;
}
getAllMessageTypes() {
let types = super.getAllMessageTypes();
if (!types.some((category) => category === CometChatUIKitConstants.MessageCategory.custom)) {
types.push(StickersConstants.sticker);
}
return types;
}
getId() {
return "stickers";
}
getLastConversationMessage(conversation, loggedInUser, additionalConfigurations) {
const message = conversation.getLastMessage();
if (message != null &&
message.getType() == StickersConstants.sticker &&
message.getCategory() == CometChatUIKitConstants.MessageCategory.custom) {
return localize("CUSTOM_MESSAGE_STICKER");
}
else {
return super.getLastConversationMessage(conversation, loggedInUser, additionalConfigurations);
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RpY2tlcnNFeHRlbnNpb25EZWNvcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXVpa2l0LWFuZ3VsYXIvc3JjL0V4dGVuc2lvbnMvU3RpY2tlcnMvU3RpY2tlcnNFeHRlbnNpb25EZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDakYsT0FBTyxFQUNMLHNCQUFzQixFQUV0Qix1QkFBdUIsRUFDdkIsYUFBYSxHQUNkLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU1RCxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHFCQUFxQixHQUN0QixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRTNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzFFLE1BQU0sT0FBTywwQkFBMkIsU0FBUSxtQkFBbUI7SUFHakUsWUFBWSxVQUFzQjtRQUNoQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFTcEIsdUJBQWtCLEdBQUcsQ0FDbkIsT0FBc0MsRUFDdEMsWUFBNEIsRUFDNUIsSUFBb0IsRUFDcEIsS0FBc0IsRUFDdEIsZUFBdUIsRUFDdkIsT0FBMkUsRUFDM0UseUJBQWlDLEVBQUUsRUFDbkMsMEJBQW1D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QUNaLHdCQUF3QixDQUN6QixDQUFDO1NBQ0g7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRhU291cmNlRGVjb3JhdG9yIH0gZnJvbSBcIi4uLy4uL1NoYXJlZC9GcmFtZXdvcmsvRGF0YVNvdXJjZURlY29yYXRvclwiO1xuaW1wb3J0IHtcbiAgQ29tZXRDaGF0TWVzc2FnZUV2ZW50cyxcbiAgQ29tZXRDaGF0VGhlbWUsXG4gIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLFxuICBNZXNzYWdlU3RhdHVzLFxufSBmcm9tIFwiQGNvbWV0Y2hhdC91aWtpdC1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSB9IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LXJlc291cmNlc1wiO1xuaW1wb3J0IHsgQ29tZXRDaGF0IH0gZnJvbSBcIkBjb21ldGNoYXQvY2hhdC1zZGstamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgbG9jYWxpemUgfSBmcm9tIFwiQGNvbWV0Y2hhdC91aWtpdC1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IENvbWV0Q2hhdFVJS2l0TG9naW5MaXN0ZW5lciwgU3RpY2tlcnNDb25maWd1cmF0aW9uIH0gZnJvbSBcIkBjb21ldGNoYXQvdWlraXQtc2hhcmVkXCI7XG5pbXBvcnQgeyBTdGlja2Vyc0NvbnN0YW50cyB9IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LXNoYXJlZFwiO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gXCIuLi8uLi9TaGFyZWQvRnJhbWV3b3JrL0RhdGFTb3VyY2VcIjtcbmltcG9ydCB7XG4gIENvbWV0Q2hhdFNvdW5kTWFuYWdlcixcbiAgQ29tZXRDaGF0VUlLaXRVdGlsaXR5LFxufSBmcm9tIFwiQGNvbWV0Y2hhdC91aWtpdC1zaGFyZWRcIjtcbmltcG9ydCB7IENoYXRDb25maWd1cmF0b3IgfSBmcm9tIFwiLi4vLi4vU2hhcmVkL0ZyYW1ld29yay9DaGF0Q29uZmlndXJhdG9yXCI7XG5pbXBvcnQgeyBDb21wb3NlcklkIH0gZnJvbSBcIi4uLy4uL1NoYXJlZC9VdGlscy9NZXNzYWdlVXRpbHNcIjtcbmltcG9ydCB7IENvbWV0Q2hhdEV4Y2VwdGlvbiB9IGZyb20gXCIuLi8uLi9TaGFyZWQvVXRpbHMvQ29tZUNoYXRFeGNlcHRpb25cIjtcbmV4cG9ydCBjbGFzcyBTdGlja2Vyc0V4dGVuc2lvbkRlY29yYXRvciBleHRlbmRzIERhdGFTb3VyY2VEZWNvcmF0b3Ige1xuICBwdWJsaWMgY29uZmlndXJhdGlvbj86IFN0aWNrZXJzQ29uZmlndXJhdGlvbjtcbiAgcHVibGljIG5ld0RhdGFTY29yY2UhOiBEYXRhU291cmNlO1xuICBjb25zdHJ1Y3RvcihkYXRhU291cmNlOiBEYXRhU291cmNlKSB7XG4gICAgc3VwZXIoZGF0YVNvdXJjZSk7XG4gICAgdGhpcy5uZXdEYXRhU2NvcmNlID0gZGF0YVNvdXJjZTtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBuZXcgU3RpY2tlcnNDb25maWd1cmF0aW9uKHt9KTtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24hLmNjU3RpY2tlckNsaWNrZWQgPSB0aGlzLnNlbmRTdGlja2VyTWVzc2FnZTtcblxuICB9XG4gIGdldERhdGFTY29yY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMubmV3RGF0YVNjb3JjZTtcbiAgfVxuICBzZW5kU3RpY2tlck1lc3NhZ2UgPSAoXG4gICAgc3RpY2tlcjogeyBuYW1lOiBzdHJpbmc7IHVybDogc3RyaW5nIH0sXG4gICAgbG9nZ2VkSW5Vc2VyOiBDb21ldENoYXQuVXNlcixcbiAgICB1c2VyOiBDb21ldENoYXQuVXNlcixcbiAgICBncm91cDogQ29tZXRDaGF0Lkdyb3VwLFxuICAgIHBhcmVudE1lc3NhZ2VpZDogbnVtYmVyLFxuICAgIG9uRXJyb3I6ICgoZXJyb3I6IENvbWV0Q2hhdC5Db21ldENoYXRFeGNlcHRpb24pID0+IHZvaWQpIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgICBjdXN0b21Tb3VuZEZvck1lc3NhZ2VzOiBzdHJpbmcgPSBcIlwiLFxuICAgIGRpc2FibGVTb3VuZEZvck1lc3NhZ2VzOiBib29sZWFuID0gZmFsc2VcbiAgKSA9PiB7XG4gICAgbGV0IHJlY2VpdmVySWQ6IHN0cmluZyA9IHVzZXI/LmdldFVpZCgpIHx8IGdyb3VwPy5nZXRHdWlkKCk7XG4gICAgbGV0IHJlY2VpdmVyVHlwZTogc3RyaW5nID0gdXNlclxuICAgICAgPyBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLnVzZXJcbiAgICAgIDogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVJlY2VpdmVyVHlwZS5ncm91cDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY3VzdG9tRGF0YSA9IHtcbiAgICAgICAgc3RpY2tlcl91cmw6IHN0aWNrZXIudXJsLFxuICAgICAgICBzdGlja2VyX25hbWU6IHN0aWNrZXIubmFtZSxcbiAgICAgIH07XG4gICAgICBjb25zdCBjdXN0b21UeXBlID0gU3RpY2tlcnNDb25zdGFudHMuc3RpY2tlcjtcbiAgICAgIGNvbnN0IGN1c3RvbU1lc3NhZ2U6IENvbWV0Q2hhdC5DdXN0b21NZXNzYWdlID1cbiAgICAgICAgbmV3IENvbWV0Q2hhdC5DdXN0b21NZXNzYWdlKFxuICAgICAgICAgIHJlY2VpdmVySWQsXG4gICAgICAgICAgcmVjZWl2ZXJUeXBlLFxuICAgICAgICAgIGN1c3RvbVR5cGUsXG4gICAgICAgICAgY3VzdG9tRGF0YVxuICAgICAgICApO1xuICAgICAgaWYgKHBhcmVudE1lc3NhZ2VpZCkge1xuICAgICAgICBjdXN0b21NZXNzYWdlLnNldFBhcmVudE1lc3NhZ2VJZChwYXJlbnRNZXNzYWdlaWQpO1xuICAgICAgfVxuICAgICAgY3VzdG9tTWVzc2FnZS5zaG91bGRVcGRhdGVDb252ZXJzYXRpb24odHJ1ZSk7XG4gICAgICBjdXN0b21NZXNzYWdlLnNldE1ldGFkYXRhKHsgaW5jcmVtZW50VW5yZWFkQ291bnQ6IHRydWUgfSk7XG4gICAgICAoY3VzdG9tTWVzc2FnZSBhcyBhbnkpLnNldFNlbnRBdChcbiAgICAgICAgQ29tZXRDaGF0VUlLaXRVdGlsaXR5LmdldFVuaXhUaW1lc3RhbXAoKVxuICAgICAgKTtcbiAgICAgIGN1c3RvbU1lc3NhZ2Uuc2V0TXVpZChDb21ldENoYXRVSUtpdFV0aWxpdHkuSUQoKSk7XG4gICAgICBpZiAoQ29tZXRDaGF0VUlLaXRMb2dpbkxpc3RlbmVyLmdldExvZ2dlZEluVXNlcigpKSB7XG4gICAgICAgIGN1c3RvbU1lc3NhZ2Uuc2V0U2VuZGVyKENvbWV0Q2hhdFVJS2l0TG9naW5MaXN0ZW5lci5nZXRMb2dnZWRJblVzZXIoKSEpXG4gICAgICB9XG4gICAgICBDb21ldENoYXRNZXNzYWdlRXZlbnRzLmNjTWVzc2FnZVNlbnQubmV4dCh7XG4gICAgICAgIG1lc3NhZ2U6IGN1c3RvbU1lc3NhZ2UsXG4gICAgICAgIHN0YXR1czogTWVzc2FnZVN0YXR1cy5pbnByb2dyZXNzLFxuICAgICAgfSk7XG4gICAgICBpZiAoIWRpc2FibGVTb3VuZEZvck1lc3NhZ2VzKSB7XG4gICAgICAgIENvbWV0Q2hhdFNvdW5kTWFuYWdlci5wbGF5KFxuICAgICAgICAgIGN1c3RvbVNvdW5kRm9yTWVzc2FnZXMgPz8gQ29tZXRDaGF0U291bmRNYW5hZ2VyLlNvdW5kLm91dGdvaW5nTWVzc2FnZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgQ29tZXRDaGF0LnNlbmRDdXN0b21NZXNzYWdlKGN1c3RvbU1lc3NhZ2UpXG4gICAgICAgIC50aGVuKChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgQ29tZXRDaGF0TWVzc2FnZUV2ZW50cy5jY01lc3NhZ2VTZW50Lm5leHQoe1xuICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgICAgIHN0YXR1czogTWVzc2FnZVN0YXR1cy5zdWNjZXNzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBDb21ldENoYXQuQ29tZXRDaGF0RXhjZXB0aW9uKSA9PiB7XG4gICAgICAgICAgY3VzdG9tTWVzc2FnZS5zZXRNZXRhZGF0YSh7XG4gICAgICAgICAgICBlcnJvcjogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBDb21ldENoYXRNZXNzYWdlRXZlbnRzLmNjTWVzc2FnZVNlbnQubmV4dCh7XG4gICAgICAgICAgICBtZXNzYWdlOiBjdXN0b21NZXNzYWdlLFxuICAgICAgICAgICAgc3RhdHVzOiBNZXNzYWdlU3RhdHVzLmVycm9yLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBpZiAob25FcnJvcikge1xuICAgICAgICBvbkVycm9yKENvbWV0Q2hhdEV4Y2VwdGlvbihlcnJvcikpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgb3ZlcnJpZGUgZ2V0QWxsTWVzc2FnZVRlbXBsYXRlcygpOiBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGVbXSB7XG4gICAgbGV0IHRlbXBsYXRlOiBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGVbXSA9IHN1cGVyLmdldEFsbE1lc3NhZ2VUZW1wbGF0ZXMoKTtcbiAgICBpZiAoIXRoaXMuY2hlY2tJZlRlbXBsYXRlRXhpc3QodGVtcGxhdGUsIFN0aWNrZXJzQ29uc3RhbnRzLnN0aWNrZXIpKSB7XG4gICAgICB0ZW1wbGF0ZS5wdXNoKHRoaXMuZ2V0U3RpY2tlclRlbXBsYXRlKCkpO1xuICAgICAgcmV0dXJuIHRlbXBsYXRlO1xuICAgIH1cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH1cbiAgb3ZlcnJpZGUgZ2V0QXV4aWxpYXJ5T3B0aW9ucyhcbiAgICBpZDogQ29tcG9zZXJJZCxcbiAgICB1c2VyPzogQ29tZXRDaGF0LlVzZXIsXG4gICAgZ3JvdXA/OiBDb21ldENoYXQuR3JvdXBcbiAgKSB7XG4gICAgcmV0dXJuIHsgY29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9uLCBpZDogU3RpY2tlcnNDb25zdGFudHMuc3RpY2tlciB9O1xuICB9XG4gIGdldFN0aWNrZXJUZW1wbGF0ZSgpOiBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlKHtcbiAgICAgIHR5cGU6IFN0aWNrZXJzQ29uc3RhbnRzLnN0aWNrZXIsXG4gICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmN1c3RvbSxcbiAgICAgIG9wdGlvbnM6IChcbiAgICAgICAgbG9nZ2VkSW5Vc2VyOiBDb21ldENoYXQuVXNlcixcbiAgICAgICAgbWVzc2FnZU9iamVjdDogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLFxuICAgICAgICB0aGVtZTogQ29tZXRDaGF0VGhlbWUsXG4gICAgICAgIGdyb3VwPzogQ29tZXRDaGF0Lkdyb3VwXG4gICAgICApID0+IHtcbiAgICAgICAgcmV0dXJuIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldENvbW1vbk9wdGlvbnMoXG4gICAgICAgICAgbG9nZ2VkSW5Vc2VyLFxuICAgICAgICAgIG1lc3NhZ2VPYmplY3QsXG4gICAgICAgICAgdGhlbWUsXG4gICAgICAgICAgZ3JvdXBcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgY2hlY2tJZlRlbXBsYXRlRXhpc3QoXG4gICAgdGVtcGxhdGU6IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZVtdLFxuICAgIHR5cGU6IHN0cmluZ1xuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGVtcGxhdGUuc29tZSgob2JqKSA9PiBvYmoudHlwZSA9PT0gdHlwZSk7XG4gIH1cblxuICBvdmVycmlkZSBnZXRBbGxNZXNzYWdlQ2F0ZWdvcmllcygpOiBzdHJpbmdbXSB7XG4gICAgbGV0IGNhdGVnb3JpZXM6IHN0cmluZ1tdID0gc3VwZXIuZ2V0QWxsTWVzc2FnZUNhdGVnb3JpZXMoKTtcbiAgICBpZiAoXG4gICAgICAhY2F0ZWdvcmllcy5zb21lKFxuICAgICAgICAoY2F0ZWdvcnkpID0+XG4gICAgICAgICAgY2F0ZWdvcnkgPT09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5jdXN0b21cbiAgICAgIClcbiAgICApIHtcbiAgICAgIGNhdGVnb3JpZXMucHVzaChDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkuY3VzdG9tKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhdGVnb3JpZXM7XG4gIH1cblxuICBvdmVycmlkZSBnZXRBbGxNZXNzYWdlVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIGxldCB0eXBlczogc3RyaW5nW10gPSBzdXBlci5nZXRBbGxNZXNzYWdlVHlwZXMoKTtcbiAgICBpZiAoXG4gICAgICAhdHlwZXMuc29tZShcbiAgICAgICAgKGNhdGVnb3J5KSA9PlxuICAgICAgICAgIGNhdGVnb3J5ID09PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkuY3VzdG9tXG4gICAgICApXG4gICAgKSB7XG4gICAgICB0eXBlcy5wdXNoKFN0aWNrZXJzQ29uc3RhbnRzLnN0aWNrZXIpO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZXM7XG4gIH1cblxuICBvdmVycmlkZSBnZXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInN0aWNrZXJzXCI7XG4gIH1cbiAgb3ZlcnJpZGUgZ2V0TGFzdENvbnZlcnNhdGlvbk1lc3NhZ2UoXG4gICAgY29udmVyc2F0aW9uOiBDb21ldENoYXQuQ29udmVyc2F0aW9uLFxuICAgIGxvZ2dlZEluVXNlcjogQ29tZXRDaGF0LlVzZXIsXG4gICAgYWRkaXRpb25hbENvbmZpZ3VyYXRpb25zOiBhbnlcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXNzYWdlOiBDb21ldENoYXQuQmFzZU1lc3NhZ2UgfCB1bmRlZmluZWQgPVxuICAgICAgY29udmVyc2F0aW9uLmdldExhc3RNZXNzYWdlKCk7XG4gICAgaWYgKFxuICAgICAgbWVzc2FnZSAhPSBudWxsICYmXG4gICAgICBtZXNzYWdlLmdldFR5cGUoKSA9PSBTdGlja2Vyc0NvbnN0YW50cy5zdGlja2VyICYmXG4gICAgICBtZXNzYWdlLmdldENhdGVnb3J5KCkgPT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmN1c3RvbVxuICAgICkge1xuICAgICAgcmV0dXJuIGxvY2FsaXplKFwiQ1VTVE9NX01FU1NBR0VfU1RJQ0tFUlwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN1cGVyLmdldExhc3RDb252ZXJzYXRpb25NZXNzYWdlKFxuICAgICAgICBjb252ZXJzYXRpb24sXG4gICAgICAgIGxvZ2dlZEluVXNlcixcbiAgICAgICAgYWRkaXRpb25hbENvbmZpZ3VyYXRpb25zXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19