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