UNPKG

19.3 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
8
9var _index = require("./index");
10
11var _index2 = _interopRequireDefault(_index);
12
13var _Utils = require("./Utils");
14
15var _Utils2 = _interopRequireDefault(_Utils);
16
17function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
19function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
20
21/**
22 * Provides access to the `members` resource.
23 */
24var Members = function () {
25 _createClass(Members, null, [{
26 key: "PATH",
27
28 /**
29 * The path to the `members` resource.
30 */
31 get: function get() {
32 return "/v0.1/conversations/{conversation_uuid}/members";
33 }
34
35 /**
36 * Creates a new Members.
37 *
38 * @param {Credentials} creds - Credentials used when interacting with the Nexmo API.
39 * @param {Object} options - additional options for the class.
40 */
41
42 }]);
43
44 function Members(creds, options) {
45 _classCallCheck(this, Members);
46
47 this.creds = creds;
48 this.options = options;
49 }
50
51 /**
52 * Creates a member in a conversation.
53 *
54 * @param {string} conversationId - The unique identifier for the conversation
55 * @param {Object} params - Parameters used when adding a member to the conversation. See https://ea.developer.nexmo.com/api/conversation#add-a-user-to-a-conversation for more information.
56 * @param {function} callback - function to be called when the request completes.
57 */
58
59
60 _createClass(Members, [{
61 key: "create",
62 value: function create(conversationId, params, callback) {
63 params = JSON.stringify(params);
64
65 var config = {
66 host: this.options.host || "api.nexmo.com",
67 path: Members.PATH.replace("{conversation_uuid}", conversationId),
68 method: "POST",
69 body: params,
70 headers: {
71 "Content-Type": "application/json",
72 Authorization: "Bearer " + this.creds.generateJwt()
73 }
74 };
75 this.options.httpClient.request(config, callback);
76 }
77
78 // backwards compatibility to 2.4.0-beta1. Remove for 3.0.0
79
80 }, {
81 key: "add",
82 value: function add(conversationId, params, callback) {
83 this.create(conversationId, params, callback);
84 }
85
86 /**
87 * Get an existing member.
88 *
89 * @param {string} conversationId - The unique identifier for the conversation
90 * @param {string|object} query - The unique identifier for the member to retrieve
91 * or a set of filter parameters for the query. For more information
92 * see https://ea.developer.nexmo.com/api/conversation#retrieve-members-of-a-conversation
93 * @param {function} callback - function to be called when the request completes.
94 */
95
96 }, {
97 key: "get",
98 value: function get(conversationId, query, callback) {
99 var config = {
100 host: this.options.host || "api.nexmo.com",
101 path: _Utils2.default.createPathWithQuery(Members.PATH.replace("{conversation_uuid}", conversationId), query),
102 method: "GET",
103 body: undefined,
104 headers: {
105 "Content-Type": "application/json",
106 Authorization: "Bearer " + this.creds.generateJwt()
107 }
108 };
109 this.options.httpClient.request(config, callback);
110 }
111
112 /**
113 * Get next page of members for a conversation.
114 *
115 * @param {object} response - The response from a paginated members list
116 * see https://ea.developer.nexmo.com/api/conversation#getMembers
117 * @param {function} callback - function to be called when the request completes.
118 */
119
120 }, {
121 key: "next",
122 value: function next(response, callback) {
123 if (response._links.next) {
124 var conversationId = response._links.next.href.match(/CON-[^/]*/g);
125 this.get(conversationId, _Utils2.default.getQuery(response._links.next.href), callback);
126 } else {
127 var error = new Error("The response doesn't have a next page.");
128 callback(error, null);
129 }
130 }
131
132 /**
133 * Get previous page members for a conversation.
134 *
135 * @param {object} response - The response from a paginated members list
136 * see https://ea.developer.nexmo.com/api/conversation#getMembers
137 * @param {function} callback - function to be called when the request completes.
138 */
139
140 }, {
141 key: "prev",
142 value: function prev(response, callback) {
143 if (response._links.prev) {
144 var conversationId = response._links.prev.href.match(/CON-[^/]*/g);
145 this.get(conversationId, _Utils2.default.getQuery(response._links.prev.href), callback);
146 } else {
147 var error = new Error("The response doesn't have a previous page.");
148 callback(error, null);
149 }
150 }
151
152 /**
153 * Update an existing member.
154 *
155 * @param {string} conversationId - The unique identifier for the conversation to update the member in.
156 * @param {string} memberId - The unique identifier for the member to update.
157 * @param {Object} params - Parameters used when updating the member.
158 * @param {function} callback - function to be called when the request completes.
159 */
160
161 }, {
162 key: "update",
163 value: function update(conversationId, memberId, params, callback) {
164 params = JSON.stringify(params);
165
166 var config = {
167 host: this.options.host || "api.nexmo.com",
168 path: Members.PATH.replace("{conversation_uuid}", conversationId) + "/" + memberId,
169 method: "PUT",
170 body: params,
171 headers: {
172 "Content-Type": "application/json",
173 Authorization: "Bearer " + this.creds.generateJwt()
174 }
175 };
176
177 this.options.httpClient.request(config, callback);
178 }
179
180 /**
181 * Deleta an existing member.
182 *
183 * @param {string} conversationId- The unique identifier for the conversation to delete the member from.
184 * @param {string} memberId - The unique identifier for the member to delete.
185 * @param {function} callback - function to be called when the request completes.
186 */
187
188 }, {
189 key: "delete",
190 value: function _delete(conversationId, memberId, callback) {
191 var config = {
192 host: this.options.host || "api.nexmo.com",
193 path: Members.PATH.replace("{conversation_uuid}", conversationId) + "/" + memberId,
194 method: "DELETE",
195 headers: {
196 "Content-Type": "application/json",
197 Authorization: "Bearer " + this.creds.generateJwt()
198 }
199 };
200
201 this.options.httpClient.request(config, callback);
202 }
203 }]);
204
205 return Members;
206}();
207
208exports.default = Members;
209module.exports = exports["default"];
210//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9NZW1iZXJzLmpzIl0sIm5hbWVzIjpbIk1lbWJlcnMiLCJjcmVkcyIsIm9wdGlvbnMiLCJjb252ZXJzYXRpb25JZCIsInBhcmFtcyIsImNhbGxiYWNrIiwiSlNPTiIsInN0cmluZ2lmeSIsImNvbmZpZyIsImhvc3QiLCJwYXRoIiwiUEFUSCIsInJlcGxhY2UiLCJtZXRob2QiLCJib2R5IiwiaGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJnZW5lcmF0ZUp3dCIsImh0dHBDbGllbnQiLCJyZXF1ZXN0IiwiY3JlYXRlIiwicXVlcnkiLCJjcmVhdGVQYXRoV2l0aFF1ZXJ5IiwidW5kZWZpbmVkIiwicmVzcG9uc2UiLCJfbGlua3MiLCJuZXh0IiwiaHJlZiIsIm1hdGNoIiwiZ2V0IiwiZ2V0UXVlcnkiLCJlcnJvciIsIkVycm9yIiwicHJldiIsIm1lbWJlcklkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBOzs7O0FBRUE7Ozs7Ozs7O0FBRUE7OztJQUdNQSxPOzs7O0FBQ0o7Ozt3QkFHa0I7QUFDaEIsYUFBTyxpREFBUDtBQUNEOztBQUVEOzs7Ozs7Ozs7QUFNQSxtQkFBWUMsS0FBWixFQUFtQkMsT0FBbkIsRUFBNEI7QUFBQTs7QUFDMUIsU0FBS0QsS0FBTCxHQUFhQSxLQUFiO0FBQ0EsU0FBS0MsT0FBTCxHQUFlQSxPQUFmO0FBQ0Q7O0FBRUQ7Ozs7Ozs7Ozs7OzJCQU9PQyxjLEVBQWdCQyxNLEVBQVFDLFEsRUFBVTtBQUN2Q0QsZUFBU0UsS0FBS0MsU0FBTCxDQUFlSCxNQUFmLENBQVQ7O0FBRUEsVUFBSUksU0FBUztBQUNYQyxjQUFNLEtBQUtQLE9BQUwsQ0FBYU8sSUFBYixJQUFxQixlQURoQjtBQUVYQyxjQUFNVixRQUFRVyxJQUFSLENBQWFDLE9BQWIsQ0FBcUIscUJBQXJCLEVBQTRDVCxjQUE1QyxDQUZLO0FBR1hVLGdCQUFRLE1BSEc7QUFJWEMsY0FBTVYsTUFKSztBQUtYVyxpQkFBUztBQUNQLDBCQUFnQixrQkFEVDtBQUVQQyxxQ0FB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Ozs7Ozs7Ozs7OzRCQU9PRixjLEVBQWdCK0IsUSxFQUFVN0IsUSxFQUFVO0FBQ3pDLFVBQUlHLFNBQVM7QUFDWEMsY0FBTSxLQUFLUCxPQUFMLENBQWFPLElBQWIsSUFBcUIsZUFEaEI7QUFFWEMsY0FBU1YsUUFBUVcsSUFBUixDQUFhQyxPQUFiLENBQ1AscUJBRE8sRUFFUFQsY0FGTyxDQUFULFNBR0srQixRQUxNO0FBTVhyQixnQkFBUSxRQU5HO0FBT1hFLGlCQUFTO0FBQ1AsMEJBQWdCLGtCQURUO0FBRVBDLHFDQUF5QixLQUFLZixLQUFMLENBQVdnQixXQUFYO0FBRmxCO0FBUEUsT0FBYjs7QUFhQSxXQUFLZixPQUFMLENBQWFnQixVQUFiLENBQXdCQyxPQUF4QixDQUFnQ1gsTUFBaEMsRUFBd0NILFFBQXhDO0FBQ0Q7Ozs7OztrQkFHWUwsTyIsImZpbGUiOiJNZW1iZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG5leG1vIGZyb20gXCIuL2luZGV4XCI7XG5cbmltcG9ydCBVdGlscyBmcm9tIFwiLi9VdGlsc1wiO1xuXG4vKipcbiAqIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgYG1lbWJlcnNgIHJlc291cmNlLlxuICovXG5jbGFzcyBNZW1iZXJzIHtcbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHRoZSBgbWVtYmVyc2AgcmVzb3VyY2UuXG4gICAqL1xuICBzdGF0aWMgZ2V0IFBBVEgoKSB7XG4gICAgcmV0dXJuIFwiL3YwLjEvY29udmVyc2F0aW9ucy97Y29udmVyc2F0aW9uX3V1aWR9L21lbWJlcnNcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IE1lbWJlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7Q3JlZGVudGlhbHN9IGNyZWRzIC0gQ3JlZGVudGlhbHMgdXNlZCB3aGVuIGludGVyYWN0aW5nIHdpdGggdGhlIE5leG1vIEFQSS5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBjbGFzcy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGNyZWRzLCBvcHRpb25zKSB7XG4gICAgdGhpcy5jcmVkcyA9IGNyZWRzO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG1lbWJlciBpbiBhIGNvbnZlcnNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnZlcnNhdGlvbklkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY29udmVyc2F0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBQYXJhbWV0ZXJzIHVzZWQgd2hlbiBhZGRpbmcgYSBtZW1iZXIgdG8gdGhlIGNvbnZlcnNhdGlvbi4gU2VlIGh0dHBzOi8vZWEuZGV2ZWxvcGVyLm5leG1vLmNvbS9hcGkvY29udmVyc2F0aW9uI2FkZC1hLXVzZXItdG8tYS1jb252ZXJzYXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgY29tcGxldGVzLlxuICAgKi9cbiAgY3JlYXRlKGNvbnZlcnNhdGlvbklkLCBwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgcGFyYW1zID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zKTtcblxuICAgIHZhciBjb25maWcgPSB7XG4gICAgICBob3N0OiB0aGlzLm9wdGlvbnMuaG9zdCB8fCBcImFwaS5uZXhtby5jb21cIixcbiAgICAgIHBhdGg6IE1lbWJlcnMuUEFUSC5yZXBsYWNlKFwie2NvbnZlcnNhdGlvbl91dWlkfVwiLCBjb252ZXJzYXRpb25JZCksXG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMuY3JlZHMuZ2VuZXJhdGVKd3QoKX1gXG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLm9wdGlvbnMuaHR0cENsaWVudC5yZXF1ZXN0KGNvbmZpZywgY2FsbGJhY2spO1xuICB9XG5cbiAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgdG8gMi40LjAtYmV0YTEuIFJlbW92ZSBmb3IgMy4wLjBcbiAgYWRkKGNvbnZlcnNhdGlvbklkLCBwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgdGhpcy5jcmVhdGUoY29udmVyc2F0aW9uSWQsIHBhcmFtcywgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBleGlzdGluZyBtZW1iZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb252ZXJzYXRpb25JZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGNvbnZlcnNhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHF1ZXJ5IC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgbWVtYmVyIHRvIHJldHJpZXZlXG4gICAqICAgICAgICAgICAgICAgb3IgYSBzZXQgb2YgZmlsdGVyIHBhcmFtZXRlcnMgZm9yIHRoZSBxdWVyeS4gRm9yIG1vcmUgaW5mb3JtYXRpb25cbiAgICogICAgICAgICAgICAgICBzZWUgaHR0cHM6Ly9lYS5kZXZlbG9wZXIubmV4bW8uY29tL2FwaS9jb252ZXJzYXRpb24jcmV0cmlldmUtbWVtYmVycy1vZi1hLWNvbnZlcnNhdGlvblxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGNvbXBsZXRlcy5cbiAgICovXG4gIGdldChjb252ZXJzYXRpb25JZCwgcXVlcnksIGNhbGxiYWNrKSB7XG4gICAgdmFyIGNvbmZpZyA9IHtcbiAgICAgIGhvc3Q6IHRoaXMub3B0aW9ucy5ob3N0IHx8IFwiYXBpLm5leG1vLmNvbVwiLFxuICAgICAgcGF0aDogVXRpbHMuY3JlYXRlUGF0aFdpdGhRdWVyeShcbiAgICAgICAgTWVtYmVycy5QQVRILnJlcGxhY2UoXCJ7Y29udmVyc2F0aW9uX3V1aWR9XCIsIGNvbnZlcnNhdGlvbklkKSxcbiAgICAgICAgcXVlcnlcbiAgICAgICksXG4gICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICBib2R5OiB1bmRlZmluZWQsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy5jcmVkcy5nZW5lcmF0ZUp3dCgpfWBcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMub3B0aW9ucy5odHRwQ2xpZW50LnJlcXVlc3QoY29uZmlnLCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG5leHQgcGFnZSBvZiBtZW1iZXJzIGZvciBhIGNvbnZlcnNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIC0gVGhlIHJlc3BvbnNlIGZyb20gYSBwYWdpbmF0ZWQgbWVtYmVycyBsaXN0XG4gICAqICAgICAgICAgICAgICAgc2VlIGh0dHBzOi8vZWEuZGV2ZWxvcGVyLm5leG1vLmNvbS9hcGkvY29udmVyc2F0aW9uI2dldE1lbWJlcnNcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBjb21wbGV0ZXMuXG4gICAqL1xuICBuZXh0KHJlc3BvbnNlLCBjYWxsYmFjaykge1xuICAgIGlmIChyZXNwb25zZS5fbGlua3MubmV4dCkge1xuICAgICAgY29uc3QgY29udmVyc2F0aW9uSWQgPSByZXNwb25zZS5fbGlua3MubmV4dC5ocmVmLm1hdGNoKC9DT04tW14vXSovZyk7XG4gICAgICB0aGlzLmdldChcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXG4gICAgICAgIFV0aWxzLmdldFF1ZXJ5KHJlc3BvbnNlLl9saW5rcy5uZXh0LmhyZWYpLFxuICAgICAgICBjYWxsYmFja1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXCJUaGUgcmVzcG9uc2UgZG9lc24ndCBoYXZlIGEgbmV4dCBwYWdlLlwiKTtcbiAgICAgIGNhbGxiYWNrKGVycm9yLCBudWxsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHByZXZpb3VzIHBhZ2UgbWVtYmVycyBmb3IgYSBjb252ZXJzYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSAtIFRoZSByZXNwb25zZSBmcm9tIGEgcGFnaW5hdGVkIG1lbWJlcnMgbGlzdFxuICAgKiAgICAgICAgICAgICAgIHNlZSBodHRwczovL2VhLmRldmVsb3Blci5uZXhtby5jb20vYXBpL2NvbnZlcnNhdGlvbiNnZXRNZW1iZXJzXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgY29tcGxldGVzLlxuICAgKi9cbiAgcHJldihyZXNwb25zZSwgY2FsbGJhY2spIHtcbiAgICBpZiAocmVzcG9uc2UuX2xpbmtzLnByZXYpIHtcbiAgICAgIGNvbnN0IGNvbnZlcnNhdGlvbklkID0gcmVzcG9uc2UuX2xpbmtzLnByZXYuaHJlZi5tYXRjaCgvQ09OLVteL10qL2cpO1xuICAgICAgdGhpcy5nZXQoXG4gICAgICAgIGNvbnZlcnNhdGlvbklkLFxuICAgICAgICBVdGlscy5nZXRRdWVyeShyZXNwb25zZS5fbGlua3MucHJldi5ocmVmKSxcbiAgICAgICAgY2FsbGJhY2tcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFwiVGhlIHJlc3BvbnNlIGRvZXNuJ3QgaGF2ZSBhIHByZXZpb3VzIHBhZ2UuXCIpO1xuICAgICAgY2FsbGJhY2soZXJyb3IsIG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYW4gZXhpc3RpbmcgbWVtYmVyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udmVyc2F0aW9uSWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb252ZXJzYXRpb24gdG8gdXBkYXRlIHRoZSBtZW1iZXIgaW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZW1iZXJJZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIG1lbWJlciB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBQYXJhbWV0ZXJzIHVzZWQgd2hlbiB1cGRhdGluZyB0aGUgbWVtYmVyLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGNvbXBsZXRlcy5cbiAgICovXG4gIHVwZGF0ZShjb252ZXJzYXRpb25JZCwgbWVtYmVySWQsIHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICBwYXJhbXMgPSBKU09OLnN0cmluZ2lmeShwYXJhbXMpO1xuXG4gICAgdmFyIGNvbmZpZyA9IHtcbiAgICAgIGhvc3Q6IHRoaXMub3B0aW9ucy5ob3N0IHx8IFwiYXBpLm5leG1vLmNvbVwiLFxuICAgICAgcGF0aDogYCR7TWVtYmVycy5QQVRILnJlcGxhY2UoXG4gICAgICAgIFwie2NvbnZlcnNhdGlvbl91dWlkfVwiLFxuICAgICAgICBjb252ZXJzYXRpb25JZFxuICAgICAgKX0vJHttZW1iZXJJZH1gLFxuICAgICAgbWV0aG9kOiBcIlBVVFwiLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMuY3JlZHMuZ2VuZXJhdGVKd3QoKX1gXG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMub3B0aW9ucy5odHRwQ2xpZW50LnJlcXVlc3QoY29uZmlnLCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRhIGFuIGV4aXN0aW5nIG1lbWJlci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnZlcnNhdGlvbklkLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb252ZXJzYXRpb24gdG8gZGVsZXRlIHRoZSBtZW1iZXIgZnJvbS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lbWJlcklkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgbWVtYmVyIHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBjb21wbGV0ZXMuXG4gICAqL1xuICBkZWxldGUoY29udmVyc2F0aW9uSWQsIG1lbWJlcklkLCBjYWxsYmFjaykge1xuICAgIHZhciBjb25maWcgPSB7XG4gICAgICBob3N0OiB0aGlzLm9wdGlvbnMuaG9zdCB8fCBcImFwaS5uZXhtby5jb21cIixcbiAgICAgIHBhdGg6IGAke01lbWJlcnMuUEFUSC5yZXBsYWNlKFxuICAgICAgICBcIntjb252ZXJzYXRpb25fdXVpZH1cIixcbiAgICAgICAgY29udmVyc2F0aW9uSWRcbiAgICAgICl9LyR7bWVtYmVySWR9YCxcbiAgICAgIG1ldGhvZDogXCJERUxFVEVcIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLmNyZWRzLmdlbmVyYXRlSnd0KCl9YFxuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLm9wdGlvbnMuaHR0cENsaWVudC5yZXF1ZXN0KGNvbmZpZywgY2FsbGJhY2spO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lbWJlcnM7XG4iXX0=
\No newline at end of file