1 | ;
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _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 |
|
9 | var _fs = require("fs");
|
10 |
|
11 | var _fs2 = _interopRequireDefault(_fs);
|
12 |
|
13 | var _path = require("path");
|
14 |
|
15 | var _path2 = _interopRequireDefault(_path);
|
16 |
|
17 | var _Credentials = require("./Credentials");
|
18 |
|
19 | var _Credentials2 = _interopRequireDefault(_Credentials);
|
20 |
|
21 | var _JwtGenerator = require("./JwtGenerator");
|
22 |
|
23 | var _JwtGenerator2 = _interopRequireDefault(_JwtGenerator);
|
24 |
|
25 | var _Message = require("./Message");
|
26 |
|
27 | var _Message2 = _interopRequireDefault(_Message);
|
28 |
|
29 | var _Voice = require("./Voice");
|
30 |
|
31 | var _Voice2 = _interopRequireDefault(_Voice);
|
32 |
|
33 | var _Number = require("./Number");
|
34 |
|
35 | var _Number2 = _interopRequireDefault(_Number);
|
36 |
|
37 | var _Verify = require("./Verify");
|
38 |
|
39 | var _Verify2 = _interopRequireDefault(_Verify);
|
40 |
|
41 | var _NumberInsight = require("./NumberInsight");
|
42 |
|
43 | var _NumberInsight2 = _interopRequireDefault(_NumberInsight);
|
44 |
|
45 | var _App = require("./App");
|
46 |
|
47 | var _App2 = _interopRequireDefault(_App);
|
48 |
|
49 | var _Account = require("./Account");
|
50 |
|
51 | var _Account2 = _interopRequireDefault(_Account);
|
52 |
|
53 | var _CallsResource = require("./CallsResource");
|
54 |
|
55 | var _CallsResource2 = _interopRequireDefault(_CallsResource);
|
56 |
|
57 | var _FilesResource = require("./FilesResource");
|
58 |
|
59 | var _FilesResource2 = _interopRequireDefault(_FilesResource);
|
60 |
|
61 | var _Conversion = require("./Conversion");
|
62 |
|
63 | var _Conversion2 = _interopRequireDefault(_Conversion);
|
64 |
|
65 | var _Media = require("./Media");
|
66 |
|
67 | var _Media2 = _interopRequireDefault(_Media);
|
68 |
|
69 | var _Redact = require("./Redact");
|
70 |
|
71 | var _Redact2 = _interopRequireDefault(_Redact);
|
72 |
|
73 | var _HttpClient = require("./HttpClient");
|
74 |
|
75 | var _HttpClient2 = _interopRequireDefault(_HttpClient);
|
76 |
|
77 | var _NullLogger = require("./NullLogger");
|
78 |
|
79 | var _NullLogger2 = _interopRequireDefault(_NullLogger);
|
80 |
|
81 | var _ConsoleLogger = require("./ConsoleLogger");
|
82 |
|
83 | var _ConsoleLogger2 = _interopRequireDefault(_ConsoleLogger);
|
84 |
|
85 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
86 |
|
87 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
88 |
|
89 | var jwtGeneratorInstance = new _JwtGenerator2.default();
|
90 |
|
91 | var Nexmo = function () {
|
92 | /**
|
93 | * @param {Credentials} credentials - Nexmo API credentials
|
94 | * @param {string} credentials.apiKey - the Nexmo API key
|
95 | * @param {string} credentials.apiSecret - the Nexmo API secret
|
96 | * @param {Object} options - Additional options
|
97 | * @param {boolean} options.debug - `true` to turn on debug logging
|
98 | * @param {Object} options.logger - Set a custom logger.
|
99 | * @param {string} options.appendToUserAgent - A value to append to the user agent.
|
100 | * The value will be prefixed with a `/`
|
101 | */
|
102 | function Nexmo(credentials) {
|
103 | var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { debug: false };
|
104 |
|
105 | _classCallCheck(this, Nexmo);
|
106 |
|
107 | this.credentials = _Credentials2.default.parse(credentials);
|
108 | this.options = options;
|
109 |
|
110 | // If no logger has been supplied but debug has been set
|
111 | // default to using the ConsoleLogger
|
112 | if (!this.options.logger && this.options.debug) {
|
113 | this.options.logger = new _ConsoleLogger2.default();
|
114 | } else if (!this.options.logger) {
|
115 | // Swallow the logging
|
116 | this.options.logger = new _NullLogger2.default();
|
117 | }
|
118 |
|
119 | var userAgent = "nexmo-node/UNKNOWN node/UNKNOWN";
|
120 | try {
|
121 | var packageDetails = require(_path2.default.join(__dirname, "..", "package.json"));
|
122 | userAgent = "nexmo-node/" + packageDetails.version + " node/" + process.version.replace("v", "");
|
123 | } catch (e) {
|
124 | console.warn("Could not load package details");
|
125 | }
|
126 | this.options.userAgent = userAgent;
|
127 | if (this.options.appendToUserAgent) {
|
128 | this.options.userAgent += " " + this.options.appendToUserAgent;
|
129 | }
|
130 |
|
131 | // This is legacy, everything should use rest or api going forward
|
132 | this.options.httpClient = new _HttpClient2.default(Object.assign({ host: "rest.nexmo.com" }, this.options), this.credentials);
|
133 |
|
134 | // We have two different hosts, so we use two different HttpClients
|
135 | this.options.api = new _HttpClient2.default(Object.assign({ host: "api.nexmo.com" }, this.options), this.credentials);
|
136 | this.options.rest = new _HttpClient2.default(Object.assign({ host: "rest.nexmo.com" }, this.options), this.credentials);
|
137 |
|
138 | this.message = new _Message2.default(this.credentials, this.options);
|
139 | this.voice = new _Voice2.default(this.credentials, this.options);
|
140 | this.number = new _Number2.default(this.credentials, this.options);
|
141 | this.verify = new _Verify2.default(this.credentials, this.options);
|
142 | this.numberInsight = new _NumberInsight2.default(this.credentials, this.options);
|
143 | this.applications = new _App2.default(this.credentials, this.options);
|
144 | this.account = new _Account2.default(this.credentials, this.options);
|
145 | this.calls = new _CallsResource2.default(this.credentials, this.options);
|
146 | this.files = new _FilesResource2.default(this.credentials, this.options);
|
147 | this.conversion = new _Conversion2.default(this.credentials, this.options);
|
148 | this.media = new _Media2.default(this.credentials, this.options);
|
149 | this.redact = new _Redact2.default(this.credentials, this.options);
|
150 |
|
151 | /**
|
152 | * @deprecated Please use nexmo.applications
|
153 | */
|
154 | this.app = this.applications;
|
155 | }
|
156 |
|
157 | /**
|
158 | * Generate a JSON Web Token (JWT).
|
159 | *
|
160 | * The private key used upon Nexmo instance construction will be used to sign
|
161 | * the JWT. The application_id you used upon Nexmo instance creation will be
|
162 | * included in the claims for the JWT, however this can be overridden by passing
|
163 | * an application_id as part of the claims.
|
164 | *
|
165 | * @param {Object} claims - name/value pair claims to sign within the JWT
|
166 | *
|
167 | * @returns {String} the generated token
|
168 | */
|
169 |
|
170 |
|
171 | _createClass(Nexmo, [{
|
172 | key: "generateJwt",
|
173 | value: function generateJwt() {
|
174 | var claims = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
175 |
|
176 | if (claims.application_id === undefined) {
|
177 | claims.application_id = this.credentials.applicationId;
|
178 | }
|
179 | return Nexmo.generateJwt(this.credentials.privateKey, claims);
|
180 | }
|
181 | }]);
|
182 |
|
183 | return Nexmo;
|
184 | }();
|
185 |
|
186 | /**
|
187 | * Generate a JSON Web Token (JWT).
|
188 | *
|
189 | * @param {String|Buffer} privateKey - the path to the private key certificate
|
190 | * to be used when signing the claims.
|
191 | * @param {Object} claims - name/value pair claims to sign within the JWT
|
192 | *
|
193 | * @returns {String} the generated token
|
194 | */
|
195 |
|
196 |
|
197 | Nexmo.generateJwt = function (privateKey, claims) {
|
198 | if (!(privateKey instanceof Buffer)) {
|
199 | if (!_fs2.default.existsSync(privateKey)) {
|
200 | throw new Error("File \"" + privateKey + "\" not found.");
|
201 | } else {
|
202 | privateKey = _fs2.default.readFileSync(privateKey);
|
203 | }
|
204 | }
|
205 | return jwtGeneratorInstance.generate(privateKey, claims);
|
206 | };
|
207 |
|
208 | exports.default = Nexmo;
|
209 | module.exports = exports["default"];
|
210 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9OZXhtby5qcyJdLCJuYW1lcyI6WyJqd3RHZW5lcmF0b3JJbnN0YW5jZSIsIk5leG1vIiwiY3JlZGVudGlhbHMiLCJvcHRpb25zIiwiZGVidWciLCJwYXJzZSIsImxvZ2dlciIsInVzZXJBZ2VudCIsInBhY2thZ2VEZXRhaWxzIiwicmVxdWlyZSIsImpvaW4iLCJfX2Rpcm5hbWUiLCJ2ZXJzaW9uIiwicHJvY2VzcyIsInJlcGxhY2UiLCJlIiwiY29uc29sZSIsIndhcm4iLCJhcHBlbmRUb1VzZXJBZ2VudCIsImh0dHBDbGllbnQiLCJPYmplY3QiLCJhc3NpZ24iLCJob3N0IiwiYXBpIiwicmVzdCIsIm1lc3NhZ2UiLCJ2b2ljZSIsIm51bWJlciIsInZlcmlmeSIsIm51bWJlckluc2lnaHQiLCJhcHBsaWNhdGlvbnMiLCJhY2NvdW50IiwiY2FsbHMiLCJmaWxlcyIsImNvbnZlcnNpb24iLCJtZWRpYSIsInJlZGFjdCIsImFwcCIsImNsYWltcyIsImFwcGxpY2F0aW9uX2lkIiwidW5kZWZpbmVkIiwiYXBwbGljYXRpb25JZCIsImdlbmVyYXRlSnd0IiwicHJpdmF0ZUtleSIsIkJ1ZmZlciIsImV4aXN0c1N5bmMiLCJFcnJvciIsInJlYWRGaWxlU3luYyIsImdlbmVyYXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBOzs7O0FBQ0E7Ozs7QUFFQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7OztBQUVBLElBQU1BLHVCQUF1Qiw0QkFBN0I7O0lBRU1DLEs7QUFDSjs7Ozs7Ozs7OztBQVVBLGlCQUFZQyxXQUFaLEVBQXFEO0FBQUEsUUFBNUJDLE9BQTRCLHVFQUFsQixFQUFFQyxPQUFPLEtBQVQsRUFBa0I7O0FBQUE7O0FBQ25ELFNBQUtGLFdBQUwsR0FB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QWI7QUFDQSxTQUFLaUMsTUFBTCxHQUFjLHFCQUFXLEtBQUtsQyxXQUFoQixFQUE2QixLQUFLQyxPQUFsQyxDQUFkOztBQUVBOzs7QUFHQSxTQUFLa0MsR0FBTCxHQUFXLEtBQUtQLFlBQWhCO0FBQ0Q7O0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBWXlCO0FBQUEsVUFBYlEsTUFBYSx1RUFBSixFQUFJOztBQUN2QixVQUFJQSxPQUFPQyxjQUFQLEtBQTBCQyxTQUE5QixFQUF5QztBQUN2Q0YsZUFBT0MsY0FBUCxHQUF3QixLQUFLckMsV0FBTCxDQUFpQnVDLGFBQXpDO0FBQ0Q7QUFDRCxhQUFPeEMsTUFBTXlDLFdBQU4sQ0FBa0IsS0FBS3hDLFdBQUwsQ0FBaUJ5QyxVQUFuQyxFQUErQ0wsTUFBL0MsQ0FBUDtBQUNEOzs7Ozs7QUFHSDs7Ozs7Ozs7Ozs7QUFTQXJDLE1BQU15QyxXQUFOLEdBQW9CLFVBQUNDLFVBQUQsRUFBYUwsTUFBYixFQUF3QjtBQUMxQyxNQUFJLEVBQUVLLHNCQUFzQkMsTUFBeEIsQ0FBSixFQUFxQztBQUNuQyxRQUFJLENBQUMsYUFBR0MsVUFBSCxDQUFjRixVQUFkLENBQUwsRUFBZ0M7QUFDOUIsWUFBTSxJQUFJRyxLQUFKLGFBQW1CSCxVQUFuQixtQkFBTjtBQUNELEtBRkQsTUFFTztBQUNMQSxtQkFBYSxhQUFHSSxZQUFILENBQWdCSixVQUFoQixDQUFiO0FBQ0Q7QUFDRjtBQUNELFNBQU8zQyxxQkFBcUJnRCxRQUFyQixDQUE4QkwsVUFBOUIsRUFBMENMLE1BQTFDLENBQVA7QUFDRCxDQVREOztrQkFXZXJDLEsiLCJmaWxlIjoiTmV4bW8uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgQ3JlZGVudGlhbHMgZnJvbSBcIi4vQ3JlZGVudGlhbHNcIjtcbmltcG9ydCBKd3RHZW5lcmF0b3IgZnJvbSBcIi4vSnd0R2VuZXJhdG9yXCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwiLi9NZXNzYWdlXCI7XG5pbXBvcnQgVm9pY2UgZnJvbSBcIi4vVm9pY2VcIjtcbmltcG9ydCBOdW1iZXIgZnJvbSBcIi4vTnVtYmVyXCI7XG5pbXBvcnQgVmVyaWZ5IGZyb20gXCIuL1ZlcmlmeVwiO1xuaW1wb3J0IE51bWJlckluc2lnaHQgZnJvbSBcIi4vTnVtYmVySW5zaWdodFwiO1xuaW1wb3J0IEFwcCBmcm9tIFwiLi9BcHBcIjtcbmltcG9ydCBBY2NvdW50IGZyb20gXCIuL0FjY291bnRcIjtcbmltcG9ydCBDYWxsc1Jlc291cmNlIGZyb20gXCIuL0NhbGxzUmVzb3VyY2VcIjtcbmltcG9ydCBGaWxlc1Jlc291cmNlIGZyb20gXCIuL0ZpbGVzUmVzb3VyY2VcIjtcbmltcG9ydCBDb252ZXJzaW9uIGZyb20gXCIuL0NvbnZlcnNpb25cIjtcbmltcG9ydCBNZWRpYSBmcm9tIFwiLi9NZWRpYVwiO1xuaW1wb3J0IFJlZGFjdCBmcm9tIFwiLi9SZWRhY3RcIjtcbmltcG9ydCBIdHRwQ2xpZW50IGZyb20gXCIuL0h0dHBDbGllbnRcIjtcbmltcG9ydCBOdWxsTG9nZ2VyIGZyb20gXCIuL051bGxMb2dnZXJcIjtcbmltcG9ydCBDb25zb2xlTG9nZ2VyIGZyb20gXCIuL0NvbnNvbGVMb2dnZXJcIjtcblxuY29uc3Qgand0R2VuZXJhdG9ySW5zdGFuY2UgPSBuZXcgSnd0R2VuZXJhdG9yKCk7XG5cbmNsYXNzIE5leG1vIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Q3JlZGVudGlhbHN9IGNyZWRlbnRpYWxzIC0gTmV4bW8gQVBJIGNyZWRlbnRpYWxzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjcmVkZW50aWFscy5hcGlLZXkgLSB0aGUgTmV4bW8gQVBJIGtleVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3JlZGVudGlhbHMuYXBpU2VjcmV0IC0gdGhlIE5leG1vIEFQSSBzZWNyZXRcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLmRlYnVnIC0gYHRydWVgIHRvIHR1cm4gb24gZGVidWcgbG9nZ2luZ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucy5sb2dnZXIgLSBTZXQgYSBjdXN0b20gbG9nZ2VyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5hcHBlbmRUb1VzZXJBZ2VudCAtIEEgdmFsdWUgdG8gYXBwZW5kIHRvIHRoZSB1c2VyIGFnZW50LlxuICAgKiAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIHdpbGwgYmUgcHJlZml4ZWQgd2l0aCBhIGAvYFxuICAgKi9cbiAgY29uc3RydWN0b3IoY3JlZGVudGlhbHMsIG9wdGlvbnMgPSB7IGRlYnVnOiBmYWxzZSB9KSB7XG4gICAgdGhpcy5jcmVkZW50aWFscyA9IENyZWRlbnRpYWxzLnBhcnNlKGNyZWRlbnRpYWxzKTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgLy8gSWYgbm8gbG9nZ2VyIGhhcyBiZWVuIHN1cHBsaWVkIGJ1dCBkZWJ1ZyBoYXMgYmVlbiBzZXRcbiAgICAvLyBkZWZhdWx0IHRvIHVzaW5nIHRoZSBDb25zb2xlTG9nZ2VyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMubG9nZ2VyICYmIHRoaXMub3B0aW9ucy5kZWJ1Zykge1xuICAgICAgdGhpcy5vcHRpb25zLmxvZ2dlciA9IG5ldyBDb25zb2xlTG9nZ2VyKCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmxvZ2dlcikge1xuICAgICAgLy8gU3dhbGxvdyB0aGUgbG9nZ2luZ1xuICAgICAgdGhpcy5vcHRpb25zLmxvZ2dlciA9IG5ldyBOdWxsTG9nZ2VyKCk7XG4gICAgfVxuXG4gICAgbGV0IHVzZXJBZ2VudCA9IFwibmV4bW8tbm9kZS9VTktOT1dOIG5vZGUvVU5LTk9XTlwiO1xuICAgIHRyeSB7XG4gICAgICB2YXIgcGFja2FnZURldGFpbHMgPSByZXF1aXJlKHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi5cIiwgXCJwYWNrYWdlLmpzb25cIikpO1xuICAgICAgdXNlckFnZW50ID0gYG5leG1vLW5vZGUvJHtcbiAgICAgICAgcGFja2FnZURldGFpbHMudmVyc2lvblxuICAgICAgfSBub2RlLyR7cHJvY2Vzcy52ZXJzaW9uLnJlcGxhY2UoXCJ2XCIsIFwiXCIpfWA7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKFwiQ291bGQgbm90IGxvYWQgcGFja2FnZSBkZXRhaWxzXCIpO1xuICAgIH1cbiAgICB0aGlzLm9wdGlvbnMudXNlckFnZW50ID0gdXNlckFnZW50O1xuICAgIGlmICh0aGlzLm9wdGlvbnMuYXBwZW5kVG9Vc2VyQWdlbnQpIHtcbiAgICAgIHRoaXMub3B0aW9ucy51c2VyQWdlbnQgKz0gYCAke3RoaXMub3B0aW9ucy5hcHBlbmRUb1VzZXJBZ2VudH1gO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgbGVnYWN5LCBldmVyeXRoaW5nIHNob3VsZCB1c2UgcmVzdCBvciBhcGkgZ29pbmcgZm9yd2FyZFxuICAgIHRoaXMub3B0aW9ucy5odHRwQ2xpZW50ID0gbmV3IEh0dHBDbGllbnQoXG4gICAgICBPYmplY3QuYXNzaWduKHsgaG9zdDogXCJyZXN0Lm5leG1vLmNvbVwiIH0sIHRoaXMub3B0aW9ucyksXG4gICAgICB0aGlzLmNyZWRlbnRpYWxzXG4gICAgKTtcblxuICAgIC8vIFdlIGhhdmUgdHdvIGRpZmZlcmVudCBob3N0cywgc28gd2UgdXNlIHR3byBkaWZmZXJlbnQgSHR0cENsaWVudHNcbiAgICB0aGlzLm9wdGlvbnMuYXBpID0gbmV3IEh0dHBDbGllbnQoXG4gICAgICBPYmplY3QuYXNzaWduKHsgaG9zdDogXCJhcGkubmV4bW8uY29tXCIgfSwgdGhpcy5vcHRpb25zKSxcbiAgICAgIHRoaXMuY3JlZGVudGlhbHNcbiAgICApO1xuICAgIHRoaXMub3B0aW9ucy5yZXN0ID0gbmV3IEh0dHBDbGllbnQoXG4gICAgICBPYmplY3QuYXNzaWduKHsgaG9zdDogXCJyZXN0Lm5leG1vLmNvbVwiIH0sIHRoaXMub3B0aW9ucyksXG4gICAgICB0aGlzLmNyZWRlbnRpYWxzXG4gICAgKTtcblxuICAgIHRoaXMubWVzc2FnZSA9IG5ldyBNZXNzYWdlKHRoaXMuY3JlZGVudGlhbHMsIHRoaXMub3B0aW9ucyk7XG4gICAgdGhpcy52b2ljZSA9IG5ldyBWb2ljZSh0aGlzLmNyZWRlbnRpYWxzLCB0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMubnVtYmVyID0gbmV3IE51bWJlcih0aGlzLmNyZWRlbnRpYWxzLCB0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMudmVyaWZ5ID0gbmV3IFZlcmlmeSh0aGlzLmNyZWRlbnRpYWxzLCB0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMubnVtYmVySW5zaWdodCA9IG5ldyBOdW1iZXJJbnNpZ2h0KHRoaXMuY3JlZGVudGlhbHMsIHRoaXMub3B0aW9ucyk7XG4gICAgdGhpcy5hcHBsaWNhdGlvbnMgPSBuZXcgQXBwKHRoaXMuY3JlZGVudGlhbHMsIHRoaXMub3B0aW9ucyk7XG4gICAgdGhpcy5hY2NvdW50ID0gbmV3IEFjY291bnQodGhpcy5jcmVkZW50aWFscywgdGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLmNhbGxzID0gbmV3IENhbGxzUmVzb3VyY2UodGhpcy5jcmVkZW50aWFscywgdGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLmZpbGVzID0gbmV3IEZpbGVzUmVzb3VyY2UodGhpcy5jcmVkZW50aWFscywgdGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLmNvbnZlcnNpb24gPSBuZXcgQ29udmVyc2lvbih0aGlzLmNyZWRlbnRpYWxzLCB0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMubWVkaWEgPSBuZXcgTWVkaWEodGhpcy5jcmVkZW50aWFscywgdGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLnJlZGFjdCA9IG5ldyBSZWRhY3QodGhpcy5jcmVkZW50aWFscywgdGhpcy5vcHRpb25zKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgbmV4bW8uYXBwbGljYXRpb25zXG4gICAgICovXG4gICAgdGhpcy5hcHAgPSB0aGlzLmFwcGxpY2F0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIEpTT04gV2ViIFRva2VuIChKV1QpLlxuICAgKlxuICAgKiBUaGUgcHJpdmF0ZSBrZXkgdXNlZCB1cG9uIE5leG1vIGluc3RhbmNlIGNvbnN0cnVjdGlvbiB3aWxsIGJlIHVzZWQgdG8gc2lnblxuICAgKiB0aGUgSldULiBUaGUgYXBwbGljYXRpb25faWQgeW91IHVzZWQgdXBvbiBOZXhtbyBpbnN0YW5jZSBjcmVhdGlvbiB3aWxsIGJlXG4gICAqIGluY2x1ZGVkIGluIHRoZSBjbGFpbXMgZm9yIHRoZSBKV1QsIGhvd2V2ZXIgdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBwYXNzaW5nXG4gICAqIGFuIGFwcGxpY2F0aW9uX2lkIGFzIHBhcnQgb2YgdGhlIGNsYWltcy5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNsYWltcyAtIG5hbWUvdmFsdWUgcGFpciBjbGFpbXMgdG8gc2lnbiB3aXRoaW4gdGhlIEpXVFxuICAgKlxuICAgKiBAcmV0dXJucyB7U3RyaW5nfSB0aGUgZ2VuZXJhdGVkIHRva2VuXG4gICAqL1xuICBnZW5lcmF0ZUp3dChjbGFpbXMgPSB7fSkge1xuICAgIGlmIChjbGFpbXMuYXBwbGljYXRpb25faWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xhaW1zLmFwcGxpY2F0aW9uX2lkID0gdGhpcy5jcmVkZW50aWFscy5hcHBsaWNhdGlvbklkO1xuICAgIH1cbiAgICByZXR1cm4gTmV4bW8uZ2VuZXJhdGVKd3QodGhpcy5jcmVkZW50aWFscy5wcml2YXRlS2V5LCBjbGFpbXMpO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBKU09OIFdlYiBUb2tlbiAoSldUKS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xCdWZmZXJ9IHByaXZhdGVLZXkgLSB0aGUgcGF0aCB0byB0aGUgcHJpdmF0ZSBrZXkgY2VydGlmaWNhdGVcbiAqICAgICAgICAgIHRvIGJlIHVzZWQgd2hlbiBzaWduaW5nIHRoZSBjbGFpbXMuXG4gKiBAcGFyYW0ge09iamVjdH0gY2xhaW1zIC0gbmFtZS92YWx1ZSBwYWlyIGNsYWltcyB0byBzaWduIHdpdGhpbiB0aGUgSldUXG4gKlxuICogQHJldHVybnMge1N0cmluZ30gdGhlIGdlbmVyYXRlZCB0b2tlblxuICovXG5OZXhtby5nZW5lcmF0ZUp3dCA9IChwcml2YXRlS2V5LCBjbGFpbXMpID0+IHtcbiAgaWYgKCEocHJpdmF0ZUtleSBpbnN0YW5jZW9mIEJ1ZmZlcikpIHtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMocHJpdmF0ZUtleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSBcIiR7cHJpdmF0ZUtleX1cIiBub3QgZm91bmQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByaXZhdGVLZXkgPSBmcy5yZWFkRmlsZVN5bmMocHJpdmF0ZUtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBqd3RHZW5lcmF0b3JJbnN0YW5jZS5nZW5lcmF0ZShwcml2YXRlS2V5LCBjbGFpbXMpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTmV4bW87XG4iXX0= |
\ | No newline at end of file |