UNPKG

20.2 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
17var _Members = require("./Members");
18
19var _Members2 = _interopRequireDefault(_Members);
20
21var _Events = require("./Events");
22
23var _Events2 = _interopRequireDefault(_Events);
24
25function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
26
27function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
28
29/**
30 * Provides access to the `conversations` endpoint.
31 */
32var Conversations = function () {
33 _createClass(Conversations, null, [{
34 key: "PATH",
35 get: function get() {
36 return "/v0.1/conversations";
37 }
38 }, {
39 key: "V1_PATH",
40 get: function get() {
41 return "/v1/conversations";
42 }
43
44 /**
45 * @param {Credentials} credentials
46 * credentials to be used when interacting with the API.
47 * @param {Object} options
48 * Additional Conversations options.
49 */
50
51 }]);
52
53 function Conversations(credentials) {
54 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
55
56 _classCallCheck(this, Conversations);
57
58 this.creds = credentials;
59 this.options = options;
60
61 /**
62 * @type Members
63 */
64 this.members = new _Members2.default(this.creds, this.options);
65
66 /**
67 * @type Events
68 */
69 this.events = new _Events2.default(this.creds, this.options);
70 }
71
72 /**
73 * Create a new conversation.
74 *
75 * @param {Object} params - Parameters used when creating the conversation. See https://ea.developer.nexmo.com/api/conversation#create-a-conversation for more information.
76 * @param {function} callback - function to be called when the request completes.
77 */
78
79
80 _createClass(Conversations, [{
81 key: "create",
82 value: function create(params, callback) {
83 params = JSON.stringify(params);
84
85 var config = {
86 host: this.options.host || "api.nexmo.com",
87 path: Conversations.PATH,
88 method: "POST",
89 body: params,
90 headers: {
91 "Content-Type": "application/json",
92 Authorization: "Bearer " + this.creds.generateJwt()
93 }
94 };
95 this.options.httpClient.request(config, callback);
96 }
97
98 /**
99 * Get an existing conversation.
100 *
101 * @param {string|object} query - The unique identifier for the conversation to retrieve
102 * or a set of filter parameters for the query. For more information
103 * see https://ea.developer.nexmo.com/api/conversation#retrieve-a-conversation
104 * @param {function} callback - function to be called when the request completes.
105 */
106
107 }, {
108 key: "get",
109 value: function get(query, callback) {
110 var config = {
111 host: this.options.host || "api.nexmo.com",
112 path: typeof query === "string" ? Conversations.PATH + "/" + query : _Utils2.default.createPathWithQuery(Conversations.PATH, query),
113 method: "GET",
114 body: undefined,
115 headers: {
116 "Content-Type": "application/json",
117 Authorization: "Bearer " + this.creds.generateJwt()
118 }
119 };
120 this.options.httpClient.request(config, callback);
121 }
122
123 /**
124 * Get next page of conversations.
125 *
126 * @param {object} response - The response from a paginated conversations list
127 * see https://ea.developer.nexmo.com/api/conversation#listConversations
128 * @param {function} callback - function to be called when the request completes.
129 */
130
131 }, {
132 key: "next",
133 value: function next(response, callback) {
134 if (response._links.next) {
135 this.get(_Utils2.default.getQuery(response._links.next.href), callback);
136 } else {
137 var error = new Error("The response doesn't have a next page.");
138 callback(error, null);
139 }
140 }
141
142 /**
143 * Get previous page of conversations.
144 *
145 * @param {object} response - The response from a paginated conversations list
146 * see https://ea.developer.nexmo.com/api/conversation#listConversations
147 * @param {function} callback - function to be called when the request completes.
148 */
149
150 }, {
151 key: "prev",
152 value: function prev(response, callback) {
153 if (response._links.prev) {
154 this.get(_Utils2.default.getQuery(response._links.prev.href), callback);
155 } else {
156 var error = new Error("The response doesn't have a previous page.");
157 callback(error, null);
158 }
159 }
160
161 /**
162 * Update an existing conversation.
163 *
164 * @param {string} conversationId - The unique identifier for the conversation to update.
165 * @param {Object} params - Parameters used when updating the conversation.
166 * @param {function} callback - function to be called when the request completes.
167 */
168
169 }, {
170 key: "update",
171 value: function update(conversationId, params, callback) {
172 params = JSON.stringify(params);
173
174 var config = {
175 host: this.options.host || "api.nexmo.com",
176 path: Conversations.PATH + "/" + conversationId,
177 method: "PUT",
178 body: params,
179 headers: {
180 "Content-Type": "application/json",
181 Authorization: "Bearer " + this.creds.generateJwt()
182 }
183 };
184
185 this.options.httpClient.request(config, callback);
186 }
187
188 /**
189 * Record an existing conversation.
190 *
191 * @param {string} conversationId - The unique identifier for the conversation to record.
192 * @param {Object} params - Parameters used when recording the conversation.
193 * @param {function} callback - function to be called when the request completes.
194 */
195
196 }, {
197 key: "record",
198 value: function record(conversationId, params, callback) {
199 params = JSON.stringify(params);
200
201 var config = {
202 host: this.options.host || "api.nexmo.com",
203 path: Conversations.V1_PATH + "/" + conversationId + "/record",
204 method: "PUT",
205 body: params,
206 headers: {
207 "Content-Type": "application/json",
208 Authorization: "Bearer " + this.creds.generateJwt()
209 }
210 };
211
212 this.options.httpClient.request(config, callback);
213 }
214
215 /**
216 * Deleta an existing conversation.
217 *
218 * @param {string} conversationId - The unique identifier for the conversation to delete.
219 * @param {function} callback - function to be called when the request completes.
220 */
221
222 }, {
223 key: "delete",
224 value: function _delete(conversationId, callback) {
225 var config = {
226 host: this.options.host || "api.nexmo.com",
227 path: Conversations.PATH + "/" + conversationId,
228 method: "DELETE",
229 headers: {
230 "Content-Type": "application/json",
231 Authorization: "Bearer " + this.creds.generateJwt()
232 }
233 };
234
235 this.options.httpClient.request(config, callback);
236 }
237 }]);
238
239 return Conversations;
240}();
241
242exports.default = Conversations;
243module.exports = exports["default"];
244//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9Db252ZXJzYXRpb25zLmpzIl0sIm5hbWVzIjpbIkNvbnZlcnNhdGlvbnMiLCJjcmVkZW50aWFscyIsIm9wdGlvbnMiLCJjcmVkcyIsIm1lbWJlcnMiLCJldmVudHMiLCJwYXJhbXMiLCJjYWxsYmFjayIsIkpTT04iLCJzdHJpbmdpZnkiLCJjb25maWciLCJob3N0IiwicGF0aCIsIlBBVEgiLCJtZXRob2QiLCJib2R5IiwiaGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJnZW5lcmF0ZUp3dCIsImh0dHBDbGllbnQiLCJyZXF1ZXN0IiwicXVlcnkiLCJjcmVhdGVQYXRoV2l0aFF1ZXJ5IiwidW5kZWZpbmVkIiwicmVzcG9uc2UiLCJfbGlua3MiLCJuZXh0IiwiZ2V0IiwiZ2V0UXVlcnkiLCJocmVmIiwiZXJyb3IiLCJFcnJvciIsInByZXYiLCJjb252ZXJzYXRpb25JZCIsIlYxX1BBVEgiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztBQUVBOzs7O0FBRUE7Ozs7QUFFQTs7OztBQUNBOzs7Ozs7OztBQUVBOzs7SUFHTUEsYTs7O3dCQUNjO0FBQ2hCLGFBQU8scUJBQVA7QUFDRDs7O3dCQUVvQjtBQUNuQixhQUFPLG1CQUFQO0FBQ0Q7O0FBRUQ7Ozs7Ozs7OztBQU1BLHlCQUFZQyxXQUFaLEVBQXVDO0FBQUEsUUFBZEMsT0FBYyx1RUFBSixFQUFJOztBQUFBOztBQUNyQyxTQUFLQyxLQUFMLEdBQWFGLFdBQWI7QUFDQSxTQUFLQyxPQUFMLEdBQWVBLE9BQWY7O0FBRUE7OztBQUdBLFNBQUtFLE9BQUwsR0FBZSxzQkFBWSxLQUFLRCxLQUFqQixFQUF3QixLQUFLRCxPQUE3QixDQUFmOztBQUVBOzs7QUFHQSxTQUFLRyxNQUFMLEdBQWMscUJBQVcsS0FBS0YsS0FBaEIsRUFBdUIsS0FBS0QsT0FBNUIsQ0FBZDtBQUNEOztBQUVEOzs7Ozs7Ozs7OzJCQU1PSSxNLEVBQVFDLFEsRUFBVTtBQUN2QkQsZUFBU0UsS0FBS0MsU0FBTCxDQUFlSCxNQUFmLENB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RCxjQUFsQyxZQUZXO0FBR1huQixnQkFBUSxLQUhHO0FBSVhDLGNBQU1ULE1BSks7QUFLWFUsaUJBQVM7QUFDUCwwQkFBZ0Isa0JBRFQ7QUFFUEMscUNBQXlCLEtBQUtkLEtBQUwsQ0FBV2UsV0FBWDtBQUZsQjtBQUxFLE9BQWI7O0FBV0EsV0FBS2hCLE9BQUwsQ0FBYWlCLFVBQWIsQ0FBd0JDLE9BQXhCLENBQWdDVixNQUFoQyxFQUF3Q0gsUUFBeEM7QUFDRDs7QUFFRDs7Ozs7Ozs7OzRCQU1PMEIsYyxFQUFnQjFCLFEsRUFBVTtBQUMvQixVQUFJRyxTQUFTO0FBQ1hDLGNBQU0sS0FBS1QsT0FBTCxDQUFhUyxJQUFiLElBQXFCLGVBRGhCO0FBRVhDLGNBQVNaLGNBQWNhLElBQXZCLFNBQStCb0IsY0FGcEI7QUFHWG5CLGdCQUFRLFFBSEc7QUFJWEUsaUJBQVM7QUFDUCwwQkFBZ0Isa0JBRFQ7QUFFUEMscUNBQXlCLEtBQUtkLEtBQUwsQ0FBV2UsV0FBWDtBQUZsQjtBQUpFLE9BQWI7O0FBVUEsV0FBS2hCLE9BQUwsQ0FBYWlCLFVBQWIsQ0FBd0JDLE9BQXhCLENBQWdDVixNQUFoQyxFQUF3Q0gsUUFBeEM7QUFDRDs7Ozs7O2tCQUdZUCxhIiwiZmlsZSI6IkNvbnZlcnNhdGlvbnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IG5leG1vIGZyb20gXCIuL2luZGV4XCI7XG5cbmltcG9ydCBVdGlscyBmcm9tIFwiLi9VdGlsc1wiO1xuXG5pbXBvcnQgTWVtYmVycyBmcm9tIFwiLi9NZW1iZXJzXCI7XG5pbXBvcnQgRXZlbnRzIGZyb20gXCIuL0V2ZW50c1wiO1xuXG4vKipcbiAqIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgYGNvbnZlcnNhdGlvbnNgIGVuZHBvaW50LlxuICovXG5jbGFzcyBDb252ZXJzYXRpb25zIHtcbiAgc3RhdGljIGdldCBQQVRIKCkge1xuICAgIHJldHVybiBcIi92MC4xL2NvbnZlcnNhdGlvbnNcIjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgVjFfUEFUSCgpIHtcbiAgICByZXR1cm4gXCIvdjEvY29udmVyc2F0aW9uc1wiO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Q3JlZGVudGlhbHN9IGNyZWRlbnRpYWxzXG4gICAqICAgIGNyZWRlbnRpYWxzIHRvIGJlIHVzZWQgd2hlbiBpbnRlcmFjdGluZyB3aXRoIHRoZSBBUEkuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqICAgIEFkZGl0aW9uYWwgQ29udmVyc2F0aW9ucyBvcHRpb25zLlxuICAgKi9cbiAgY29uc3RydWN0b3IoY3JlZGVudGlhbHMsIG9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuY3JlZHMgPSBjcmVkZW50aWFscztcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUgTWVtYmVyc1xuICAgICAqL1xuICAgIHRoaXMubWVtYmVycyA9IG5ldyBNZW1iZXJzKHRoaXMuY3JlZHMsIHRoaXMub3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSBFdmVudHNcbiAgICAgKi9cbiAgICB0aGlzLmV2ZW50cyA9IG5ldyBFdmVudHModGhpcy5jcmVkcywgdGhpcy5vcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgY29udmVyc2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gUGFyYW1ldGVycyB1c2VkIHdoZW4gY3JlYXRpbmcgdGhlIGNvbnZlcnNhdGlvbi4gU2VlIGh0dHBzOi8vZWEuZGV2ZWxvcGVyLm5leG1vLmNvbS9hcGkvY29udmVyc2F0aW9uI2NyZWF0ZS1hLWNvbnZlcnNhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCBjb21wbGV0ZXMuXG4gICAqL1xuICBjcmVhdGUocGFyYW1zLCBjYWxsYmFjaykge1xuICAgIHBhcmFtcyA9IEpTT04uc3RyaW5naWZ5KHBhcmFtcyk7XG5cbiAgICB2YXIgY29uZmlnID0ge1xuICAgICAgaG9zdDogdGhpcy5vcHRpb25zLmhvc3QgfHwgXCJhcGkubmV4bW8uY29tXCIsXG4gICAgICBwYXRoOiBDb252ZXJzYXRpb25zLlBBVEgsXG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMuY3JlZHMuZ2VuZXJhdGVKd3QoKX1gXG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLm9wdGlvbnMuaHR0cENsaWVudC5yZXF1ZXN0KGNvbmZpZywgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBleGlzdGluZyBjb252ZXJzYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gcXVlcnkgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb252ZXJzYXRpb24gdG8gcmV0cmlldmVcbiAgICogICAgICAgICAgICAgICBvciBhIHNldCBvZiBmaWx0ZXIgcGFyYW1ldGVycyBmb3IgdGhlIHF1ZXJ5LiBGb3IgbW9yZSBpbmZvcm1hdGlvblxuICAgKiAgICAgICAgICAgICAgIHNlZSBodHRwczovL2VhLmRldmVsb3Blci5uZXhtby5jb20vYXBpL2NvbnZlcnNhdGlvbiNyZXRyaWV2ZS1hLWNvbnZlcnNhdGlvblxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGNvbXBsZXRlcy5cbiAgICovXG4gIGdldChxdWVyeSwgY2FsbGJhY2spIHtcbiAgICB2YXIgY29uZmlnID0ge1xuICAgICAgaG9zdDogdGhpcy5vcHRpb25zLmhvc3QgfHwgXCJhcGkubmV4bW8uY29tXCIsXG4gICAgICBwYXRoOlxuICAgICAgICB0eXBlb2YgcXVlcnkgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICA/IGAke0NvbnZlcnNhdGlvbnMuUEFUSH0vJHtxdWVyeX1gXG4gICAgICAgICAgOiBVdGlscy5jcmVhdGVQYXRoV2l0aFF1ZXJ5KENvbnZlcnNhdGlvbnMuUEFUSCwgcXVlcnkpLFxuICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgYm9keTogdW5kZWZpbmVkLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMuY3JlZHMuZ2VuZXJhdGVKd3QoKX1gXG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLm9wdGlvbnMuaHR0cENsaWVudC5yZXF1ZXN0KGNvbmZpZywgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBuZXh0IHBhZ2Ugb2YgY29udmVyc2F0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIC0gVGhlIHJlc3BvbnNlIGZyb20gYSBwYWdpbmF0ZWQgY29udmVyc2F0aW9ucyBsaXN0XG4gICAqICAgICAgICAgICAgICAgc2VlIGh0dHBzOi8vZWEuZGV2ZWxvcGVyLm5leG1vLmNvbS9hcGkvY29udmVyc2F0aW9uI2xpc3RDb252ZXJzYXRpb25zXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgY29tcGxldGVzLlxuICAgKi9cbiAgbmV4dChyZXNwb25zZSwgY2FsbGJhY2spIHtcbiAgICBpZiAocmVzcG9uc2UuX2xpbmtzLm5leHQpIHtcbiAgICAgIHRoaXMuZ2V0KFV0aWxzLmdldFF1ZXJ5KHJlc3BvbnNlLl9saW5rcy5uZXh0LmhyZWYpLCBjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFwiVGhlIHJlc3BvbnNlIGRvZXNuJ3QgaGF2ZSBhIG5leHQgcGFnZS5cIik7XG4gICAgICBjYWxsYmFjayhlcnJvciwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwcmV2aW91cyBwYWdlIG9mIGNvbnZlcnNhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSAtIFRoZSByZXNwb25zZSBmcm9tIGEgcGFnaW5hdGVkIGNvbnZlcnNhdGlvbnMgbGlzdFxuICAgKiAgICAgICAgICAgICAgIHNlZSBodHRwczovL2VhLmRldmVsb3Blci5uZXhtby5jb20vYXBpL2NvbnZlcnNhdGlvbiNsaXN0Q29udmVyc2F0aW9uc1xuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGNvbXBsZXRlcy5cbiAgICovXG4gIHByZXYocmVzcG9uc2UsIGNhbGxiYWNrKSB7XG4gICAgaWYgKHJlc3BvbnNlLl9saW5rcy5wcmV2KSB7XG4gICAgICB0aGlzLmdldChVdGlscy5nZXRRdWVyeShyZXNwb25zZS5fbGlua3MucHJldi5ocmVmKSwgY2FsbGJhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcIlRoZSByZXNwb25zZSBkb2Vzbid0IGhhdmUgYSBwcmV2aW91cyBwYWdlLlwiKTtcbiAgICAgIGNhbGxiYWNrKGVycm9yLCBudWxsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGFuIGV4aXN0aW5nIGNvbnZlcnNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnZlcnNhdGlvbklkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY29udmVyc2F0aW9uIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIFBhcmFtZXRlcnMgdXNlZCB3aGVuIHVwZGF0aW5nIHRoZSBjb252ZXJzYXRpb24uXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgY29tcGxldGVzLlxuICAgKi9cbiAgdXBkYXRlKGNvbnZlcnNhdGlvbklkLCBwYXJhbXMsIGNhbGxiYWNrKSB7XG4gICAgcGFyYW1zID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zKTtcblxuICAgIHZhciBjb25maWcgPSB7XG4gICAgICBob3N0OiB0aGlzLm9wdGlvbnMuaG9zdCB8fCBcImFwaS5uZXhtby5jb21cIixcbiAgICAgIHBhdGg6IGAke0NvbnZlcnNhdGlvbnMuUEFUSH0vJHtjb252ZXJzYXRpb25JZH1gLFxuICAgICAgbWV0aG9kOiBcIlBVVFwiLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMuY3JlZHMuZ2VuZXJhdGVKd3QoKX1gXG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMub3B0aW9ucy5odHRwQ2xpZW50LnJlcXVlc3QoY29uZmlnLCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3JkIGFuIGV4aXN0aW5nIGNvbnZlcnNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnZlcnNhdGlvbklkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY29udmVyc2F0aW9uIHRvIHJlY29yZC5cbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIFBhcmFtZXRlcnMgdXNlZCB3aGVuIHJlY29yZGluZyB0aGUgY29udmVyc2F0aW9uLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGNvbXBsZXRlcy5cbiAgICovXG4gIHJlY29yZChjb252ZXJzYXRpb25JZCwgcGFyYW1zLCBjYWxsYmFjaykge1xuICAgIHBhcmFtcyA9IEpTT04uc3RyaW5naWZ5KHBhcmFtcyk7XG5cbiAgICB2YXIgY29uZmlnID0ge1xuICAgICAgaG9zdDogdGhpcy5vcHRpb25zLmhvc3QgfHwgXCJhcGkubmV4bW8uY29tXCIsXG4gICAgICBwYXRoOiBgJHtDb252ZXJzYXRpb25zLlYxX1BBVEh9LyR7Y29udmVyc2F0aW9uSWR9L3JlY29yZGAsXG4gICAgICBtZXRob2Q6IFwiUFVUXCIsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy5jcmVkcy5nZW5lcmF0ZUp3dCgpfWBcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5vcHRpb25zLmh0dHBDbGllbnQucmVxdWVzdChjb25maWcsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGEgYW4gZXhpc3RpbmcgY29udmVyc2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udmVyc2F0aW9uSWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb252ZXJzYXRpb24gdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IGNvbXBsZXRlcy5cbiAgICovXG4gIGRlbGV0ZShjb252ZXJzYXRpb25JZCwgY2FsbGJhY2spIHtcbiAgICB2YXIgY29uZmlnID0ge1xuICAgICAgaG9zdDogdGhpcy5vcHRpb25zLmhvc3QgfHwgXCJhcGkubmV4bW8uY29tXCIsXG4gICAgICBwYXRoOiBgJHtDb252ZXJzYXRpb25zLlBBVEh9LyR7Y29udmVyc2F0aW9uSWR9YCxcbiAgICAgIG1ldGhvZDogXCJERUxFVEVcIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLmNyZWRzLmdlbmVyYXRlSnd0KCl9YFxuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLm9wdGlvbnMuaHR0cENsaWVudC5yZXF1ZXN0KGNvbmZpZywgY2FsbGJhY2spO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbnZlcnNhdGlvbnM7XG4iXX0=
\No newline at end of file