bx-rest 1.2.0 → 1.4.0

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.
Files changed (34) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/README.en.md +235 -2
  3. package/README.md +235 -2
  4. package/esm2022/functions/errors.mjs +18 -2
  5. package/esm2022/public-api.mjs +6 -2
  6. package/esm2022/rest/base.mjs +3 -3
  7. package/esm2022/services/frame/frame.mjs +347 -0
  8. package/esm2022/services/frame/transport.mjs +224 -0
  9. package/esm2022/services/frame/types.mjs +2 -0
  10. package/esm2022/services/http/HttpBX.mjs +39 -17
  11. package/esm2022/services/http/authRefresh.mjs +89 -0
  12. package/esm2022/services/http/sessionKey.mjs +8 -1
  13. package/esm2022/services/navvy/extends/navvy-pag-base.mjs +25 -4
  14. package/esm2022/services/navvy/navvy-alternative-pagination-navigation.mjs +2 -2
  15. package/esm2022/services/navvy/navvy-pag-nav-result-key-object.mjs +2 -2
  16. package/esm2022/services/navvy/navvy-pag-nav-result-key.mjs +2 -2
  17. package/esm2022/services/navvy/navvy-pag-nav-tasks.mjs +2 -2
  18. package/esm2022/services/navvy/navvy-pag-nav-with-useless-key.mjs +2 -2
  19. package/esm2022/services/navvy/navvy-pag.mjs +2 -2
  20. package/esm2022/typification/settings.mjs +1 -1
  21. package/fesm2022/bx-rest.mjs +820 -101
  22. package/fesm2022/bx-rest.mjs.map +1 -1
  23. package/functions/errors.d.ts +17 -0
  24. package/package.json +1 -1
  25. package/public-api.d.ts +5 -1
  26. package/rest/base.d.ts +1 -1
  27. package/services/frame/frame.d.ts +191 -0
  28. package/services/frame/transport.d.ts +75 -0
  29. package/services/frame/types.d.ts +123 -0
  30. package/services/http/HttpBX.d.ts +15 -4
  31. package/services/http/authRefresh.d.ts +19 -0
  32. package/services/http/sessionKey.d.ts +5 -0
  33. package/services/navvy/extends/navvy-pag-base.d.ts +11 -0
  34. package/typification/settings.d.ts +24 -0
@@ -1,4 +1,18 @@
1
1
  import axios from 'axios';
