@hsaadawy/ngx-chat
Version:
151 lines • 27.7 kB
JavaScript
import { TextFieldModule } from '@angular/cdk/text-field';
import { CommonModule } from '@angular/common';
import { HttpClient, HttpClientModule } from '@angular/common/http';
import { NgModule, NgZone } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { ChatAvatarComponent } from './components/chat-avatar/chat-avatar.component';
import { FileDropComponent } from './components/chat-filedrop/file-drop.component';
import { ChatMessageInputComponent } from './components/chat-message-input/chat-message-input.component';
import { ChatMessageLinkComponent } from './components/chat-message-link/chat-message-link.component';
import { ChatMessageListComponent } from './components/chat-message-list/chat-message-list.component';
import { ChatMessageSimpleComponent } from './components/chat-message-simple/chat-message-simple.component';
import { ChatMessageTextComponent } from './components/chat-message-text/chat-message-text.component';
import { ChatMessageComponent } from './components/chat-message/chat-message.component';
import { ChatVideoWindowComponent } from './components/chat-video-window/chat-video-window.component';
import { ChatWindowFrameComponent } from './components/chat-window-frame/chat-window-frame.component';
import { ChatWindowListComponent } from './components/chat-window-list/chat-window-list.component';
import { ChatWindowComponent } from './components/chat-window/chat-window.component';
import { ChatComponent } from './components/chat.component';
import { RosterListComponent } from './components/roster-list/roster-list.component';
import { RosterRecipientComponent } from './components/roster-recipient/roster-recipient.component';
import { IntersectionObserverDirective } from './directives/intersection-observer.directive';
import { LinksDirective } from './directives/links.directive';
import { ReplyMessageEvent } from './events/reply-message-event';
import { BlockPlugin } from './services/adapters/xmpp/plugins/block.plugin';
import { BookmarkPlugin } from './services/adapters/xmpp/plugins/bookmark.plugin';
import { EntityTimePlugin } from './services/adapters/xmpp/plugins/entity-time.plugin';
import { HttpFileUploadPlugin } from './services/adapters/xmpp/plugins/http-file-upload.plugin';
import { MessageArchivePlugin } from './services/adapters/xmpp/plugins/message-archive.plugin';
import { MessageCarbonsPlugin } from './services/adapters/xmpp/plugins/message-carbons.plugin';
import { MessageStatePlugin } from './services/adapters/xmpp/plugins/message-state.plugin';
import { MessageUuidPlugin } from './services/adapters/xmpp/plugins/message-uuid.plugin';
import { MessagePlugin } from './services/adapters/xmpp/plugins/message.plugin';
import { MucSubPlugin } from './services/adapters/xmpp/plugins/muc-sub.plugin';
import { MultiUserChatPlugin } from './services/adapters/xmpp/plugins/multi-user-chat.plugin';
import { PingPlugin } from './services/adapters/xmpp/plugins/ping.plugin';
import { PublishSubscribePlugin } from './services/adapters/xmpp/plugins/publish-subscribe.plugin';
import { PushPlugin } from './services/adapters/xmpp/plugins/push.plugin';
import { RegistrationPlugin } from './services/adapters/xmpp/plugins/registration.plugin';
import { RosterPlugin } from './services/adapters/xmpp/plugins/roster.plugin';
import { ServiceDiscoveryPlugin } from './services/adapters/xmpp/plugins/service-discovery.plugin';
import { UnreadMessageCountPlugin } from './services/adapters/xmpp/plugins/unread-message-count.plugin';
import { XmppChatAdapter } from './services/adapters/xmpp/xmpp-chat-adapter.service';
import { XmppChatConnectionService } from './services/adapters/xmpp/xmpp-chat-connection.service';
import { XmppClientFactoryService } from './services/adapters/xmpp/xmpp-client-factory.service';
import { ChatBackgroundNotificationService } from './services/chat-background-notification.service';
import { ChatListStateService } from './services/chat-list-state.service';
import { ChatMessageListRegistryService } from './services/chat-message-list-registry.service';
import { CHAT_SERVICE_TOKEN } from './services/chat-service';
import { ContactFactoryService } from './services/contact-factory.service';
import { LogService } from './services/log.service';
import { ForwardMessageComponent } from './components/forward-message/forward-message.component';
import { ForwardMessageEvent } from './events/forward-message-event';
export class NgxChatModule {
static forRoot() {
return {
ngModule: NgxChatModule,
providers: [
ChatBackgroundNotificationService,
ChatListStateService,
ChatMessageListRegistryService,
ContactFactoryService,
ReplyMessageEvent,
ForwardMessageEvent,
LogService,
XmppChatConnectionService,
XmppClientFactoryService,
{
provide: CHAT_SERVICE_TOKEN,
deps: [
XmppChatConnectionService,
ChatMessageListRegistryService,
ContactFactoryService,
HttpClient,
LogService,
NgZone,
],
useFactory: NgxChatModule.xmppChatAdapter,
},
],
};
}
static xmppChatAdapter(chatConnectionService, chatMessageListRegistryService, contactFactory, httpClient, logService, ngZone) {
const xmppChatAdapter = new XmppChatAdapter(chatConnectionService, logService, contactFactory);
const serviceDiscoveryPlugin = new ServiceDiscoveryPlugin(xmppChatAdapter);
const publishSubscribePlugin = new PublishSubscribePlugin(xmppChatAdapter, serviceDiscoveryPlugin);
const entityTimePlugin = new EntityTimePlugin(xmppChatAdapter, serviceDiscoveryPlugin, logService);
const multiUserChatPlugin = new MultiUserChatPlugin(xmppChatAdapter, logService, serviceDiscoveryPlugin);
const unreadMessageCountPlugin = new UnreadMessageCountPlugin(xmppChatAdapter, chatMessageListRegistryService, publishSubscribePlugin, entityTimePlugin, multiUserChatPlugin);
const messagePlugin = new MessagePlugin(xmppChatAdapter, logService);
xmppChatAdapter.addPlugins([
new BookmarkPlugin(publishSubscribePlugin),
new MessageArchivePlugin(xmppChatAdapter, serviceDiscoveryPlugin, multiUserChatPlugin, logService, messagePlugin),
messagePlugin,
new MessageUuidPlugin(),
multiUserChatPlugin,
publishSubscribePlugin,
new RosterPlugin(xmppChatAdapter, logService),
serviceDiscoveryPlugin,
new PushPlugin(xmppChatAdapter, serviceDiscoveryPlugin),
new PingPlugin(xmppChatAdapter, logService, ngZone),
new RegistrationPlugin(logService, ngZone),
new MessageCarbonsPlugin(xmppChatAdapter),
unreadMessageCountPlugin,
new HttpFileUploadPlugin(httpClient, serviceDiscoveryPlugin, xmppChatAdapter, logService),
new MessageStatePlugin(publishSubscribePlugin, xmppChatAdapter, chatMessageListRegistryService, logService, entityTimePlugin),
new MucSubPlugin(xmppChatAdapter, serviceDiscoveryPlugin),
new BlockPlugin(xmppChatAdapter, serviceDiscoveryPlugin),
entityTimePlugin,
]);
return xmppChatAdapter;
}
}
NgxChatModule.decorators = [
{ type: NgModule, args: [{
imports: [
CommonModule,
FormsModule,
HttpClientModule,
TextFieldModule,
],
declarations: [
ChatComponent,
ChatMessageComponent,
ChatMessageInputComponent,
ChatMessageLinkComponent,
ChatMessageListComponent,
ChatMessageSimpleComponent,
ChatMessageTextComponent,
ChatWindowComponent,
ChatWindowListComponent,
LinksDirective,
IntersectionObserverDirective,
RosterListComponent,
FileDropComponent,
ChatWindowFrameComponent,
ChatVideoWindowComponent,
ChatAvatarComponent,
RosterRecipientComponent,
ForwardMessageComponent
],
exports: [
ChatComponent,
ChatMessageInputComponent,
ChatMessageListComponent,
ChatMessageSimpleComponent,
FileDropComponent,
LinksDirective,
],
},] }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWNoYXQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGF6em5ldHdvcmsvbmd4LWNoYXQvc3JjL2xpYi9uZ3gtY2hhdC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEUsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNuRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUM1RyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN4RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUNu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QWlCO29CQUNqQix3QkFBd0I7b0JBQ3hCLHdCQUF3QjtvQkFDeEIsbUJBQW1CO29CQUNuQix3QkFBd0I7b0JBQ3hCLHVCQUF1QjtpQkFFMUI7Z0JBQ0QsT0FBTyxFQUFFO29CQUNMLGFBQWE7b0JBQ2IseUJBQXlCO29CQUN6Qix3QkFBd0I7b0JBQ3hCLDBCQUEwQjtvQkFDMUIsaUJBQWlCO29CQUNqQixjQUFjO2lCQUNqQjthQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGV4dEZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RleHQtZmllbGQnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwQ2xpZW50TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDaGF0QXZhdGFyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NoYXQtYXZhdGFyL2NoYXQtYXZhdGFyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpbGVEcm9wQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NoYXQtZmlsZWRyb3AvZmlsZS1kcm9wLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoYXRNZXNzYWdlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2hhdC1tZXNzYWdlLWlucHV0L2NoYXQtbWVzc2FnZS1pbnB1dC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaGF0TWVzc2FnZUxpbmtDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2hhdC1tZXNzYWdlLWxpbmsvY2hhdC1tZXNzYWdlLWxpbmsuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2hhdE1lc3NhZ2VMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NoYXQtbWVzc2FnZS1saXN0L2NoYXQtbWVzc2FnZS1saXN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoYXRNZXNzYWdlU2ltcGxlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NoYXQtbWVzc2FnZS1zaW1wbGUvY2hhdC1tZXNzYWdlLXNpbXBsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaGF0TWVzc2FnZVRleHRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2hhdC1tZXNzYWdlLXRleHQvY2hhdC1tZXNzYWdlLXRleHQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2hhdE1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2hhdC1tZXNzYWdlL2NoYXQtbWVzc2FnZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaGF0VmlkZW9XaW5kb3dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2hhdC12aWRlby13aW5kb3cvY2hhdC12aWRlby13aW5kb3cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2hhdFdpbmRvd0ZyYW1lQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NoYXQtd2luZG93LWZyYW1lL2NoYXQtd2luZG93LWZyYW1lLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoYXRXaW5kb3dMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NoYXQtd2luZG93LWxpc3QvY2hhdC13aW5kb3ctbGlzdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaGF0V2luZG93Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NoYXQtd2luZG93L2NoYXQtd2luZG93LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoYXRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2hhdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSb3N0ZXJMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Jvc3Rlci1saXN0L3Jvc3Rlci1saXN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJvc3RlclJlY2lwaWVudENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9yb3N0ZXItcmVjaXBpZW50L3Jvc3Rlci1yZWNpcGllbnQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvaW50ZXJzZWN0aW9uLW9ic2VydmVyLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IExpbmtzRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2xpbmtzLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFJlcGx5TWVzc2FnZUV2ZW50IH0gZnJvbSAnLi9ldmVudHMvcmVwbHktbWVzc2FnZS1ldmVudCc7XHJcbmltcG9ydCB7IEJsb2NrUGx1Z2luIH0gZnJvbSAnLi9zZXJ2aWNlcy9hZGFwdGVycy94bXBwL3BsdWdpbnMvYmxvY2sucGx1Z2luJztcclxuaW1wb3J0IHsgQm9va21hcmtQbHVnaW4gfSBmcm9tICcuL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAvcGx1Z2lucy9ib29rbWFyay5wbHVnaW4nO1xyXG5pbXBvcnQgeyBFbnRpdHlUaW1lUGx1Z2luIH0gZnJvbSAnLi9zZXJ2aWNlcy9hZGFwdGVycy94bXBwL3BsdWdpbnMvZW50aXR5LXRpbWUucGx1Z2luJztcclxuaW1wb3J0IHsgSHR0cEZpbGVVcGxvYWRQbHVnaW4gfSBmcm9tICcuL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAvcGx1Z2lucy9odHRwLWZpbGUtdXBsb2FkLnBsdWdpbic7XHJcbmltcG9ydCB7IE1lc3NhZ2VBcmNoaXZlUGx1Z2luIH0gZnJvbSAnLi9zZXJ2aWNlcy9hZGFwdGVycy94bXBwL3BsdWdpbnMvbWVzc2FnZS1hcmNoaXZlLnBsdWdpbic7XHJcbmltcG9ydCB7IE1lc3NhZ2VDYXJib25zUGx1Z2luIH0gZnJvbSAnLi9zZXJ2aWNlcy9hZGFwdGVycy94bXBwL3BsdWdpbnMvbWVzc2FnZS1jYXJib25zLnBsdWdpbic7XHJcbmltcG9ydCB7IE1lc3NhZ2VTdGF0ZVBsdWdpbiB9IGZyb20gJy4vc2VydmljZXMvYWRhcHRlcnMveG1wcC9wbHVnaW5zL21lc3NhZ2Utc3RhdGUucGx1Z2luJztcclxuaW1wb3J0IHsgTWVzc2FnZVV1aWRQbHVnaW4gfSBmcm9tICcuL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAvcGx1Z2lucy9tZXNzYWdlLXV1aWQucGx1Z2luJztcclxuaW1wb3J0IHsgTWVzc2FnZVBsdWdpbiB9IGZyb20gJy4vc2VydmljZXMvYWRhcHRlcnMveG1wcC9wbHVnaW5zL21lc3NhZ2UucGx1Z2luJztcclxuaW1wb3J0IHsgTXVjU3ViUGx1Z2luIH0gZnJvbSAnLi9zZXJ2aWNlcy9hZGFwdGVycy94bXBwL3BsdWdpbnMvbXVjLXN1Yi5wbHVnaW4nO1xyXG5pbXBvcnQgeyBNdWx0aVVzZXJDaGF0UGx1Z2luIH0gZnJvbSAnLi9zZXJ2aWNlcy9hZGFwdGVycy94bXBwL3BsdWdpbnMvbXVsdGktdXNlci1jaGF0LnBsdWdpbic7XHJcbmltcG9ydCB7IFBpbmdQbHVnaW4gfSBmcm9tICcuL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAvcGx1Z2lucy9waW5nLnBsdWdpbic7XHJcbmltcG9ydCB7IFB1Ymxpc2hTdWJzY3JpYmVQbHVnaW4gfSBmcm9tICcuL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAvcGx1Z2lucy9wdWJsaXNoLXN1YnNjcmliZS5wbHVnaW4nO1xyXG5pbXBvcnQgeyBQdXNoUGx1Z2luIH0gZnJvbSAnLi9zZXJ2aWNlcy9hZGFwdGVycy94bXBwL3BsdWdpbnMvcHVzaC5wbHVnaW4nO1xyXG5pbXBvcnQgeyBSZWdpc3RyYXRpb25QbHVnaW4gfSBmcm9tICcuL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAvcGx1Z2lucy9yZWdpc3RyYXRpb24ucGx1Z2luJztcclxuaW1wb3J0IHsgUm9zdGVyUGx1Z2luIH0gZnJvbSAnLi9zZXJ2aWNlcy9hZGFwdGVycy94bXBwL3BsdWdpbnMvcm9zdGVyLnBsdWdpbic7XHJcbmltcG9ydCB7IFNlcnZpY2VEaXNjb3ZlcnlQbHVnaW4gfSBmcm9tICcuL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAvcGx1Z2lucy9zZXJ2aWNlLWRpc2NvdmVyeS5wbHVnaW4nO1xyXG5pbXBvcnQgeyBVbnJlYWRNZXNzYWdlQ291bnRQbHVnaW4gfSBmcm9tICcuL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAvcGx1Z2lucy91bnJlYWQtbWVzc2FnZS1jb3VudC5wbHVnaW4nO1xyXG5pbXBvcnQgeyBYbXBwQ2hhdEFkYXB0ZXIgfSBmcm9tICcuL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAveG1wcC1jaGF0LWFkYXB0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFhtcHBDaGF0Q29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2FkYXB0ZXJzL3htcHAveG1wcC1jaGF0LWNvbm5lY3Rpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFhtcHBDbGllbnRGYWN0b3J5U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvYWRhcHRlcnMveG1wcC94bXBwLWNsaWVudC1mYWN0b3J5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDaGF0QmFja2dyb3VuZE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2NoYXQtYmFja2dyb3VuZC1ub3RpZmljYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IENoYXRMaXN0U3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9jaGF0LWxpc3Qtc3RhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IENoYXRNZXNzYWdlTGlzdFJlZ2lzdHJ5U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY2hhdC1tZXNzYWdlLWxpc3QtcmVnaXN0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IENIQVRfU0VSVklDRV9UT0tFTiB9IGZyb20gJy4vc2VydmljZXMvY2hhdC1zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29udGFjdEZhY3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9jb250YWN0LWZhY3Rvcnkuc2VydmljZSc7XHJcbmltcG9ydCB7IExvZ1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2xvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9yd2FyZE1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZm9yd2FyZC1tZXNzYWdlL2ZvcndhcmQtbWVzc2FnZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3J3YXJkTWVzc2FnZUV2ZW50IH0gZnJvbSAnLi9ldmVudHMvZm9yd2FyZC1tZXNzYWdlLWV2ZW50JztcclxuXHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgICBGb3Jtc01vZHVsZSxcclxuICAgICAgICBIdHRwQ2xpZW50TW9kdWxlLFxyXG4gICAgICAgIFRleHRGaWVsZE1vZHVsZSxcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgICBDaGF0Q29tcG9uZW50LFxyXG4gICAgICAgIENoYXRNZXNzYWdlQ29tcG9uZW50LFxyXG4gICAgICAgIENoYXRNZXNzYWdlSW5wdXRDb21wb25lbnQsXHJcbiAgICAgICAgQ2hhdE1lc3NhZ2VMaW5rQ29tcG9uZW50LFxyXG4gICAgICAgIENoYXRNZXNzYWdlTGlzdENvbXBvbmVudCxcclxuICAgICAgICBDaGF0TWVzc2FnZVNpbXBsZUNvbXBvbmVudCxcclxuICAgICAgICBDaGF0TWVzc2FnZVRleHRDb21wb25lbnQsXHJcbiAgICAgICAgQ2hhdFdpbmRvd0NvbXBvbmVudCxcclxuICAgICAgICBDaGF0V2luZG93TGlzdENvbXBvbmVudCxcclxuICAgICAgICBMaW5rc0RpcmVjdGl2ZSxcclxuICAgICAgICBJbnRlcnNlY3Rpb25PYnNlcnZlckRpcmVjdGl2ZSxcclxuICAgICAgICBSb3N0ZXJMaXN0Q29tcG9uZW50LFxyXG4gICAgICAgIEZpbGVEcm9wQ29tcG9uZW50LFxyXG4gICAgICAgIENoYXRXaW5kb3dGcmFtZUNvbXBvbmVudCxcclxuICAgICAgICBDaGF0VmlkZW9XaW5kb3dDb21wb25lbnQsXHJcbiAgICAgICAgQ2hhdEF2YXRhckNvbXBvbmVudCxcclxuICAgICAgICBSb3N0ZXJSZWNpcGllbnRDb21wb25lbnQsXHJcbiAgICAgICAgRm9yd2FyZE1lc3NhZ2VDb21wb25lbnRcclxuICAgICAgICBcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbXHJcbiAgICAgICAgQ2hhdENvbXBvbmVudCxcclxuICAgICAgICBDaGF0TWVzc2FnZUlucHV0Q29tcG9uZW50LFxyXG4gICAgICAgIENoYXRNZXNzYWdlTGlzdENvbXBvbmVudCxcclxuICAgICAgICBDaGF0TWVzc2FnZVNpbXBsZUNvbXBvbmVudCxcclxuICAgICAgICBGaWxlRHJvcENvbXBvbmVudCxcclxuICAgICAgICBMaW5rc0RpcmVjdGl2ZSxcclxuICAgIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hDaGF0TW9kdWxlIHtcclxuXHJcbiAgICBzdGF0aWMgZm9yUm9vdCgpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPE5neENoYXRNb2R1bGU+IHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmdNb2R1bGU6IE5neENoYXRNb2R1bGUsXHJcbiAgICAgICAgICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgICAgICAgICAgQ2hhdEJhY2tncm91bmROb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgQ2hhdExpc3RTdGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBDaGF0TWVzc2FnZUxpc3RSZWdpc3RyeVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBDb250YWN0RmFjdG9yeVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBSZXBseU1lc3NhZ2VFdmVudCxcclxuICAgICAgICAgICAgICAgIEZvcndhcmRNZXNzYWdlRXZlbnQsXHJcbiAgICAgICAgICAgICAgICBMb2dTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgWG1wcENoYXRDb25uZWN0aW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIFhtcHBDbGllbnRGYWN0b3J5U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBDSEFUX1NFUlZJQ0VfVE9LRU4sXHJcbiAgICAgICAgICAgICAgICAgICAgZGVwczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBYbXBwQ2hhdENvbm5lY3Rpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDaGF0TWVzc2FnZUxpc3RSZWdpc3RyeVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRhY3RGYWN0b3J5U2VydmljZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgSHR0cENsaWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nU2VydmljZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgTmdab25lLFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlRmFjdG9yeTogTmd4Q2hhdE1vZHVsZS54bXBwQ2hhdEFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIHhtcHBDaGF0QWRhcHRlcihcclxuICAgICAgICBjaGF0Q29ubmVjdGlvblNlcnZpY2U6IFhtcHBDaGF0Q29ubmVjdGlvblNlcnZpY2UsXHJcbiAgICAgICAgY2hhdE1lc3NhZ2VMaXN0UmVnaXN0cnlTZXJ2aWNlOiBDaGF0TWVzc2FnZUxpc3RSZWdpc3RyeVNlcnZpY2UsXHJcbiAgICAgICAgY29udGFjdEZhY3Rvcnk6IENvbnRhY3RGYWN0b3J5U2VydmljZSxcclxuICAgICAgICBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxyXG4gICAgICAgIGxvZ1NlcnZpY2U6IExvZ1NlcnZpY2UsXHJcbiAgICAgICAgbmdab25lOiBOZ1pvbmUsXHJcbiAgICApOiBYbXBwQ2hhdEFkYXB0ZXIge1xyXG4gICAgICAgIGNvbnN0IHhtcHBDaGF0QWRhcHRlciA9IG5ldyBYbXBwQ2hhdEFkYXB0ZXIoY2hhdENvbm5lY3Rpb25TZXJ2aWNlLCBsb2dTZXJ2aWNlLCBjb250YWN0RmFjdG9yeSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNlcnZpY2VEaXNjb3ZlcnlQbHVnaW4gPSBuZXcgU2VydmljZURpc2NvdmVyeVBsdWdpbih4bXBwQ2hhdEFkYXB0ZXIpO1xyXG4gICAgICAgIGNvbnN0IHB1Ymxpc2hTdWJzY3JpYmVQbHVnaW4gPSBuZXcgUHVibGlzaFN1YnNjcmliZVBsdWdpbih4bXBwQ2hhdEFkYXB0ZXIsIHNlcnZpY2VEaXNjb3ZlcnlQbHVnaW4pO1xyXG4gICAgICAgIGNvbnN0IGVudGl0eVRpbWVQbHVnaW4gPSBuZXcgRW50aXR5VGltZVBsdWdpbih4bXBwQ2hhdEFkYXB0ZXIsIHNlcnZpY2VEaXNjb3ZlcnlQbHVnaW4sIGxvZ1NlcnZpY2UpO1xyXG4gICAgICAgIGNvbnN0IG11bHRpVXNlckNoYXRQbHVnaW4gPSBuZXcgTXVsdGlVc2VyQ2hhdFBsdWdpbih4bXBwQ2hhdEFkYXB0ZXIsIGxvZ1NlcnZpY2UsIHNlcnZpY2VEaXNjb3ZlcnlQbHVnaW4pO1xyXG4gICAgICAgIGNvbnN0IHVucmVhZE1lc3NhZ2VDb3VudFBsdWdpbiA9IG5ldyBVbnJlYWRNZXNzYWdlQ291bnRQbHVnaW4oXHJcbiAgICAgICAgICAgIHhtcHBDaGF0QWRhcHRlciwgY2hhdE1lc3NhZ2VMaXN0UmVnaXN0cnlTZXJ2aWNlLCBwdWJsaXNoU3Vic2NyaWJlUGx1Z2luLCBlbnRpdHlUaW1lUGx1Z2luLCBtdWx0aVVzZXJDaGF0UGx1Z2luKTtcclxuICAgICAgICBjb25zdCBtZXNzYWdlUGx1Z2luID0gbmV3IE1lc3NhZ2VQbHVnaW4oeG1wcENoYXRBZGFwdGVyLCBsb2dTZXJ2aWNlKTtcclxuXHJcbiAgICAgICAgeG1wcENoYXRBZGFwdGVyLmFkZFBsdWdpbnMoW1xyXG4gICAgICAgICAgICBuZXcgQm9va21hcmtQbHVnaW4ocHVibGlzaFN1YnNjcmliZVBsdWdpbiksXHJcbiAgICAgICAgICAgIG5ldyBNZXNzYWdlQXJjaGl2ZVBsdWdpbih4bXBwQ2hhdEFkYXB0ZXIsIHNlcnZpY2VEaXNjb3ZlcnlQbHVnaW4sIG11bHRpVXNlckNoYXRQbHVnaW4sIGxvZ1NlcnZpY2UsIG1lc3NhZ2VQbHVnaW4pLFxyXG4gICAgICAgICAgICBtZXNzYWdlUGx1Z2luLFxyXG4gICAgICAgICAgICBuZXcgTWVzc2FnZVV1aWRQbHVnaW4oKSxcclxuICAgICAgICAgICAgbXVsdGlVc2VyQ2hhdFBsdWdpbixcclxuICAgICAgICAgICAgcHVibGlzaFN1YnNjcmliZVBsdWdpbixcclxuICAgICAgICAgICAgbmV3IFJvc3RlclBsdWdpbih4bXBwQ2hhdEFkYXB0ZXIsIGxvZ1NlcnZpY2UpLFxyXG4gICAgICAgICAgICBzZXJ2aWNlRGlzY292ZXJ5UGx1Z2luLFxyXG4gICAgICAgICAgICBuZXcgUHVzaFBsdWdpbih4bXBwQ2hhdEFkYXB0ZXIsIHNlcnZpY2VEaXNjb3ZlcnlQbHVnaW4pLFxyXG4gICAgICAgICAgICBuZXcgUGluZ1BsdWdpbih4bXBwQ2hhdEFkYXB0ZXIsIGxvZ1NlcnZpY2UsIG5nWm9uZSksXHJcbiAgICAgICAgICAgIG5ldyBSZWdpc3RyYXRpb25QbHVnaW4obG9nU2VydmljZSwgbmdab25lKSxcclxuICAgICAgICAgICAgbmV3IE1lc3NhZ2VDYXJib25zUGx1Z2luKHhtcHBDaGF0QWRhcHRlciksXHJcbiAgICAgICAgICAgIHVucmVhZE1lc3NhZ2VDb3VudFBsdWdpbixcclxuICAgICAgICAgICAgbmV3IEh0dHBGaWxlVXBsb2FkUGx1Z2luKGh0dHBDbGllbnQsIHNlcnZpY2VEaXNjb3ZlcnlQbHVnaW4sIHhtcHBDaGF0QWRhcHRlciwgbG9nU2VydmljZSksXHJcbiAgICAgICAgICAgIG5ldyBNZXNzYWdlU3RhdGVQbHVnaW4ocHVibGlzaFN1YnNjcmliZVBsdWdpbiwgeG1wcENoYXRBZGFwdGVyLCBjaGF0TWVzc2FnZUxpc3RSZWdpc3RyeVNlcnZpY2UsIGxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBlbnRpdHlUaW1lUGx1Z2luKSxcclxuICAgICAgICAgICAgbmV3IE11Y1N1YlBsdWdpbih4bXBwQ2hhdEFkYXB0ZXIsIHNlcnZpY2VEaXNjb3ZlcnlQbHVnaW4pLFxyXG4gICAgICAgICAgICBuZXcgQmxvY2tQbHVnaW4oeG1wcENoYXRBZGFwdGVyLCBzZXJ2aWNlRGlzY292ZXJ5UGx1Z2luKSxcclxuICAgICAgICAgICAgZW50aXR5VGltZVBsdWdpbixcclxuICAgICAgICBdKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHhtcHBDaGF0QWRhcHRlcjtcclxuICAgIH1cclxuXHJcbn1cclxuIl19