@kolektor/nucleus-notifications 0.0.8-pre.5352 → 0.0.9-pre.5702
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/{esm2015/kolektor-nucleus-notifications.js → esm2020/kolektor-nucleus-notifications.mjs} +0 -0
- package/{esm2015/lib/models.js → esm2020/lib/models.mjs} +0 -0
- package/{esm2015/lib/nucleus-notifications.module.js → esm2020/lib/nucleus-notifications.module.mjs} +4 -4
- package/esm2020/lib/nucleus-notifications.service.mjs +356 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/fesm2015/{kolektor-nucleus-notifications.js → kolektor-nucleus-notifications.mjs} +10 -11
- package/fesm2015/kolektor-nucleus-notifications.mjs.map +1 -0
- package/fesm2020/kolektor-nucleus-notifications.mjs +406 -0
- package/fesm2020/kolektor-nucleus-notifications.mjs.map +1 -0
- package/package.json +23 -10
- package/bundles/kolektor-nucleus-notifications.umd.js +0 -894
- package/bundles/kolektor-nucleus-notifications.umd.js.map +0 -1
- package/esm2015/lib/nucleus-notifications.service.js +0 -361
- package/fesm2015/kolektor-nucleus-notifications.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kolektor-nucleus-notifications.umd.js","sources":["../../../node_modules/tslib/tslib.es6.js","../../../projects/nucleus-notifications/src/lib/models.ts","../../../projects/nucleus-notifications/src/lib/nucleus-notifications.service.ts","../../../projects/nucleus-notifications/src/lib/nucleus-notifications.module.ts","../../../projects/nucleus-notifications/src/public-api.ts","../../../projects/nucleus-notifications/src/kolektor-nucleus-notifications.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","export class Notification {\r\n public id: string;\r\n public sender: Identity;\r\n public data: NotificationData;\r\n public isRead: boolean;\r\n public dateCreated: Date;\r\n public expirationDate: Date;\r\n}\r\n\r\nexport class Identity {\r\n public subject: string;\r\n public name: string;\r\n public pictureUrl: string;\r\n}\r\n\r\nexport class Recipient {\r\n public attributeName: string;\r\n public directoryName: string;\r\n public attributeValue: string;\r\n}\r\n\r\nexport class NotificationData {\r\n title: string;\r\n message: string;\r\n htmlMessage: string;\r\n preventDismissal: boolean;\r\n deepLink: string;\r\n}\r\n\r\nexport class WebKey {\r\n publicKey: string;\r\n}\r\n\r\nexport class Registration {\r\n id: string;\r\n token: string;\r\n platform: PlatformValue;\r\n}\r\n\r\nexport class RegistrationResult {\r\n id: string;\r\n}\r\n\r\nexport class PayloadData {\r\n notificationId: string;\r\n eventType: NotificationEventType;\r\n}\r\n\r\nexport class NucleusNotificationsConfig {\r\n serverApiUrl: string;\r\n}\r\n\r\nexport class NotificationClick {\r\n id: string;\r\n type: NotificationType;\r\n routerLink?: string;\r\n}\r\n\r\nexport type NotificationEventType = 'new' | 'updated' | 'deleted' | 'deletedAll' | 'updatedAll' | 'newSilent';\r\n\r\nexport type PlatformValue = 'ios' | 'android' | 'web' | 'none';\r\n\r\nexport type NotificationType = 'default' | 'deeplink';\r\n\r\nexport interface ChannelId {\r\n senderId: string;\r\n channelId: string;\r\n}\r\n\r\nexport class UserChannelConfig {\r\n channelId: string;\r\n displayName: string;\r\n isSubscribed: boolean;\r\n subscriptionType: ChannelSubscriptionType;\r\n methods: NotifyMethod[];\r\n allowedMethods: NotifyMethod[];\r\n}\r\n\r\nexport type ChannelSubscriptionType = 'invariant' | 'optIn' | 'optOut';\r\n\r\nexport type NotifyMethod = 'push' | 'email' | 'sms';\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { SwPush } from '@angular/service-worker';\r\nimport { PushNotifications, PushNotificationSchema } from '@capacitor/push-notifications';\r\nimport { NucleusAppService } from '@kolektor/nucleus-common';\r\nimport { Observable, of, Subject } from 'rxjs';\r\nimport {\r\n ChannelId,\r\n Notification,\r\n NotificationClick,\r\n NotificationEventType,\r\n NotificationType,\r\n NucleusNotificationsConfig,\r\n PayloadData,\r\n PlatformValue,\r\n Registration,\r\n RegistrationResult,\r\n UserChannelConfig,\r\n WebKey\r\n} from './models';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NucleusNotificationsService {\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private swPush: SwPush,\r\n private appService: NucleusAppService,\r\n config: NucleusNotificationsConfig\r\n ) {\r\n let url = config.serverApiUrl;\r\n if (!url.endsWith('/')) {\r\n url += '/';\r\n }\r\n this.apiUrl = url;\r\n }\r\n\r\n private apiUrl = null;\r\n private readonly registrationStorageKey = 'NucleusNotificationsRegistrationId';\r\n private readonly notificationsStorageKey = 'NucleusNotificationsLocalCache';\r\n private _platform: PlatformValue;\r\n private _isInitialized = false;\r\n private _newNotifications = new Subject<Notification>();\r\n private _clicksSubject = new Subject<NotificationClick>();\r\n private _stateChangesSubject = new Subject<void>();\r\n\r\n public notifications: Notification[] = [];\r\n\r\n public get unreadCount() {\r\n return this.notifications.filter(x => !x.isRead).length;\r\n }\r\n\r\n public get newNotifications() {\r\n return this._newNotifications.asObservable();\r\n }\r\n\r\n public get clicks() {\r\n return this._clicksSubject.asObservable();\r\n }\r\n public get stateChanges() {\r\n return this._stateChangesSubject.asObservable();\r\n }\r\n\r\n public get isInitialized() {\r\n return this._isInitialized;\r\n }\r\n\r\n public async initialize() {\r\n // make sure app service has finished initializing\r\n await this.appService.init();\r\n\r\n this.loadFromStorage();\r\n\r\n if (this.appService.isNative) {\r\n this._platform = this.appService.deviceInfo.platform as PlatformValue;\r\n await this.registerCapacitorEvents();\r\n } else if (this.swPush.isEnabled) {\r\n this._platform = 'web';\r\n this.registerWebPushEvents();\r\n } else {\r\n console.warn('Nucleus.Notifications: There is no push capability, timer will be used to update notifications');\r\n setInterval(() => {\r\n console.log('Updating notifications...');\r\n this.refresh(true);\r\n }, 5 * 60 * 1000);\r\n }\r\n this._isInitialized = true;\r\n this.refresh();\r\n }\r\n\r\n public register(): Promise<any> {\r\n return new Promise((_resolve, _reject) => {\r\n this.getRegistrationInfo().then((info) => {\r\n this.http.post<RegistrationResult>(this.apiUrl + 'registration', info).subscribe((regResult) => {\r\n window.localStorage.setItem(this.registrationStorageKey, regResult.id);\r\n _resolve(null);\r\n }, error => {\r\n console.log('Nucleus.Notifications: Failed to send notification registration to server.', error);\r\n _reject(error);\r\n });\r\n }).catch((error) => _reject(error));\r\n });\r\n }\r\n\r\n public unregister(): Promise<any> {\r\n return new Promise((_resolve, _reject) => {\r\n this.getRegistrationInfo().then((info) => {\r\n this.http.request<any>('DELETE', this.apiUrl + 'registration', { body: info }).subscribe(() => {\r\n window.localStorage.removeItem(this.registrationStorageKey);\r\n _resolve(null);\r\n }, error => {\r\n console.log('Nucleus.Notifications: Failed to remove registration from server.', error);\r\n _reject(error);\r\n });\r\n }).catch((error) => _reject(error));\r\n });\r\n }\r\n\r\n public refresh(notifyAboutNew = false) {\r\n this.http.get<Notification[]>(this.apiUrl + 'notifications').subscribe(res => {\r\n this.updateNotifications(res, notifyAboutNew);\r\n });\r\n }\r\n\r\n public getNotification(id: string): Observable<Notification> {\r\n const localNotification = this.notifications.find(x => x.id === id);\r\n if (localNotification) {\r\n return of(localNotification);\r\n }\r\n return this.http.get<Notification>(this.apiUrl + 'notifications/' + id);\r\n }\r\n\r\n public readNotification(id: string) {\r\n const n = this.notifications.find(x => x.id === id);\r\n if (n && !n.isRead) {\r\n n.isRead = true;\r\n this.notifyStateChanged();\r\n }\r\n this.http.get(this.apiUrl + 'notifications/read/' + id).subscribe();\r\n }\r\n\r\n public dismissNotification(id: string) {\r\n this.deleteNotificaton(id);\r\n this.http.delete(this.apiUrl + 'notifications/' + id).subscribe();\r\n this.removeDeliveredNotification(id);\r\n }\r\n\r\n public dismissAll() {\r\n this.notifications.splice(0);\r\n this.notifyStateChanged();\r\n this.http.delete(this.apiUrl + 'notifications/all').subscribe();\r\n if (this._platform === 'ios' || this._platform === 'android') {\r\n PushNotifications.removeAllDeliveredNotifications();\r\n } else if (this._platform === 'web') {\r\n // TODO: remove all web push notifications\r\n }\r\n }\r\n\r\n public readAll() {\r\n for (const n of this.notifications) {\r\n n.isRead = true;\r\n }\r\n this.notifyStateChanged();\r\n this.http.get(this.apiUrl + 'notifications/read/all').subscribe();\r\n }\r\n\r\n public getChannelConfig(senderId: string, channelId: string, language: string = null) {\r\n return this.http.get<UserChannelConfig>(this.apiUrl + `settings/channel/${senderId}/${channelId}?language=${language}`);\r\n }\r\n\r\n public getChannelConfigsForSender(senderId: string, channelIds: string[], language: string = null) {\r\n const idsStr = channelIds.map(x => senderId + ',' + x).join(';');\r\n return this.getChannelConfigsInternal(idsStr, language);\r\n }\r\n\r\n public getChannelConfigs(ids: ChannelId[], language: string = null) {\r\n const idsStr = ids.map(x => x.senderId + ',' + x.channelId).join(';');\r\n return this.getChannelConfigsInternal(idsStr, language);\r\n }\r\n\r\n public setChannelConfig(senderId: string, config: UserChannelConfig) {\r\n return this.http.post<void>(`${this.apiUrl}settings/channel/${senderId}`, config);\r\n }\r\n\r\n public setChannelConfigs(configs: UserChannelConfig[]) {\r\n return this.http.post<void>(`${this.apiUrl}settings/channels`, configs);\r\n }\r\n\r\n private getChannelConfigsInternal(ids: string, language: string) {\r\n return this.http.get<UserChannelConfig[]>(`${this.apiUrl}settings/channels?ids=${ids}&language=${language}`);\r\n }\r\n\r\n private updateNotifications(newNotifications: Notification[], notifyAboutNew = false) {\r\n let stateChanged = false;\r\n for (const n of newNotifications) {\r\n const existing = this.notifications.find(x => x.id === n.id);\r\n if (existing) {\r\n if (existing.isRead !== n.isRead) {\r\n existing.isRead = n.isRead;\r\n stateChanged = true;\r\n }\r\n } else {\r\n let i = 0;\r\n while (i < this.notifications.length && n.dateCreated < this.notifications[i].dateCreated) {\r\n i++;\r\n }\r\n this.notifications.splice(i, 0, n);\r\n stateChanged = true;\r\n if (notifyAboutNew) {\r\n this._newNotifications.next(n);\r\n }\r\n }\r\n }\r\n\r\n const now = Date.now();\r\n for (let i = this.notifications.length - 1; i >= 0; i--) {\r\n const n = this.notifications[i];\r\n if (new Date(n.expirationDate).getTime() < now || !newNotifications.find(x => x.id === n.id)) {\r\n this.notifications.splice(i, 1);\r\n stateChanged = true;\r\n }\r\n }\r\n\r\n if (stateChanged) {\r\n this.notifyStateChanged();\r\n }\r\n }\r\n\r\n private saveToStorage() {\r\n const str = JSON.stringify(this.notifications);\r\n window.localStorage.setItem(this.notificationsStorageKey, str);\r\n }\r\n\r\n private loadFromStorage() {\r\n try {\r\n const str = window.localStorage.getItem(this.notificationsStorageKey);\r\n if (str) {\r\n const notifications = JSON.parse(str) as Notification[];\r\n this.notifications = notifications.filter(x => !!x);\r\n // precaution for notification.isRead of undefined error\r\n this.notifyStateChanged(false);\r\n }\r\n } catch { }\r\n }\r\n\r\n private handleNotificationEvent(id: string, eventType: NotificationEventType) {\r\n if (eventType.startsWith('new') || eventType === 'updated') { // we are handling new and newSilent\r\n this.getNotification(id).subscribe(n => {\r\n if (eventType.startsWith('new') && !n.isRead) {\r\n this._newNotifications.next(n);\r\n }\r\n const existing = this.notifications.find(x => x.id === n.id);\r\n if (existing) {\r\n existing.isRead = n.isRead;\r\n } else {\r\n this.notifications.splice(0, 0, n);\r\n }\r\n this.notifyStateChanged();\r\n });\r\n } else if (eventType === 'deleted') {\r\n this.deleteNotificaton(id);\r\n } else {\r\n this.refresh();\r\n }\r\n }\r\n\r\n private deleteNotificaton(id: string) {\r\n const i = this.notifications.findIndex(x => x.id === id);\r\n if (i >= 0) {\r\n this.notifications.splice(i, 1);\r\n this.notifyStateChanged();\r\n }\r\n }\r\n\r\n private notifyStateChanged(persistState = true) {\r\n if (persistState) {\r\n this.saveToStorage();\r\n }\r\n this._stateChangesSubject.next();\r\n }\r\n\r\n private handleNotificationAction(notificationAction: string) {\r\n const arr = notificationAction.split(':');\r\n const notificationClick: NotificationClick = {\r\n id: arr[0],\r\n type: arr[1] as NotificationType,\r\n routerLink: arr[2]\r\n };\r\n\r\n const validNotificationClickTypes = ['default', 'deeplink'];\r\n if (validNotificationClickTypes.includes(notificationClick.type)) {\r\n this._clicksSubject.next(notificationClick);\r\n } else {\r\n console.error(`Nucleus.Notifications: Unknown notification action: '${notificationAction}'.`);\r\n }\r\n }\r\n\r\n private removeDeliveredNotification(id: string) {\r\n if (this._platform === 'ios' || this._platform === 'android') {\r\n PushNotifications.getDeliveredNotifications().then(list => {\r\n const toRemove = list.notifications.filter(n => {\r\n const data = this.getNotificationPayloadData(n);\r\n return (data.notificationId === id);\r\n });\r\n\r\n // TODO: On Android this does not currently work because notificationID is not set.\r\n // This my solve the issue: https://github.com/ionic-team/capacitor/pull/3523\r\n PushNotifications.removeDeliveredNotifications({\r\n notifications: toRemove\r\n });\r\n });\r\n } else if (this._platform === 'web') {\r\n // TODO: remove web push notification\r\n }\r\n }\r\n\r\n private getNotificationPayloadData(pushNotification: PushNotificationSchema): PayloadData {\r\n return (this._platform === 'ios') ? pushNotification.data.data : pushNotification.data;\r\n }\r\n\r\n private async registerCapacitorEvents() {\r\n await PushNotifications.addListener('pushNotificationReceived', n => {\r\n const data = this.getNotificationPayloadData(n);\r\n console.log('Nucleus.Notifications: Received capacitor push event: ' + data.eventType, n);\r\n this.handleNotificationEvent(data.notificationId, data.eventType);\r\n });\r\n\r\n await PushNotifications.addListener('pushNotificationActionPerformed', a => {\r\n let action = (a as any).notification.data.notificationAction;\r\n if (this._platform === 'ios') {\r\n action = (a as any).notification.data.data.notificationAction;\r\n }\r\n console.log('Nucleus.Notifications: Received capacitor action event', action);\r\n this.handleNotificationAction(action);\r\n });\r\n }\r\n\r\n private registerWebPushEvents() {\r\n this.swPush.messages.subscribe((n) => {\r\n const data: PayloadData = (n as any).data;\r\n console.log('Nucleus.Notifications: Received WebPush event: ' + data.eventType, n);\r\n this.handleNotificationEvent(data.notificationId, data.eventType);\r\n });\r\n\r\n this.swPush.notificationClicks.subscribe((action) => {\r\n console.log('Nucleus.Notifications: Received WebPush action event', action);\r\n const tag = action.notification.tag;\r\n this.handleNotificationAction(tag);\r\n });\r\n }\r\n\r\n private getRegistrationInfo(): Promise<Registration> {\r\n return new Promise((_resolve, _reject) => {\r\n const registrationId = window.localStorage.getItem(this.registrationStorageKey);\r\n if (this._platform === 'android' || this._platform === 'ios') {\r\n // capacitor platform\r\n const listener = PushNotifications.addListener('registration', token => {\r\n listener.remove();\r\n _resolve({ id: registrationId, token: token.value, platform: this._platform });\r\n });\r\n PushNotifications.register().catch(error => _reject('Could not register for notifications:' + error));\r\n } else if (this._platform === 'web') {\r\n // Web Push API\r\n this.http.get<WebKey>(this.apiUrl + 'registration/webkey').subscribe(key => {\r\n this.getWebPushSubscription(key.publicKey).then(subscription => {\r\n const t = JSON.stringify(subscription.toJSON());\r\n _resolve({ id: registrationId, token: t, platform: 'web' });\r\n });\r\n }, error => _reject(error));\r\n } else {\r\n _reject(`Nucleus.Notifications: Platform is not supported`);\r\n }\r\n });\r\n }\r\n\r\n private getWebPushSubscription(publicKey: string): Promise<PushSubscription> {\r\n return new Promise((_resolve, _reject) => {\r\n this.swPush.subscription.subscribe(subscription => {\r\n if (subscription != null) {\r\n _resolve(subscription);\r\n } else {\r\n this.swPush.requestSubscription({ serverPublicKey: publicKey }).then(s => _resolve(s)).catch(e => _reject(e));\r\n }\r\n }, error => {\r\n console.error('Nucleus.Notifications: Cannot get web push subscription', error);\r\n _reject(error);\r\n });\r\n });\r\n }\r\n}\r\n","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { NucleusNotificationsConfig } from './models';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n ],\r\n exports: []\r\n})\r\nexport class NucleusNotificationsModule {\r\n\r\n static forRoot(config: NucleusNotificationsConfig): ModuleWithProviders<NucleusNotificationsModule> {\r\n return {\r\n ngModule: NucleusNotificationsModule,\r\n providers: [\r\n { provide: NucleusNotificationsConfig, useValue: config }\r\n ]\r\n };\r\n }\r\n}\r\n","/*\r\n * Public API Surface of nucleus-notifications\r\n */\r\n\r\nexport * from './lib/nucleus-notifications.service';\r\nexport * from './lib/nucleus-notifications.module';\r\nexport * from './lib/models';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Subject","of","PushNotifications","Injectable","NgModule"],"mappings":"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"}
|
|
@@ -1,361 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { HttpClient } from '@angular/common/http';
|
|
3
|
-
import { Injectable } from '@angular/core';
|
|
4
|
-
import { SwPush } from '@angular/service-worker';
|
|
5
|
-
import { PushNotifications } from '@capacitor/push-notifications';
|
|
6
|
-
import { NucleusAppService } from '@kolektor/nucleus-common';
|
|
7
|
-
import { of, Subject } from 'rxjs';
|
|
8
|
-
import { NucleusNotificationsConfig } from './models';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "@angular/common/http";
|
|
11
|
-
import * as i2 from "@angular/service-worker";
|
|
12
|
-
import * as i3 from "@kolektor/nucleus-common";
|
|
13
|
-
import * as i4 from "./models";
|
|
14
|
-
export class NucleusNotificationsService {
|
|
15
|
-
constructor(http, swPush, appService, config) {
|
|
16
|
-
this.http = http;
|
|
17
|
-
this.swPush = swPush;
|
|
18
|
-
this.appService = appService;
|
|
19
|
-
this.apiUrl = null;
|
|
20
|
-
this.registrationStorageKey = 'NucleusNotificationsRegistrationId';
|
|
21
|
-
this.notificationsStorageKey = 'NucleusNotificationsLocalCache';
|
|
22
|
-
this._isInitialized = false;
|
|
23
|
-
this._newNotifications = new Subject();
|
|
24
|
-
this._clicksSubject = new Subject();
|
|
25
|
-
this._stateChangesSubject = new Subject();
|
|
26
|
-
this.notifications = [];
|
|
27
|
-
let url = config.serverApiUrl;
|
|
28
|
-
if (!url.endsWith('/')) {
|
|
29
|
-
url += '/';
|
|
30
|
-
}
|
|
31
|
-
this.apiUrl = url;
|
|
32
|
-
}
|
|
33
|
-
get unreadCount() {
|
|
34
|
-
return this.notifications.filter(x => !x.isRead).length;
|
|
35
|
-
}
|
|
36
|
-
get newNotifications() {
|
|
37
|
-
return this._newNotifications.asObservable();
|
|
38
|
-
}
|
|
39
|
-
get clicks() {
|
|
40
|
-
return this._clicksSubject.asObservable();
|
|
41
|
-
}
|
|
42
|
-
get stateChanges() {
|
|
43
|
-
return this._stateChangesSubject.asObservable();
|
|
44
|
-
}
|
|
45
|
-
get isInitialized() {
|
|
46
|
-
return this._isInitialized;
|
|
47
|
-
}
|
|
48
|
-
initialize() {
|
|
49
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
50
|
-
// make sure app service has finished initializing
|
|
51
|
-
yield this.appService.init();
|
|
52
|
-
this.loadFromStorage();
|
|
53
|
-
if (this.appService.isNative) {
|
|
54
|
-
this._platform = this.appService.deviceInfo.platform;
|
|
55
|
-
yield this.registerCapacitorEvents();
|
|
56
|
-
}
|
|
57
|
-
else if (this.swPush.isEnabled) {
|
|
58
|
-
this._platform = 'web';
|
|
59
|
-
this.registerWebPushEvents();
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
console.warn('Nucleus.Notifications: There is no push capability, timer will be used to update notifications');
|
|
63
|
-
setInterval(() => {
|
|
64
|
-
console.log('Updating notifications...');
|
|
65
|
-
this.refresh(true);
|
|
66
|
-
}, 5 * 60 * 1000);
|
|
67
|
-
}
|
|
68
|
-
this._isInitialized = true;
|
|
69
|
-
this.refresh();
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
register() {
|
|
73
|
-
return new Promise((_resolve, _reject) => {
|
|
74
|
-
this.getRegistrationInfo().then((info) => {
|
|
75
|
-
this.http.post(this.apiUrl + 'registration', info).subscribe((regResult) => {
|
|
76
|
-
window.localStorage.setItem(this.registrationStorageKey, regResult.id);
|
|
77
|
-
_resolve(null);
|
|
78
|
-
}, error => {
|
|
79
|
-
console.log('Nucleus.Notifications: Failed to send notification registration to server.', error);
|
|
80
|
-
_reject(error);
|
|
81
|
-
});
|
|
82
|
-
}).catch((error) => _reject(error));
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
unregister() {
|
|
86
|
-
return new Promise((_resolve, _reject) => {
|
|
87
|
-
this.getRegistrationInfo().then((info) => {
|
|
88
|
-
this.http.request('DELETE', this.apiUrl + 'registration', { body: info }).subscribe(() => {
|
|
89
|
-
window.localStorage.removeItem(this.registrationStorageKey);
|
|
90
|
-
_resolve(null);
|
|
91
|
-
}, error => {
|
|
92
|
-
console.log('Nucleus.Notifications: Failed to remove registration from server.', error);
|
|
93
|
-
_reject(error);
|
|
94
|
-
});
|
|
95
|
-
}).catch((error) => _reject(error));
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
refresh(notifyAboutNew = false) {
|
|
99
|
-
this.http.get(this.apiUrl + 'notifications').subscribe(res => {
|
|
100
|
-
this.updateNotifications(res, notifyAboutNew);
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
getNotification(id) {
|
|
104
|
-
const localNotification = this.notifications.find(x => x.id === id);
|
|
105
|
-
if (localNotification) {
|
|
106
|
-
return of(localNotification);
|
|
107
|
-
}
|
|
108
|
-
return this.http.get(this.apiUrl + 'notifications/' + id);
|
|
109
|
-
}
|
|
110
|
-
readNotification(id) {
|
|
111
|
-
const n = this.notifications.find(x => x.id === id);
|
|
112
|
-
if (n && !n.isRead) {
|
|
113
|
-
n.isRead = true;
|
|
114
|
-
this.notifyStateChanged();
|
|
115
|
-
}
|
|
116
|
-
this.http.get(this.apiUrl + 'notifications/read/' + id).subscribe();
|
|
117
|
-
}
|
|
118
|
-
dismissNotification(id) {
|
|
119
|
-
this.deleteNotificaton(id);
|
|
120
|
-
this.http.delete(this.apiUrl + 'notifications/' + id).subscribe();
|
|
121
|
-
this.removeDeliveredNotification(id);
|
|
122
|
-
}
|
|
123
|
-
dismissAll() {
|
|
124
|
-
this.notifications.splice(0);
|
|
125
|
-
this.notifyStateChanged();
|
|
126
|
-
this.http.delete(this.apiUrl + 'notifications/all').subscribe();
|
|
127
|
-
if (this._platform === 'ios' || this._platform === 'android') {
|
|
128
|
-
PushNotifications.removeAllDeliveredNotifications();
|
|
129
|
-
}
|
|
130
|
-
else if (this._platform === 'web') {
|
|
131
|
-
// TODO: remove all web push notifications
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
readAll() {
|
|
135
|
-
for (const n of this.notifications) {
|
|
136
|
-
n.isRead = true;
|
|
137
|
-
}
|
|
138
|
-
this.notifyStateChanged();
|
|
139
|
-
this.http.get(this.apiUrl + 'notifications/read/all').subscribe();
|
|
140
|
-
}
|
|
141
|
-
getChannelConfig(senderId, channelId, language = null) {
|
|
142
|
-
return this.http.get(this.apiUrl + `settings/channel/${senderId}/${channelId}?language=${language}`);
|
|
143
|
-
}
|
|
144
|
-
getChannelConfigsForSender(senderId, channelIds, language = null) {
|
|
145
|
-
const idsStr = channelIds.map(x => senderId + ',' + x).join(';');
|
|
146
|
-
return this.getChannelConfigsInternal(idsStr, language);
|
|
147
|
-
}
|
|
148
|
-
getChannelConfigs(ids, language = null) {
|
|
149
|
-
const idsStr = ids.map(x => x.senderId + ',' + x.channelId).join(';');
|
|
150
|
-
return this.getChannelConfigsInternal(idsStr, language);
|
|
151
|
-
}
|
|
152
|
-
setChannelConfig(senderId, config) {
|
|
153
|
-
return this.http.post(`${this.apiUrl}settings/channel/${senderId}`, config);
|
|
154
|
-
}
|
|
155
|
-
setChannelConfigs(configs) {
|
|
156
|
-
return this.http.post(`${this.apiUrl}settings/channels`, configs);
|
|
157
|
-
}
|
|
158
|
-
getChannelConfigsInternal(ids, language) {
|
|
159
|
-
return this.http.get(`${this.apiUrl}settings/channels?ids=${ids}&language=${language}`);
|
|
160
|
-
}
|
|
161
|
-
updateNotifications(newNotifications, notifyAboutNew = false) {
|
|
162
|
-
let stateChanged = false;
|
|
163
|
-
for (const n of newNotifications) {
|
|
164
|
-
const existing = this.notifications.find(x => x.id === n.id);
|
|
165
|
-
if (existing) {
|
|
166
|
-
if (existing.isRead !== n.isRead) {
|
|
167
|
-
existing.isRead = n.isRead;
|
|
168
|
-
stateChanged = true;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
else {
|
|
172
|
-
let i = 0;
|
|
173
|
-
while (i < this.notifications.length && n.dateCreated < this.notifications[i].dateCreated) {
|
|
174
|
-
i++;
|
|
175
|
-
}
|
|
176
|
-
this.notifications.splice(i, 0, n);
|
|
177
|
-
stateChanged = true;
|
|
178
|
-
if (notifyAboutNew) {
|
|
179
|
-
this._newNotifications.next(n);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
const now = Date.now();
|
|
184
|
-
for (let i = this.notifications.length - 1; i >= 0; i--) {
|
|
185
|
-
const n = this.notifications[i];
|
|
186
|
-
if (new Date(n.expirationDate).getTime() < now || !newNotifications.find(x => x.id === n.id)) {
|
|
187
|
-
this.notifications.splice(i, 1);
|
|
188
|
-
stateChanged = true;
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
if (stateChanged) {
|
|
192
|
-
this.notifyStateChanged();
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
saveToStorage() {
|
|
196
|
-
const str = JSON.stringify(this.notifications);
|
|
197
|
-
window.localStorage.setItem(this.notificationsStorageKey, str);
|
|
198
|
-
}
|
|
199
|
-
loadFromStorage() {
|
|
200
|
-
try {
|
|
201
|
-
const str = window.localStorage.getItem(this.notificationsStorageKey);
|
|
202
|
-
if (str) {
|
|
203
|
-
const notifications = JSON.parse(str);
|
|
204
|
-
this.notifications = notifications.filter(x => !!x);
|
|
205
|
-
// precaution for notification.isRead of undefined error
|
|
206
|
-
this.notifyStateChanged(false);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
catch (_a) { }
|
|
210
|
-
}
|
|
211
|
-
handleNotificationEvent(id, eventType) {
|
|
212
|
-
if (eventType.startsWith('new') || eventType === 'updated') { // we are handling new and newSilent
|
|
213
|
-
this.getNotification(id).subscribe(n => {
|
|
214
|
-
if (eventType.startsWith('new') && !n.isRead) {
|
|
215
|
-
this._newNotifications.next(n);
|
|
216
|
-
}
|
|
217
|
-
const existing = this.notifications.find(x => x.id === n.id);
|
|
218
|
-
if (existing) {
|
|
219
|
-
existing.isRead = n.isRead;
|
|
220
|
-
}
|
|
221
|
-
else {
|
|
222
|
-
this.notifications.splice(0, 0, n);
|
|
223
|
-
}
|
|
224
|
-
this.notifyStateChanged();
|
|
225
|
-
});
|
|
226
|
-
}
|
|
227
|
-
else if (eventType === 'deleted') {
|
|
228
|
-
this.deleteNotificaton(id);
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
this.refresh();
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
deleteNotificaton(id) {
|
|
235
|
-
const i = this.notifications.findIndex(x => x.id === id);
|
|
236
|
-
if (i >= 0) {
|
|
237
|
-
this.notifications.splice(i, 1);
|
|
238
|
-
this.notifyStateChanged();
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
notifyStateChanged(persistState = true) {
|
|
242
|
-
if (persistState) {
|
|
243
|
-
this.saveToStorage();
|
|
244
|
-
}
|
|
245
|
-
this._stateChangesSubject.next();
|
|
246
|
-
}
|
|
247
|
-
handleNotificationAction(notificationAction) {
|
|
248
|
-
const arr = notificationAction.split(':');
|
|
249
|
-
const notificationClick = {
|
|
250
|
-
id: arr[0],
|
|
251
|
-
type: arr[1],
|
|
252
|
-
routerLink: arr[2]
|
|
253
|
-
};
|
|
254
|
-
const validNotificationClickTypes = ['default', 'deeplink'];
|
|
255
|
-
if (validNotificationClickTypes.includes(notificationClick.type)) {
|
|
256
|
-
this._clicksSubject.next(notificationClick);
|
|
257
|
-
}
|
|
258
|
-
else {
|
|
259
|
-
console.error(`Nucleus.Notifications: Unknown notification action: '${notificationAction}'.`);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
removeDeliveredNotification(id) {
|
|
263
|
-
if (this._platform === 'ios' || this._platform === 'android') {
|
|
264
|
-
PushNotifications.getDeliveredNotifications().then(list => {
|
|
265
|
-
const toRemove = list.notifications.filter(n => {
|
|
266
|
-
const data = this.getNotificationPayloadData(n);
|
|
267
|
-
return (data.notificationId === id);
|
|
268
|
-
});
|
|
269
|
-
// TODO: On Android this does not currently work because notificationID is not set.
|
|
270
|
-
// This my solve the issue: https://github.com/ionic-team/capacitor/pull/3523
|
|
271
|
-
PushNotifications.removeDeliveredNotifications({
|
|
272
|
-
notifications: toRemove
|
|
273
|
-
});
|
|
274
|
-
});
|
|
275
|
-
}
|
|
276
|
-
else if (this._platform === 'web') {
|
|
277
|
-
// TODO: remove web push notification
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
getNotificationPayloadData(pushNotification) {
|
|
281
|
-
return (this._platform === 'ios') ? pushNotification.data.data : pushNotification.data;
|
|
282
|
-
}
|
|
283
|
-
registerCapacitorEvents() {
|
|
284
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
285
|
-
yield PushNotifications.addListener('pushNotificationReceived', n => {
|
|
286
|
-
const data = this.getNotificationPayloadData(n);
|
|
287
|
-
console.log('Nucleus.Notifications: Received capacitor push event: ' + data.eventType, n);
|
|
288
|
-
this.handleNotificationEvent(data.notificationId, data.eventType);
|
|
289
|
-
});
|
|
290
|
-
yield PushNotifications.addListener('pushNotificationActionPerformed', a => {
|
|
291
|
-
let action = a.notification.data.notificationAction;
|
|
292
|
-
if (this._platform === 'ios') {
|
|
293
|
-
action = a.notification.data.data.notificationAction;
|
|
294
|
-
}
|
|
295
|
-
console.log('Nucleus.Notifications: Received capacitor action event', action);
|
|
296
|
-
this.handleNotificationAction(action);
|
|
297
|
-
});
|
|
298
|
-
});
|
|
299
|
-
}
|
|
300
|
-
registerWebPushEvents() {
|
|
301
|
-
this.swPush.messages.subscribe((n) => {
|
|
302
|
-
const data = n.data;
|
|
303
|
-
console.log('Nucleus.Notifications: Received WebPush event: ' + data.eventType, n);
|
|
304
|
-
this.handleNotificationEvent(data.notificationId, data.eventType);
|
|
305
|
-
});
|
|
306
|
-
this.swPush.notificationClicks.subscribe((action) => {
|
|
307
|
-
console.log('Nucleus.Notifications: Received WebPush action event', action);
|
|
308
|
-
const tag = action.notification.tag;
|
|
309
|
-
this.handleNotificationAction(tag);
|
|
310
|
-
});
|
|
311
|
-
}
|
|
312
|
-
getRegistrationInfo() {
|
|
313
|
-
return new Promise((_resolve, _reject) => {
|
|
314
|
-
const registrationId = window.localStorage.getItem(this.registrationStorageKey);
|
|
315
|
-
if (this._platform === 'android' || this._platform === 'ios') {
|
|
316
|
-
// capacitor platform
|
|
317
|
-
const listener = PushNotifications.addListener('registration', token => {
|
|
318
|
-
listener.remove();
|
|
319
|
-
_resolve({ id: registrationId, token: token.value, platform: this._platform });
|
|
320
|
-
});
|
|
321
|
-
PushNotifications.register().catch(error => _reject('Could not register for notifications:' + error));
|
|
322
|
-
}
|
|
323
|
-
else if (this._platform === 'web') {
|
|
324
|
-
// Web Push API
|
|
325
|
-
this.http.get(this.apiUrl + 'registration/webkey').subscribe(key => {
|
|
326
|
-
this.getWebPushSubscription(key.publicKey).then(subscription => {
|
|
327
|
-
const t = JSON.stringify(subscription.toJSON());
|
|
328
|
-
_resolve({ id: registrationId, token: t, platform: 'web' });
|
|
329
|
-
});
|
|
330
|
-
}, error => _reject(error));
|
|
331
|
-
}
|
|
332
|
-
else {
|
|
333
|
-
_reject(`Nucleus.Notifications: Platform is not supported`);
|
|
334
|
-
}
|
|
335
|
-
});
|
|
336
|
-
}
|
|
337
|
-
getWebPushSubscription(publicKey) {
|
|
338
|
-
return new Promise((_resolve, _reject) => {
|
|
339
|
-
this.swPush.subscription.subscribe(subscription => {
|
|
340
|
-
if (subscription != null) {
|
|
341
|
-
_resolve(subscription);
|
|
342
|
-
}
|
|
343
|
-
else {
|
|
344
|
-
this.swPush.requestSubscription({ serverPublicKey: publicKey }).then(s => _resolve(s)).catch(e => _reject(e));
|
|
345
|
-
}
|
|
346
|
-
}, error => {
|
|
347
|
-
console.error('Nucleus.Notifications: Cannot get web push subscription', error);
|
|
348
|
-
_reject(error);
|
|
349
|
-
});
|
|
350
|
-
});
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
NucleusNotificationsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.3", ngImport: i0, type: NucleusNotificationsService, deps: [{ token: i1.HttpClient }, { token: i2.SwPush }, { token: i3.NucleusAppService }, { token: i4.NucleusNotificationsConfig }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
354
|
-
NucleusNotificationsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.3", ngImport: i0, type: NucleusNotificationsService, providedIn: 'root' });
|
|
355
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.3", ngImport: i0, type: NucleusNotificationsService, decorators: [{
|
|
356
|
-
type: Injectable,
|
|
357
|
-
args: [{
|
|
358
|
-
providedIn: 'root'
|
|
359
|
-
}]
|
|
360
|
-
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.SwPush }, { type: i3.NucleusAppService }, { type: i4.NucleusNotificationsConfig }]; } });
|
|
361
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVjbGV1cy1ub3RpZmljYXRpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9udWNsZXVzLW5vdGlmaWNhdGlvbnMvc3JjL2xpYi9udWNsZXVzLW5vdGlmaWNhdGlvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBMEIsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBTUwsMEJBQTBCLEVBTzNCLE1BQU0sVUFBVSxDQUFDOzs7Ozs7QUFLbEIsTUFBTSxPQUFPLDJCQUEyQjtJQUV0QyxZQUNVLElBQWdCLEVBQ2hCLE1BQWMsRUFDZCxVQUE2QixFQUNyQyxNQUFrQztRQUgxQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQVUvQixXQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ0wsMkJBQXNCLEdBQUcsb0NBQW9DLENBQUM7UUFDOUQsNEJBQXVCLEdBQUcsZ0NBQWdDLENBQUM7UUFFcEUsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsc0JBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQWdCLENBQUM7UUFDaEQsbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBcUIsQ0FBQztRQUNsRCx5QkFBb0IsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRTVDLGtCQUFh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QUFrRCxDQUFDLENBQUM7YUFDN0Q7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxTQUFpQjtRQUM5QyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDaEQsSUFBSSxZQUFZLElBQUksSUFBSSxFQUFFO29CQUN4QixRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7aUJBQ3hCO3FCQUFNO29CQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDL0c7WUFDSCxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ1QsT0FBTyxDQUFDLEtBQUssQ0FBQyx5REFBeUQsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDaEYsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzt3SEE5V1UsMkJBQTJCOzRIQUEzQiwyQkFBMkIsY0FGMUIsTUFBTTsyRkFFUCwyQkFBMkI7a0JBSHZDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTd1B1c2ggfSBmcm9tICdAYW5ndWxhci9zZXJ2aWNlLXdvcmtlcic7XHJcbmltcG9ydCB7IFB1c2hOb3RpZmljYXRpb25zLCBQdXNoTm90aWZpY2F0aW9uU2NoZW1hIH0gZnJvbSAnQGNhcGFjaXRvci9wdXNoLW5vdGlmaWNhdGlvbnMnO1xyXG5pbXBvcnQgeyBOdWNsZXVzQXBwU2VydmljZSB9IGZyb20gJ0Brb2xla3Rvci9udWNsZXVzLWNvbW1vbic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgQ2hhbm5lbElkLFxyXG4gIE5vdGlmaWNhdGlvbixcclxuICBOb3RpZmljYXRpb25DbGljayxcclxuICBOb3RpZmljYXRpb25FdmVudFR5cGUsXHJcbiAgTm90aWZpY2F0aW9uVHlwZSxcclxuICBOdWNsZXVzTm90aWZpY2F0aW9uc0NvbmZpZyxcclxuICBQYXlsb2FkRGF0YSxcclxuICBQbGF0Zm9ybVZhbHVlLFxyXG4gIFJlZ2lzdHJhdGlvbixcclxuICBSZWdpc3RyYXRpb25SZXN1bHQsXHJcbiAgVXNlckNoYW5uZWxDb25maWcsXHJcbiAgV2ViS2V5XHJcbn0gZnJvbSAnLi9tb2RlbHMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTnVjbGV1c05vdGlmaWNhdGlvbnNTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIHN3UHVzaDogU3dQdXNoLFxyXG4gICAgcHJpdmF0ZSBhcHBTZXJ2aWNlOiBOdWNsZXVzQXBwU2VydmljZSxcclxuICAgIGNvbmZpZzogTnVjbGV1c05vdGlmaWNhdGlvbnNDb25maWdcclxuICApIHtcclxuICAgIGxldCB1cmwgPSBjb25maWcuc2VydmVyQXBpVXJsO1xyXG4gICAgaWYgKCF1cmwuZW5kc1dpdGgoJy8nKSkge1xyXG4gICAgICB1cmwgKz0gJy8nO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hcGlVcmwgPSB1cmw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwaVVybCA9IG51bGw7XHJcbiAgcHJpdmF0ZSByZWFkb25seSByZWdpc3RyYXRpb25TdG9yYWdlS2V5ID0gJ051Y2xldXNOb3RpZmljYXRpb25zUmVnaXN0cmF0aW9uSWQnO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbm90aWZpY2F0aW9uc1N0b3JhZ2VLZXkgPSAnTnVjbGV1c05vdGlmaWNhdGlvbnNMb2NhbENhY2hlJztcclxuICBwcml2YXRlIF9wbGF0Zm9ybTogUGxhdGZvcm1WYWx1ZTtcclxuICBwcml2YXRlIF9pc0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfbmV3Tm90aWZpY2F0aW9ucyA9IG5ldyBTdWJqZWN0PE5vdGlmaWNhdGlvbj4oKTtcclxuICBwcml2YXRlIF9jbGlja3NTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Tm90aWZpY2F0aW9uQ2xpY2s+KCk7XHJcbiAgcHJpdmF0ZSBfc3RhdGVDaGFuZ2VzU3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIHB1YmxpYyBub3RpZmljYXRpb25zOiBOb3RpZmljYXRpb25bXSA9IFtdO1xyXG5cclxuICBwdWJsaWMgZ2V0IHVucmVhZENvdW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMubm90aWZpY2F0aW9ucy5maWx0ZXIoeCA9PiAheC5pc1JlYWQpLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbmV3Tm90aWZpY2F0aW9ucygpIHtcclxuICAgIHJldHVybiB0aGlzLl9uZXdOb3RpZmljYXRpb25zLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjbGlja3MoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2xpY2tzU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBzdGF0ZUNoYW5nZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhdGVDaGFuZ2VzU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaXNJbml0aWFsaXplZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9pc0luaXRpYWxpemVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGluaXRpYWxpemUoKSB7XHJcbiAgICAvLyBtYWtlIHN1cmUgYXBwIHNlcnZpY2UgaGFzIGZpbmlzaGVkIGluaXRpYWxpemluZ1xyXG4gICAgYXdhaXQgdGhpcy5hcHBTZXJ2aWNlLmluaXQoKTtcclxuXHJcbiAgICB0aGlzLmxvYWRGcm9tU3RvcmFnZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLmFwcFNlcnZpY2UuaXNOYXRpdmUpIHtcclxuICAgICAgdGhpcy5fcGxhdGZvcm0gPSB0aGlzLmFwcFNlcnZpY2UuZGV2aWNlSW5mby5wbGF0Zm9ybSBhcyBQbGF0Zm9ybVZhbHVlO1xyXG4gICAgICBhd2FpdCB0aGlzLnJlZ2lzdGVyQ2FwYWNpdG9yRXZlbnRzKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3dQdXNoLmlzRW5hYmxlZCkge1xyXG4gICAgICB0aGlzLl9wbGF0Zm9ybSA9ICd3ZWInO1xyXG4gICAgICB0aGlzLnJlZ2lzdGVyV2ViUHVzaEV2ZW50cygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKCdOdWNsZXVzLk5vdGlmaWNhdGlvbnM6IFRoZXJlIGlzIG5vIHB1c2ggY2FwYWJpbGl0eSwgdGltZXIgd2lsbCBiZSB1c2VkIHRvIHVwZGF0ZSBub3RpZmljYXRpb25zJyk7XHJcbiAgICAgIHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnVXBkYXRpbmcgbm90aWZpY2F0aW9ucy4uLicpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaCh0cnVlKTtcclxuICAgICAgfSwgNSAqIDYwICogMTAwMCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlZ2lzdGVyKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKF9yZXNvbHZlLCBfcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRoaXMuZ2V0UmVnaXN0cmF0aW9uSW5mbygpLnRoZW4oKGluZm8pID0+IHtcclxuICAgICAgICB0aGlzLmh0dHAucG9zdDxSZWdpc3RyYXRpb25SZXN1bHQ+KHRoaXMuYXBpVXJsICsgJ3JlZ2lzdHJhdGlvbicsIGluZm8pLnN1YnNjcmliZSgocmVnUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5yZWdpc3RyYXRpb25TdG9yYWdlS2V5LCByZWdSZXN1bHQuaWQpO1xyXG4gICAgICAgICAgX3Jlc29sdmUobnVsbCk7XHJcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ051Y2xldXMuTm90aWZpY2F0aW9uczogRmFpbGVkIHRvIHNlbmQgbm90aWZpY2F0aW9uIHJlZ2lzdHJhdGlvbiB0byBzZXJ2ZXIuJywgZXJyb3IpO1xyXG4gICAgICAgICAgX3JlamVjdChlcnJvcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4gX3JlamVjdChlcnJvcikpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdW5yZWdpc3RlcigpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChfcmVzb2x2ZSwgX3JlamVjdCkgPT4ge1xyXG4gICAgICB0aGlzLmdldFJlZ2lzdHJhdGlvbkluZm8oKS50aGVuKChpbmZvKSA9PiB7XHJcbiAgICAgICAgdGhpcy5odHRwLnJlcXVlc3Q8YW55PignREVMRVRFJywgdGhpcy5hcGlVcmwgKyAncmVnaXN0cmF0aW9uJywgeyBib2R5OiBpbmZvIH0pLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5yZWdpc3RyYXRpb25TdG9yYWdlS2V5KTtcclxuICAgICAgICAgIF9yZXNvbHZlKG51bGwpO1xyXG4gICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdOdWNsZXVzLk5vdGlmaWNhdGlvbnM6IEZhaWxlZCB0byByZW1vdmUgcmVnaXN0cmF0aW9uIGZyb20gc2VydmVyLicsIGVycm9yKTtcclxuICAgICAgICAgIF9yZWplY3QoZXJyb3IpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IF9yZWplY3QoZXJyb3IpKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlZnJlc2gobm90aWZ5QWJvdXROZXcgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5odHRwLmdldDxOb3RpZmljYXRpb25bXT4odGhpcy5hcGlVcmwgKyAnbm90aWZpY2F0aW9ucycpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLnVwZGF0ZU5vdGlmaWNhdGlvbnMocmVzLCBub3RpZnlBYm91dE5ldyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXROb3RpZmljYXRpb24oaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uPiB7XHJcbiAgICBjb25zdCBsb2NhbE5vdGlmaWNhdGlvbiA9IHRoaXMubm90aWZpY2F0aW9ucy5maW5kKHggPT4geC5pZCA9PT0gaWQpO1xyXG4gICAgaWYgKGxvY2FsTm90aWZpY2F0aW9uKSB7XHJcbiAgICAgIHJldHVybiBvZihsb2NhbE5vdGlmaWNhdGlvbik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOb3RpZmljYXRpb24+KHRoaXMuYXBpVXJsICsgJ25vdGlmaWNhdGlvbnMvJyArIGlkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWFkTm90aWZpY2F0aW9uKGlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IG4gPSB0aGlzLm5vdGlmaWNhdGlvbnMuZmluZCh4ID0+IHguaWQgPT09IGlkKTtcclxuICAgIGlmIChuICYmICFuLmlzUmVhZCkge1xyXG4gICAgICBuLmlzUmVhZCA9IHRydWU7XHJcbiAgICAgIHRoaXMubm90aWZ5U3RhdGVDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmh0dHAuZ2V0KHRoaXMuYXBpVXJsICsgJ25vdGlmaWNhdGlvbnMvcmVhZC8nICsgaWQpLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRpc21pc3NOb3RpZmljYXRpb24oaWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5kZWxldGVOb3RpZmljYXRvbihpZCk7XHJcbiAgICB0aGlzLmh0dHAuZGVsZXRlKHRoaXMuYXBpVXJsICsgJ25vdGlmaWNhdGlvbnMvJyArIGlkKS5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMucmVtb3ZlRGVsaXZlcmVkTm90aWZpY2F0aW9uKGlkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkaXNtaXNzQWxsKCkge1xyXG4gICAgdGhpcy5ub3RpZmljYXRpb25zLnNwbGljZSgwKTtcclxuICAgIHRoaXMubm90aWZ5U3RhdGVDaGFuZ2VkKCk7XHJcbiAgICB0aGlzLmh0dHAuZGVsZXRlKHRoaXMuYXBpVXJsICsgJ25vdGlmaWNhdGlvbnMvYWxsJykuc3Vic2NyaWJlKCk7XHJcbiAgICBpZiAodGhpcy5fcGxhdGZvcm0gPT09ICdpb3MnIHx8IHRoaXMuX3BsYXRmb3JtID09PSAnYW5kcm9pZCcpIHtcclxuICAgICAgUHVzaE5vdGlmaWNhdGlvbnMucmVtb3ZlQWxsRGVsaXZlcmVkTm90aWZpY2F0aW9ucygpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLl9wbGF0Zm9ybSA9PT0gJ3dlYicpIHtcclxuICAgICAgLy8gVE9ETzogcmVtb3ZlIGFsbCB3ZWIgcHVzaCBub3RpZmljYXRpb25zXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVhZEFsbCgpIHtcclxuICAgIGZvciAoY29uc3QgbiBvZiB0aGlzLm5vdGlmaWNhdGlvbnMpIHtcclxuICAgICAgbi5pc1JlYWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5ub3RpZnlTdGF0ZUNoYW5nZWQoKTtcclxuICAgIHRoaXMuaHR0cC5nZXQodGhpcy5hcGlVcmwgKyAnbm90aWZpY2F0aW9ucy9yZWFkL2FsbCcpLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENoYW5uZWxDb25maWcoc2VuZGVySWQ6IHN0cmluZywgY2hhbm5lbElkOiBzdHJpbmcsIGxhbmd1YWdlOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxVc2VyQ2hhbm5lbENvbmZpZz4odGhpcy5hcGlVcmwgKyBgc2V0dGluZ3MvY2hhbm5lbC8ke3NlbmRlcklkfS8ke2NoYW5uZWxJZH0/bGFuZ3VhZ2U9JHtsYW5ndWFnZX1gKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDaGFubmVsQ29uZmlnc0ZvclNlbmRlcihzZW5kZXJJZDogc3RyaW5nLCBjaGFubmVsSWRzOiBzdHJpbmdbXSwgbGFuZ3VhZ2U6IHN0cmluZyA9IG51bGwpIHtcclxuICAgIGNvbnN0IGlkc1N0ciA9IGNoYW5uZWxJZHMubWFwKHggPT4gc2VuZGVySWQgKyAnLCcgKyB4KS5qb2luKCc7Jyk7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRDaGFubmVsQ29uZmlnc0ludGVybmFsKGlkc1N0ciwgbGFuZ3VhZ2UpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENoYW5uZWxDb25maWdzKGlkczogQ2hhbm5lbElkW10sIGxhbmd1YWdlOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICBjb25zdCBpZHNTdHIgPSBpZHMubWFwKHggPT4geC5zZW5kZXJJZCArICcsJyArIHguY2hhbm5lbElkKS5qb2luKCc7Jyk7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRDaGFubmVsQ29uZmlnc0ludGVybmFsKGlkc1N0ciwgbGFuZ3VhZ2UpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENoYW5uZWxDb25maWcoc2VuZGVySWQ6IHN0cmluZywgY29uZmlnOiBVc2VyQ2hhbm5lbENvbmZpZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PHZvaWQ+KGAke3RoaXMuYXBpVXJsfXNldHRpbmdzL2NoYW5uZWwvJHtzZW5kZXJJZH1gLCBjb25maWcpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENoYW5uZWxDb25maWdzKGNvbmZpZ3M6IFVzZXJDaGFubmVsQ29uZmlnW10pIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDx2b2lkPihgJHt0aGlzLmFwaVVybH1zZXR0aW5ncy9jaGFubmVsc2AsIGNvbmZpZ3MpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDaGFubmVsQ29uZmlnc0ludGVybmFsKGlkczogc3RyaW5nLCBsYW5ndWFnZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxVc2VyQ2hhbm5lbENvbmZpZ1tdPihgJHt0aGlzLmFwaVVybH1zZXR0aW5ncy9jaGFubmVscz9pZHM9JHtpZHN9Jmxhbmd1YWdlPSR7bGFuZ3VhZ2V9YCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZU5vdGlmaWNhdGlvbnMobmV3Tm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uW10sIG5vdGlmeUFib3V0TmV3ID0gZmFsc2UpIHtcclxuICAgIGxldCBzdGF0ZUNoYW5nZWQgPSBmYWxzZTtcclxuICAgIGZvciAoY29uc3QgbiBvZiBuZXdOb3RpZmljYXRpb25zKSB7XHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5ub3RpZmljYXRpb25zLmZpbmQoeCA9PiB4LmlkID09PSBuLmlkKTtcclxuICAgICAgaWYgKGV4aXN0aW5nKSB7XHJcbiAgICAgICAgaWYgKGV4aXN0aW5nLmlzUmVhZCAhPT0gbi5pc1JlYWQpIHtcclxuICAgICAgICAgIGV4aXN0aW5nLmlzUmVhZCA9IG4uaXNSZWFkO1xyXG4gICAgICAgICAgc3RhdGVDaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IGkgPSAwO1xyXG4gICAgICAgIHdoaWxlIChpIDwgdGhpcy5ub3RpZmljYXRpb25zLmxlbmd0aCAmJiBuLmRhdGVDcmVhdGVkIDwgdGhpcy5ub3RpZmljYXRpb25zW2ldLmRhdGVDcmVhdGVkKSB7XHJcbiAgICAgICAgICBpKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5zcGxpY2UoaSwgMCwgbik7XHJcbiAgICAgICAgc3RhdGVDaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICBpZiAobm90aWZ5QWJvdXROZXcpIHtcclxuICAgICAgICAgIHRoaXMuX25ld05vdGlmaWNhdGlvbnMubmV4dChuKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG4gICAgZm9yIChsZXQgaSA9IHRoaXMubm90aWZpY2F0aW9ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICBjb25zdCBuID0gdGhpcy5ub3RpZmljYXRpb25zW2ldO1xyXG4gICAgICBpZiAobmV3IERhdGUobi5leHBpcmF0aW9uRGF0ZSkuZ2V0VGltZSgpIDwgbm93IHx8ICFuZXdOb3RpZmljYXRpb25zLmZpbmQoeCA9PiB4LmlkID09PSBuLmlkKSkge1xyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgc3RhdGVDaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChzdGF0ZUNoYW5nZWQpIHtcclxuICAgICAgdGhpcy5ub3RpZnlTdGF0ZUNoYW5nZWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2F2ZVRvU3RvcmFnZSgpIHtcclxuICAgIGNvbnN0IHN0ciA9IEpTT04uc3RyaW5naWZ5KHRoaXMubm90aWZpY2F0aW9ucyk7XHJcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5ub3RpZmljYXRpb25zU3RvcmFnZUtleSwgc3RyKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZEZyb21TdG9yYWdlKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3Qgc3RyID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMubm90aWZpY2F0aW9uc1N0b3JhZ2VLZXkpO1xyXG4gICAgICBpZiAoc3RyKSB7XHJcbiAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IEpTT04ucGFyc2Uoc3RyKSBhcyBOb3RpZmljYXRpb25bXTtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMgPSBub3RpZmljYXRpb25zLmZpbHRlcih4ID0+ICEheCk7XHJcbiAgICAgICAgLy8gcHJlY2F1dGlvbiBmb3Igbm90aWZpY2F0aW9uLmlzUmVhZCBvZiB1bmRlZmluZWQgZXJyb3JcclxuICAgICAgICB0aGlzLm5vdGlmeVN0YXRlQ2hhbmdlZChmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggeyB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU5vdGlmaWNhdGlvbkV2ZW50KGlkOiBzdHJpbmcsIGV2ZW50VHlwZTogTm90aWZpY2F0aW9uRXZlbnRUeXBlKSB7XHJcbiAgICBpZiAoZXZlbnRUeXBlLnN0YXJ0c1dpdGgoJ25ldycpIHx8IGV2ZW50VHlwZSA9PT0gJ3VwZGF0ZWQnKSB7IC8vIHdlIGFyZSBoYW5kbGluZyBuZXcgYW5kIG5ld1NpbGVudFxyXG4gICAgICB0aGlzLmdldE5vdGlmaWNhdGlvbihpZCkuc3Vic2NyaWJlKG4gPT4ge1xyXG4gICAgICAgIGlmIChldmVudFR5cGUuc3RhcnRzV2l0aCgnbmV3JykgJiYgIW4uaXNSZWFkKSB7XHJcbiAgICAgICAgICB0aGlzLl9uZXdOb3RpZmljYXRpb25zLm5leHQobik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5ub3RpZmljYXRpb25zLmZpbmQoeCA9PiB4LmlkID09PSBuLmlkKTtcclxuICAgICAgICBpZiAoZXhpc3RpbmcpIHtcclxuICAgICAgICAgIGV4aXN0aW5nLmlzUmVhZCA9IG4uaXNSZWFkO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuc3BsaWNlKDAsIDAsIG4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm5vdGlmeVN0YXRlQ2hhbmdlZCgpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnZGVsZXRlZCcpIHtcclxuICAgICAgdGhpcy5kZWxldGVOb3RpZmljYXRvbihpZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGVsZXRlTm90aWZpY2F0b24oaWQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgaSA9IHRoaXMubm90aWZpY2F0aW9ucy5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBpZCk7XHJcbiAgICBpZiAoaSA+PSAwKSB7XHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgIHRoaXMubm90aWZ5U3RhdGVDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5vdGlmeVN0YXRlQ2hhbmdlZChwZXJzaXN0U3RhdGUgPSB0cnVlKSB7XHJcbiAgICBpZiAocGVyc2lzdFN0YXRlKSB7XHJcbiAgICAgIHRoaXMuc2F2ZVRvU3RvcmFnZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc3RhdGVDaGFuZ2VzU3ViamVjdC5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU5vdGlmaWNhdGlvbkFjdGlvbihub3RpZmljYXRpb25BY3Rpb246IHN0cmluZykge1xyXG4gICAgY29uc3QgYXJyID0gbm90aWZpY2F0aW9uQWN0aW9uLnNwbGl0KCc6Jyk7XHJcbiAgICBjb25zdCBub3RpZmljYXRpb25DbGljazogTm90aWZpY2F0aW9uQ2xpY2sgPSB7XHJcbiAgICAgIGlkOiBhcnJbMF0sXHJcbiAgICAgIHR5cGU6IGFyclsxXSBhcyBOb3RpZmljYXRpb25UeXBlLFxyXG4gICAgICByb3V0ZXJMaW5rOiBhcnJbMl1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgdmFsaWROb3RpZmljYXRpb25DbGlja1R5cGVzID0gWydkZWZhdWx0JywgJ2RlZXBsaW5rJ107XHJcbiAgICBpZiAodmFsaWROb3RpZmljYXRpb25DbGlja1R5cGVzLmluY2x1ZGVzKG5vdGlmaWNhdGlvbkNsaWNrLnR5cGUpKSB7XHJcbiAgICAgIHRoaXMuX2NsaWNrc1N1YmplY3QubmV4dChub3RpZmljYXRpb25DbGljayk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBOdWNsZXVzLk5vdGlmaWNhdGlvbnM6IFVua25vd24gbm90aWZpY2F0aW9uIGFjdGlvbjogJyR7bm90aWZpY2F0aW9uQWN0aW9ufScuYCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZURlbGl2ZXJlZE5vdGlmaWNhdGlvbihpZDogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5fcGxhdGZvcm0gPT09ICdpb3MnIHx8IHRoaXMuX3BsYXRmb3JtID09PSAnYW5kcm9pZCcpIHtcclxuICAgICAgUHVzaE5vdGlmaWNhdGlvbnMuZ2V0RGVsaXZlcmVkTm90aWZpY2F0aW9ucygpLnRoZW4obGlzdCA9PiB7XHJcbiAgICAgICAgY29uc3QgdG9SZW1vdmUgPSBsaXN0Lm5vdGlmaWNhdGlvbnMuZmlsdGVyKG4gPT4ge1xyXG4gICAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0Tm90aWZpY2F0aW9uUGF5bG9hZERhdGEobik7XHJcbiAgICAgICAgICByZXR1cm4gKGRhdGEubm90aWZpY2F0aW9uSWQgPT09IGlkKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gVE9ETzogT24gQW5kcm9pZCB0aGlzIGRvZXMgbm90IGN1cnJlbnRseSB3b3JrIGJlY2F1c2Ugbm90aWZpY2F0aW9uSUQgaXMgbm90IHNldC5cclxuICAgICAgICAvLyBUaGlzIG15IHNvbHZlIHRoZSBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL2lvbmljLXRlYW0vY2FwYWNpdG9yL3B1bGwvMzUyM1xyXG4gICAgICAgIFB1c2hOb3RpZmljYXRpb25zLnJlbW92ZURlbGl2ZXJlZE5vdGlmaWNhdGlvbnMoe1xyXG4gICAgICAgICAgbm90aWZpY2F0aW9uczogdG9SZW1vdmVcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BsYXRmb3JtID09PSAnd2ViJykge1xyXG4gICAgICAvLyBUT0RPOiByZW1vdmUgd2ViIHB1c2ggbm90aWZpY2F0aW9uXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE5vdGlmaWNhdGlvblBheWxvYWREYXRhKHB1c2hOb3RpZmljYXRpb246IFB1c2hOb3RpZmljYXRpb25TY2hlbWEpOiBQYXlsb2FkRGF0YSB7XHJcbiAgICByZXR1cm4gKHRoaXMuX3BsYXRmb3JtID09PSAnaW9zJykgPyBwdXNoTm90aWZpY2F0aW9uLmRhdGEuZGF0YSA6IHB1c2hOb3RpZmljYXRpb24uZGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcmVnaXN0ZXJDYXBhY2l0b3JFdmVudHMoKSB7XHJcbiAgICBhd2FpdCBQdXNoTm90aWZpY2F0aW9ucy5hZGRMaXN0ZW5lcigncHVzaE5vdGlmaWNhdGlvblJlY2VpdmVkJywgbiA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldE5vdGlmaWNhdGlvblBheWxvYWREYXRhKG4pO1xyXG4gICAgICBjb25zb2xlLmxvZygnTnVjbGV1cy5Ob3RpZmljYXRpb25zOiBSZWNlaXZlZCBjYXBhY2l0b3IgcHVzaCBldmVudDogJyArIGRhdGEuZXZlbnRUeXBlLCBuKTtcclxuICAgICAgdGhpcy5oYW5kbGVOb3RpZmljYXRpb25FdmVudChkYXRhLm5vdGlmaWNhdGlvbklkLCBkYXRhLmV2ZW50VHlwZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBhd2FpdCBQdXNoTm90aWZpY2F0aW9ucy5hZGRMaXN0ZW5lcigncHVzaE5vdGlmaWNhdGlvbkFjdGlvblBlcmZvcm1lZCcsIGEgPT4ge1xyXG4gICAgICBsZXQgYWN0aW9uID0gKGEgYXMgYW55KS5ub3RpZmljYXRpb24uZGF0YS5ub3RpZmljYXRpb25BY3Rpb247XHJcbiAgICAgIGlmICh0aGlzLl9wbGF0Zm9ybSA9PT0gJ2lvcycpIHtcclxuICAgICAgICBhY3Rpb24gPSAoYSBhcyBhbnkpLm5vdGlmaWNhdGlvbi5kYXRhLmRhdGEubm90aWZpY2F0aW9uQWN0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnNvbGUubG9nKCdOdWNsZXVzLk5vdGlmaWNhdGlvbnM6IFJlY2VpdmVkIGNhcGFjaXRvciBhY3Rpb24gZXZlbnQnLCBhY3Rpb24pO1xyXG4gICAgICB0aGlzLmhhbmRsZU5vdGlmaWNhdGlvbkFjdGlvbihhY3Rpb24pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlZ2lzdGVyV2ViUHVzaEV2ZW50cygpIHtcclxuICAgIHRoaXMuc3dQdXNoLm1lc3NhZ2VzLnN1YnNjcmliZSgobikgPT4ge1xyXG4gICAgICBjb25zdCBkYXRhOiBQYXlsb2FkRGF0YSA9IChuIGFzIGFueSkuZGF0YTtcclxuICAgICAgY29uc29sZS5sb2coJ051Y2xldXMuTm90aWZpY2F0aW9uczogUmVjZWl2ZWQgV2ViUHVzaCBldmVudDogJyArIGRhdGEuZXZlbnRUeXBlLCBuKTtcclxuICAgICAgdGhpcy5oYW5kbGVOb3RpZmljYXRpb25FdmVudChkYXRhLm5vdGlmaWNhdGlvbklkLCBkYXRhLmV2ZW50VHlwZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnN3UHVzaC5ub3RpZmljYXRpb25DbGlja3Muc3Vic2NyaWJlKChhY3Rpb24pID0+IHtcclxuICAgICAgY29uc29sZS5sb2coJ051Y2xldXMuTm90aWZpY2F0aW9uczogUmVjZWl2ZWQgV2ViUHVzaCBhY3Rpb24gZXZlbnQnLCBhY3Rpb24pO1xyXG4gICAgICBjb25zdCB0YWcgPSBhY3Rpb24ubm90aWZpY2F0aW9uLnRhZztcclxuICAgICAgdGhpcy5oYW5kbGVOb3RpZmljYXRpb25BY3Rpb24odGFnKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSZWdpc3RyYXRpb25JbmZvKCk6IFByb21pc2U8UmVnaXN0cmF0aW9uPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKF9yZXNvbHZlLCBfcmVqZWN0KSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlZ2lzdHJhdGlvbklkID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMucmVnaXN0cmF0aW9uU3RvcmFnZUtleSk7XHJcbiAgICAgIGlmICh0aGlzLl9wbGF0Zm9ybSA9PT0gJ2FuZHJvaWQnIHx8IHRoaXMuX3BsYXRmb3JtID09PSAnaW9zJykge1xyXG4gICAgICAgIC8vIGNhcGFjaXRvciBwbGF0Zm9ybVxyXG4gICAgICAgIGNvbnN0IGxpc3RlbmVyID0gUHVzaE5vdGlmaWNhdGlvbnMuYWRkTGlzdGVuZXIoJ3JlZ2lzdHJhdGlvbicsIHRva2VuID0+IHtcclxuICAgICAgICAgIGxpc3RlbmVyLnJlbW92ZSgpO1xyXG4gICAgICAgICAgX3Jlc29sdmUoeyBpZDogcmVnaXN0cmF0aW9uSWQsIHRva2VuOiB0b2tlbi52YWx1ZSwgcGxhdGZvcm06IHRoaXMuX3BsYXRmb3JtIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFB1c2hOb3RpZmljYXRpb25zLnJlZ2lzdGVyKCkuY2F0Y2goZXJyb3IgPT4gX3JlamVjdCgnQ291bGQgbm90IHJlZ2lzdGVyIGZvciBub3RpZmljYXRpb25zOicgKyBlcnJvcikpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3BsYXRmb3JtID09PSAnd2ViJykge1xyXG4gICAgICAgIC8vIFdlYiBQdXNoIEFQSVxyXG4gICAgICAgIHRoaXMuaHR0cC5nZXQ8V2ViS2V5Pih0aGlzLmFwaVVybCArICdyZWdpc3RyYXRpb24vd2Via2V5Jykuc3Vic2NyaWJlKGtleSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmdldFdlYlB1c2hTdWJzY3JpcHRpb24oa2V5LnB1YmxpY0tleSkudGhlbihzdWJzY3JpcHRpb24gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0ID0gSlNPTi5zdHJpbmdpZnkoc3Vic2NyaXB0aW9uLnRvSlNPTigpKTtcclxuICAgICAgICAgICAgX3Jlc29sdmUoeyBpZDogcmVnaXN0cmF0aW9uSWQsIHRva2VuOiB0LCBwbGF0Zm9ybTogJ3dlYicgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LCBlcnJvciA9PiBfcmVqZWN0KGVycm9yKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgX3JlamVjdChgTnVjbGV1cy5Ob3RpZmljYXRpb25zOiBQbGF0Zm9ybSBpcyBub3Qgc3VwcG9ydGVkYCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRXZWJQdXNoU3Vic2NyaXB0aW9uKHB1YmxpY0tleTogc3RyaW5nKTogUHJvbWlzZTxQdXNoU3Vic2NyaXB0aW9uPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKF9yZXNvbHZlLCBfcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRoaXMuc3dQdXNoLnN1YnNjcmlwdGlvbi5zdWJzY3JpYmUoc3Vic2NyaXB0aW9uID0+IHtcclxuICAgICAgICBpZiAoc3Vic2NyaXB0aW9uICE9IG51bGwpIHtcclxuICAgICAgICAgIF9yZXNvbHZlKHN1YnNjcmlwdGlvbik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3dQdXNoLnJlcXVlc3RTdWJzY3JpcHRpb24oeyBzZXJ2ZXJQdWJsaWNLZXk6IHB1YmxpY0tleSB9KS50aGVuKHMgPT4gX3Jlc29sdmUocykpLmNhdGNoKGUgPT4gX3JlamVjdChlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignTnVjbGV1cy5Ob3RpZmljYXRpb25zOiBDYW5ub3QgZ2V0IHdlYiBwdXNoIHN1YnNjcmlwdGlvbicsIGVycm9yKTtcclxuICAgICAgICBfcmVqZWN0KGVycm9yKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
|