2
+ /**
3
+ * Why `BXRestSettings.auth.refresh` failed. When a request fails with an
4
+ * authorization error and the refresh fails too, the library rethrows the
5
+ * original request error and puts the refresh failure into its
6
+ * `authRefreshError` field — on the `AxiosError` of `.resVanilla()` and the
7
+ * like, and on the `BXRestApiError` / `Error` of `.res()`.
8
+ *
9
+ * Returns `undefined` when there was no refresh or it succeeded.
10
+ */
11
+ export function getAuthRefreshError(error) {
12
+ return (error && typeof error === 'object')
13
+ ? error.authRefreshError
14
+ : undefined;
15
+ }
2
16
  /**
3
17
  * A Bitrix-level API error, e.g. `INSUFFICIENT_SCOPE` or `expired_token`.
4
18
  *
@@ -16,6 +30,7 @@ export class BXRestApiError extends Error {
16
30
  this.name = 'BXRestApiError';
17
31
  this.status = details?.status;
18
32
  this.method = details?.method;
33
+ this.authRefreshError = details?.authRefreshError;
19
34
  }
20
35
  }
21
36
  /**
@@ -67,7 +82,8 @@ export function bxRestApiErrorFromHttp(err, method) {
67
82
  return new BXRestApiError(parsed.error, parsed.error_description, {
68
83
  status: err.response.status,
69
84
  method,
70
- cause: err
85
+ cause: err,
86
+ authRefreshError: getAuthRefreshError(err)
71
87
  });
72
88
  }
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYngtcmVzdC9zcmMvZnVuY3Rpb25zL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUE7QUFpQnpCOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxPQUFPLGNBQWUsU0FBUSxLQUFLO0lBSXZDLFlBQ1MsS0FBeUIsRUFDekIsaUJBQXFDLEVBQzVDLE9BQStCO1FBRS9CLEtBQUssQ0FDSCxpQkFBaUIsSUFBSSxLQUFLLElBQUksa0JBQWtCLEVBQ2hELE9BQU8sRUFBRSxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDcEUsQ0FBQTtRQVBNLFVBQUssR0FBTCxLQUFLLENBQW9CO1FBQ3pCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBb0I7UUFPNUMsSUFBSSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQTtRQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sRUFBRSxNQUFNLENBQUE7UUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLEVBQUUsTUFBTSxDQUFBO0lBQy9CLENBQUM7Q0FDRjtBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsSUFBYTtJQUVoRCxJQUFJLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDNUQsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUNELE1BQU0sRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxJQUF1RCxDQUFBO0lBRTVGLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsT0FBTztZQUNMLEtBQUs7WUFDTCxpQkFBaUIsRUFBRSxPQUFPLGlCQUFpQixLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDekYsQ0FBQTtJQUNILENBQUM7SUFFRCxJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksTUFBTSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQzFELE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsS0FBNkMsQ0FBQTtRQUN2RSxPQUFPO1lBQ0wsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDbkIsaUJBQWlCLEVBQUUsT0FBTyxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDckUsQ0FBQTtJQUNILENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQTtBQUNsQixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLEdBQVksRUFBRSxNQUFjO0lBQ2pFLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlDLE9BQU8sU0FBUyxDQUFBO0lBQ2xCLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3RELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE9BQU8sU0FBUyxDQUFBO0lBQ2xCLENBQUM7SUFDRCxPQUFPLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixFQUFFO1FBQ2hFLE1BQU0sRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU07UUFDM0IsTUFBTTtRQUNOLEtBQUssRUFBRSxHQUFHO0tBQ1gsQ0FBQyxDQUFBO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcyBmcm9tICdheGlvcydcblxuZXhwb3J0IGludGVyZmFjZSBCWFJlc3RBcGlFcnJvckRldGFpbHMge1xuICAvKipcbiAgICogSFRUUCBzdGF0dXMgb2YgdGhlIHBvcnRhbCByZXNwb25zZS4gYHVuZGVmaW5lZGAgd2hlbiB0aGUgZXJyb3IgY2FtZSBpblxuICAgKiB0aGUgYm9keSBvZiBhIHN1Y2Nlc3NmdWwgKDJ4eCkgcmVzcG9uc2UuXG4gICAqL1xuICBzdGF0dXM/OiBudW1iZXJcbiAgLyoqIFJFU1QgbWV0aG9kIHRoYXQgZmFpbGVkLCBlLmcuIGBjcm0uZGVhbC5nZXRgLiAqL1xuICBtZXRob2Q/OiBzdHJpbmdcbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCBlcnJvciwgZS5nLiB0aGUgYEF4aW9zRXJyb3JgIOKAlCBpdHMgYHJlc3BvbnNlLmRhdGFgIGhvbGRzXG4gICAqIHRoZSBmdWxsIHJlc3BvbnNlIGJvZHkgKGluY2x1ZGluZyBSRVNUIHYzIGB2YWxpZGF0aW9uYCkuXG4gICAqL1xuICBjYXVzZT86IHVua25vd25cbn1cblxuLyoqXG4gKiBBIEJpdHJpeC1sZXZlbCBBUEkgZXJyb3IsIGUuZy4gYElOU1VGRklDSUVOVF9TQ09QRWAgb3IgYGV4cGlyZWRfdG9rZW5gLlxuICpcbiAqIGAucmVzKClgIGZhaWxzIHdpdGggaXQgd2hlbmV2ZXIgdGhlIHBvcnRhbCBhbnN3ZXJzIHdpdGggYSBCaXRyaXggZXJyb3IgYW5kXG4gKiBhIG5vbi0yeHggSFRUUCBzdGF0dXMg4oCUIHdoaWNoIGlzIGhvdyBCaXRyaXggc2VuZHMgbW9zdCBvZiBpdHMgZXJyb3JzLiBXaGVuXG4gKiB0aGUgZXJyb3IgY29tZXMgaW4gdGhlIGJvZHkgb2YgYSAyeHggcmVzcG9uc2UsIGAucmVzKClgIHJlc29sdmVzIGFzXG4gKiBgdW5kZWZpbmVkYCBieSBkZWZhdWx0IGFuZCBmYWlscyB3aXRoIGl0IG9ubHkgd2l0aFxuICogYHsgdGhyb3dPbkFwaUVycm9yOiB0cnVlIH1gIOKAlCBzZWUgdGhlIFwiRXJyb3IgaGFuZGxpbmdcIiBzZWN0aW9uIG9mIHRoZSBSRUFETUUuXG4gKi9cbmV4cG9ydCBjbGFzcyBCWFJlc3RBcGlFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgc3RhdHVzOiBudW1iZXIgfCB1bmRlZmluZWRcbiAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmcgfCB1bmRlZmluZWRcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZXJyb3I6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBwdWJsaWMgZXJyb3JfZGVzY3JpcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBkZXRhaWxzPzogQlhSZXN0QXBpRXJyb3JEZXRhaWxzXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgZXJyb3JfZGVzY3JpcHRpb24gfHwgZXJyb3IgfHwgJ0JpdHJpeCBBUEkgZXJyb3InLFxuICAgICAgZGV0YWlscz8uY2F1c2UgIT09IHVuZGVmaW5lZCA/IHsgY2F1c2U6IGRldGFpbHMuY2F1c2UgfSA6IHVuZGVmaW5lZFxuICAgIClcbiAgICB0aGlzLm5hbWUgPSAnQlhSZXN0QXBpRXJyb3InXG4gICAgdGhpcy5zdGF0dXMgPSBkZXRhaWxzPy5zdGF0dXNcbiAgICB0aGlzLm1ldGhvZCA9IGRldGFpbHM/Lm1ldGhvZFxuICB9XG59XG5cbi8qKlxuICogUmVjb2duaXNlcyBhIEJpdHJpeCBlcnJvciBib2R5OiBSRVNUIHYyIGB7IGVycm9yLCBlcnJvcl9kZXNjcmlwdGlvbiB9YCBhbmRcbiAqIFJFU1QgdjMgYHsgZXJyb3I6IHsgY29kZSwgbWVzc2FnZSB9IH1gLiBSZXR1cm5zIGB1bmRlZmluZWRgIGZvciBhbnl0aGluZ1xuICogZWxzZSDigJQgYSBzdWNjZXNzIHBheWxvYWQsIGFuIEhUTUwgcGFnZSBmcm9tIGEgcHJveHksIGFuIGVtcHR5IGJvZHkuXG4gKlxuICogQW4gZW1wdHkgYGVycm9yYCBzdGlsbCBjb3VudHM6IEJpdHJpeCBhbnN3ZXJzIGUuZy4gYGNybS5kZWFsLmdldGAgZm9yIGFcbiAqIG1pc3NpbmcgSUQgd2l0aCBgeyBlcnJvcjogJycsIGVycm9yX2Rlc2NyaXB0aW9uOiAnTm90IGZvdW5kJyB9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQlhSZXN0RXJyb3JCb2R5KGJvZHk6IHVua25vd24pXG4gIDogeyBlcnJvcjogc3RyaW5nLCBlcnJvcl9kZXNjcmlwdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkIH0gfCB1bmRlZmluZWQge1xuICBpZiAoIWJvZHkgfHwgdHlwZW9mIGJvZHkgIT09ICdvYmplY3QnIHx8ICEoJ2Vycm9yJyBpbiBib2R5KSkge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuICBjb25zdCB7IGVycm9yLCBlcnJvcl9kZXNjcmlwdGlvbiB9ID0gYm9keSBhcyB7IGVycm9yOiB1bmtub3duLCBlcnJvcl9kZXNjcmlwdGlvbj86IHVua25vd24gfVxuXG4gIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yLFxuICAgICAgZXJyb3JfZGVzY3JpcHRpb246IHR5cGVvZiBlcnJvcl9kZXNjcmlwdGlvbiA9PT0gJ3N0cmluZycgPyBlcnJvcl9kZXNjcmlwdGlvbiA6IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxuXG4gIGlmIChlcnJvciAmJiB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnICYmICdjb2RlJyBpbiBlcnJvcikge1xuICAgIGNvbnN0IHsgY29kZSwgbWVzc2FnZSB9ID0gZXJyb3IgYXMgeyBjb2RlOiB1bmtub3duLCBtZXNzYWdlPzogdW5rbm93biB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiBTdHJpbmcoY29kZSksXG4gICAgICBlcnJvcl9kZXNjcmlwdGlvbjogdHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnID8gbWVzc2FnZSA6IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBUdXJucyBhbiBIVFRQIGZhaWx1cmUgaW50byBhIGBCWFJlc3RBcGlFcnJvcmAgd2hlbiB0aGUgcG9ydGFsIGFuc3dlcmVkIHdpdGhcbiAqIGEgQml0cml4IGVycm9yIGJvZHkuIEJpdHJpeCBzZW5kcyBtb3N0IGVycm9ycyB3aXRoIGEgbm9uLTJ4eCBzdGF0dXNcbiAqICg0MDEgYGV4cGlyZWRfdG9rZW5gLCA0MDQgYEVSUk9SX01FVEhPRF9OT1RfRk9VTkRgLCA1MDNcbiAqIGBRVUVSWV9MSU1JVF9FWENFRURFRGAsIDQwMCBcIk5vdCBmb3VuZFwiIGZyb20gYGNybS4qLmdldGAsIC4uLiksIGFuZCBheGlvc1xuICogcmVqZWN0cyBvbiB0aG9zZS5cbiAqXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIGZvciBuZXR3b3JrIGVycm9ycyBhbmQgZm9yIHJlc3BvbnNlcyB0aGF0IGFyZSBub3QgYVxuICogQml0cml4IGVycm9yIGJvZHksIHNvIHRoZSBjYWxsZXIgY2FuIGtlZXAgaXRzIG93biBoYW5kbGluZyBmb3IgdGhlbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ4UmVzdEFwaUVycm9yRnJvbUh0dHAoZXJyOiB1bmtub3duLCBtZXRob2Q6IHN0cmluZyk6IEJYUmVzdEFwaUVycm9yIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFheGlvcy5pc0F4aW9zRXJyb3IoZXJyKSB8fCAhZXJyLnJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlQlhSZXN0RXJyb3JCb2R5KGVyci5yZXNwb25zZS5kYXRhKVxuICBpZiAoIXBhcnNlZCkge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuICByZXR1cm4gbmV3IEJYUmVzdEFwaUVycm9yKHBhcnNlZC5lcnJvciwgcGFyc2VkLmVycm9yX2Rlc2NyaXB0aW9uLCB7XG4gICAgc3RhdHVzOiBlcnIucmVzcG9uc2Uuc3RhdHVzLFxuICAgIG1ldGhvZCxcbiAgICBjYXVzZTogZXJyXG4gIH0pXG59XG4iXX0=
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYngtcmVzdC9zcmMvZnVuY3Rpb25zL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUE7QUFzQnpCOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEtBQWM7SUFDaEQsT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUM7UUFDekMsQ0FBQyxDQUFFLEtBQXdDLENBQUMsZ0JBQWdCO1FBQzVELENBQUMsQ0FBQyxTQUFTLENBQUE7QUFDZixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLE9BQU8sY0FBZSxTQUFRLEtBQUs7SUFNdkMsWUFDUyxLQUF5QixFQUN6QixpQkFBcUMsRUFDNUMsT0FBK0I7UUFFL0IsS0FBSyxDQUNILGlCQUFpQixJQUFJLEtBQUssSUFBSSxrQkFBa0IsRUFDaEQsT0FBTyxFQUFFLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUNwRSxDQUFBO1FBUE0sVUFBSyxHQUFMLEtBQUssQ0FBb0I7UUFDekIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFvQjtRQU81QyxJQUFJLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFBO1FBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxFQUFFLE1BQU0sQ0FBQTtRQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sRUFBRSxNQUFNLENBQUE7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQTtJQUNuRCxDQUFDO0NBQ0Y7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLElBQWE7SUFFaEQsSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzVELE9BQU8sU0FBUyxDQUFBO0lBQ2xCLENBQUM7SUFDRCxNQUFNLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLEdBQUcsSUFBdUQsQ0FBQTtJQUU1RixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE9BQU87WUFDTCxLQUFLO1lBQ0wsaUJBQWlCLEVBQUUsT0FBTyxpQkFBaUIsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ3pGLENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE1BQU0sSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUMxRCxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEtBQTZDLENBQUE7UUFDdkUsT0FBTztZQUNMLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ25CLGlCQUFpQixFQUFFLE9BQU8sT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ3JFLENBQUE7SUFDSCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUE7QUFDbEIsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxHQUFZLEVBQUUsTUFBYztJQUNqRSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QyxPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN0RCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDWixPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0lBQ0QsT0FBTyxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRTtRQUNoRSxNQUFNLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNO1FBQzNCLE1BQU07UUFDTixLQUFLLEVBQUUsR0FBRztRQUNWLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDLEdBQUcsQ0FBQztLQUMzQyxDQUFDLENBQUE7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEJYUmVzdEFwaUVycm9yRGV0YWlscyB7XG4gIC8qKlxuICAgKiBIVFRQIHN0YXR1cyBvZiB0aGUgcG9ydGFsIHJlc3BvbnNlLiBgdW5kZWZpbmVkYCB3aGVuIHRoZSBlcnJvciBjYW1lIGluXG4gICAqIHRoZSBib2R5IG9mIGEgc3VjY2Vzc2Z1bCAoMnh4KSByZXNwb25zZS5cbiAgICovXG4gIHN0YXR1cz86IG51bWJlclxuICAvKiogUkVTVCBtZXRob2QgdGhhdCBmYWlsZWQsIGUuZy4gYGNybS5kZWFsLmdldGAuICovXG4gIG1ldGhvZD86IHN0cmluZ1xuICAvKipcbiAgICogVGhlIG9yaWdpbmFsIGVycm9yLCBlLmcuIHRoZSBgQXhpb3NFcnJvcmAg4oCUIGl0cyBgcmVzcG9uc2UuZGF0YWAgaG9sZHNcbiAgICogdGhlIGZ1bGwgcmVzcG9uc2UgYm9keSAoaW5jbHVkaW5nIFJFU1QgdjMgYHZhbGlkYXRpb25gKS5cbiAgICovXG4gIGNhdXNlPzogdW5rbm93blxuICAvKipcbiAgICogV2h5IGBCWFJlc3RTZXR0aW5ncy5hdXRoLnJlZnJlc2hgIGZhaWxlZCwgd2hlbiB0aGUgcmVxdWVzdCBmYWlsZWQgd2l0aFxuICAgKiBhbiBhdXRob3JpemF0aW9uIGVycm9yIGFuZCB0aGUgcmVmcmVzaCBjb3VsZCBub3QgZml4IGl0LlxuICAgKi9cbiAgYXV0aFJlZnJlc2hFcnJvcj86IHVua25vd25cbn1cblxuLyoqXG4gKiBXaHkgYEJYUmVzdFNldHRpbmdzLmF1dGgucmVmcmVzaGAgZmFpbGVkLiBXaGVuIGEgcmVxdWVzdCBmYWlscyB3aXRoIGFuXG4gKiBhdXRob3JpemF0aW9uIGVycm9yIGFuZCB0aGUgcmVmcmVzaCBmYWlscyB0b28sIHRoZSBsaWJyYXJ5IHJldGhyb3dzIHRoZVxuICogb3JpZ2luYWwgcmVxdWVzdCBlcnJvciBhbmQgcHV0cyB0aGUgcmVmcmVzaCBmYWlsdXJlIGludG8gaXRzXG4gKiBgYXV0aFJlZnJlc2hFcnJvcmAgZmllbGQg4oCUIG9uIHRoZSBgQXhpb3NFcnJvcmAgb2YgYC5yZXNWYW5pbGxhKClgIGFuZCB0aGVcbiAqIGxpa2UsIGFuZCBvbiB0aGUgYEJYUmVzdEFwaUVycm9yYCAvIGBFcnJvcmAgb2YgYC5yZXMoKWAuXG4gKlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIHRoZXJlIHdhcyBubyByZWZyZXNoIG9yIGl0IHN1Y2NlZWRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEF1dGhSZWZyZXNoRXJyb3IoZXJyb3I6IHVua25vd24pOiB1bmtub3duIHtcbiAgcmV0dXJuIChlcnJvciAmJiB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnKVxuICAgID8gKGVycm9yIGFzIHsgYXV0aFJlZnJlc2hFcnJvcj86IHVua25vd24gfSkuYXV0aFJlZnJlc2hFcnJvclxuICAgIDogdW5kZWZpbmVkXG59XG5cbi8qKlxuICogQSBCaXRyaXgtbGV2ZWwgQVBJIGVycm9yLCBlLmcuIGBJTlNVRkZJQ0lFTlRfU0NPUEVgIG9yIGBleHBpcmVkX3Rva2VuYC5cbiAqXG4gKiBgLnJlcygpYCBmYWlscyB3aXRoIGl0IHdoZW5ldmVyIHRoZSBwb3J0YWwgYW5zd2VycyB3aXRoIGEgQml0cml4IGVycm9yIGFuZFxuICogYSBub24tMnh4IEhUVFAgc3RhdHVzIOKAlCB3aGljaCBpcyBob3cgQml0cml4IHNlbmRzIG1vc3Qgb2YgaXRzIGVycm9ycy4gV2hlblxuICogdGhlIGVycm9yIGNvbWVzIGluIHRoZSBib2R5IG9mIGEgMnh4IHJlc3BvbnNlLCBgLnJlcygpYCByZXNvbHZlcyBhc1xuICogYHVuZGVmaW5lZGAgYnkgZGVmYXVsdCBhbmQgZmFpbHMgd2l0aCBpdCBvbmx5IHdpdGhcbiAqIGB7IHRocm93T25BcGlFcnJvcjogdHJ1ZSB9YCDigJQgc2VlIHRoZSBcIkVycm9yIGhhbmRsaW5nXCIgc2VjdGlvbiBvZiB0aGUgUkVBRE1FLlxuICovXG5leHBvcnQgY2xhc3MgQlhSZXN0QXBpRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IHN0YXR1czogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIHJlYWRvbmx5IG1ldGhvZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIC8qKiBTZWUgYGdldEF1dGhSZWZyZXNoRXJyb3IoKWAuICovXG4gIHJlYWRvbmx5IGF1dGhSZWZyZXNoRXJyb3I6IHVua25vd25cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZXJyb3I6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBwdWJsaWMgZXJyb3JfZGVzY3JpcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBkZXRhaWxzPzogQlhSZXN0QXBpRXJyb3JEZXRhaWxzXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgZXJyb3JfZGVzY3JpcHRpb24gfHwgZXJyb3IgfHwgJ0JpdHJpeCBBUEkgZXJyb3InLFxuICAgICAgZGV0YWlscz8uY2F1c2UgIT09IHVuZGVmaW5lZCA/IHsgY2F1c2U6IGRldGFpbHMuY2F1c2UgfSA6IHVuZGVmaW5lZFxuICAgIClcbiAgICB0aGlzLm5hbWUgPSAnQlhSZXN0QXBpRXJyb3InXG4gICAgdGhpcy5zdGF0dXMgPSBkZXRhaWxzPy5zdGF0dXNcbiAgICB0aGlzLm1ldGhvZCA9IGRldGFpbHM/Lm1ldGhvZFxuICAgIHRoaXMuYXV0aFJlZnJlc2hFcnJvciA9IGRldGFpbHM/LmF1dGhSZWZyZXNoRXJyb3JcbiAgfVxufVxuXG4vKipcbiAqIFJlY29nbmlzZXMgYSBCaXRyaXggZXJyb3IgYm9keTogUkVTVCB2MiBgeyBlcnJvciwgZXJyb3JfZGVzY3JpcHRpb24gfWAgYW5kXG4gKiBSRVNUIHYzIGB7IGVycm9yOiB7IGNvZGUsIG1lc3NhZ2UgfSB9YC4gUmV0dXJucyBgdW5kZWZpbmVkYCBmb3IgYW55dGhpbmdcbiAqIGVsc2Ug4oCUIGEgc3VjY2VzcyBwYXlsb2FkLCBhbiBIVE1MIHBhZ2UgZnJvbSBhIHByb3h5LCBhbiBlbXB0eSBib2R5LlxuICpcbiAqIEFuIGVtcHR5IGBlcnJvcmAgc3RpbGwgY291bnRzOiBCaXRyaXggYW5zd2VycyBlLmcuIGBjcm0uZGVhbC5nZXRgIGZvciBhXG4gKiBtaXNzaW5nIElEIHdpdGggYHsgZXJyb3I6ICcnLCBlcnJvcl9kZXNjcmlwdGlvbjogJ05vdCBmb3VuZCcgfWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUJYUmVzdEVycm9yQm9keShib2R5OiB1bmtub3duKVxuICA6IHsgZXJyb3I6IHN0cmluZywgZXJyb3JfZGVzY3JpcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZCB9IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFib2R5IHx8IHR5cGVvZiBib2R5ICE9PSAnb2JqZWN0JyB8fCAhKCdlcnJvcicgaW4gYm9keSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbiAgY29uc3QgeyBlcnJvciwgZXJyb3JfZGVzY3JpcHRpb24gfSA9IGJvZHkgYXMgeyBlcnJvcjogdW5rbm93biwgZXJyb3JfZGVzY3JpcHRpb24/OiB1bmtub3duIH1cblxuICBpZiAodHlwZW9mIGVycm9yID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcixcbiAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiB0eXBlb2YgZXJyb3JfZGVzY3JpcHRpb24gPT09ICdzdHJpbmcnID8gZXJyb3JfZGVzY3JpcHRpb24gOiB1bmRlZmluZWRcbiAgICB9XG4gIH1cblxuICBpZiAoZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiAnY29kZScgaW4gZXJyb3IpIHtcbiAgICBjb25zdCB7IGNvZGUsIG1lc3NhZ2UgfSA9IGVycm9yIGFzIHsgY29kZTogdW5rbm93biwgbWVzc2FnZT86IHVua25vd24gfVxuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjogU3RyaW5nKGNvZGUpLFxuICAgICAgZXJyb3JfZGVzY3JpcHRpb246IHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJyA/IG1lc3NhZ2UgOiB1bmRlZmluZWRcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogVHVybnMgYW4gSFRUUCBmYWlsdXJlIGludG8gYSBgQlhSZXN0QXBpRXJyb3JgIHdoZW4gdGhlIHBvcnRhbCBhbnN3ZXJlZCB3aXRoXG4gKiBhIEJpdHJpeCBlcnJvciBib2R5LiBCaXRyaXggc2VuZHMgbW9zdCBlcnJvcnMgd2l0aCBhIG5vbi0yeHggc3RhdHVzXG4gKiAoNDAxIGBleHBpcmVkX3Rva2VuYCwgNDA0IGBFUlJPUl9NRVRIT0RfTk9UX0ZPVU5EYCwgNTAzXG4gKiBgUVVFUllfTElNSVRfRVhDRUVERURgLCA0MDAgXCJOb3QgZm91bmRcIiBmcm9tIGBjcm0uKi5nZXRgLCAuLi4pLCBhbmQgYXhpb3NcbiAqIHJlamVjdHMgb24gdGhvc2UuXG4gKlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCBmb3IgbmV0d29yayBlcnJvcnMgYW5kIGZvciByZXNwb25zZXMgdGhhdCBhcmUgbm90IGFcbiAqIEJpdHJpeCBlcnJvciBib2R5LCBzbyB0aGUgY2FsbGVyIGNhbiBrZWVwIGl0cyBvd24gaGFuZGxpbmcgZm9yIHRoZW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBieFJlc3RBcGlFcnJvckZyb21IdHRwKGVycjogdW5rbm93biwgbWV0aG9kOiBzdHJpbmcpOiBCWFJlc3RBcGlFcnJvciB8IHVuZGVmaW5lZCB7XG4gIGlmICghYXhpb3MuaXNBeGlvc0Vycm9yKGVycikgfHwgIWVyci5yZXNwb25zZSkge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuICBjb25zdCBwYXJzZWQgPSBwYXJzZUJYUmVzdEVycm9yQm9keShlcnIucmVzcG9uc2UuZGF0YSlcbiAgaWYgKCFwYXJzZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbiAgcmV0dXJuIG5ldyBCWFJlc3RBcGlFcnJvcihwYXJzZWQuZXJyb3IsIHBhcnNlZC5lcnJvcl9kZXNjcmlwdGlvbiwge1xuICAgIHN0YXR1czogZXJyLnJlc3BvbnNlLnN0YXR1cyxcbiAgICBtZXRob2QsXG4gICAgY2F1c2U6IGVycixcbiAgICBhdXRoUmVmcmVzaEVycm9yOiBnZXRBdXRoUmVmcmVzaEVycm9yKGVycilcbiAgfSlcbn1cbiJdfQ==
@@ -9,8 +9,12 @@ export { Navvy } from './services/navvy';
9
9
  export { HttpBXServices as BXRestRequest } from './services/http/HttpBX';
10
10
  export { SessionKeyServices, SessionKeyError } from './services/http/sessionKey';
11
11
  export { instanceOfiBXRestAnswerSuccess as isBXRestAnswerSuccess } from './functions/mapResult';
12
- export { BXRestApiError } from './functions/errors';
12
+ export { BXRestApiError, getAuthRefreshError } from './functions/errors';
13
+ export { isBXRestAuthError } from './services/http/authRefresh';
14
+ export { BXRestFrame } from './services/frame/frame';
15
+ export { BXRestFrameError } from './services/frame/transport';
16
+ export * from './services/frame/types';
13
17
  export { HttpNavvyServices } from './services/http/httpNavvy';
14
18
  export * as partNameMethods from './consts/part-name-methods';
15
19
  export * as BXBaseServices from './services/base';
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDdEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3hDLE9BQU8sRUFBRSxjQUFjLElBQUksYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBQ2hGLE9BQU8sRUFBRSw4QkFBOEIsSUFBSSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQy9GLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUVuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUM3RCxPQUFPLEtBQUssZUFBZSxNQUFNLDRCQUE0QixDQUFBO0FBQzdELE9BQU8sS0FBSyxjQUFjLE1BQU0saUJBQWlCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIGJ4LXJlc3RcclxuICovXHJcbmV4cG9ydCB7IEJYUmVzdFNldHRpbmdzIH0gZnJvbSAnLi9zZXR0aW5ncydcclxuZXhwb3J0IHsgQlhSZXN0TWFwUmVzdWx0IH0gZnJvbSAnLi9mdW5jdGlvbnMvbWFwUmVzdWx0J1xyXG5leHBvcnQgeyBCWFJlc3ROYXZ2eSB9IGZyb20gJy4vcmVzdC9uYXZ2eSdcclxuZXhwb3J0IHsgQlhSZXN0TWFwIH0gZnJvbSAnLi9yZXN0L21hcCdcclxuZXhwb3J0IHsgTmF2dnkgfSBmcm9tICcuL3NlcnZpY2VzL25hdnZ5J1xyXG5leHBvcnQgeyBIdHRwQlhTZXJ2aWNlcyBhcyBCWFJlc3RSZXF1ZXN0IH0gZnJvbSAnLi9zZXJ2aWNlcy9odHRwL0h0dHBCWCdcclxuZXhwb3J0IHsgU2Vzc2lvbktleVNlcnZpY2VzLCBTZXNzaW9uS2V5RXJyb3IgfSBmcm9tICcuL3NlcnZpY2VzL2h0dHAvc2Vzc2lvbktleSdcclxuZXhwb3J0IHsgaW5zdGFuY2VPZmlCWFJlc3RBbnN3ZXJTdWNjZXNzIGFzIGlzQlhSZXN0QW5zd2VyU3VjY2VzcyB9IGZyb20gJy4vZnVuY3Rpb25zL21hcFJlc3VsdCdcclxuZXhwb3J0IHsgQlhSZXN0QXBpRXJyb3IgfSBmcm9tICcuL2Z1bmN0aW9ucy9lcnJvcnMnXHJcbmV4cG9ydCB7IEJYUmVzdFJlc09wdGlvbnMgfSBmcm9tICcuL3NlcnZpY2VzL25hdnZ5L2V4dGVuZHMvbmF2dnktcGFnLWJhc2UnXHJcbmV4cG9ydCB7IEh0dHBOYXZ2eVNlcnZpY2VzIH0gZnJvbSAnLi9zZXJ2aWNlcy9odHRwL2h0dHBOYXZ2eSdcclxuZXhwb3J0ICogYXMgcGFydE5hbWVNZXRob2RzIGZyb20gJy4vY29uc3RzL3BhcnQtbmFtZS1tZXRob2RzJ1xyXG5leHBvcnQgKiBhcyBCWEJhc2VTZXJ2aWNlcyBmcm9tICcuL3NlcnZpY2VzL2Jhc2UnXHJcbiJdfQ==
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDdEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3hDLE9BQU8sRUFBRSxjQUFjLElBQUksYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBQ2hGLE9BQU8sRUFBRSw4QkFBOEIsSUFBSSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQy9GLE9BQU8sRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUN4RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUF3QixNQUFNLDRCQUE0QixDQUFBO0FBQ25GLGNBQWMsd0JBQXdCLENBQUE7QUFFdEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFDN0QsT0FBTyxLQUFLLGVBQWUsTUFBTSw0QkFBNEIsQ0FBQTtBQUM3RCxPQUFPLEtBQUssY0FBYyxNQUFNLGlCQUFpQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBieC1yZXN0XHJcbiAqL1xyXG5leHBvcnQgeyBCWFJlc3RTZXR0aW5ncyB9IGZyb20gJy4vc2V0dGluZ3MnXHJcbmV4cG9ydCB7IEJYUmVzdE1hcFJlc3VsdCB9IGZyb20gJy4vZnVuY3Rpb25zL21hcFJlc3VsdCdcclxuZXhwb3J0IHsgQlhSZXN0TmF2dnkgfSBmcm9tICcuL3Jlc3QvbmF2dnknXHJcbmV4cG9ydCB7IEJYUmVzdE1hcCB9IGZyb20gJy4vcmVzdC9tYXAnXHJcbmV4cG9ydCB7IE5hdnZ5IH0gZnJvbSAnLi9zZXJ2aWNlcy9uYXZ2eSdcclxuZXhwb3J0IHsgSHR0cEJYU2VydmljZXMgYXMgQlhSZXN0UmVxdWVzdCB9IGZyb20gJy4vc2VydmljZXMvaHR0cC9IdHRwQlgnXHJcbmV4cG9ydCB7IFNlc3Npb25LZXlTZXJ2aWNlcywgU2Vzc2lvbktleUVycm9yIH0gZnJvbSAnLi9zZXJ2aWNlcy9odHRwL3Nlc3Npb25LZXknXHJcbmV4cG9ydCB7IGluc3RhbmNlT2ZpQlhSZXN0QW5zd2VyU3VjY2VzcyBhcyBpc0JYUmVzdEFuc3dlclN1Y2Nlc3MgfSBmcm9tICcuL2Z1bmN0aW9ucy9tYXBSZXN1bHQnXHJcbmV4cG9ydCB7IEJYUmVzdEFwaUVycm9yLCBnZXRBdXRoUmVmcmVzaEVycm9yIH0gZnJvbSAnLi9mdW5jdGlvbnMvZXJyb3JzJ1xyXG5leHBvcnQgeyBpc0JYUmVzdEF1dGhFcnJvciB9IGZyb20gJy4vc2VydmljZXMvaHR0cC9hdXRoUmVmcmVzaCdcclxuZXhwb3J0IHsgQlhSZXN0RnJhbWUgfSBmcm9tICcuL3NlcnZpY2VzL2ZyYW1lL2ZyYW1lJ1xyXG5leHBvcnQgeyBCWFJlc3RGcmFtZUVycm9yLCBCWFJlc3RGcmFtZUVycm9yQ29kZSB9IGZyb20gJy4vc2VydmljZXMvZnJhbWUvdHJhbnNwb3J0J1xyXG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2ZyYW1lL3R5cGVzJ1xyXG5leHBvcnQgeyBCWFJlc3RSZXNPcHRpb25zIH0gZnJvbSAnLi9zZXJ2aWNlcy9uYXZ2eS9leHRlbmRzL25hdnZ5LXBhZy1iYXNlJ1xyXG5leHBvcnQgeyBIdHRwTmF2dnlTZXJ2aWNlcyB9IGZyb20gJy4vc2VydmljZXMvaHR0cC9odHRwTmF2dnknXHJcbmV4cG9ydCAqIGFzIHBhcnROYW1lTWV0aG9kcyBmcm9tICcuL2NvbnN0cy9wYXJ0LW5hbWUtbWV0aG9kcydcclxuZXhwb3J0ICogYXMgQlhCYXNlU2VydmljZXMgZnJvbSAnLi9zZXJ2aWNlcy9iYXNlJ1xyXG4iXX0=
@@ -32,8 +32,8 @@ export class BXRest {
32
32
  profile() {
33
33
  return this.http.post(['profile']);
34
34
  }
35
- batch(param) {
36
- return this.http.post(['batch'], param);
35
+ batch(param, headers) {
36
+ return this.http.post(['batch'], param, false, headers);
37
37
  }
38
38
  }
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3Jlc3QvYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDNUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFHeEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBRTVDLE1BQU0sT0FBTyxNQUFNO0lBQW5CO1FBQ21CLFNBQUksR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFBO1FBQzVCLFNBQUksR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFBO1FBQ3ZCLFVBQUssR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFBO1FBQ3pCLFNBQUksR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFBO1FBQ3ZCLFVBQUssR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFBO1FBQ3pCLFNBQUksR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFBO1FBQ3ZCLFlBQU8sR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFBO1FBQzdCLFFBQUcsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFBO1FBQ3JCLGdCQUFXLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFBO1FBQ3BDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFBO1FBQzNCLGVBQVUsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUE7UUFDbkMsUUFBRyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUE7UUFDckIsa0JBQWEsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUE7UUFDekMsU0FBSSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUE7SUFTekMsQ0FBQztJQVBRLE9BQU87UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7SUFDeEQsQ0FBQztJQUVNLEtBQUssQ0FBSSxLQUF3QjtRQUN0QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFrQixDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQzFELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJYUmVzdFVzZXIgfSBmcm9tICcuLi9yZXF1ZXN0L3VzZXInXHJcbmltcG9ydCB7IEJYUmVzdExpc3RzIH0gZnJvbSAnLi4vcmVxdWVzdC9saXN0cydcclxuaW1wb3J0IHsgQlhSZXN0VGFzayB9IGZyb20gJy4uL3JlcXVlc3QvdGFzaydcclxuaW1wb3J0IHsgQlhSZXN0VGFza3MgfSBmcm9tICcuLi9yZXF1ZXN0L3Rhc2tzJ1xyXG5pbXBvcnQgeyBCWFJlc3REaXNrIH0gZnJvbSAnLi4vcmVxdWVzdC9kaXNrJ1xyXG5pbXBvcnQgeyBCWFJlc3RCaXpQcm9jIH0gZnJvbSAnLi4vcmVxdWVzdC9iaXpwcm9jJ1xyXG5pbXBvcnQgeyBCWFJlc3RMb2cgfSBmcm9tICcuLi9yZXF1ZXN0L2xvZydcclxuaW1wb3J0IHsgQlhSZXN0U29uZXRHcm91cCB9IGZyb20gJy4uL3JlcXVlc3Qvc29uZXRfZ3JvdXAnXHJcbmltcG9ydCB7IEJYUmVzdFNlcnZlciB9IGZyb20gJy4uL3JlcXVlc3Qvc2VydmVyJ1xyXG5pbXBvcnQgeyBCWFJlc3REZXBhcnRtZW50IH0gZnJvbSAnLi4vcmVxdWVzdC9kZXBhcnRtZW50J1xyXG5pbXBvcnQgeyBCWFJlc3RBcHAgfSBmcm9tICcuLi9yZXF1ZXN0L2FwcCdcclxuaW1wb3J0IHsgSHR0cEJYU2VydmljZXMgfSBmcm9tICcuLi9zZXJ2aWNlcy9odHRwL0h0dHBCWCdcclxuaW1wb3J0IHsgaUJYUmVzdFByb2ZpbGVIdHRwIH0gZnJvbSAnLi4vdHlwaWZpY2F0aW9uL3Jlc3QvcHJvZmlsZSdcclxuaW1wb3J0IHsgaUJYUmVzdEJhdGNoLCBpQlhSZXN0UGFyYW1CYXRjaCB9IGZyb20gJy4uL3R5cGlmaWNhdGlvbi9yZXN0L2JhdGNoJ1xyXG5pbXBvcnQgeyBCWFJlc3RTb2NpYWxOZXRXb3JrIH0gZnJvbSAnLi4vcmVxdWVzdC9zb2NpYWxuZXR3b3JrJ1xyXG5pbXBvcnQgeyBCWFJlc3RQdWxsIH0gZnJvbSAnLi4vcmVxdWVzdC9wdWxsJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEJYUmVzdCB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gbmV3IEh0dHBCWFNlcnZpY2VzKClcclxuICBwdWJsaWMgcmVhZG9ubHkgdXNlciA9IG5ldyBCWFJlc3RVc2VyKClcclxuICBwdWJsaWMgcmVhZG9ubHkgbGlzdHMgPSBuZXcgQlhSZXN0TGlzdHMoKVxyXG4gIHB1YmxpYyByZWFkb25seSB0YXNrID0gbmV3IEJYUmVzdFRhc2soKVxyXG4gIHB1YmxpYyByZWFkb25seSB0YXNrcyA9IG5ldyBCWFJlc3RUYXNrcygpXHJcbiAgcHVibGljIHJlYWRvbmx5IGRpc2sgPSBuZXcgQlhSZXN0RGlzaygpXHJcbiAgcHVibGljIHJlYWRvbmx5IGJpelByb2MgPSBuZXcgQlhSZXN0Qml6UHJvYygpXHJcbiAgcHVibGljIHJlYWRvbmx5IGxvZyA9IG5ldyBCWFJlc3RMb2coKVxyXG4gIHB1YmxpYyByZWFkb25seSBzb25ldF9ncm91cCA9IG5ldyBCWFJlc3RTb25ldEdyb3VwKClcclxuICBwdWJsaWMgcmVhZG9ubHkgc2VydmVyID0gbmV3IEJYUmVzdFNlcnZlcigpXHJcbiAgcHVibGljIHJlYWRvbmx5IGRlcGFydG1lbnQgPSBuZXcgQlhSZXN0RGVwYXJ0bWVudCgpXHJcbiAgcHVibGljIHJlYWRvbmx5IGFwcCA9IG5ldyBCWFJlc3RBcHAoKVxyXG4gIHB1YmxpYyByZWFkb25seSBzb2NpYWxOZXRXb3JrID0gbmV3IEJYUmVzdFNvY2lhbE5ldFdvcmsoKVxyXG4gIHB1YmxpYyByZWFkb25seSBwdWxsID0gbmV3IEJYUmVzdFB1bGwoKVxyXG5cclxuICBwdWJsaWMgcHJvZmlsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxpQlhSZXN0UHJvZmlsZUh0dHA+KFsncHJvZmlsZSddKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGJhdGNoPFQ+KHBhcmFtOiBpQlhSZXN0UGFyYW1CYXRjaCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGlCWFJlc3RCYXRjaDxUPj4oWydiYXRjaCddLCBwYXJhbSlcclxuICB9XHJcbn0iXX0=
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3Jlc3QvYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDNUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFHeEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBRTVDLE1BQU0sT0FBTyxNQUFNO0lBQW5CO1FBQ21CLFNBQUksR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFBO1FBQzVCLFNBQUksR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFBO1FBQ3ZCLFVBQUssR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFBO1FBQ3pCLFNBQUksR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFBO1FBQ3ZCLFVBQUssR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFBO1FBQ3pCLFNBQUksR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFBO1FBQ3ZCLFlBQU8sR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFBO1FBQzdCLFFBQUcsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFBO1FBQ3JCLGdCQUFXLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFBO1FBQ3BDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFBO1FBQzNCLGVBQVUsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUE7UUFDbkMsUUFBRyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUE7UUFDckIsa0JBQWEsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUE7UUFDekMsU0FBSSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUE7SUFTekMsQ0FBQztJQVBRLE9BQU87UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7SUFDeEQsQ0FBQztJQUVNLEtBQUssQ0FBSSxLQUF3QixFQUFFLE9BQWdDO1FBQ3hFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQWtCLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUMxRSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCWFJlc3RVc2VyIH0gZnJvbSAnLi4vcmVxdWVzdC91c2VyJ1xuaW1wb3J0IHsgQlhSZXN0TGlzdHMgfSBmcm9tICcuLi9yZXF1ZXN0L2xpc3RzJ1xuaW1wb3J0IHsgQlhSZXN0VGFzayB9IGZyb20gJy4uL3JlcXVlc3QvdGFzaydcbmltcG9ydCB7IEJYUmVzdFRhc2tzIH0gZnJvbSAnLi4vcmVxdWVzdC90YXNrcydcbmltcG9ydCB7IEJYUmVzdERpc2sgfSBmcm9tICcuLi9yZXF1ZXN0L2Rpc2snXG5pbXBvcnQgeyBCWFJlc3RCaXpQcm9jIH0gZnJvbSAnLi4vcmVxdWVzdC9iaXpwcm9jJ1xuaW1wb3J0IHsgQlhSZXN0TG9nIH0gZnJvbSAnLi4vcmVxdWVzdC9sb2cnXG5pbXBvcnQgeyBCWFJlc3RTb25ldEdyb3VwIH0gZnJvbSAnLi4vcmVxdWVzdC9zb25ldF9ncm91cCdcbmltcG9ydCB7IEJYUmVzdFNlcnZlciB9IGZyb20gJy4uL3JlcXVlc3Qvc2VydmVyJ1xuaW1wb3J0IHsgQlhSZXN0RGVwYXJ0bWVudCB9IGZyb20gJy4uL3JlcXVlc3QvZGVwYXJ0bWVudCdcbmltcG9ydCB7IEJYUmVzdEFwcCB9IGZyb20gJy4uL3JlcXVlc3QvYXBwJ1xuaW1wb3J0IHsgSHR0cEJYU2VydmljZXMgfSBmcm9tICcuLi9zZXJ2aWNlcy9odHRwL0h0dHBCWCdcbmltcG9ydCB7IGlCWFJlc3RQcm9maWxlSHR0cCB9IGZyb20gJy4uL3R5cGlmaWNhdGlvbi9yZXN0L3Byb2ZpbGUnXG5pbXBvcnQgeyBpQlhSZXN0QmF0Y2gsIGlCWFJlc3RQYXJhbUJhdGNoIH0gZnJvbSAnLi4vdHlwaWZpY2F0aW9uL3Jlc3QvYmF0Y2gnXG5pbXBvcnQgeyBCWFJlc3RTb2NpYWxOZXRXb3JrIH0gZnJvbSAnLi4vcmVxdWVzdC9zb2NpYWxuZXR3b3JrJ1xuaW1wb3J0IHsgQlhSZXN0UHVsbCB9IGZyb20gJy4uL3JlcXVlc3QvcHVsbCdcblxuZXhwb3J0IGNsYXNzIEJYUmVzdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cCA9IG5ldyBIdHRwQlhTZXJ2aWNlcygpXG4gIHB1YmxpYyByZWFkb25seSB1c2VyID0gbmV3IEJYUmVzdFVzZXIoKVxuICBwdWJsaWMgcmVhZG9ubHkgbGlzdHMgPSBuZXcgQlhSZXN0TGlzdHMoKVxuICBwdWJsaWMgcmVhZG9ubHkgdGFzayA9IG5ldyBCWFJlc3RUYXNrKClcbiAgcHVibGljIHJlYWRvbmx5IHRhc2tzID0gbmV3IEJYUmVzdFRhc2tzKClcbiAgcHVibGljIHJlYWRvbmx5IGRpc2sgPSBuZXcgQlhSZXN0RGlzaygpXG4gIHB1YmxpYyByZWFkb25seSBiaXpQcm9jID0gbmV3IEJYUmVzdEJpelByb2MoKVxuICBwdWJsaWMgcmVhZG9ubHkgbG9nID0gbmV3IEJYUmVzdExvZygpXG4gIHB1YmxpYyByZWFkb25seSBzb25ldF9ncm91cCA9IG5ldyBCWFJlc3RTb25ldEdyb3VwKClcbiAgcHVibGljIHJlYWRvbmx5IHNlcnZlciA9IG5ldyBCWFJlc3RTZXJ2ZXIoKVxuICBwdWJsaWMgcmVhZG9ubHkgZGVwYXJ0bWVudCA9IG5ldyBCWFJlc3REZXBhcnRtZW50KClcbiAgcHVibGljIHJlYWRvbmx5IGFwcCA9IG5ldyBCWFJlc3RBcHAoKVxuICBwdWJsaWMgcmVhZG9ubHkgc29jaWFsTmV0V29yayA9IG5ldyBCWFJlc3RTb2NpYWxOZXRXb3JrKClcbiAgcHVibGljIHJlYWRvbmx5IHB1bGwgPSBuZXcgQlhSZXN0UHVsbCgpXG5cbiAgcHVibGljIHByb2ZpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGlCWFJlc3RQcm9maWxlSHR0cD4oWydwcm9maWxlJ10pXG4gIH1cblxuICBwdWJsaWMgYmF0Y2g8VD4ocGFyYW06IGlCWFJlc3RQYXJhbUJhdGNoLCBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxpQlhSZXN0QmF0Y2g8VD4+KFsnYmF0Y2gnXSwgcGFyYW0sIGZhbHNlLCBoZWFkZXJzKVxuICB9XG59Il19
@@ -0,0 +1,347 @@
1
+ import { BXRestFrameError, FrameTransport } from './transport';
2
+ const DEFAULT_TIMEOUT = 10000;
3
+ /**
4
+ * Команды порталу Bitrix24 из iframe приложения — без подключения BX24.js.
5
+ * Те же команды и те же имена, что у BX24.js, но вместо колбэков —
6
+ * промисы. Протокол внутренний и недокументированный, см. `transport.ts`.
7
+ *
8
+ * Создавайте один экземпляр на страницу и при старте приложения: параметры
9
+ * портала читаются в конструкторе (до того, как роутер перепишет адрес), а
10
+ * `firstRun` портал сообщает только в первом ответе на `getInitData`.
11
+ *
12
+ * Токены класс не логирует и никуда не сохраняет: `getAuth()` и
13
+ * `refreshAuth()` каждый раз спрашивают портал, а в `init()` токенов нет.
14
+ *
15
+ * @example
16
+ * const frame = new BXRestFrame()
17
+ * const { lang, placement } = await frame.init()
18
+ * await frame.fitWindow()
19
+ * const user = await frame.selectUser()
20
+ */
21
+ export class BXRestFrame {
22
+ constructor(options = {}) {
23
+ this.transport = new FrameTransport();
24
+ // Открытый диалог каждого вида — новый вызов того же диалога отменяет прошлый
25
+ this.dialogs = new Map();
26
+ /** Мессенджер — как `BX24.im`. Портал на эти команды не отвечает. */
27
+ this.im = {
28
+ /** Позвонить сотруднику — `BX24.im.callTo()`. */
29
+ callTo: async (userId, video) => {
30
+ this.transport.post('imCallTo', { userId, video });
31
+ },
32
+ /** Позвонить на телефон — `BX24.im.phoneTo()`. */
33
+ phoneTo: async (phone) => {
34
+ this.transport.post('imPhoneTo', { phone });
35
+ },
36
+ /** Открыть чат — `BX24.im.openMessenger()`. */
37
+ openMessenger: async (dialogId) => {
38
+ this.transport.post('imOpenMessenger', { dialogId });
39
+ },
40
+ /** Открыть историю чата — `BX24.im.openHistory()`. */
41
+ openHistory: async (dialogId) => {
42
+ this.transport.post('imOpenHistory', { dialogId });
43
+ },
44
+ };
45
+ /** Встраивание — как `BX24.placement`. */
46
+ this.placement = {
47
+ /** Код и параметры встраивания — `BX24.placement.info()`. */
48
+ info: async () => {
49
+ const { placement, placementOptions } = await this.init();
50
+ return { placement, options: placementOptions };
51
+ },
52
+ /** Команды и события текущего встраивания — `BX24.placement.getInterface()`. */
53
+ getInterface: async () => {
54
+ return await this.transport.request('getInterface', null, { timeout: this.timeout });
55
+ },
56
+ /**
57
+ * Команда встраивания — `BX24.placement.call()`. Набор команд зависит от
58
+ * встраивания (см. `getInterface()`). Не на все команды портал отвечает:
59
+ * без ответа за `timeout` промис завершается с `undefined`.
60
+ */
61
+ call: async (command, params, options = {}) => {
62
+ return this.transport.request(command, params, {
63
+ timeout: options.timeout ?? this.timeout,
64
+ onTimeout: 'resolve',
65
+ });
66
+ },
67
+ /**
68
+ * Подписка на событие встраивания — `BX24.placement.bindEvent()`.
69
+ * `handler` вызывается при каждом событии. Возвращает функцию отписки:
70
+ * она только перестаёт вызывать `handler` — отменить подписку на
71
+ * стороне портала протокол не позволяет. Вне iframe бросает
72
+ * `BXRestFrameError` с кодом `NOT_IN_FRAME`.
73
+ */
74
+ bindEvent: (event, handler) => {
75
+ return this.transport.subscribe('placementBindEvent', { event }, handler);
76
+ },
77
+ };
78
+ /** Настройки приложения для текущего пользователя — как `BX24.userOption`. */
79
+ this.userOption = {
80
+ get: async (name) => (await this.init()).userOptions[name],
81
+ set: async (name, value) => {
82
+ const init = await this.init();
83
+ init.userOptions[name] = value;
84
+ await this.ack('setUserOption', { name, value });
85
+ },
86
+ };
87
+ /** Настройки приложения для всего портала — как `BX24.appOption`. */
88
+ this.appOption = {
89
+ get: async (name) => (await this.init()).appOptions[name],
90
+ /**
91
+ * Менять их может только администратор портала: остальным — ошибка
92
+ * `ACCESS_DENIED` (BX24.js в этом случае молча ничего не делает).
93
+ * Возвращает настройки приложения после сохранения.
94
+ */
95
+ set: async (name, value) => {
96
+ const init = await this.init();
97
+ if (!init.isAdmin) {
98
+ throw new BXRestFrameError('ACCESS_DENIED', 'Only a Bitrix24 administrator can change application options.');
99
+ }
100
+ init.appOptions[name] = value;
101
+ return await this.transport.request('setAppOption', { name, value }, { timeout: this.timeout });
102
+ },
103
+ };
104
+ this.timeout = options.timeout ?? DEFAULT_TIMEOUT;
105
+ }
106
+ /**
107
+ * Данные запуска приложения — аналог `BX24.init()`: язык, домен, права,
108
+ * встраивание, настройки, признаки установки. Запрашиваются у портала
109
+ * один раз, дальше берутся из памяти. Токенов здесь нет — см. `getAuth()`.
110
+ */
111
+ init() {
112
+ if (this.initValue) {
113
+ return Promise.resolve(this.initValue);
114
+ }
115
+ if (!this.initRequest) {
116
+ this.initRequest = this.getInitData()
117
+ .then(() => this.initValue)
118
+ .finally(() => {
119
+ this.initRequest = undefined;
120
+ });
121
+ }
122
+ return this.initRequest;
123
+ }
124
+ /**
125
+ * Текущая авторизация приложения — аналог `BX24.getAuth()`. Каждый вызов —
126
+ * новый запрос `getInitData` к порталу.
127
+ *
128
+ * `expires_in` портал считает от срока жизни токена в момент выдачи, а не
129
+ * от остатка: если страница открыта давно, значение будет завышено (так
130
+ * же и у BX24.js). Для свежего токена используйте `refreshAuth()`.
131
+ */
132
+ async getAuth() {
133
+ const data = await this.getInitData();
134
+ return this.toAuth('getInitData', data, String(data['MEMBER_ID'] || ''));
135
+ }
136
+ /**
137
+ * Новая авторизация приложения — аналог `BX24.refreshAuth()`: портал
138
+ * выпускает новую пару `access_token`/`refresh_token`. Если портал не может
139
+ * выдать токен, он показывает `alert` «Unable to get new token!» и не
140
+ * отвечает — тогда ошибка `TIMEOUT`.
141
+ */
142
+ async refreshAuth() {
143
+ // member_id приходит только в getInitData — refreshAuth его не возвращает
144
+ const { memberId } = await this.init();
145
+ const data = asObject('refreshAuth', await this.transport.request('refreshAuth', {}, { timeout: this.timeout }));
146
+ return this.toAuth('refreshAuth', data, memberId);
147
+ }
148
+ /**
149
+ * Завершить установку — аналог `BX24.installFinish()`: портал отмечает
150
+ * приложение установленным и перезагружает страницу. Делает что-то только
151
+ * на странице установщика (`init().install`), иначе — ничего, как и BX24.js.
152
+ */
153
+ async installFinish() {
154
+ if ((await this.init()).install) {
155
+ this.transport.post('setInstallFinish', {});
156
+ }
157
+ }
158
+ /**
159
+ * Отметить, что первый запуск у этого пользователя пройден, — то, что
160
+ * BX24.js делает после последнего обработчика `BX24.install()`. Без этого
161
+ * `init().firstRun` останется `true` и при следующих запусках. Делает
162
+ * что-то только при первом запуске.
163
+ */
164
+ async firstRunFinish() {
165
+ const init = await this.init();
166
+ if (init.firstRun) {
167
+ await this.ack('setInstall', { install: true });
168
+ init.firstRun = false;
169
+ }
170
+ }
171
+ /** Задать размер фрейма — `BX24.resizeWindow()`. Возвращает размер, который выставил портал. */
172
+ async resizeWindow(width, height) {
173
+ const w = Number.parseInt(String(width), 10);
174
+ const h = Number.parseInt(String(height), 10);
175
+ if (!(w > 0 && h > 0)) {
176
+ throw new TypeError('resizeWindow: width and height must be positive numbers.');
177
+ }
178
+ return await this.ack('resizeWindow', { width: w, height: h });
179
+ }
180
+ /** Подогнать высоту фрейма под содержимое — `BX24.fitWindow()`. */
181
+ async fitWindow() {
182
+ const root = document.documentElement;
183
+ const height = Math.max(root.scrollHeight, root.offsetHeight);
184
+ return await this.ack('resizeWindow', { width: '100%', height });
185
+ }
186
+ /**
187
+ * Перезагрузить страницу портала с приложением — `BX24.reloadWindow()`.
188
+ * Портал на эту команду не отвечает.
189
+ */
190
+ async reloadWindow() {
191
+ this.transport.post('reloadWindow', {});
192
+ }
193
+ /** Заголовок страницы портала — `BX24.setTitle()`. */
194
+ async setTitle(title) {
195
+ return await this.ack('setTitle', { title: String(title) });
196
+ }
197
+ /** Прокрутить страницу портала — `BX24.scrollParentWindow()`. */
198
+ async scrollParentWindow(scroll) {
199
+ const value = Number.parseInt(String(scroll), 10);
200
+ if (Number.isNaN(value)) {
201
+ throw new TypeError('scrollParentWindow: scroll must be a number.');
202
+ }
203
+ return await this.ack('setScroll', { scroll: value });
204
+ }
205
+ /**
206
+ * Диалог выбора одного сотрудника — `BX24.selectUser()`. Ждёт выбора без
207
+ * ограничения по времени: если пользователь закрыл диалог, портал не
208
+ * отвечает вовсе. Отменить ожидание — `signal` или новый вызов
209
+ * `selectUser()`/`selectUsers()` (ошибка `CANCELLED`).
210
+ */
211
+ selectUser(options = {}) {
212
+ return this.dialog('user', 'selectUser', { title: options.title ?? '', mult: false }, options.signal);
213
+ }
214
+ /** Диалог выбора нескольких сотрудников — `BX24.selectUsers()`. Ожидание — как у `selectUser()`. */
215
+ selectUsers(options = {}) {
216
+ return this.dialog('user', 'selectUser', { title: options.title ?? '', mult: true }, options.signal);
217
+ }
218
+ /**
219
+ * Диалог выбора прав доступа — `BX24.selectAccess()`. `value` — коды,
220
+ * которые нельзя выбрать. Ожидание — как у `selectUser()`.
221
+ */
222
+ selectAccess(options = {}) {
223
+ return this.dialog('access', 'selectAccess', { value: options.value ?? [] }, options.signal);
224
+ }
225
+ /** Диалог выбора объектов CRM — `BX24.selectCRM()`. Ожидание — как у `selectUser()`. */
226
+ selectCRM(options = {}) {
227
+ const { entityType, multiple, value, signal } = options;
228
+ return this.dialog('crm', 'selectCRM', { entityType, multiple, value }, signal);
229
+ }
230
+ /**
231
+ * Открыть приложение в слайдере — `BX24.openApplication()`. Промис
232
+ * завершается, когда слайдер закрыли. `settings` — настройки слайдера
233
+ * (уходят как `bx24_<ключ>`, как в BX24.js).
234
+ */
235
+ async openApplication(params = {}, settings = {}, options = {}) {
236
+ const message = { ...params };
237
+ for (const [key, value] of Object.entries(settings)) {
238
+ message[`bx24_${key}`] = value;
239
+ }
240
+ await this.transport.request('openApplication', message, { timeout: false, signal: options.signal });
241
+ }
242
+ /**
243
+ * Открыть страницу портала в слайдере — `BX24.openPath()`. Промис
244
+ * завершается, когда слайдер закрыли (`{ result: 'close' }`), или сразу,
245
+ * если путь не открылся (`{ result: 'error', errorCode }`).
246
+ */
247
+ async openPath(path, options = {}) {
248
+ return await this.transport.request('openPath', { path }, { timeout: false, signal: options.signal });
249
+ }
250
+ /**
251
+ * Закрыть слайдер с приложением — `BX24.closeApplication()`. Если
252
+ * приложение открыто не в слайдере, ничего не происходит. Узнать о
253
+ * закрытии может открывший слайдер — через `openApplication()`.
254
+ */
255
+ async closeApplication() {
256
+ this.transport.post('closeApplication', null);
257
+ }
258
+ /**
259
+ * Команда, на которую портал отвечает подтверждением. В некоторых
260
+ * встраиваниях портал на такие команды не отвечает (так считает и
261
+ * b24jssdk) — тогда промис завершается с `undefined`, а не ошибкой.
262
+ */
263
+ ack(command, params) {
264
+ return this.transport.request(command, params, { timeout: this.timeout, onTimeout: 'resolve' });
265
+ }
266
+ /**
267
+ * Диалоги ждут пользователя без таймаута. Портал держит один обработчик
268
+ * на диалог (у выбора сотрудников он общий для `selectUser` и
269
+ * `selectUsers`) и на прошлый вызов уже не ответит — поэтому новый вызов
270
+ * отменяет ожидание прошлого.
271
+ */
272
+ dialog(kind, command, params, signal) {
273
+ this.dialogs.get(kind)?.abort();
274
+ const controller = new AbortController();
275
+ this.dialogs.set(kind, controller);
276
+ const onAbort = () => controller.abort();
277
+ if (signal?.aborted) {
278
+ controller.abort();
279
+ }
280
+ signal?.addEventListener('abort', onAbort, { once: true });
281
+ return this.transport.request(command, params, { timeout: false, signal: controller.signal })
282
+ .finally(() => {
283
+ signal?.removeEventListener('abort', onAbort);
284
+ if (this.dialogs.get(kind) === controller) {
285
+ this.dialogs.delete(kind);
286
+ }
287
+ });
288
+ }
289
+ async getInitData() {
290
+ const data = asObject('getInitData', await this.transport.request('getInitData', null, { timeout: this.timeout }));
291
+ // firstRun портал отдаёт только в первом ответе за загрузку страницы —
292
+ // поэтому запоминаем данные первого ответа, кто бы его ни запросил
293
+ if (!this.initValue) {
294
+ this.initValue = this.toInit(data);
295
+ }
296
+ return data;
297
+ }
298
+ toInit(data) {
299
+ return {
300
+ // Как BX24.js: домен — из параметров фрейма, DOMAIN ответа — запасной
301
+ domain: this.transport.domain || String(data['DOMAIN'] || ''),
302
+ lang: String(data['LANG'] || ''),
303
+ path: String(data['PATH'] || ''),
304
+ https: Number.parseInt(String(data['PROTOCOL']), 10) === 1,
305
+ memberId: String(data['MEMBER_ID'] || ''),
306
+ isAdmin: !!data['IS_ADMIN'],
307
+ install: !!data['INSTALL'],
308
+ firstRun: !!data['FIRST_RUN'],
309
+ placement: String(data['PLACEMENT'] || 'DEFAULT'),
310
+ placementOptions: data['PLACEMENT_OPTIONS'],
311
+ userOptions: toRecord(data['USER_OPTIONS']),
312
+ appOptions: toRecord(data['APP_OPTIONS']),
313
+ };
314
+ }
315
+ toAuth(command, data, memberId) {
316
+ const { AUTH_ID, REFRESH_ID, AUTH_EXPIRES } = data;
317
+ if (!AUTH_ID || typeof AUTH_ID !== 'string') {
318
+ throw new BXRestFrameError('NO_AUTH', `Bitrix24 answered ${command} without an access token.`);
319
+ }
320
+ // AUTH_EXPIRES — срок жизни токена в секундах. BX24.js переводит его в
321
+ // момент истечения в миллисекундах — так же, как здесь.
322
+ const expiresIn = Number.parseInt(String(AUTH_EXPIRES), 10);
323
+ if (!Number.isFinite(expiresIn) || expiresIn <= 0) {
324
+ throw new BXRestFrameError('BAD_RESPONSE', `Bitrix24 answered ${command} without a usable AUTH_EXPIRES.`);
325
+ }
326
+ return {
327
+ access_token: AUTH_ID,
328
+ refresh_token: typeof REFRESH_ID === 'string' ? REFRESH_ID : '',
329
+ expires_in: Date.now() + expiresIn * 1000,
330
+ domain: this.transport.domain,
331
+ member_id: memberId,
332
+ };
333
+ }
334
+ }
335
+ function asObject(command, data) {
336
+ if (!data || typeof data !== 'object' || Array.isArray(data)) {
337
+ throw new BXRestFrameError('BAD_RESPONSE', `Bitrix24 answered ${command} with a payload that is not an object.`);
338
+ }
339
+ return data;
340
+ }
341
+ // Пустые настройки PHP отдаёт массивом `[]`
342
+ function toRecord(value) {
343
+ return (value && typeof value === 'object' && !Array.isArray(value))
344
+ ? { ...value }
345
+ : {};
346
+ }
347
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ieC1yZXN0L3NyYy9zZXJ2aWNlcy9mcmFtZS9mcmFtZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBTzlELE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQTtBQUU3Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFNLE9BQU8sV0FBVztJQTJGdEIsWUFBWSxVQUE4QixFQUFFO1FBekYzQixjQUFTLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQTtRQUlqRCw4RUFBOEU7UUFDN0QsWUFBTyxHQUFHLElBQUksR0FBRyxFQUE4QyxDQUFBO1FBRWhGLHFFQUFxRTtRQUM1RCxPQUFFLEdBQUc7WUFDWixpREFBaUQ7WUFDakQsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUF1QixFQUFFLEtBQWUsRUFBaUIsRUFBRTtnQkFDeEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7WUFDcEQsQ0FBQztZQUNELGtEQUFrRDtZQUNsRCxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQWEsRUFBaUIsRUFBRTtnQkFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtZQUM3QyxDQUFDO1lBQ0QsK0NBQStDO1lBQy9DLGFBQWEsRUFBRSxLQUFLLEVBQUUsUUFBMEIsRUFBaUIsRUFBRTtnQkFDakUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO1lBQ3RELENBQUM7WUFDRCxzREFBc0Q7WUFDdEQsV0FBVyxFQUFFLEtBQUssRUFBRSxRQUF5QixFQUFpQixF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LElBQWE7SUFDOUMsSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzdELE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUscUJBQXFCLE9BQU8sd0NBQXdDLENBQUMsQ0FBQTtJQUNsSCxDQUFDO0lBQ0QsT0FBTyxJQUErQixDQUFBO0FBQ3hDLENBQUM7QUFFRCw0Q0FBNEM7QUFDNUMsU0FBUyxRQUFRLENBQUMsS0FBYztJQUM5QixPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFnQyxFQUFFO1FBQ3pDLENBQUMsQ0FBQyxFQUFFLENBQUE7QUFDUixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQlhSZXN0RnJhbWVFcnJvciwgRnJhbWVUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydCdcbmltcG9ydCB7XG4gIEJYUmVzdEZyYW1lT3B0aW9ucywgaUJYUmVzdEZyYW1lQWNjZXNzLCBpQlhSZXN0RnJhbWVBdXRoLCBpQlhSZXN0RnJhbWVDcm1TZWxlY3Rpb24sIGlCWFJlc3RGcmFtZUNybVNlbGVjdE9wdGlvbnMsXG4gIGlCWFJlc3RGcmFtZUluaXQsIGlCWFJlc3RGcmFtZU9wZW5QYXRoUmVzdWx0LCBpQlhSZXN0RnJhbWVQbGFjZW1lbnRJbmZvLCBpQlhSZXN0RnJhbWVQbGFjZW1lbnRJbnRlcmZhY2UsXG4gIGlCWFJlc3RGcmFtZVNpemUsIGlCWFJlc3RGcmFtZVVzZXIsXG59IGZyb20gJy4vdHlwZXMnXG5cbmNvbnN0IERFRkFVTFRfVElNRU9VVCA9IDEwMDAwXG5cbi8qKlxuICog0JrQvtC80LDQvdC00Ysg0L/QvtGA0YLQsNC70YMgQml0cml4MjQg0LjQtyBpZnJhbWUg0L/RgNC40LvQvtC20LXQvdC40Y8g4oCUINCx0LXQtyDQv9C+0LTQutC70Y7Rh9C10L3QuNGPIEJYMjQuanMuXG4gKiDQotC1INC20LUg0LrQvtC80LDQvdC00Ysg0Lgg0YLQtSDQttC1INC40LzQtdC90LAsINGH0YLQviDRgyBCWDI0LmpzLCDQvdC+INCy0LzQtdGB0YLQviDQutC+0LvQsdGN0LrQvtCyIOKAlFxuICog0L/RgNC+0LzQuNGB0YsuINCf0YDQvtGC0L7QutC+0Lsg0LLQvdGD0YLRgNC10L3QvdC40Lkg0Lgg0L3QtdC00L7QutGD0LzQtdC90YLQuNGA0L7QstCw0L3QvdGL0LksINGB0LwuIGB0cmFuc3BvcnQudHNgLlxuICpcbiAqINCh0L7Qt9C00LDQstCw0LnRgtC1INC+0LTQuNC9INGN0LrQt9C10LzQv9C70Y/RgCDQvdCwINGB0YLRgNCw0L3QuNGG0YMg0Lgg0L/RgNC4INGB0YLQsNGA0YLQtSDQv9GA0LjQu9C+0LbQtdC90LjRjzog0L/QsNGA0LDQvNC10YLRgNGLXG4gKiDQv9C+0YDRgtCw0LvQsCDRh9C40YLQsNGO0YLRgdGPINCyINC60L7QvdGB0YLRgNGD0LrRgtC+0YDQtSAo0LTQviDRgtC+0LPQviwg0LrQsNC6INGA0L7Rg9GC0LXRgCDQv9C10YDQtdC/0LjRiNC10YIg0LDQtNGA0LXRgSksINCwXG4gKiBgZmlyc3RSdW5gINC/0L7RgNGC0LDQuyDRgdC+0L7QsdGJ0LDQtdGCINGC0L7Qu9GM0LrQviDQsiDQv9C10YDQstC+0Lwg0L7RgtCy0LXRgtC1INC90LAgYGdldEluaXREYXRhYC5cbiAqXG4gKiDQotC+0LrQtdC90Ysg0LrQu9Cw0YHRgSDQvdC1INC70L7Qs9C40YDRg9C10YIg0Lgg0L3QuNC60YPQtNCwINC90LUg0YHQvtGF0YDQsNC90Y/QtdGCOiBgZ2V0QXV0aCgpYCDQuFxuICogYHJlZnJlc2hBdXRoKClgINC60LDQttC00YvQuSDRgNCw0Lcg0YHQv9GA0LDRiNC40LLQsNGO0YIg0L/QvtGA0YLQsNC7LCDQsCDQsiBgaW5pdCgpYCDRgtC+0LrQtdC90L7QsiDQvdC10YIuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGZyYW1lID0gbmV3IEJYUmVzdEZyYW1lKClcbiAqIGNvbnN0IHsgbGFuZywgcGxhY2VtZW50IH0gPSBhd2FpdCBmcmFtZS5pbml0KClcbiAqIGF3YWl0IGZyYW1lLmZpdFdpbmRvdygpXG4gKiBjb25zdCB1c2VyID0gYXdhaXQgZnJhbWUuc2VsZWN0VXNlcigpXG4gKi9cbmV4cG9ydCBjbGFzcyBCWFJlc3RGcmFtZSB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB0cmFuc3BvcnQgPSBuZXcgRnJhbWVUcmFuc3BvcnQoKVxuICBwcml2YXRlIHJlYWRvbmx5IHRpbWVvdXQ6IG51bWJlclxuICBwcml2YXRlIGluaXRWYWx1ZT86IGlCWFJlc3RGcmFtZUluaXRcbiAgcHJpdmF0ZSBpbml0UmVxdWVzdD86IFByb21pc2U8aUJYUmVzdEZyYW1lSW5pdD5cbiAgLy8g0J7RgtC60YDRi9GC0YvQuSDQtNC40LDQu9C+0LMg0LrQsNC20LTQvtCz0L4g0LLQuNC00LAg4oCUINC90L7QstGL0Lkg0LLRi9C30L7QsiDRgtC+0LPQviDQttC1INC00LjQsNC70L7Qs9CwINC+0YLQvNC10L3Rj9C10YIg0L/RgNC+0YjQu9GL0LlcbiAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2dzID0gbmV3IE1hcDwndXNlcicgfCAnYWNjZXNzJyB8ICdjcm0nLCBBYm9ydENvbnRyb2xsZXI+KClcblxuICAvKiog0JzQtdGB0YHQtdC90LTQttC10YAg4oCUINC60LDQuiBgQlgyNC5pbWAuINCf0L7RgNGC0LDQuyDQvdCwINGN0YLQuCDQutC+0LzQsNC90LTRiyDQvdC1INC+0YLQstC10YfQsNC10YIuICovXG4gIHJlYWRvbmx5IGltID0ge1xuICAgIC8qKiDQn9C+0LfQstC+0L3QuNGC0Ywg0YHQvtGC0YDRg9C00L3QuNC60YMg4oCUIGBCWDI0LmltLmNhbGxUbygpYC4gKi9cbiAgICBjYWxsVG86IGFzeW5jICh1c2VySWQ6IG51bWJlciB8IHN0cmluZywgdmlkZW8/OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICB0aGlzLnRyYW5zcG9ydC5wb3N0KCdpbUNhbGxUbycsIHsgdXNlcklkLCB2aWRlbyB9KVxuICAgIH0sXG4gICAgLyoqINCf0L7Qt9Cy0L7QvdC40YLRjCDQvdCwINGC0LXQu9C10YTQvtC9IOKAlCBgQlgyNC5pbS5waG9uZVRvKClgLiAqL1xuICAgIHBob25lVG86IGFzeW5jIChwaG9uZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICB0aGlzLnRyYW5zcG9ydC5wb3N0KCdpbVBob25lVG8nLCB7IHBob25lIH0pXG4gICAgfSxcbiAgICAvKiog0J7RgtC60YDRi9GC0Ywg0YfQsNGCIOKAlCBgQlgyNC5pbS5vcGVuTWVzc2VuZ2VyKClgLiAqL1xuICAgIG9wZW5NZXNzZW5nZXI6IGFzeW5jIChkaWFsb2dJZD86IG51bWJlciB8IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgdGhpcy50cmFuc3BvcnQucG9zdCgnaW1PcGVuTWVzc2VuZ2VyJywgeyBkaWFsb2dJZCB9KVxuICAgIH0sXG4gICAgLyoqINCe0YLQutGA0YvRgtGMINC40YHRgtC+0YDQuNGOINGH0LDRgtCwIOKAlCBgQlgyNC5pbS5vcGVuSGlzdG9yeSgpYC4gKi9cbiAgICBvcGVuSGlzdG9yeTogYXN5bmMgKGRpYWxvZ0lkOiBudW1iZXIgfCBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIHRoaXMudHJhbnNwb3J0LnBvc3QoJ2ltT3Blbkhpc3RvcnknLCB7IGRpYWxvZ0lkIH0pXG4gICAgfSxcbiAgfVxuXG4gIC8qKiDQktGB0YLRgNCw0LjQstCw0L3QuNC1IOKAlCDQutCw0LogYEJYMjQucGxhY2VtZW50YC4gKi9cbiAgcmVhZG9ubHkgcGxhY2VtZW50ID0ge1xuICAgIC8qKiDQmtC+0LQg0Lgg0L/QsNGA0LDQvNC10YLRgNGLINCy0YHRgtGA0LDQuNCy0LDQvdC40Y8g4oCUIGBCWDI0LnBsYWNlbWVudC5pbmZvKClgLiAqL1xuICAgIGluZm86IGFzeW5jICgpOiBQcm9taXNlPGlCWFJlc3RGcmFtZVBsYWNlbWVudEluZm8+ID0+IHtcbiAgICAgIGNvbnN0IHsgcGxhY2VtZW50LCBwbGFjZW1lbnRPcHRpb25zIH0gPSBhd2FpdCB0aGlzLmluaXQoKVxuICAgICAgcmV0dXJuIHsgcGxhY2VtZW50LCBvcHRpb25zOiBwbGFjZW1lbnRPcHRpb25zIH1cbiAgICB9LFxuICAgIC8qKiDQmtC+0LzQsNC90LTRiyDQuCDRgdC+0LHRi9GC0LjRjyDRgtC10LrRg9GJ0LXQs9C+INCy0YHRgtGA0LDQuNCy0LDQvdC40Y8g4oCUIGBCWDI0LnBsYWNlbWVudC5nZXRJbnRlcmZhY2UoKWAuICovXG4gICAgZ2V0SW50ZXJmYWNlOiBhc3luYyAoKTogUHJvbWlzZTxpQlhSZXN0RnJhbWVQbGFjZW1lbnRJbnRlcmZhY2U+ID0+IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnRyYW5zcG9ydC5yZXF1ZXN0KCdnZXRJbnRlcmZhY2UnLCBudWxsLCB7IHRpbWVvdXQ6IHRoaXMudGltZW91dCB9KSBhcyBpQlhSZXN0RnJhbWVQbGFjZW1lbnRJbnRlcmZhY2VcbiAgICB9LFxuICAgIC8qKlxuICAgICAqINCa0L7QvNCw0L3QtNCwINCy0YHRgtGA0LDQuNCy0LDQvdC40Y8g4oCUIGBCWDI0LnBsYWNlbWVudC5jYWxsKClgLiDQndCw0LHQvtGAINC60L7QvNCw0L3QtCDQt9Cw0LLQuNGB0LjRgiDQvtGCXG4gICAgICog0LLRgdGC0YDQsNC40LLQsNC90LjRjyAo0YHQvC4gYGdldEludGVyZmFjZSgpYCkuINCd0LUg0L3QsCDQstGB0LUg0LrQvtC80LDQvdC00Ysg0L/QvtGA0YLQsNC7INC+0YLQstC10YfQsNC10YI6XG4gICAgICog0LHQtdC3INC+0YLQstC10YLQsCDQt9CwIGB0aW1lb3V0YCDQv9GA0L7QvNC40YEg0LfQsNCy0LXRgNGI0LDQtdGC0YHRjyDRgSBgdW5kZWZpbmVkYC5cbiAgICAgKi9cbiAgICBjYWxsOiBhc3luYyAoY29tbWFuZDogc3RyaW5nLCBwYXJhbXM/OiB1bmtub3duLCBvcHRpb25zOiB7IHRpbWVvdXQ/OiBudW1iZXIgfCBmYWxzZSB9ID0ge30pOiBQcm9taXNlPHVua25vd24+ID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zcG9ydC5yZXF1ZXN0KGNvbW1hbmQsIHBhcmFtcywge1xuICAgICAgICB0aW1lb3V0OiBvcHRpb25zLnRpbWVvdXQgPz8gdGhpcy50aW1lb3V0LFxuICAgICAgICBvblRpbWVvdXQ6ICdyZXNvbHZlJyxcbiAgICAgIH0pXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiDQn9C+0LTQv9C40YHQutCwINC90LAg0YHQvtCx0YvRgtC40LUg0LLRgdGC0YDQsNC40LLQsNC90LjRjyDigJQgYEJYMjQucGxhY2VtZW50LmJpbmRFdmVudCgpYC5cbiAgICAgKiBgaGFuZGxlcmAg0LLRi9C30YvQstCw0LXRgtGB0Y8g0L/RgNC4INC60LDQttC00L7QvCDRgdC+0LHRi9GC0LjQuC4g0JLQvtC30LLRgNCw0YnQsNC10YIg0YTRg9C90LrRhtC40Y4g0L7RgtC/0LjRgdC60Lg6XG4gICAgICog0L7QvdCwINGC0L7Qu9GM0LrQviDQv9C10YDQtdGB0YLQsNGR0YIg0LLRi9C30YvQstCw0YLRjCBgaGFuZGxlcmAg4oCUINC+0YLQvNC10L3QuNGC0Ywg0L/QvtC00L/QuNGB0LrRgyDQvdCwXG4gICAgICog0YHRgtC+0YDQvtC90LUg0L/QvtGA0YLQsNC70LAg0L/RgNC+0YLQvtC60L7QuyDQvdC1INC/0L7Qt9Cy0L7Qu9GP0LXRgi4g0JLQvdC1IGlmcmFtZSDQsdGA0L7RgdCw0LXRglxuICAgICAqIGBCWFJlc3RGcmFtZUVycm9yYCDRgSDQutC+0LTQvtC8IGBOT1RfSU5fRlJBTUVgLlxuICAgICAqL1xuICAgIGJpbmRFdmVudDogKGV2ZW50OiBzdHJpbmcsIGhhbmRsZXI6IChkYXRhOiB1bmtub3duKSA9PiB2b2lkKTogKCkgPT4gdm9pZCA9PiB7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc3BvcnQuc3Vic2NyaWJlKCdwbGFjZW1lbnRCaW5kRXZlbnQnLCB7IGV2ZW50IH0sIGhhbmRsZXIpXG4gICAgfSxcbiAgfVxuXG4gIC8qKiDQndCw0YHRgtGA0L7QudC60Lgg0L/RgNC40LvQvtC20LXQvdC40Y8g0LTQu9GPINGC0LXQutGD0YnQtdCz0L4g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPIOKAlCDQutCw0LogYEJYMjQudXNlck9wdGlvbmAuICovXG4gIHJlYWRvbmx5IHVzZXJPcHRpb24gPSB7XG4gICAgZ2V0OiBhc3luYyAobmFtZTogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiA9PiAoYXdhaXQgdGhpcy5pbml0KCkpLnVzZXJPcHRpb25zW25hbWVdLFxuICAgIHNldDogYXN5bmMgKG5hbWU6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIGNvbnN0IGluaXQgPSBhd2FpdCB0aGlzLmluaXQoKVxuICAgICAgaW5pdC51c2VyT3B0aW9uc1tuYW1lXSA9IHZhbHVlXG4gICAgICBhd2FpdCB0aGlzLmFjaygnc2V0VXNlck9wdGlvbicsIHsgbmFtZSwgdmFsdWUgfSlcbiAgICB9LFxuICB9XG5cbiAgLyoqINCd0LDRgdGC0YDQvtC50LrQuCDQv9GA0LjQu9C+0LbQtdC90LjRjyDQtNC70Y8g0LLRgdC10LPQviDQv9C+0YDRgtCw0LvQsCDigJQg0LrQsNC6IGBCWDI0LmFwcE9wdGlvbmAuICovXG4gIHJlYWRvbmx5IGFwcE9wdGlvbiA9IHtcbiAgICBnZXQ6IGFzeW5jIChuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHVua25vd24+ID0+IChhd2FpdCB0aGlzLmluaXQoKSkuYXBwT3B0aW9uc1tuYW1lXSxcbiAgICAvKipcbiAgICAgKiDQnNC10L3Rj9GC0Ywg0LjRhSDQvNC+0LbQtdGCINGC0L7Qu9GM0LrQviDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgCDQv9C+0YDRgtCw0LvQsDog0L7RgdGC0LDQu9GM0L3Ri9C8IOKAlCDQvtGI0LjQsdC60LBcbiAgICAgKiBgQUNDRVNTX0RFTklFRGAgKEJYMjQuanMg0LIg0Y3RgtC+0Lwg0YHQu9GD0YfQsNC1INC80L7Qu9GH0LAg0L3QuNGH0LXQs9C+INC90LUg0LTQtdC70LDQtdGCKS5cbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDQvdCw0YHRgtGA0L7QudC60Lgg0L/RgNC40LvQvtC20LXQvdC40Y8g0L/QvtGB0LvQtSDRgdC+0YXRgNCw0L3QtdC90LjRjy5cbiAgICAgKi9cbiAgICBzZXQ6IGFzeW5jIChuYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPT4ge1xuICAgICAgY29uc3QgaW5pdCA9IGF3YWl0IHRoaXMuaW5pdCgpXG4gICAgICBpZiAoIWluaXQuaXNBZG1pbikge1xuICAgICAgICB0aHJvdyBuZXcgQlhSZXN0RnJhbWVFcnJvcignQUNDRVNTX0RFTklFRCcsICdPbmx5IGEgQml0cml4MjQgYWRtaW5pc3RyYXRvciBjYW4gY2hhbmdlIGFwcGxpY2F0aW9uIG9wdGlvbnMuJylcbiAgICAgIH1cbiAgICAgIGluaXQuYXBwT3B0aW9uc1tuYW1lXSA9IHZhbHVlXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy50cmFuc3BvcnQucmVxdWVzdCgnc2V0QXBwT3B0aW9uJywgeyBuYW1lLCB2YWx1ZSB9LCB7IHRpbWVvdXQ6IHRoaXMudGltZW91dCB9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIH0sXG4gIH1cblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBCWFJlc3RGcmFtZU9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMudGltZW91dCA9IG9wdGlvbnMudGltZW91dCA/PyBERUZBVUxUX1RJTUVPVVRcbiAgfVxuXG4gIC8qKlxuICAgKiDQlNCw0L3QvdGL0LUg0LfQsNC/0YPRgdC60LAg0L/RgNC40LvQvtC20LXQvdC40Y8g4oCUINCw0L3QsNC70L7QsyBgQlgyNC5pbml0KClgOiDRj9C30YvQuiwg0LTQvtC80LXQvSwg0L/RgNCw0LLQsCxcbiAgICog0LLRgdGC0YDQsNC40LLQsNC90LjQtSwg0L3QsNGB0YLRgNC+0LnQutC4LCDQv9GA0LjQt9C90LDQutC4INGD0YHRgtCw0L3QvtCy0LrQuC4g0JfQsNC/0YDQsNGI0LjQstCw0Y7RgtGB0Y8g0YMg0L/QvtGA0YLQsNC70LBcbiAgICog0L7QtNC40L0g0YDQsNC3LCDQtNCw0LvRjNGI0LUg0LHQtdGA0YPRgtGB0Y8g0LjQtyDQv9Cw0LzRj9GC0LguINCi0L7QutC10L3QvtCyINC30LTQtdGB0Ywg0L3QtdGCIOKAlCDRgdC8LiBgZ2V0QXV0aCgpYC5cbiAgICovXG4gIGluaXQoKTogUHJvbWlzZTxpQlhSZXN0RnJhbWVJbml0PiB7XG4gICAgaWYgKHRoaXMuaW5pdFZhbHVlKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuaW5pdFZhbHVlKVxuICAgIH1cbiAgICBpZiAoIXRoaXMuaW5pdFJlcXVlc3QpIHtcbiAgICAgIHRoaXMuaW5pdFJlcXVlc3QgPSB0aGlzLmdldEluaXREYXRhKClcbiAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5pbml0VmFsdWUgYXMgaUJYUmVzdEZyYW1lSW5pdClcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5pdFJlcXVlc3QgPSB1bmRlZmluZWRcbiAgICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaW5pdFJlcXVlc3RcbiAgfVxuXG4gIC8qKlxuICAgKiDQotC10LrRg9GJ0LDRjyDQsNCy0YLQvtGA0LjQt9Cw0YbQuNGPINC/0YDQuNC70L7QttC10L3QuNGPIOKAlCDQsNC90LDQu9C+0LMgYEJYMjQuZ2V0QXV0aCgpYC4g0JrQsNC20LTRi9C5INCy0YvQt9C+0LIg4oCUXG4gICAqINC90L7QstGL0Lkg0LfQsNC/0YDQvtGBIGBnZXRJbml0RGF0YWAg0Log0L/QvtGA0YLQsNC70YMuXG4gICAqXG4gICAqIGBleHBpcmVzX2luYCDQv9C+0YDRgtCw0Lsg0YHRh9C40YLQsNC10YIg0L7RgiDRgdGA0L7QutCwINC20LjQt9C90Lgg0YLQvtC60LXQvdCwINCyINC80L7QvNC10L3RgiDQstGL0LTQsNGH0LgsINCwINC90LVcbiAgICog0L7RgiDQvtGB0YLQsNGC0LrQsDog0LXRgdC70Lgg0YHRgtGA0LDQvdC40YbQsCDQvtGC0LrRgNGL0YLQsCDQtNCw0LLQvdC+LCDQt9C90LDRh9C10L3QuNC1INCx0YPQtNC10YIg0LfQsNCy0YvRiNC10L3QviAo0YLQsNC6XG4gICAqINC20LUg0Lgg0YMgQlgyNC5qcykuINCU0LvRjyDRgdCy0LXQttC10LPQviDRgtC+0LrQtdC90LAg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSBgcmVmcmVzaEF1dGgoKWAuXG4gICAqL1xuICBhc3luYyBnZXRBdXRoKCk6IFByb21pc2U8aUJYUmVzdEZyYW1lQXV0aD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdldEluaXREYXRhKClcbiAgICByZXR1cm4gdGhpcy50b0F1dGgoJ2dldEluaXREYXRhJywgZGF0YSwgU3RyaW5nKGRhdGFbJ01FTUJFUl9JRCddIHx8ICcnKSlcbiAgfVxuXG4gIC8qKlxuICAgKiDQndC+0LLQsNGPINCw0LLRgtC+0YDQuNC30LDRhtC40Y8g0L/RgNC40LvQvtC20LXQvdC40Y8g4oCUINCw0L3QsNC70L7QsyBgQlgyNC5yZWZyZXNoQXV0aCgpYDog0L/QvtGA0YLQsNC7XG4gICAqINCy0YvQv9GD0YHQutCw0LXRgiDQvdC+0LLRg9GOINC/0LDRgNGDIGBhY2Nlc3NfdG9rZW5gL2ByZWZyZXNoX3Rva2VuYC4g0JXRgdC70Lgg0L/QvtGA0YLQsNC7INC90LUg0LzQvtC20LXRglxuICAgKiDQstGL0LTQsNGC0Ywg0YLQvtC60LXQvSwg0L7QvSDQv9C+0LrQsNC30YvQstCw0LXRgiBgYWxlcnRgIMKrVW5hYmxlIHRvIGdldCBuZXcgdG9rZW4hwrsg0Lgg0L3QtVxuICAgKiDQvtGC0LLQtdGH0LDQtdGCIOKAlCDRgtC+0LPQtNCwINC+0YjQuNCx0LrQsCBgVElNRU9VVGAuXG4gICAqL1xuICBhc3luYyByZWZyZXNoQXV0aCgpOiBQcm9taXNlPGlCWFJlc3RGcmFtZUF1dGg+IHtcbiAgICAvLyBtZW1iZXJfaWQg0L/RgNC40YXQvtC00LjRgiDRgtC+0LvRjNC60L4g0LIgZ2V0SW5pdERhdGEg4oCUIHJlZnJlc2hBdXRoINC10LPQviDQvdC1INCy0L7Qt9Cy0YDQsNGJ0LDQtdGCXG4gICAgY29uc3QgeyBtZW1iZXJJZCB9ID0gYXdhaXQgdGhpcy5pbml0KClcbiAgICBjb25zdCBkYXRhID0gYXNPYmplY3QoJ3JlZnJlc2hBdXRoJywgYXdhaXQgdGhpcy50cmFuc3BvcnQucmVxdWVzdCgncmVmcmVzaEF1dGgnLCB7fSwgeyB0aW1lb3V0OiB0aGlzLnRpbWVvdXQgfSkpXG4gICAgcmV0dXJuIHRoaXMudG9BdXRoKCdyZWZyZXNoQXV0aCcsIGRhdGEsIG1lbWJlcklkKVxuICB9XG5cbiAgLyoqXG4gICAqINCX0LDQstC10YDRiNC40YLRjCDRg9GB0YLQsNC90L7QstC60YMg4oCUINCw0L3QsNC70L7QsyBgQlgyNC5pbnN0YWxsRmluaXNoKClgOiDQv9C+0YDRgtCw0Lsg0L7RgtC80LXRh9Cw0LXRglxuICAgKiDQv9GA0LjQu9C+0LbQtdC90LjQtSDRg9GB0YLQsNC90L7QstC70LXQvdC90YvQvCDQuCDQv9C10YDQtdC30LDQs9GA0YPQttCw0LXRgiDRgdGC0YDQsNC90LjRhtGDLiDQlNC10LvQsNC10YIg0YfRgtC+LdGC0L4g0YLQvtC70YzQutC+XG4gICAqINC90LAg0YHRgtGA0LDQvdC40YbQtSDRg9GB0YLQsNC90L7QstGJ0LjQutCwIChgaW5pdCgpLmluc3RhbGxgKSwg0LjQvdCw0YfQtSDigJQg0L3QuNGH0LXQs9C+LCDQutCw0Log0LggQlgyNC5qcy5cbiAgICovXG4gIGFzeW5jIGluc3RhbGxGaW5pc2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKChhd2FpdCB0aGlzLmluaXQoKSkuaW5zdGFsbCkge1xuICAgICAgdGhpcy50cmFuc3BvcnQucG9zdCgnc2V0SW5zdGFsbEZpbmlzaCcsIHt9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDQntGC0LzQtdGC0LjRgtGMLCDRh9GC0L4g0L/QtdGA0LLRi9C5INC30LDQv9GD0YHQuiDRgyDRjdGC0L7Qs9C+INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQv9GA0L7QudC00LXQvSwg4oCUINGC0L4sINGH0YLQvlxuICAgKiBCWDI0LmpzINC00LXQu9Cw0LXRgiDQv9C+0YHQu9C1INC/0L7RgdC70LXQtNC90LXQs9C+INC+0LHRgNCw0LHQvtGC0YfQuNC60LAgYEJYMjQuaW5zdGFsbCgpYC4g0JHQtdC3INGN0YLQvtCz0L5cbiAgICogYGluaXQoKS5maXJzdFJ1bmAg0L7RgdGC0LDQvdC10YLRgdGPIGB0cnVlYCDQuCDQv9GA0Lgg0YHQu9C10LTRg9GO0YnQuNGFINC30LDQv9GD0YHQutCw0YUuINCU0LXQu9Cw0LXRglxuICAgKiDRh9GC0L4t0YLQviDRgtC+0LvRjNC60L4g0L/RgNC4INC/0LXRgNCy0L7QvCDQt9Cw0L/Rg9GB0LrQtS5cbiAgICovXG4gIGFzeW5jIGZpcnN0UnVuRmluaXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGluaXQgPSBhd2FpdCB0aGlzLmluaXQoKVxuICAgIGlmIChpbml0LmZpcnN0UnVuKSB7XG4gICAgICBhd2FpdCB0aGlzLmFjaygnc2V0SW5zdGFsbCcsIHsgaW5zdGFsbDogdHJ1ZSB9KVxuICAgICAgaW5pdC5maXJzdFJ1biA9IGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLyoqINCX0LDQtNCw0YLRjCDRgNCw0LfQvNC10YAg0YTRgNC10LnQvNCwIOKAlCBgQlgyNC5yZXNpemVXaW5kb3coKWAuINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINGA0LDQt9C80LXRgCwg0LrQvtGC0L7RgNGL0Lkg0LLRi9GB0YLQsNCy0LjQuyDQv9C+0YDRgtCw0LsuICovXG4gIGFzeW5jIHJlc2l6ZVdpbmRvdyh3aWR0aDogbnVtYmVyIHwgc3RyaW5nLCBoZWlnaHQ6IG51bWJlciB8IHN0cmluZyk6IFByb21pc2U8aUJYUmVzdEZyYW1lU2l6ZSB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHcgPSBOdW1iZXIucGFyc2VJbnQoU3RyaW5nKHdpZHRoKSwgMTApXG4gICAgY29uc3QgaCA9IE51bWJlci5wYXJzZUludChTdHJpbmcoaGVpZ2h0KSwgMTApXG4gICAgaWYgKCEodyA+IDAgJiYgaCA+IDApKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZXNpemVXaW5kb3c6IHdpZHRoIGFuZCBoZWlnaHQgbXVzdCBiZSBwb3NpdGl2ZSBudW1iZXJzLicpXG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB0aGlzLmFjaygncmVzaXplV2luZG93JywgeyB3aWR0aDogdywgaGVpZ2h0OiBoIH0pIGFzIGlCWFJlc3RGcmFtZVNpemUgfCB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKiDQn9C+0LTQvtCz0L3QsNGC0Ywg0LLRi9GB0L7RgtGDINGE0YDQtdC50LzQsCDQv9C+0LQg0YHQvtC00LXRgNC20LjQvNC+0LUg4oCUIGBCWDI0LmZpdFdpbmRvdygpYC4gKi9cbiAgYXN5bmMgZml0V2luZG93KCk6IFByb21pc2U8aUJYUmVzdEZyYW1lU2l6ZSB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbiAgICBjb25zdCBoZWlnaHQgPSBNYXRoLm1heChyb290LnNjcm9sbEhlaWdodCwgcm9vdC5vZmZzZXRIZWlnaHQpXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYWNrKCdyZXNpemVXaW5kb3cnLCB7IHdpZHRoOiAnMTAwJScsIGhlaWdodCB9KSBhcyBpQlhSZXN0RnJhbWVTaXplIHwgdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICog0J/QtdGA0LXQt9Cw0LPRgNGD0LfQuNGC0Ywg0YHRgtGA0LDQvdC40YbRgyDQv9C+0YDRgtCw0LvQsCDRgSDQv9GA0LjQu9C+0LbQtdC90LjQtdC8IOKAlCBgQlgyNC5yZWxvYWRXaW5kb3coKWAuXG4gICAqINCf0L7RgNGC0LDQuyDQvdCwINGN0YLRgyDQutC+0LzQsNC90LTRgyDQvdC1INC+0YLQstC10YfQsNC10YIuXG4gICAqL1xuICBhc3luYyByZWxvYWRXaW5kb3coKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy50cmFuc3BvcnQucG9zdCgncmVsb2FkV2luZG93Jywge30pXG4gIH1cblxuICAvKiog0JfQsNCz0L7Qu9C+0LLQvtC6INGB0YLRgNCw0L3QuNGG0Ysg0L/QvtGA0YLQsNC70LAg4oCUIGBCWDI0LnNldFRpdGxlKClgLiAqL1xuICBhc3luYyBzZXRUaXRsZSh0aXRsZTogc3RyaW5nKTogUHJvbWlzZTx7IHRpdGxlOiBzdHJpbmcgfSB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmFjaygnc2V0VGl0bGUnLCB7IHRpdGxlOiBTdHJpbmcodGl0bGUpIH0pIGFzIHsgdGl0bGU6IHN0cmluZyB9IHwgdW5kZWZpbmVkXG4gIH1cblxuICAvKiog0J/RgNC+0LrRgNGD0YLQuNGC0Ywg0YHRgtGA0LDQvdC40YbRgyDQv9C+0YDRgtCw0LvQsCDigJQgYEJYMjQuc2Nyb2xsUGFyZW50V2luZG93KClgLiAqL1xuICBhc3luYyBzY3JvbGxQYXJlbnRXaW5kb3coc2Nyb2xsOiBudW1iZXIgfCBzdHJpbmcpOiBQcm9taXNlPHsgc2Nyb2xsOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHZhbHVlID0gTnVtYmVyLnBhcnNlSW50KFN0cmluZyhzY3JvbGwpLCAxMClcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2Nyb2xsUGFyZW50V2luZG93OiBzY3JvbGwgbXVzdCBiZSBhIG51bWJlci4nKVxuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5hY2soJ3NldFNjcm9sbCcsIHsgc2Nyb2xsOiB2YWx1ZSB9KSBhcyB7IHNjcm9sbDogbnVtYmVyIH0gfCB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiDQlNC40LDQu9C+0LMg0LLRi9Cx0L7RgNCwINC+0LTQvdC+0LPQviDRgdC+0YLRgNGD0LTQvdC40LrQsCDigJQgYEJYMjQuc2VsZWN0VXNlcigpYC4g0JbQtNGR0YIg0LLRi9Cx0L7RgNCwINCx0LXQt1xuICAgKiDQvtCz0YDQsNC90LjRh9C10L3QuNGPINC/0L4g0LLRgNC10LzQtdC90Lg6INC10YHQu9C4INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjCDQt9Cw0LrRgNGL0Lsg0LTQuNCw0LvQvtCzLCDQv9C+0YDRgtCw0Lsg0L3QtVxuICAgKiDQvtGC0LLQtdGH0LDQtdGCINCy0L7QstGB0LUuINCe0YLQvNC10L3QuNGC0Ywg0L7QttC40LTQsNC90LjQtSDigJQgYHNpZ25hbGAg0LjQu9C4INC90L7QstGL0Lkg0LLRi9C30L7QslxuICAgKiBgc2VsZWN0VXNlcigpYC9gc2VsZWN0VXNlcnMoKWAgKNC+0YjQuNCx0LrQsCBgQ0FOQ0VMTEVEYCkuXG4gICAqL1xuICBzZWxlY3RVc2VyKG9wdGlvbnM6IHsgdGl0bGU/OiBzdHJpbmcsIHNpZ25hbD86IEFib3J0U2lnbmFsIH0gPSB7fSk6IFByb21pc2U8aUJYUmVzdEZyYW1lVXNlcj4ge1xuICAgIHJldHVybiB0aGlzLmRpYWxvZygndXNlcicsICdzZWxlY3RVc2VyJywgeyB0aXRsZTogb3B0aW9ucy50aXRsZSA/PyAnJywgbXVsdDogZmFsc2UgfSwgb3B0aW9ucy5zaWduYWwpIGFzIFByb21pc2U8aUJYUmVzdEZyYW1lVXNlcj5cbiAgfVxuXG4gIC8qKiDQlNC40LDQu9C+0LMg0LLRi9Cx0L7RgNCwINC90LXRgdC60L7Qu9GM0LrQuNGFINGB0L7RgtGA0YPQtNC90LjQutC+0LIg4oCUIGBCWDI0LnNlbGVjdFVzZXJzKClgLiDQntC20LjQtNCw0L3QuNC1IOKAlCDQutCw0Log0YMgYHNlbGVjdFVzZXIoKWAuICovXG4gIHNlbGVjdFVzZXJzKG9wdGlvbnM6IHsgdGl0bGU/OiBzdHJpbmcsIHNpZ25hbD86IEFib3J0U2lnbmFsIH0gPSB7fSk6IFByb21pc2U8aUJYUmVzdEZyYW1lVXNlcltdPiB7XG4gICAgcmV0dXJuIHRoaXMuZGlhbG9nKCd1c2VyJywgJ3NlbGVjdFVzZXInLCB7IHRpdGxlOiBvcHRpb25zLnRpdGxlID8/ICcnLCBtdWx0OiB0cnVlIH0sIG9wdGlvbnMuc2lnbmFsKSBhcyBQcm9taXNlPGlCWFJlc3RGcmFtZVVzZXJbXT5cbiAgfVxuXG4gIC8qKlxuICAgKiDQlNC40LDQu9C+0LMg0LLRi9Cx0L7RgNCwINC/0YDQsNCyINC00L7RgdGC0YPQv9CwIOKAlCBgQlgyNC5zZWxlY3RBY2Nlc3MoKWAuIGB2YWx1ZWAg4oCUINC60L7QtNGLLFxuICAgKiDQutC+0YLQvtGA0YvQtSDQvdC10LvRjNC30Y8g0LLRi9Cx0YDQsNGC0YwuINCe0LbQuNC00LDQvdC40LUg4oCUINC60LDQuiDRgyBgc2VsZWN0VXNlcigpYC5cbiAgICovXG4gIHNlbGVjdEFjY2VzcyhvcHRpb25zOiB7IHZhbHVlPzogc3RyaW5nW10sIHNpZ25hbD86IEFib3J0U2lnbmFsIH0gPSB7fSk6IFByb21pc2U8aUJYUmVzdEZyYW1lQWNjZXNzW10+IHtcbiAgICByZXR1cm4gdGhpcy5kaWFsb2coJ2FjY2VzcycsICdzZWxlY3RBY2Nlc3MnLCB7IHZhbHVlOiBvcHRpb25zLnZhbHVlID8/IFtdIH0sIG9wdGlvbnMuc2lnbmFsKSBhcyBQcm9taXNlPGlCWFJlc3RGcmFtZUFjY2Vzc1tdPlxuICB9XG5cbiAgLyoqINCU0LjQsNC70L7QsyDQstGL0LHQvtGA0LAg0L7QsdGK0LXQutGC0L7QsiBDUk0g4oCUIGBCWDI0LnNlbGVjdENSTSgpYC4g0J7QttC40LTQsNC90LjQtSDigJQg0LrQsNC6INGDIGBzZWxlY3RVc2VyKClgLiAqL1xuICBzZWxlY3RDUk0ob3B0aW9uczogaUJYUmVzdEZyYW1lQ3JtU2VsZWN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxpQlhSZXN0RnJhbWVDcm1TZWxlY3Rpb24+IHtcbiAgICBjb25zdCB7IGVudGl0eVR5cGUsIG11bHRpcGxlLCB2YWx1ZSwgc2lnbmFsIH0gPSBvcHRpb25zXG4gICAgcmV0dXJuIHRoaXMuZGlhbG9nKCdjcm0nLCAnc2VsZWN0Q1JNJywgeyBlbnRpdHlUeXBlLCBtdWx0aXBsZSwgdmFsdWUgfSwgc2lnbmFsKSBhcyBQcm9taXNlPGlCWFJlc3RGcmFtZUNybVNlbGVjdGlvbj5cbiAgfVxuXG4gIC8qKlxuICAgKiDQntGC0LrRgNGL0YLRjCDQv9GA0LjQu9C+0LbQtdC90LjQtSDQsiDRgdC70LDQudC00LXRgNC1IOKAlCBgQlgyNC5vcGVuQXBwbGljYXRpb24oKWAuINCf0YDQvtC80LjRgVxuICAgKiDQt9Cw0LLQtdGA0YjQsNC10YLRgdGPLCDQutC+0LPQtNCwINGB0LvQsNC50LTQtdGAINC30LDQutGA0YvQu9C4LiBgc2V0dGluZ3NgIOKAlCDQvdCw0YHRgtGA0L7QudC60Lgg0YHQu9Cw0LnQtNC10YDQsFxuICAgKiAo0YPRhdC+0LTRj9GCINC60LDQuiBgYngyNF880LrQu9GO0Yc+YCwg0LrQsNC6INCyIEJYMjQuanMpLlxuICAgKi9cbiAgYXN5bmMgb3BlbkFwcGxpY2F0aW9uKFxuICAgIHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSxcbiAgICBzZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSxcbiAgICBvcHRpb25zOiB7IHNpZ25hbD86IEFib3J0U2lnbmFsIH0gPSB7fVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtZXNzYWdlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgLi4ucGFyYW1zIH1cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzZXR0aW5ncykpIHtcbiAgICAgIG1lc3NhZ2VbYGJ4MjRfJHtrZXl9YF0gPSB2YWx1ZVxuICAgIH1cbiAgICBhd2FpdCB0aGlzLnRyYW5zcG9ydC5yZXF1ZXN0KCdvcGVuQXBwbGljYXRpb24nLCBtZXNzYWdlLCB7IHRpbWVvdXQ6IGZhbHNlLCBzaWduYWw6IG9wdGlvbnMuc2lnbmFsIH0pXG4gIH1cblxuICAvKipcbiAgICog0J7RgtC60YDRi9GC0Ywg0YHRgtGA0LDQvdC40YbRgyDQv9C+0YDRgtCw0LvQsCDQsiDRgdC70LDQudC00LXRgNC1IOKAlCBgQlgyNC5vcGVuUGF0aCgpYC4g0J/RgNC+0LzQuNGBXG4gICAqINC30LDQstC10YDRiNCw0LXRgtGB0Y8sINC60L7Qs9C00LAg0YHQu9Cw0LnQtNC10YAg0LfQsNC60YDRi9C70LggKGB7IHJlc3VsdDogJ2Nsb3NlJyB9YCksINC40LvQuCDRgdGA0LDQt9GDLFxuICAgKiDQtdGB0LvQuCDQv9GD0YLRjCDQvdC1INC+0YLQutGA0YvQu9GB0Y8gKGB7IHJlc3VsdDogJ2Vycm9yJywgZXJyb3JDb2RlIH1gKS5cbiAgICovXG4gIGFzeW5jIG9wZW5QYXRoKHBhdGg6IHN0cmluZywgb3B0aW9uczogeyBzaWduYWw/OiBBYm9ydFNpZ25hbCB9ID0ge30pOiBQcm9taXNlPGlCWFJlc3RGcmFtZU9wZW5QYXRoUmVzdWx0PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudHJhbnNwb3J0LnJlcXVlc3QoJ29wZW5QYXRoJywgeyBwYXRoIH0sIHsgdGltZW91dDogZmFsc2UsIHNpZ25hbDogb3B0aW9ucy5zaWduYWwgfSkgYXMgaUJYUmVzdEZyYW1lT3BlblBhdGhSZXN1bHRcbiAgfVxuXG4gIC8qKlxuICAgKiDQl9Cw0LrRgNGL0YLRjCDRgdC70LDQudC00LXRgCDRgSDQv9GA0LjQu9C+0LbQtdC90LjQtdC8IOKAlCBgQlgyNC5jbG9zZUFwcGxpY2F0aW9uKClgLiDQldGB0LvQuFxuICAgKiDQv9GA0LjQu9C+0LbQtdC90LjQtSDQvtGC0LrRgNGL0YLQviDQvdC1INCyINGB0LvQsNC50LTQtdGA0LUsINC90LjRh9C10LPQviDQvdC1INC/0YDQvtC40YHRhdC+0LTQuNGCLiDQo9C30L3QsNGC0Ywg0L5cbiAgICog0LfQsNC60YDRi9GC0LjQuCDQvNC+0LbQtdGCINC+0YLQutGA0YvQstGI0LjQuSDRgdC70LDQudC00LXRgCDigJQg0YfQtdGA0LXQtyBgb3BlbkFwcGxpY2F0aW9uKClgLlxuICAgKi9cbiAgYXN5bmMgY2xvc2VBcHBsaWNhdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnRyYW5zcG9ydC5wb3N0KCdjbG9zZUFwcGxpY2F0aW9uJywgbnVsbClcbiAgfVxuXG4gIC8qKlxuICAgKiDQmtC+0LzQsNC90LTQsCwg0L3QsCDQutC+0YLQvtGA0YPRjiDQv9C+0YDRgtCw0Lsg0L7RgtCy0LXRh9Cw0LXRgiDQv9C+0LTRgtCy0LXRgNC20LTQtdC90LjQtdC8LiDQkiDQvdC10LrQvtGC0L7RgNGL0YVcbiAgICog0LLRgdGC0YDQsNC40LLQsNC90LjRj9GFINC/0L7RgNGC0LDQuyDQvdCwINGC0LDQutC40LUg0LrQvtC80LDQvdC00Ysg0L3QtSDQvtGC0LLQtdGH0LDQtdGCICjRgtCw0Log0YHRh9C40YLQsNC10YIg0LhcbiAgICogYjI0anNzZGspIOKAlCDRgtC+0LPQtNCwINC/0YDQvtC80LjRgSDQt9Cw0LLQtdGA0YjQsNC10YLRgdGPINGBIGB1bmRlZmluZWRgLCDQsCDQvdC1INC+0YjQuNCx0LrQvtC5LlxuICAgKi9cbiAgcHJpdmF0ZSBhY2soY29tbWFuZDogc3RyaW5nLCBwYXJhbXM6IHVua25vd24pOiBQcm9taXNlPHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy50cmFuc3BvcnQucmVxdWVzdChjb21tYW5kLCBwYXJhbXMsIHsgdGltZW91dDogdGhpcy50aW1lb3V0LCBvblRpbWVvdXQ6ICdyZXNvbHZlJyB9KVxuICB9XG5cbiAgLyoqXG4gICAqINCU0LjQsNC70L7Qs9C4INC20LTRg9GCINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQsdC10Lcg0YLQsNC50LzQsNGD0YLQsC4g0J/QvtGA0YLQsNC7INC00LXRgNC20LjRgiDQvtC00LjQvSDQvtCx0YDQsNCx0L7RgtGH0LjQulxuICAgKiDQvdCwINC00LjQsNC70L7QsyAo0YMg0LLRi9Cx0L7RgNCwINGB0L7RgtGA0YPQtNC90LjQutC+0LIg0L7QvSDQvtCx0YnQuNC5INC00LvRjyBgc2VsZWN0VXNlcmAg0LhcbiAgICogYHNlbGVjdFVzZXJzYCkg0Lgg0L3QsCDQv9GA0L7RiNC70YvQuSDQstGL0LfQvtCyINGD0LbQtSDQvdC1INC+0YLQstC10YLQuNGCIOKAlCDQv9C+0Y3RgtC+0LzRgyDQvdC+0LLRi9C5INCy0YvQt9C+0LJcbiAgICog0L7RgtC80LXQvdGP0LXRgiDQvtC20LjQtNCw0L3QuNC1INC/0YDQvtGI0LvQvtCz0L4uXG4gICAqL1xuICBwcml2YXRlIGRpYWxvZyhraW5kOiAndXNlcicgfCAnYWNjZXNzJyB8ICdjcm0nLCBjb21tYW5kOiBzdHJpbmcsIHBhcmFtczogdW5rbm93biwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICB0aGlzLmRpYWxvZ3MuZ2V0KGtpbmQpPy5hYm9ydCgpXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIHRoaXMuZGlhbG9ncy5zZXQoa2luZCwgY29udHJvbGxlcilcblxuICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiBjb250cm9sbGVyLmFib3J0KClcbiAgICBpZiAoc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICBjb250cm9sbGVyLmFib3J0KClcbiAgICB9XG4gICAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KVxuXG4gICAgcmV0dXJuIHRoaXMudHJhbnNwb3J0LnJlcXVlc3QoY29tbWFuZCwgcGFyYW1zLCB7IHRpbWVvdXQ6IGZhbHNlLCBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIHNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkFib3J0KVxuICAgICAgICBpZiAodGhpcy5kaWFsb2dzLmdldChraW5kKSA9PT0gY29udHJvbGxlcikge1xuICAgICAgICAgIHRoaXMuZGlhbG9ncy5kZWxldGUoa2luZClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0SW5pdERhdGEoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgIGNvbnN0IGRhdGEgPSBhc09iamVjdCgnZ2V0SW5pdERhdGEnLCBhd2FpdCB0aGlzLnRyYW5zcG9ydC5yZXF1ZXN0KCdnZXRJbml0RGF0YScsIG51bGwsIHsgdGltZW91dDogdGhpcy50aW1lb3V0IH0pKVxuICAgIC8vIGZpcnN0UnVuINC/0L7RgNGC0LDQuyDQvtGC0LTQsNGR0YIg0YLQvtC70YzQutC+INCyINC/0LXRgNCy0L7QvCDQvtGC0LLQtdGC0LUg0LfQsCDQt9Cw0LPRgNGD0LfQutGDINGB0YLRgNCw0L3QuNGG0Ysg4oCUXG4gICAgLy8g0L/QvtGN0YLQvtC80YMg0LfQsNC/0L7QvNC40L3QsNC10Lwg0LTQsNC90L3Ri9C1INC/0LXRgNCy0L7Qs9C+INC+0YLQstC10YLQsCwg0LrRgtC+INCx0Ysg0LXQs9C+INC90Lgg0LfQsNC/0YDQvtGB0LjQu1xuICAgIGlmICghdGhpcy5pbml0VmFsdWUpIHtcbiAgICAgIHRoaXMuaW5pdFZhbHVlID0gdGhpcy50b0luaXQoZGF0YSlcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFcbiAgfVxuXG4gIHByaXZhdGUgdG9Jbml0KGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogaUJYUmVzdEZyYW1lSW5pdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vINCa0LDQuiBCWDI0LmpzOiDQtNC+0LzQtdC9IOKAlCDQuNC3INC/0LDRgNCw0LzQtdGC0YDQvtCyINGE0YDQtdC50LzQsCwgRE9NQUlOINC+0YLQstC10YLQsCDigJQg0LfQsNC/0LDRgdC90L7QuVxuICAgICAgZG9tYWluOiB0aGlzLnRyYW5zcG9ydC5kb21haW4gfHwgU3RyaW5nKGRhdGFbJ0RPTUFJTiddIHx8ICcnKSxcbiAgICAgIGxhbmc6IFN0cmluZyhkYXRhWydMQU5HJ10gfHwgJycpLFxuICAgICAgcGF0aDogU3RyaW5nKGRhdGFbJ1BBVEgnXSB8fCAnJyksXG4gICAgICBodHRwczogTnVtYmVyLnBhcnNlSW50KFN0cmluZyhkYXRhWydQUk9UT0NPTCddKSwgMTApID09PSAxLFxuICAgICAgbWVtYmVySWQ6IFN0cmluZyhkYXRhWydNRU1CRVJfSUQnXSB8fCAnJyksXG4gICAgICBpc0FkbWluOiAhIWRhdGFbJ0lTX0FETUlOJ10sXG4gICAgICBpbnN0YWxsOiAhIWRhdGFbJ0lOU1RBTEwnXSxcbiAgICAgIGZpcnN0UnVuOiAhIWRhdGFbJ0ZJUlNUX1JVTiddLFxuICAgICAgcGxhY2VtZW50OiBTdHJpbmcoZGF0YVsnUExBQ0VNRU5UJ10gfHwgJ0RFRkFVTFQnKSxcbiAgICAgIHBsYWNlbWVudE9wdGlvbnM6IGRhdGFbJ1BMQUNFTUVOVF9PUFRJT05TJ10sXG4gICAgICB1c2VyT3B0aW9uczogdG9SZWNvcmQoZGF0YVsnVVNFUl9PUFRJT05TJ10pLFxuICAgICAgYXBwT3B0aW9uczogdG9SZWNvcmQoZGF0YVsnQVBQX09QVElPTlMnXSksXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0b0F1dGgoY29tbWFuZDogc3RyaW5nLCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgbWVtYmVySWQ6IHN0cmluZyk6IGlCWFJlc3RGcmFtZUF1dGgge1xuICAgIGNvbnN0IHsgQVVUSF9JRCwgUkVGUkVTSF9JRCwgQVVUSF9FWFBJUkVTIH0gPSBkYXRhXG4gICAgaWYgKCFBVVRIX0lEIHx8IHR5cGVvZiBBVVRIX0lEICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEJYUmVzdEZyYW1lRXJyb3IoJ05PX0FVVEgnLCBgQml0cml4MjQgYW5zd2VyZWQgJHtjb21tYW5kfSB3aXRob3V0IGFuIGFjY2VzcyB0b2tlbi5gKVxuICAgIH1cbiAgICAvLyBBVVRIX0VYUElSRVMg4oCUINGB0YDQvtC6INC20LjQt9C90Lgg0YLQvtC60LXQvdCwINCyINGB0LXQutGD0L3QtNCw0YUuIEJYMjQuanMg0L/QtdGA0LXQstC+0LTQuNGCINC10LPQviDQslxuICAgIC8vINC80L7QvNC10L3RgiDQuNGB0YLQtdGH0LXQvdC40Y8g0LIg0LzQuNC70LvQuNGB0LXQutGD0L3QtNCw0YUg4oCUINGC0LDQuiDQttC1LCDQutCw0Log0LfQtNC10YHRjC5cbiAgICBjb25zdCBleHBpcmVzSW4gPSBOdW1iZXIucGFyc2VJbnQoU3RyaW5nKEFVVEhfRVhQSVJFUyksIDEwKVxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGV4cGlyZXNJbikgfHwgZXhwaXJlc0luIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBCWFJlc3RGcmFtZUVycm9yKCdCQURfUkVTUE9OU0UnLCBgQml0cml4MjQgYW5zd2VyZWQgJHtjb21tYW5kfSB3aXRob3V0IGEgdXNhYmxlIEFVVEhfRVhQSVJFUy5gKVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYWNjZXNzX3Rva2VuOiBBVVRIX0lELFxuICAgICAgcmVmcmVzaF90b2tlbjogdHlwZW9mIFJFRlJFU0hfSUQgPT09ICdzdHJpbmcnID8gUkVGUkVTSF9JRCA6ICcnLFxuICAgICAgZXhwaXJlc19pbjogRGF0ZS5ub3coKSArIGV4cGlyZXNJbiAqIDEwMDAsXG4gICAgICBkb21haW46IHRoaXMudHJhbnNwb3J0LmRvbWFpbixcbiAgICAgIG1lbWJlcl9pZDogbWVtYmVySWQsXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzT2JqZWN0KGNvbW1hbmQ6IHN0cmluZywgZGF0YTogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgaWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgdGhyb3cgbmV3IEJYUmVzdEZyYW1lRXJyb3IoJ0JBRF9SRVNQT05TRScsIGBCaXRyaXgyNCBhbnN3ZXJlZCAke2NvbW1hbmR9IHdpdGggYSBwYXlsb2FkIHRoYXQgaXMgbm90IGFuIG9iamVjdC5gKVxuICB9XG4gIHJldHVybiBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG59XG5cbi8vINCf0YPRgdGC0YvQtSDQvdCw0YHRgtGA0L7QudC60LggUEhQINC+0YLQtNCw0ZHRgiDQvNCw0YHRgdC40LLQvtC8IGBbXWBcbmZ1bmN0aW9uIHRvUmVjb3JkKHZhbHVlOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKVxuICAgID8geyAuLi52YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9XG4gICAgOiB7fVxufVxuIl19