@appconda/sdk 1.0.410 → 1.0.412

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 (61) hide show
  1. package/dist/client.js +10 -4
  2. package/package.json +1 -1
  3. package/src/client.ts +12 -3
  4. package/dist/actions/_authOptions.d.ts +0 -5
  5. package/dist/actions/_authOptions.js +0 -235
  6. package/dist/actions/actionClient.d.ts +0 -10
  7. package/dist/actions/actionClient.js +0 -41
  8. package/dist/actions/auth.d.ts +0 -1
  9. package/dist/actions/auth.js +0 -7
  10. package/dist/actions/authOptions.d.ts +0 -5
  11. package/dist/actions/authOptions.js +0 -133
  12. package/dist/actions/index.d.ts +0 -3
  13. package/dist/actions/index.js +0 -4
  14. package/dist/actions/nextAuthHandler.d.ts +0 -1
  15. package/dist/actions/nextAuthHandler.js +0 -6
  16. package/dist/decorators/Cache.d.ts +0 -1
  17. package/dist/decorators/Cache.js +0 -79
  18. package/dist/decorators/CacheKey.d.ts +0 -1
  19. package/dist/decorators/CacheKey.js +0 -9
  20. package/dist/decorators/Invalidate.d.ts +0 -1
  21. package/dist/decorators/Invalidate.js +0 -47
  22. package/dist/getSDKForCurrentUser.d.ts +0 -59
  23. package/dist/getSDKForCurrentUser.js +0 -100
  24. package/dist/getSDKForTenant.d.ts +0 -20
  25. package/dist/getSDKForTenant.js +0 -44
  26. package/dist/lib/Cache/Adapter.d.ts +0 -10
  27. package/dist/lib/Cache/Adapter.js +0 -2
  28. package/dist/lib/Cache/Adapters/Filesystem.d.ts +0 -16
  29. package/dist/lib/Cache/Adapters/Filesystem.js +0 -103
  30. package/dist/lib/Cache/Adapters/Memory.d.ts +0 -18
  31. package/dist/lib/Cache/Adapters/Memory.js +0 -47
  32. package/dist/lib/Cache/Adapters/None.d.ts +0 -12
  33. package/dist/lib/Cache/Adapters/None.js +0 -28
  34. package/dist/lib/Cache/Adapters/Sharding.d.ts +0 -17
  35. package/dist/lib/Cache/Adapters/Sharding.js +0 -73
  36. package/dist/lib/Cache/Cache.d.ts +0 -16
  37. package/dist/lib/Cache/Cache.js +0 -52
  38. package/dist/lib/Cache/index.d.ts +0 -4
  39. package/dist/lib/Cache/index.js +0 -5
  40. package/dist/lib/Cache/test.d.ts +0 -0
  41. package/dist/lib/Cache/test.js +0 -1
  42. package/dist/lib/Registry/Registry.d.ts +0 -38
  43. package/dist/lib/Registry/Registry.js +0 -56
  44. package/dist/lib/Registry/index.d.ts +0 -1
  45. package/dist/lib/Registry/index.js +0 -2
  46. package/dist/lib/Services.d.ts +0 -6
  47. package/dist/lib/Services.js +0 -14
  48. package/dist/lib/crypto.d.ts +0 -23
  49. package/dist/lib/crypto.js +0 -78
  50. package/dist/lib/env.d.ts +0 -1
  51. package/dist/lib/env.js +0 -137
  52. package/dist/lib/jwt.d.ts +0 -12
  53. package/dist/lib/jwt.js +0 -103
  54. package/dist/modules/account/actions.d.ts +0 -11
  55. package/dist/modules/account/actions.js +0 -49
  56. package/dist/modules/accounv1/action.d.ts +0 -9
  57. package/dist/modules/accounv1/action.js +0 -88
  58. package/dist/modules/bpm/action.d.ts +0 -7
  59. package/dist/modules/bpm/action.js +0 -60
  60. package/dist/schemas/nodes.d.ts +0 -0
  61. package/dist/schemas/nodes.js +0 -1
package/dist/client.js CHANGED
@@ -1,5 +1,3 @@
1
- import { fetch, FormData, File } from 'node-fetch-native-with-agent';
2
- import { createAgent } from 'node-fetch-native-with-agent/agent';
3
1
  class AppcondaException extends Error {
4
2
  constructor(message, code = 0, type = '', response = '') {
5
3
  super(message);
@@ -205,11 +203,19 @@ class Client {
205
203
  prepareRequest(method, url, headers = {}, params = {}) {
206
204
  method = method.toUpperCase();
207
205
  headers = Object.assign({}, this.headers, headers);
206
+ if (typeof window !== 'undefined' && window.localStorage) {
207
+ const cookieFallback = window.localStorage.getItem('cookieFallback');
208
+ if (cookieFallback) {
209
+ headers['X-Fallback-Cookies'] = cookieFallback;
210
+ }
211
+ }
208
212
  let options = {
209
213
  method,
210
214
  headers,
211
- ...createAgent(this.config.endpoint, { rejectUnauthorized: !this.config.selfSigned }),
212
215
  };
216
+ if (headers['X-Appconda-Dev-Key'] === undefined) {
217
+ options.credentials = 'include';
218
+ }
213
219
  if (method === 'GET') {
214
220
  for (const [key, value] of Object.entries(Client.flatten(params))) {
215
221
  url.searchParams.append(key, value);
@@ -332,4 +338,4 @@ class Client {
332
338
  Client.CHUNK_SIZE = 1024 * 1024 * 5;
333
339
  export { Client, AppcondaException };
334
340
  export { Query } from './query';
335
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFtQmpFLE1BQU0saUJBQWtCLFNBQVEsS0FBSztJQUlqQyxZQUFZLE9BQWUsRUFBRSxPQUFlLENBQUMsRUFBRSxPQUFlLEVBQUUsRUFBRSxXQUFtQixFQUFFO1FBQ25GLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUM7UUFDaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDN0IsQ0FBQztDQUNKO0FBRUQsU0FBUyxZQUFZO0lBQ2pCLElBQUksRUFBRSxHQUFHLDBCQUEwQixDQUFDO0lBRXBDLDZFQUE2RTtJQUM3RSxNQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7SUFDOUIsSUFBSSxPQUFPLE9BQU8sS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUNqQyxJQUFJLE9BQU8sT0FBTyxDQUFDLFFBQVEsS0FBSyxRQUFRO1lBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUUsSUFBSSxPQUFPLE9BQU8sQ0FBQyxJQUFJLEtBQUssUUFBUTtZQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFD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QUFDO1lBQ2xGLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakIsTUFBTSxDQUFDLENBQUM7UUFDWixDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBYSxFQUFFLE1BQU0sR0FBRyxFQUFFO1FBQ3JDLElBQUksTUFBTSxHQUFZLEVBQUUsQ0FBQztRQUV6QixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzlDLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDdkQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sR0FBRyxFQUFFLEdBQUcsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUMvRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUM3QixDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7O0FBbFVNLGlCQUFVLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEFBQWxCLENBQW1CO0FBcVV4QyxPQUFPLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLENBQUM7QUFDckMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZldGNoLCBGb3JtRGF0YSwgRmlsZSB9IGZyb20gJ25vZGUtZmV0Y2gtbmF0aXZlLXdpdGgtYWdlbnQnO1xuaW1wb3J0IHsgY3JlYXRlQWdlbnQgfSBmcm9tICdub2RlLWZldGNoLW5hdGl2ZS13aXRoLWFnZW50L2FnZW50JztcbmltcG9ydCB7IE1vZGVscyB9IGZyb20gJy4vbW9kZWxzJztcblxudHlwZSBQYXlsb2FkID0ge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxudHlwZSBVcGxvYWRQcm9ncmVzcyA9IHtcbiAgICAkaWQ6IHN0cmluZztcbiAgICBwcm9ncmVzczogbnVtYmVyO1xuICAgIHNpemVVcGxvYWRlZDogbnVtYmVyO1xuICAgIGNodW5rc1RvdGFsOiBudW1iZXI7XG4gICAgY2h1bmtzVXBsb2FkZWQ6IG51bWJlcjtcbn1cblxudHlwZSBIZWFkZXJzID0ge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbn1cblxuY2xhc3MgQXBwY29uZGFFeGNlcHRpb24gZXh0ZW5kcyBFcnJvciB7XG4gICAgY29kZTogbnVtYmVyO1xuICAgIHJlc3BvbnNlOiBzdHJpbmc7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgY29kZTogbnVtYmVyID0gMCwgdHlwZTogc3RyaW5nID0gJycsIHJlc3BvbnNlOiBzdHJpbmcgPSAnJykge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ0FwcGNvbmRhRXhjZXB0aW9uJztcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgdGhpcy5jb2RlID0gY29kZTtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0VXNlckFnZW50KCkge1xuICAgIGxldCB1YSA9ICdBcHBjb25kYU5vZGVKU1NESy8xNC4xLjAnO1xuXG4gICAgLy8gYHByb2Nlc3NgIGlzIGEgZ2xvYmFsIGluIE5vZGUuanMsIGJ1dCBub3QgZnVsbHkgYXZhaWxhYmxlIGluIGFsbCBydW50aW1lcy5cbiAgICBjb25zdCBwbGF0Zm9ybTogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3N0cmluZycpIHBsYXRmb3JtLnB1c2gocHJvY2Vzcy5wbGF0Zm9ybSk7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvY2Vzcy5hcmNoID09PSAnc3RyaW5nJykgcGxhdGZvcm0ucHVzaChwcm9jZXNzLmFyY2gpO1xuICAgIH1cbiAgICBpZiAocGxhdGZvcm0ubGVuZ3RoID4gMCkge1xuICAgICAgICB1YSArPSBgICgke3BsYXRmb3JtLmpvaW4oJzsgJyl9KWA7XG4gICAgfVxuXG4gICAgLy8gYG5hdmlnYXRvci51c2VyQWdlbnRgIGlzIGF2YWlsYWJsZSBpbiBOb2RlLmpzIDIxIGFuZCBsYXRlci5cbiAgICAvLyBJdCdzIGFsc28gcGFydCBvZiB0aGUgV2ludGVyQ0cgc3BlYywgc28gbWFueSBlZGdlIHJ1bnRpbWVzIHByb3ZpZGUgaXQuXG4gICAgLy8gaHR0cHM6Ly9jb21tb24tbWluLWFwaS5wcm9wb3NhbC53aW50ZXJjZy5vcmcvI3JlcXVpcmVtZW50cy1mb3ItbmF2aWdhdG9ydXNlcmFnZW50XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgbmF2aWdhdG9yLnVzZXJBZ2VudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB1YSArPSBgICR7bmF2aWdhdG9yLnVzZXJBZ2VudH1gO1xuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBnbG9iYWxUaGlzLkVkZ2VSdW50aW1lID09PSAnc3RyaW5nJykge1xuICAgICAgICB1YSArPSBgIEVkZ2VSdW50aW1lYDtcblxuICAgICAgICAvLyBPbGRlciBOb2RlLmpzIHZlcnNpb25zIGRvbid0IGhhdmUgYG5hdmlnYXRvci51c2VyQWdlbnRgLCBzbyB3ZSBoYXZlIHRvIHVzZSBgcHJvY2Vzcy52ZXJzaW9uYC5cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgcHJvY2Vzcy52ZXJzaW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICB1YSArPSBgIE5vZGUuanMvJHtwcm9jZXNzLnZlcnNpb259YDtcbiAgICB9XG5cbiAgICByZXR1cm4gdWE7XG59XG5cbmNsYXNzIENsaWVudCB7XG4gICAgc3RhdGljIENIVU5LX1NJWkUgPSAxMDI0ICogMTAyNCAqIDU7XG5cbiAgICBjb25maWcgPSB7XG4gICAgICAgIGVuZHBvaW50OiAnaHR0cHM6Ly9jbG91ZC5hcHBjb25kYS5pby92MScsXG4gICAgICAgIHNlbGZTaWduZWQ6IGZhbHNlLFxuICAgICAgICBwcm9qZWN0OiAnJyxcbiAgICAgICAgbW9kZTogJycsXG4gICAgICAgIGtleTogJycsXG4gICAgICAgIGp3dDogJycsXG4gICAgICAgIGxvY2FsZTogJycsXG4gICAgICAgIHNlc3Npb246ICcnLFxuICAgICAgICBmb3J3YXJkZWR1c2VyYWdlbnQ6ICcnLFxuICAgIH07XG4gICAgaGVhZGVyczogSGVhZGVycyA9IHtcbiAgICAgICAgJ3gtc2RrLW5hbWUnOiAnTm9kZS5qcycsXG4gICAgICAgICd4LXNkay1wbGF0Zm9ybSc6ICdzZXJ2ZXInLFxuICAgICAgICAneC1zZGstbGFuZ3VhZ2UnOiAnbm9kZWpzJyxcbiAgICAgICAgJ3gtc2RrLXZlcnNpb24nOiAnMTQuMS4wJyxcbiAgICAgICAgJ3VzZXItYWdlbnQnOiBnZXRVc2VyQWdlbnQoKSxcbiAgICAgICAgJ1gtQXBwY29uZGEtUmVzcG9uc2UtRm9ybWF0JzogJzEuNi4wJyxcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogU2V0IEVuZHBvaW50XG4gICAgICpcbiAgICAgKiBZb3VyIHByb2plY3QgZW5kcG9pbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBlbmRwb2ludFxuICAgICAqXG4gICAgICogQHJldHVybnMge3RoaXN9XG4gICAgICovXG4gICAgc2V0RW5kcG9pbnQoZW5kcG9pbnQ6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLmNvbmZpZy5lbmRwb2ludCA9IGVuZHBvaW50O1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBzZWxmLXNpZ25lZFxuICAgICAqXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzZWxmU2lnbmVkXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7dGhpc31cbiAgICAgKi9cbiAgICBzZXRTZWxmU2lnbmVkKHNlbGZTaWduZWQ6IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAodHlwZW9mIGdsb2JhbFRoaXMuRWRnZVJ1bnRpbWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ3NldFNlbGZTaWduZWQgaXMgbm90IHN1cHBvcnRlZCBpbiBlZGdlIHJ1bnRpbWVzLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcuc2VsZlNpZ25lZCA9IHNlbGZTaWduZWQ7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIGhlYWRlclxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGhlYWRlclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgICAqXG4gICAgICogQHJldHVybnMge3RoaXN9XG4gICAgICovXG4gICAgYWRkSGVhZGVyKGhlYWRlcjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuaGVhZGVyc1toZWFkZXIudG9Mb3dlckNhc2UoKV0gPSB2YWx1ZTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgUHJvamVjdFxuICAgICAqXG4gICAgICogWW91ciBwcm9qZWN0IElEXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgc3RyaW5nXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHt0aGlzfVxuICAgICAqL1xuICAgIHNldFByb2plY3QodmFsdWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLmhlYWRlcnNbJ1gtQXBwY29uZGEtUHJvamVjdCddID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY29uZmlnLnByb2plY3QgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgICAvKipcbiAgICAgKiBTZXQgTW9kZVxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlIHN0cmluZ1xuICAgICAqXG4gICAgICogQHJldHVybiB7dGhpc31cbiAgICAgKi9cbiAgICAgIHNldE1vZGUodmFsdWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLmhlYWRlcnNbJ1gtQXBwY29uZGEtTW9kZSddID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY29uZmlnLm1vZGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IEtleVxuICAgICAqXG4gICAgICogWW91ciBzZWNyZXQgQVBJIGtleVxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlIHN0cmluZ1xuICAgICAqXG4gICAgICogQHJldHVybiB7dGhpc31cbiAgICAgKi9cbiAgICBzZXRLZXkodmFsdWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLmhlYWRlcnNbJ1gtQXBwY29uZGEtS2V5J10gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jb25maWcua2V5ID0gdmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgSldUXG4gICAgICpcbiAgICAgKiBZb3VyIHNlY3JldCBKU09OIFdlYiBUb2tlblxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlIHN0cmluZ1xuICAgICAqXG4gICAgICogQHJldHVybiB7dGhpc31cbiAgICAgKi9cbiAgICBzZXRKV1QodmFsdWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLmhlYWRlcnNbJ1gtQXBwY29uZGEtSldUJ10gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jb25maWcuand0ID0gdmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgTG9jYWxlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgc3RyaW5nXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHt0aGlzfVxuICAgICAqL1xuICAgIHNldExvY2FsZSh2YWx1ZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuaGVhZGVyc1snWC1BcHBjb25kYS1Mb2NhbGUnXSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNvbmZpZy5sb2NhbGUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldCBTZXNzaW9uXG4gICAgICpcbiAgICAgKiBUaGUgdXNlciBzZXNzaW9uIHRvIGF1dGhlbnRpY2F0ZSB3aXRoXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgc3RyaW5nXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHt0aGlzfVxuICAgICAqL1xuICAgIHNldFNlc3Npb24odmFsdWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLmhlYWRlcnNbJ1gtQXBwY29uZGEtU2Vzc2lvbiddID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY29uZmlnLnNlc3Npb24gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldCBGb3J3YXJkZWRVc2VyQWdlbnRcbiAgICAgKlxuICAgICAqIFRoZSB1c2VyIGFnZW50IHN0cmluZyBvZiB0aGUgY2xpZW50IHRoYXQgbWFkZSB0aGUgcmVxdWVzdFxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlIHN0cmluZ1xuICAgICAqXG4gICAgICogQHJldHVybiB7dGhpc31cbiAgICAgKi9cbiAgICBzZXRGb3J3YXJkZWRVc2VyQWdlbnQodmFsdWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLmhlYWRlcnNbJ1gtRm9yd2FyZGVkLVVzZXItQWdlbnQnXSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNvbmZpZy5mb3J3YXJkZWR1c2VyYWdlbnQgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgc2V0RmFsbGJhY2tDb29raWVzKHZhbHVlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzWydYLUZhbGxiYWNrLUNvb2tpZXMnXSA9IHZhbHVlO1xuICAgICAgICAvL3RoaXMuY29uZmlnLmZvcndhcmRlZHVzZXJhZ2VudCA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwcmVwYXJlUmVxdWVzdChtZXRob2Q6IHN0cmluZywgdXJsOiBVUkwsIGhlYWRlcnM6IEhlYWRlcnMgPSB7fSwgcGFyYW1zOiBQYXlsb2FkID0ge30pOiB7IHVyaTogc3RyaW5nLCBvcHRpb25zOiBSZXF1ZXN0SW5pdCB9IHtcbiAgICAgICAgbWV0aG9kID0gbWV0aG9kLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuaGVhZGVycywgaGVhZGVycyk7XG5cbiAgICAgICAgbGV0IG9wdGlvbnM6IFJlcXVlc3RJbml0ID0ge1xuICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIC4uLmNyZWF0ZUFnZW50KHRoaXMuY29uZmlnLmVuZHBvaW50LCB7IHJlamVjdFVuYXV0aG9yaXplZDogIXRoaXMuY29uZmlnLnNlbGZTaWduZWQgfSksXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ0dFVCcpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKENsaWVudC5mbGF0dGVuKHBhcmFtcykpKSB7XG4gICAgICAgICAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnYXBwbGljYXRpb24vanNvbic6XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYm9keSA9IEpTT04uc3RyaW5naWZ5KHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSc6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyYW1zKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIHZhbHVlLCB2YWx1ZS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5lc3RlZFZhbHVlIG9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChgJHtrZXl9W11gLCBuZXN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmJvZHkgPSBmb3JtRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHVyaTogdXJsLnRvU3RyaW5nKCksIG9wdGlvbnMgfTtcbiAgICB9XG5cbiAgICBhc3luYyBjaHVua2VkVXBsb2FkKG1ldGhvZDogc3RyaW5nLCB1cmw6IFVSTCwgaGVhZGVyczogSGVhZGVycyA9IHt9LCBvcmlnaW5hbFBheWxvYWQ6IFBheWxvYWQgPSB7fSwgb25Qcm9ncmVzczogKHByb2dyZXNzOiBVcGxvYWRQcm9ncmVzcykgPT4gdm9pZCkge1xuICAgICAgICBjb25zdCBmaWxlOiBhbnkgPSBPYmplY3QudmFsdWVzKG9yaWdpbmFsUGF5bG9hZCkuZmluZCgodmFsdWUpID0+IHZhbHVlIGluc3RhbmNlb2YgRmlsZSk7XG5cbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA8PSBDbGllbnQuQ0hVTktfU0laRSkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2FsbChtZXRob2QsIHVybCwgaGVhZGVycywgb3JpZ2luYWxQYXlsb2FkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdGFydCA9IDA7XG4gICAgICAgIGxldCByZXNwb25zZTogYW55ID0gbnVsbDtcblxuICAgICAgICB3aGlsZSAoc3RhcnQgPCBmaWxlLnNpemUpIHtcbiAgICAgICAgICAgIGxldCBlbmQgPSBzdGFydCArIENsaWVudC5DSFVOS19TSVpFOyAvLyBQcmVwYXJlIGVuZCBmb3IgdGhlIG5leHQgY2h1bmtcbiAgICAgICAgICAgIGlmIChlbmQgPj0gZmlsZS5zaXplKSB7XG4gICAgICAgICAgICAgICAgZW5kID0gZmlsZS5zaXplOyAvLyBBZGp1c3QgZm9yIHRoZSBsYXN0IGNodW5rIHRvIGluY2x1ZGUgdGhlIGxhc3QgYnl0ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBoZWFkZXJzWydjb250ZW50LXJhbmdlJ10gPSBgYnl0ZXMgJHtzdGFydH0tJHtlbmQgLSAxfS8ke2ZpbGUuc2l6ZX1gO1xuICAgICAgICAgICAgY29uc3QgY2h1bmsgPSBmaWxlLnNsaWNlKHN0YXJ0LCBlbmQpO1xuXG4gICAgICAgICAgICBsZXQgcGF5bG9hZCA9IHsgLi4ub3JpZ2luYWxQYXlsb2FkLCBmaWxlOiBuZXcgRmlsZShbY2h1bmtdLCBmaWxlLm5hbWUpIH07XG5cbiAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsKG1ldGhvZCwgdXJsLCBoZWFkZXJzLCBwYXlsb2FkKTtcblxuICAgICAgICAgICAgaWYgKG9uUHJvZ3Jlc3MgJiYgdHlwZW9mIG9uUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBvblByb2dyZXNzKHtcbiAgICAgICAgICAgICAgICAgICAgJGlkOiByZXNwb25zZS4kaWQsXG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzOiBNYXRoLnJvdW5kKChlbmQgLyBmaWxlLnNpemUpICogMTAwKSxcbiAgICAgICAgICAgICAgICAgICAgc2l6ZVVwbG9hZGVkOiBlbmQsXG4gICAgICAgICAgICAgICAgICAgIGNodW5rc1RvdGFsOiBNYXRoLmNlaWwoZmlsZS5zaXplIC8gQ2xpZW50LkNIVU5LX1NJWkUpLFxuICAgICAgICAgICAgICAgICAgICBjaHVua3NVcGxvYWRlZDogTWF0aC5jZWlsKGVuZCAvIENsaWVudC5DSFVOS19TSVpFKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuJGlkKSB7XG4gICAgICAgICAgICAgICAgaGVhZGVyc1sneC1hcHBjb25kYS1pZCddID0gcmVzcG9uc2UuJGlkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdGFydCA9IGVuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICBhc3luYyByZWRpcmVjdChtZXRob2Q6IHN0cmluZywgdXJsOiBVUkwsIGhlYWRlcnM6IEhlYWRlcnMgPSB7fSwgcGFyYW1zOiBQYXlsb2FkID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBjb25zdCB7IHVyaSwgb3B0aW9ucyB9ID0gdGhpcy5wcmVwYXJlUmVxdWVzdChtZXRob2QsIHVybCwgaGVhZGVycywgcGFyYW1zKTtcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVyaSwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIHJlZGlyZWN0OiAnbWFudWFsJ1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAzMDEgJiYgcmVzcG9uc2Uuc3RhdHVzICE9PSAzMDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBcHBjb25kYUV4Y2VwdGlvbignSW52YWxpZCByZWRpcmVjdCcsIHJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2xvY2F0aW9uJykgfHwgJyc7XG4gICAgfVxuXG4gICAgYXN5bmMgY2FsbChtZXRob2Q6IHN0cmluZywgdXJsOiBVUkwsIGhlYWRlcnM6IEhlYWRlcnMgPSB7fSwgcGFyYW1zOiBQYXlsb2FkID0ge30sIHJlc3BvbnNlVHlwZSA9ICdqc29uJyk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IHsgdXJpLCBvcHRpb25zIH0gPSB0aGlzLnByZXBhcmVSZXF1ZXN0KG1ldGhvZCwgdXJsLCBoZWFkZXJzLCBwYXJhbXMpO1xuXG4gICAgICAgIGxldCBkYXRhOiBhbnkgPSBudWxsO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVyaSwgb3B0aW9ucyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHdhcm5pbmdzID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtYXBwY29uZGEtd2FybmluZycpO1xuICAgICAgICAgICAgaWYgKHdhcm5pbmdzKSB7XG4gICAgICAgICAgICAgICAgd2FybmluZ3Muc3BsaXQoJzsnKS5mb3JFYWNoKCh3YXJuaW5nOiBzdHJpbmcpID0+IGNvbnNvbGUud2FybignV2FybmluZzogJyArIHdhcm5pbmcpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKT8uaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlVHlwZSA9PT0gJ2FycmF5QnVmZmVyJykge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBhd2FpdCByZXNwb25zZS50ZXh0KClcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoNDAwIDw9IHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcHBjb25kYUV4Y2VwdGlvbihkYXRhPy5tZXNzYWdlLCByZXNwb25zZS5zdGF0dXMsIGRhdGE/LnR5cGUsIGRhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZmxhdHRlbihkYXRhOiBQYXlsb2FkLCBwcmVmaXggPSAnJyk6IFBheWxvYWQge1xuICAgICAgICBsZXQgb3V0cHV0OiBQYXlsb2FkID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgICAgICAgIGxldCBmaW5hbEtleSA9IHByZWZpeCA/IHByZWZpeCArICdbJyArIGtleSArICddJyA6IGtleTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IHsgLi4ub3V0cHV0LCAuLi5DbGllbnQuZmxhdHRlbih2YWx1ZSwgZmluYWxLZXkpIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dHB1dFtmaW5hbEtleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufVxuXG5leHBvcnQgeyBDbGllbnQsIEFwcGNvbmRhRXhjZXB0aW9uIH07XG5leHBvcnQgeyBRdWVyeSB9IGZyb20gJy4vcXVlcnknO1xuZXhwb3J0IHR5cGUgeyBNb2RlbHMsIFBheWxvYWQsIFVwbG9hZFByb2dyZXNzIH07XG5leHBvcnQgdHlwZSB7IFF1ZXJ5VHlwZXMsIFF1ZXJ5VHlwZXNMaXN0IH0gZnJvbSAnLi9xdWVyeSc7XG4iXX0=
341
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtQkEsTUFBTSxpQkFBa0IsU0FBUSxLQUFLO0lBSWpDLFlBQVksT0FBZSxFQUFFLE9BQWUsQ0FBQyxFQUFFLE9BQWUsRUFBRSxFQUFFLFdBQW1CLEVBQUU7UUFDbkYsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxtQkFBbUIsQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUM3QixDQUFDO0NBQ0o7QUFFRCxTQUFTLFlBQVk7SUFDakIsSUFBSSxFQUFFLEdBQUcsMEJBQTBCLENBQUM7SUFFcEMsNkVBQTZFO0lBQzdFLE1BQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQztJQUM5QixJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLElBQUksT0FBTyxPQUFPLENBQUMsUUFBUSxLQUFLLFFBQVE7WUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxRSxJQUFJLE9BQU8sT0FBTyxDQUFDLElBQUksS0FBSyxRQUFRO1lBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN0QixFQUFFLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDdEMsQ0FBQztJQUVELDhEQUE4RDtJQUM5RCx5RUFBeUU7SUFDekUsb0ZBQW9G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SyxFQUFFLE1BQU0sU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBNb2RlbHMgfSBmcm9tICcuL21vZGVscyc7XG5cbnR5cGUgUGF5bG9hZCA9IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbnR5cGUgVXBsb2FkUHJvZ3Jlc3MgPSB7XG4gICAgJGlkOiBzdHJpbmc7XG4gICAgcHJvZ3Jlc3M6IG51bWJlcjtcbiAgICBzaXplVXBsb2FkZWQ6IG51bWJlcjtcbiAgICBjaHVua3NUb3RhbDogbnVtYmVyO1xuICAgIGNodW5rc1VwbG9hZGVkOiBudW1iZXI7XG59XG5cbnR5cGUgSGVhZGVycyA9IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG59XG5cbmNsYXNzIEFwcGNvbmRhRXhjZXB0aW9uIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvZGU6IG51bWJlcjtcbiAgICByZXNwb25zZTogc3RyaW5nO1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIGNvZGU6IG51bWJlciA9IDAsIHR5cGU6IHN0cmluZyA9ICcnLCByZXNwb25zZTogc3RyaW5nID0gJycpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdBcHBjb25kYUV4Y2VwdGlvbic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldFVzZXJBZ2VudCgpIHtcbiAgICBsZXQgdWEgPSAnQXBwY29uZGFOb2RlSlNTREsvMTQuMS4wJztcblxuICAgIC8vIGBwcm9jZXNzYCBpcyBhIGdsb2JhbCBpbiBOb2RlLmpzLCBidXQgbm90IGZ1bGx5IGF2YWlsYWJsZSBpbiBhbGwgcnVudGltZXMuXG4gICAgY29uc3QgcGxhdGZvcm06IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAodHlwZW9mIHByb2Nlc3MucGxhdGZvcm0gPT09ICdzdHJpbmcnKSBwbGF0Zm9ybS5wdXNoKHByb2Nlc3MucGxhdGZvcm0pO1xuICAgICAgICBpZiAodHlwZW9mIHByb2Nlc3MuYXJjaCA9PT0gJ3N0cmluZycpIHBsYXRmb3JtLnB1c2gocHJvY2Vzcy5hcmNoKTtcbiAgICB9XG4gICAgaWYgKHBsYXRmb3JtLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdWEgKz0gYCAoJHtwbGF0Zm9ybS5qb2luKCc7ICcpfSlgO1xuICAgIH1cblxuICAgIC8vIGBuYXZpZ2F0b3IudXNlckFnZW50YCBpcyBhdmFpbGFibGUgaW4gTm9kZS5qcyAyMSBhbmQgbGF0ZXIuXG4gICAgLy8gSXQncyBhbHNvIHBhcnQgb2YgdGhlIFdpbnRlckNHIHNwZWMsIHNvIG1hbnkgZWRnZSBydW50aW1lcyBwcm92aWRlIGl0LlxuICAgIC8vIGh0dHBzOi8vY29tbW9uLW1pbi1hcGkucHJvcG9zYWwud2ludGVyY2cub3JnLyNyZXF1aXJlbWVudHMtZm9yLW5hdmlnYXRvcnVzZXJhZ2VudFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG5hdmlnYXRvci51c2VyQWdlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdWEgKz0gYCAke25hdmlnYXRvci51c2VyQWdlbnR9YDtcblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsVGhpcy5FZGdlUnVudGltZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdWEgKz0gYCBFZGdlUnVudGltZWA7XG5cbiAgICAgICAgLy8gT2xkZXIgTm9kZS5qcyB2ZXJzaW9ucyBkb24ndCBoYXZlIGBuYXZpZ2F0b3IudXNlckFnZW50YCwgc28gd2UgaGF2ZSB0byB1c2UgYHByb2Nlc3MudmVyc2lvbmAuXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MudmVyc2lvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdWEgKz0gYCBOb2RlLmpzLyR7cHJvY2Vzcy52ZXJzaW9ufWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVhO1xufVxuXG5jbGFzcyBDbGllbnQge1xuICAgIHN0YXRpYyBDSFVOS19TSVpFID0gMTAyNCAqIDEwMjQgKiA1O1xuXG4gICAgY29uZmlnID0ge1xuICAgICAgICBlbmRwb2ludDogJ2h0dHBzOi8vY2xvdWQuYXBwY29uZGEuaW8vdjEnLFxuICAgICAgICBzZWxmU2lnbmVkOiBmYWxzZSxcbiAgICAgICAgcHJvamVjdDogJycsXG4gICAgICAgIG1vZGU6ICcnLFxuICAgICAgICBrZXk6ICcnLFxuICAgICAgICBqd3Q6ICcnLFxuICAgICAgICBsb2NhbGU6ICcnLFxuICAgICAgICBzZXNzaW9uOiAnJyxcbiAgICAgICAgZm9yd2FyZGVkdXNlcmFnZW50OiAnJyxcbiAgICB9O1xuICAgIGhlYWRlcnM6IEhlYWRlcnMgPSB7XG4gICAgICAgICd4LXNkay1uYW1lJzogJ05vZGUuanMnLFxuICAgICAgICAneC1zZGstcGxhdGZvcm0nOiAnc2VydmVyJyxcbiAgICAgICAgJ3gtc2RrLWxhbmd1YWdlJzogJ25vZGVqcycsXG4gICAgICAgICd4LXNkay12ZXJzaW9uJzogJzE0LjEuMCcsXG4gICAgICAgICd1c2VyLWFnZW50JzogZ2V0VXNlckFnZW50KCksXG4gICAgICAgICdYLUFwcGNvbmRhLVJlc3BvbnNlLUZvcm1hdCc6ICcxLjYuMCcsXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFNldCBFbmRwb2ludFxuICAgICAqXG4gICAgICogWW91ciBwcm9qZWN0IGVuZHBvaW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZW5kcG9pbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHt0aGlzfVxuICAgICAqL1xuICAgIHNldEVuZHBvaW50KGVuZHBvaW50OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5jb25maWcuZW5kcG9pbnQgPSBlbmRwb2ludDtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgc2VsZi1zaWduZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZlNpZ25lZFxuICAgICAqXG4gICAgICogQHJldHVybnMge3RoaXN9XG4gICAgICovXG4gICAgc2V0U2VsZlNpZ25lZChzZWxmU2lnbmVkOiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzLkVkZ2VSdW50aW1lICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdzZXRTZWxmU2lnbmVkIGlzIG5vdCBzdXBwb3J0ZWQgaW4gZWRnZSBydW50aW1lcy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnLnNlbGZTaWduZWQgPSBzZWxmU2lnbmVkO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBoZWFkZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHt0aGlzfVxuICAgICAqL1xuICAgIGFkZEhlYWRlcihoZWFkZXI6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLmhlYWRlcnNbaGVhZGVyLnRvTG93ZXJDYXNlKCldID0gdmFsdWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IFByb2plY3RcbiAgICAgKlxuICAgICAqIFlvdXIgcHJvamVjdCBJRFxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlIHN0cmluZ1xuICAgICAqXG4gICAgICogQHJldHVybiB7dGhpc31cbiAgICAgKi9cbiAgICBzZXRQcm9qZWN0KHZhbHVlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzWydYLUFwcGNvbmRhLVByb2plY3QnXSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNvbmZpZy5wcm9qZWN0ID0gdmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgICAgLyoqXG4gICAgICogU2V0IE1vZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSBzdHJpbmdcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge3RoaXN9XG4gICAgICovXG4gICAgICBzZXRNb2RlKHZhbHVlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzWydYLUFwcGNvbmRhLU1vZGUnXSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNvbmZpZy5tb2RlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBLZXlcbiAgICAgKlxuICAgICAqIFlvdXIgc2VjcmV0IEFQSSBrZXlcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSBzdHJpbmdcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge3RoaXN9XG4gICAgICovXG4gICAgc2V0S2V5KHZhbHVlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzWydYLUFwcGNvbmRhLUtleSddID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY29uZmlnLmtleSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IEpXVFxuICAgICAqXG4gICAgICogWW91ciBzZWNyZXQgSlNPTiBXZWIgVG9rZW5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSBzdHJpbmdcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge3RoaXN9XG4gICAgICovXG4gICAgc2V0SldUKHZhbHVlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzWydYLUFwcGNvbmRhLUpXVCddID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY29uZmlnLmp3dCA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IExvY2FsZVxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlIHN0cmluZ1xuICAgICAqXG4gICAgICogQHJldHVybiB7dGhpc31cbiAgICAgKi9cbiAgICBzZXRMb2NhbGUodmFsdWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLmhlYWRlcnNbJ1gtQXBwY29uZGEtTG9jYWxlJ10gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jb25maWcubG9jYWxlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgU2Vzc2lvblxuICAgICAqXG4gICAgICogVGhlIHVzZXIgc2Vzc2lvbiB0byBhdXRoZW50aWNhdGUgd2l0aFxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlIHN0cmluZ1xuICAgICAqXG4gICAgICogQHJldHVybiB7dGhpc31cbiAgICAgKi9cbiAgICBzZXRTZXNzaW9uKHZhbHVlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzWydYLUFwcGNvbmRhLVNlc3Npb24nXSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNvbmZpZy5zZXNzaW9uID0gdmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXQgRm9yd2FyZGVkVXNlckFnZW50XG4gICAgICpcbiAgICAgKiBUaGUgdXNlciBhZ2VudCBzdHJpbmcgb2YgdGhlIGNsaWVudCB0aGF0IG1hZGUgdGhlIHJlcXVlc3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSBzdHJpbmdcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge3RoaXN9XG4gICAgICovXG4gICAgc2V0Rm9yd2FyZGVkVXNlckFnZW50KHZhbHVlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzWydYLUZvcndhcmRlZC1Vc2VyLUFnZW50J10gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jb25maWcuZm9yd2FyZGVkdXNlcmFnZW50ID0gdmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHNldEZhbGxiYWNrQ29va2llcyh2YWx1ZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuaGVhZGVyc1snWC1GYWxsYmFjay1Db29raWVzJ10gPSB2YWx1ZTtcbiAgICAgICAgLy90aGlzLmNvbmZpZy5mb3J3YXJkZWR1c2VyYWdlbnQgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHJlcGFyZVJlcXVlc3QobWV0aG9kOiBzdHJpbmcsIHVybDogVVJMLCBoZWFkZXJzOiBIZWFkZXJzID0ge30sIHBhcmFtczogUGF5bG9hZCA9IHt9KTogeyB1cmk6IHN0cmluZywgb3B0aW9uczogUmVxdWVzdEluaXQgfSB7XG4gICAgICAgIG1ldGhvZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgIGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmhlYWRlcnMsIGhlYWRlcnMpO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubG9jYWxTdG9yYWdlKSB7XG4gICAgICAgICAgICBjb25zdCBjb29raWVGYWxsYmFjayA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY29va2llRmFsbGJhY2snKTtcbiAgICAgICAgICAgIGlmIChjb29raWVGYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGhlYWRlcnNbJ1gtRmFsbGJhY2stQ29va2llcyddID0gY29va2llRmFsbGJhY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgb3B0aW9uczogUmVxdWVzdEluaXQgPSB7XG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChoZWFkZXJzWydYLUFwcGNvbmRhLURldi1LZXknXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBvcHRpb25zLmNyZWRlbnRpYWxzID0gJ2luY2x1ZGUnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ0dFVCcpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKENsaWVudC5mbGF0dGVuKHBhcmFtcykpKSB7XG4gICAgICAgICAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnYXBwbGljYXRpb24vanNvbic6XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYm9keSA9IEpTT04uc3RyaW5naWZ5KHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSc6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyYW1zKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIHZhbHVlLCB2YWx1ZS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5lc3RlZFZhbHVlIG9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChgJHtrZXl9W11gLCBuZXN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmJvZHkgPSBmb3JtRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHVyaTogdXJsLnRvU3RyaW5nKCksIG9wdGlvbnMgfTtcbiAgICB9XG5cbiAgICBhc3luYyBjaHVua2VkVXBsb2FkKG1ldGhvZDogc3RyaW5nLCB1cmw6IFVSTCwgaGVhZGVyczogSGVhZGVycyA9IHt9LCBvcmlnaW5hbFBheWxvYWQ6IFBheWxvYWQgPSB7fSwgb25Qcm9ncmVzczogKHByb2dyZXNzOiBVcGxvYWRQcm9ncmVzcykgPT4gdm9pZCkge1xuICAgICAgICBjb25zdCBmaWxlOiBhbnkgPSBPYmplY3QudmFsdWVzKG9yaWdpbmFsUGF5bG9hZCkuZmluZCgodmFsdWUpID0+IHZhbHVlIGluc3RhbmNlb2YgRmlsZSk7XG5cbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA8PSBDbGllbnQuQ0hVTktfU0laRSkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2FsbChtZXRob2QsIHVybCwgaGVhZGVycywgb3JpZ2luYWxQYXlsb2FkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdGFydCA9IDA7XG4gICAgICAgIGxldCByZXNwb25zZTogYW55ID0gbnVsbDtcblxuICAgICAgICB3aGlsZSAoc3RhcnQgPCBmaWxlLnNpemUpIHtcbiAgICAgICAgICAgIGxldCBlbmQgPSBzdGFydCArIENsaWVudC5DSFVOS19TSVpFOyAvLyBQcmVwYXJlIGVuZCBmb3IgdGhlIG5leHQgY2h1bmtcbiAgICAgICAgICAgIGlmIChlbmQgPj0gZmlsZS5zaXplKSB7XG4gICAgICAgICAgICAgICAgZW5kID0gZmlsZS5zaXplOyAvLyBBZGp1c3QgZm9yIHRoZSBsYXN0IGNodW5rIHRvIGluY2x1ZGUgdGhlIGxhc3QgYnl0ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBoZWFkZXJzWydjb250ZW50LXJhbmdlJ10gPSBgYnl0ZXMgJHtzdGFydH0tJHtlbmQgLSAxfS8ke2ZpbGUuc2l6ZX1gO1xuICAgICAgICAgICAgY29uc3QgY2h1bmsgPSBmaWxlLnNsaWNlKHN0YXJ0LCBlbmQpO1xuXG4gICAgICAgICAgICBsZXQgcGF5bG9hZCA9IHsgLi4ub3JpZ2luYWxQYXlsb2FkLCBmaWxlOiBuZXcgRmlsZShbY2h1bmtdLCBmaWxlLm5hbWUpIH07XG5cbiAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jYWxsKG1ldGhvZCwgdXJsLCBoZWFkZXJzLCBwYXlsb2FkKTtcblxuICAgICAgICAgICAgaWYgKG9uUHJvZ3Jlc3MgJiYgdHlwZW9mIG9uUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBvblByb2dyZXNzKHtcbiAgICAgICAgICAgICAgICAgICAgJGlkOiByZXNwb25zZS4kaWQsXG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzOiBNYXRoLnJvdW5kKChlbmQgLyBmaWxlLnNpemUpICogMTAwKSxcbiAgICAgICAgICAgICAgICAgICAgc2l6ZVVwbG9hZGVkOiBlbmQsXG4gICAgICAgICAgICAgICAgICAgIGNodW5rc1RvdGFsOiBNYXRoLmNlaWwoZmlsZS5zaXplIC8gQ2xpZW50LkNIVU5LX1NJWkUpLFxuICAgICAgICAgICAgICAgICAgICBjaHVua3NVcGxvYWRlZDogTWF0aC5jZWlsKGVuZCAvIENsaWVudC5DSFVOS19TSVpFKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuJGlkKSB7XG4gICAgICAgICAgICAgICAgaGVhZGVyc1sneC1hcHBjb25kYS1pZCddID0gcmVzcG9uc2UuJGlkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdGFydCA9IGVuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICBhc3luYyByZWRpcmVjdChtZXRob2Q6IHN0cmluZywgdXJsOiBVUkwsIGhlYWRlcnM6IEhlYWRlcnMgPSB7fSwgcGFyYW1zOiBQYXlsb2FkID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBjb25zdCB7IHVyaSwgb3B0aW9ucyB9ID0gdGhpcy5wcmVwYXJlUmVxdWVzdChtZXRob2QsIHVybCwgaGVhZGVycywgcGFyYW1zKTtcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVyaSwge1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIHJlZGlyZWN0OiAnbWFudWFsJ1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAzMDEgJiYgcmVzcG9uc2Uuc3RhdHVzICE9PSAzMDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBcHBjb25kYUV4Y2VwdGlvbignSW52YWxpZCByZWRpcmVjdCcsIHJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2xvY2F0aW9uJykgfHwgJyc7XG4gICAgfVxuXG4gICAgYXN5bmMgY2FsbChtZXRob2Q6IHN0cmluZywgdXJsOiBVUkwsIGhlYWRlcnM6IEhlYWRlcnMgPSB7fSwgcGFyYW1zOiBQYXlsb2FkID0ge30sIHJlc3BvbnNlVHlwZSA9ICdqc29uJyk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IHsgdXJpLCBvcHRpb25zIH0gPSB0aGlzLnByZXBhcmVSZXF1ZXN0KG1ldGhvZCwgdXJsLCBoZWFkZXJzLCBwYXJhbXMpO1xuXG4gICAgICAgIGxldCBkYXRhOiBhbnkgPSBudWxsO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVyaSwgb3B0aW9ucyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHdhcm5pbmdzID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtYXBwY29uZGEtd2FybmluZycpO1xuICAgICAgICAgICAgaWYgKHdhcm5pbmdzKSB7XG4gICAgICAgICAgICAgICAgd2FybmluZ3Muc3BsaXQoJzsnKS5mb3JFYWNoKCh3YXJuaW5nOiBzdHJpbmcpID0+IGNvbnNvbGUud2FybignV2FybmluZzogJyArIHdhcm5pbmcpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKT8uaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlVHlwZSA9PT0gJ2FycmF5QnVmZmVyJykge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBhd2FpdCByZXNwb25zZS50ZXh0KClcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoNDAwIDw9IHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcHBjb25kYUV4Y2VwdGlvbihkYXRhPy5tZXNzYWdlLCByZXNwb25zZS5zdGF0dXMsIGRhdGE/LnR5cGUsIGRhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZmxhdHRlbihkYXRhOiBQYXlsb2FkLCBwcmVmaXggPSAnJyk6IFBheWxvYWQge1xuICAgICAgICBsZXQgb3V0cHV0OiBQYXlsb2FkID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgICAgICAgIGxldCBmaW5hbEtleSA9IHByZWZpeCA/IHByZWZpeCArICdbJyArIGtleSArICddJyA6IGtleTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IHsgLi4ub3V0cHV0LCAuLi5DbGllbnQuZmxhdHRlbih2YWx1ZSwgZmluYWxLZXkpIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dHB1dFtmaW5hbEtleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufVxuXG5leHBvcnQgeyBDbGllbnQsIEFwcGNvbmRhRXhjZXB0aW9uIH07XG5leHBvcnQgeyBRdWVyeSB9IGZyb20gJy4vcXVlcnknO1xuZXhwb3J0IHR5cGUgeyBNb2RlbHMsIFBheWxvYWQsIFVwbG9hZFByb2dyZXNzIH07XG5leHBvcnQgdHlwZSB7IFF1ZXJ5VHlwZXMsIFF1ZXJ5VHlwZXNMaXN0IH0gZnJvbSAnLi9xdWVyeSc7XG4iXX0=
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@appconda/sdk",
3
3
  "homepage": "https://appconda.io/support",
4
4
  "description": "Appconda is an open-source self-hosted backend server that abstract and simplify complex and repetitive development tasks behind a very simple REST API",
5
- "version": "1.0.410",
5
+ "version": "1.0.412",
6
6
  "license": "BSD-3-Clause",
7
7
  "main": "dist/index.js",
8
8
  "types": "dist/index.d.ts",
package/src/client.ts CHANGED
@@ -1,5 +1,4 @@
1
- import { fetch, FormData, File } from 'node-fetch-native-with-agent';
2
- import { createAgent } from 'node-fetch-native-with-agent/agent';
1
+
3
2
  import { Models } from './models';
4
3
 
5
4
  type Payload = {
@@ -243,12 +242,22 @@ class Client {
243
242
 
244
243
  headers = Object.assign({}, this.headers, headers);
245
244
 
245
+ if (typeof window !== 'undefined' && window.localStorage) {
246
+ const cookieFallback = window.localStorage.getItem('cookieFallback');
247
+ if (cookieFallback) {
248
+ headers['X-Fallback-Cookies'] = cookieFallback;
249
+ }
250
+ }
251
+
246
252
  let options: RequestInit = {
247
253
  method,
248
254
  headers,
249
- ...createAgent(this.config.endpoint, { rejectUnauthorized: !this.config.selfSigned }),
250
255
  };
251
256
 
257
+ if (headers['X-Appconda-Dev-Key'] === undefined) {
258
+ options.credentials = 'include';
259
+ }
260
+
252
261
  if (method === 'GET') {
253
262
  for (const [key, value] of Object.entries(Client.flatten(params))) {
254
263
  url.searchParams.append(key, value);
@@ -1,5 +0,0 @@
1
- export declare function signIn({ userName, password }: {
2
- userName: string;
3
- password: string;
4
- }): Promise<import("../modules/account/types").Session>;
5
- export declare const authOptions: () => any;
@@ -1,235 +0,0 @@
1
- import CredentialsProvider from "next-auth/providers/credentials";
2
- import { cookies } from "next/headers";
3
- import { getAppcondaClient } from "../getAppcondaClient";
4
- import { Account } from "../modules/account/service";
5
- import { getEnv } from "../lib/env";
6
- import { getSDKForCurrentUser } from "../getSDKForCurrentUser";
7
- import { Query } from "../query";
8
- /* const getEnv = () => {
9
- return {
10
- APPCONDA_ENDPOINT: 'process.env.APPCONDA_ENDPOINT',
11
- APPCONDA_CLIENT_ENDPOINT: 'process.env.APPCONDA_CLIENT_ENDPOINT',
12
- _SERVICE_TOKEN: 'process.env._SERVICE_TOKEN',
13
- ENTERPRISE_LICENSE_KEY: 'process.env.ENTERPRISE_LICENSE_KEY',
14
- };
15
- }; */
16
- export async function signIn({ userName, password }) {
17
- const adminClient = await getAppcondaClient();
18
- const account = new Account(adminClient);
19
- const session = await account.createEmailPasswordSession(userName, password);
20
- const c = await cookies();
21
- c.set('a_session', session.secret, {
22
- path: "/",
23
- httpOnly: true,
24
- sameSite: "strict",
25
- secure: true,
26
- });
27
- return session;
28
- }
29
- export const authOptions = (() => {
30
- let options = null;
31
- return () => {
32
- if (options == null) {
33
- options = {
34
- providers: [
35
- CredentialsProvider({
36
- id: "credentials",
37
- // The name to display on the sign in form (e.g. "Sign in with...")
38
- name: "Credentials",
39
- // The credentials is used to generate a suitable form on the sign in page.
40
- // You can specify whatever fields you are expecting to be submitted.
41
- // e.g. domain, username, password, 2FA token, etc.
42
- // You can pass any HTML attribute to the <input> tag through the object.
43
- credentials: {
44
- email: {
45
- label: "Email Address",
46
- type: "email",
47
- placeholder: "Your email address",
48
- },
49
- password: {
50
- label: "Password",
51
- type: "password",
52
- placeholder: "Your password",
53
- },
54
- totpCode: { label: "Two-factor Code", type: "input", placeholder: "Code from authenticator app" },
55
- backupCode: { label: "Backup Code", type: "input", placeholder: "Two-factor backup code" },
56
- },
57
- async authorize(credentials, _req) {
58
- debugger;
59
- let user;
60
- const appcondaSession = await signIn({ userName: credentials?.email, password: credentials?.password });
61
- console.log(credentials);
62
- /* try {
63
- user = await prisma.user.findUnique({
64
- where: {
65
- email: credentials?.email,
66
- },
67
- });
68
- } catch (e) {
69
- console.error(e);
70
- throw Error("Internal server error. Please try again later");
71
- }
72
- if (!user || !credentials) {
73
- throw new Error("Invalid credentials");
74
- }
75
- if (!user.password) {
76
- throw new Error("Invalid credentials");
77
- }
78
-
79
- const isValid = await verifyPassword(credentials.password, user.password);
80
-
81
- if (!isValid) {
82
- throw new Error("Invalid credentials");
83
- }
84
-
85
- if (user.twoFactorEnabled && credentials.backupCode) {
86
- if (!ENCRYPTION_KEY) {
87
- console.error("Missing encryption key; cannot proceed with backup code login.");
88
- throw new Error("Internal Server Error");
89
- }
90
-
91
- if (!user.backupCodes) throw new Error("No backup codes found");
92
-
93
- const backupCodes = JSON.parse(symmetricDecrypt(user.backupCodes, ENCRYPTION_KEY));
94
-
95
- // check if user-supplied code matches one
96
- const index = backupCodes.indexOf(credentials.backupCode.replaceAll("-", ""));
97
- if (index === -1) throw new Error("Invalid backup code");
98
-
99
- // delete verified backup code and re-encrypt remaining
100
- backupCodes[index] = null;
101
- await prisma.user.update({
102
- where: {
103
- id: user.id,
104
- },
105
- data: {
106
- backupCodes: symmetricEncrypt(JSON.stringify(backupCodes), ENCRYPTION_KEY),
107
- },
108
- });
109
- } else if (user.twoFactorEnabled) {
110
- if (!credentials.totpCode) {
111
- throw new Error("second factor required");
112
- }
113
-
114
- if (!user.twoFactorSecret) {
115
- throw new Error("Internal Server Error");
116
- }
117
-
118
- if (!ENCRYPTION_KEY) {
119
- throw new Error("Internal Server Error");
120
- }
121
-
122
- const secret = symmetricDecrypt(user.twoFactorSecret, ENCRYPTION_KEY);
123
- if (secret.length !== 32) {
124
- throw new Error("Internal Server Error");
125
- }
126
-
127
- const isValidToken = (await import("./totp")).totpAuthenticatorCheck(credentials.totpCode, secret);
128
- if (!isValidToken) {
129
- throw new Error("Invalid second factor code");
130
- }
131
- } */
132
- console.log("asafdf");
133
- return {
134
- id: appcondaSession.userId,
135
- email: appcondaSession.providerUid,
136
- emailVerified: true,
137
- imageUrl: "",
138
- };
139
- },
140
- }),
141
- CredentialsProvider({
142
- id: "token",
143
- // The name to display on the sign in form (e.g. "Sign in with...")
144
- name: "Token",
145
- // The credentials is used to generate a suitable form on the sign in page.
146
- // You can specify whatever fields you are expecting to be submitted.
147
- // e.g. domain, username, password, 2FA token, etc.
148
- // You can pass any HTML attribute to the <input> tag through the object.
149
- credentials: {
150
- token: {
151
- label: "Verification Token",
152
- type: "string",
153
- },
154
- },
155
- async authorize(credentials, _req) {
156
- let user;
157
- /* try {
158
- if (!credentials?.token) {
159
- throw new Error("Token not found");
160
- }
161
- const { id } = await verifyToken(credentials?.token);
162
- user = await prisma.user.findUnique({
163
- where: {
164
- id: id,
165
- },
166
- });
167
- } catch (e) {
168
- console.error(e);
169
- throw new Error("Either a user does not match the provided token or the token is invalid");
170
- }
171
-
172
- if (!user) {
173
- throw new Error("Either a user does not match the provided token or the token is invalid");
174
- }
175
-
176
- if (user.emailVerified) {
177
- throw new Error("Email already verified");
178
- }
179
-
180
- user = await updateUser(user.id, { emailVerified: new Date() }); */
181
- return user || null;
182
- },
183
- }),
184
- // Conditionally add enterprise SSO providers
185
- ...(getEnv().ENTERPRISE_LICENSE_KEY ? [] : []),
186
- ],
187
- callbacks: {
188
- async jwt({ token }) {
189
- const { users } = await getSDKForCurrentUser();
190
- const userList = await users.list([Query.equal("email", token.email)]);
191
- const user = userList.users[0] ?? {};
192
- /* const existingUser = await getUserByEmail(token?.email!);
193
-
194
- if (!existingUser) {
195
- return token;
196
- } */
197
- return {
198
- ...token,
199
- //@ts-ignore
200
- profile: { id: user.$id, ...user },
201
- };
202
- },
203
- async session({ session, token }) {
204
- //@ts-ignore
205
- session.user.id = token?.id;
206
- //@ts-ignore
207
- session.user = token.profile;
208
- return session;
209
- },
210
- //@ts-ignore
211
- async signIn({ user, account }) {
212
- /* if (account?.provider === "credentials" || account?.provider === "token") {
213
- // check if user's email is verified or not
214
- if (!user.emailVerified && !EMAIL_VERIFICATION_DISABLED) {
215
- throw new Error("Email Verification is Pending");
216
- }
217
- return true;
218
- }
219
- if (ENTERPRISE_LICENSE_KEY) {
220
- return handleSSOCallback({ user, account });
221
- } */
222
- return true;
223
- },
224
- },
225
- pages: {
226
- signIn: "/auth/login",
227
- signOut: "/auth/logout",
228
- error: "/auth/login", // Error code passed in query string as ?error=
229
- },
230
- };
231
- }
232
- return options;
233
- };
234
- })();
235
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2F1dGhPcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FjdGlvbnMvX2F1dGhPcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sbUJBQW1CLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN2QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRWpDOzs7Ozs7O0tBT0s7QUFFTCxNQUFNLENBQUMsS0FBSyxVQUFVLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQTBDO0lBQ3pGLE1BQU0sV0FBVyxHQUFHLE1BQU0saUJBQWlCLEVBQUUsQ0FBQztJQUU5QyxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUV6QyxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFN0UsTUFBTSxDQUFDLEdBQUcsTUFBTSxPQUFPLEVBQUUsQ0FBQztJQUUxQixDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFO1FBQ2pDLElBQUksRUFBRSxHQUFHO1FBQ1QsUUFBUSxFQUFFLElBQUk7UUFDZCxRQUFRLEVBQUUsUUFBUTtRQUNsQixNQUFNLEVBQUUsSUFBSTtLQUNiLENBQUMsQ0FBQztJQUVILE9BQU8sT0FBTyxDQUFDO0FBRWpCLENBQUM7QUFFRCxNQUFNLENBQUMs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S0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTt3QkFFdkUsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBRXJDOzs7OzZCQUlLO3dCQUVMLE9BQU87NEJBQ0wsR0FBRyxLQUFLOzRCQUNSLFlBQVk7NEJBQ1osT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUU7eUJBQ25DLENBQUM7b0JBQ0osQ0FBQztvQkFDRCxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRTt3QkFDOUIsWUFBWTt3QkFDWixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDO3dCQUM1QixZQUFZO3dCQUNaLE9BQU8sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQzt3QkFFN0IsT0FBTyxPQUFPLENBQUM7b0JBQ2pCLENBQUM7b0JBQ0QsWUFBWTtvQkFDWixLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBMEM7d0JBQ3BFOzs7Ozs7Ozs7OEJBU007d0JBQ04sT0FBTyxJQUFJLENBQUM7b0JBQ2QsQ0FBQztpQkFDRjtnQkFDRCxLQUFLLEVBQUU7b0JBQ0wsTUFBTSxFQUFFLGFBQWE7b0JBQ3JCLE9BQU8sRUFBRSxjQUFjO29CQUN2QixLQUFLLEVBQUUsYUFBYSxFQUFFLCtDQUErQztpQkFDdEU7YUFDRixDQUFBO1FBQ0gsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUMsQ0FBQTtBQUNILENBQUMsQ0FBQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE5leHRBdXRoT3B0aW9ucyB9IGZyb20gXCJuZXh0LWF1dGhcIjtcbmltcG9ydCBDcmVkZW50aWFsc1Byb3ZpZGVyIGZyb20gXCJuZXh0LWF1dGgvcHJvdmlkZXJzL2NyZWRlbnRpYWxzXCI7XG5pbXBvcnQgeyBjb29raWVzIH0gZnJvbSBcIm5leHQvaGVhZGVyc1wiO1xuaW1wb3J0IHsgZ2V0QXBwY29uZGFDbGllbnQgfSBmcm9tIFwiLi4vZ2V0QXBwY29uZGFDbGllbnRcIjtcbmltcG9ydCB7IEFjY291bnQgfSBmcm9tIFwiLi4vbW9kdWxlcy9hY2NvdW50L3NlcnZpY2VcIjtcbmltcG9ydCB7IGdldEVudiB9IGZyb20gXCIuLi9saWIvZW52XCI7XG5pbXBvcnQgeyBnZXRTREtGb3JDdXJyZW50VXNlciB9IGZyb20gXCIuLi9nZXRTREtGb3JDdXJyZW50VXNlclwiO1xuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwiLi4vcXVlcnlcIjtcblxuLyogY29uc3QgZ2V0RW52ID0gKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIEFQUENPTkRBX0VORFBPSU5UOiAncHJvY2Vzcy5lbnYuQVBQQ09OREFfRU5EUE9JTlQnLFxuICAgIEFQUENPTkRBX0NMSUVOVF9FTkRQT0lOVDogJ3Byb2Nlc3MuZW52LkFQUENPTkRBX0NMSUVOVF9FTkRQT0lOVCcsXG4gICAgX1NFUlZJQ0VfVE9LRU46ICdwcm9jZXNzLmVudi5fU0VSVklDRV9UT0tFTicsXG4gICAgRU5URVJQUklTRV9MSUNFTlNFX0tFWTogJ3Byb2Nlc3MuZW52LkVOVEVSUFJJU0VfTElDRU5TRV9LRVknLFxuICB9O1xufTsgKi9cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNpZ25Jbih7IHVzZXJOYW1lLCBwYXNzd29yZCB9OiB7IHVzZXJOYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcgfSkge1xuICBjb25zdCBhZG1pbkNsaWVudCA9IGF3YWl0IGdldEFwcGNvbmRhQ2xpZW50KCk7XG5cbiAgY29uc3QgYWNjb3VudCA9IG5ldyBBY2NvdW50KGFkbWluQ2xpZW50KTtcblxuICBjb25zdCBzZXNzaW9uID0gYXdhaXQgYWNjb3VudC5jcmVhdGVFbWFpbFBhc3N3b3JkU2Vzc2lvbih1c2VyTmFtZSwgcGFzc3dvcmQpO1xuXG4gIGNvbnN0IGMgPSBhd2FpdCBjb29raWVzKCk7XG5cbiAgYy5zZXQoJ2Ffc2Vzc2lvbicsIHNlc3Npb24uc2VjcmV0LCB7XG4gICAgcGF0aDogXCIvXCIsXG4gICAgaHR0cE9ubHk6IHRydWUsXG4gICAgc2FtZVNpdGU6IFwic3RyaWN0XCIsXG4gICAgc2VjdXJlOiB0cnVlLFxuICB9KTtcblxuICByZXR1cm4gc2Vzc2lvbjtcblxufVxuXG5leHBvcnQgY29uc3QgYXV0aE9wdGlvbnMgPSAoKCkgPT4ge1xuICBsZXQgb3B0aW9ucyA6IGFueT0gbnVsbDtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGlmIChvcHRpb25zID09IG51bGwpIHtcbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgIENyZWRlbnRpYWxzUHJvdmlkZXIoe1xuICAgICAgICAgICAgaWQ6IFwiY3JlZGVudGlhbHNcIixcbiAgICAgICAgICAgIC8vIFRoZSBuYW1lIHRvIGRpc3BsYXkgb24gdGhlIHNpZ24gaW4gZm9ybSAoZS5nLiBcIlNpZ24gaW4gd2l0aC4uLlwiKVxuICAgICAgICAgICAgbmFtZTogXCJDcmVkZW50aWFsc1wiLFxuICAgICAgICAgICAgLy8gVGhlIGNyZWRlbnRpYWxzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYSBzdWl0YWJsZSBmb3JtIG9uIHRoZSBzaWduIGluIHBhZ2UuXG4gICAgICAgICAgICAvLyBZb3UgY2FuIHNwZWNpZnkgd2hhdGV2ZXIgZmllbGRzIHlvdSBhcmUgZXhwZWN0aW5nIHRvIGJlIHN1Ym1pdHRlZC5cbiAgICAgICAgICAgIC8vIGUuZy4gZG9tYWluLCB1c2VybmFtZSwgcGFzc3dvcmQsIDJGQSB0b2tlbiwgZXRjLlxuICAgICAgICAgICAgLy8gWW91IGNhbiBwYXNzIGFueSBIVE1MIGF0dHJpYnV0ZSB0byB0aGUgPGlucHV0PiB0YWcgdGhyb3VnaCB0aGUgb2JqZWN0LlxuICAgICAgICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgICAgICAgZW1haWw6IHtcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJFbWFpbCBBZGRyZXNzXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJlbWFpbFwiLFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIllvdXIgZW1haWwgYWRkcmVzc1wiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBcIlBhc3N3b3JkXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJwYXNzd29yZFwiLFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIllvdXIgcGFzc3dvcmRcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdG90cENvZGU6IHsgbGFiZWw6IFwiVHdvLWZhY3RvciBDb2RlXCIsIHR5cGU6IFwiaW5wdXRcIiwgcGxhY2Vob2xkZXI6IFwiQ29kZSBmcm9tIGF1dGhlbnRpY2F0b3IgYXBwXCIgfSxcbiAgICAgICAgICAgICAgYmFja3VwQ29kZTogeyBsYWJlbDogXCJCYWNrdXAgQ29kZVwiLCB0eXBlOiBcImlucHV0XCIsIHBsYWNlaG9sZGVyOiBcIlR3by1mYWN0b3IgYmFja3VwIGNvZGVcIiB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFzeW5jIGF1dGhvcml6ZShjcmVkZW50aWFscywgX3JlcSkge1xuICAgICAgICAgICAgICBkZWJ1Z2dlcjtcbiAgICAgICAgICAgICAgbGV0IHVzZXI7XG4gICAgICAgICAgICAgIGNvbnN0IGFwcGNvbmRhU2Vzc2lvbiA9IGF3YWl0IHNpZ25Jbih7IHVzZXJOYW1lOiBjcmVkZW50aWFscz8uZW1haWwgYXMgc3RyaW5nLCBwYXNzd29yZDogY3JlZGVudGlhbHM/LnBhc3N3b3JkIGFzIHN0cmluZyB9KTtcblxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjcmVkZW50aWFscyk7XG4gICAgICAgICAgICAgIC8qICB0cnkge1xuICAgICAgICAgICAgICAgICB1c2VyID0gYXdhaXQgcHJpc21hLnVzZXIuZmluZFVuaXF1ZSh7XG4gICAgICAgICAgICAgICAgICAgd2hlcmU6IHtcbiAgICAgICAgICAgICAgICAgICAgIGVtYWlsOiBjcmVkZW50aWFscz8uZW1haWwsXG4gICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiSW50ZXJuYWwgc2VydmVyIGVycm9yLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyXCIpO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgaWYgKCF1c2VyIHx8ICFjcmVkZW50aWFscykge1xuICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNyZWRlbnRpYWxzXCIpO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgaWYgKCF1c2VyLnBhc3N3b3JkKSB7XG4gICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY3JlZGVudGlhbHNcIik7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgXG4gICAgICAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gYXdhaXQgdmVyaWZ5UGFzc3dvcmQoY3JlZGVudGlhbHMucGFzc3dvcmQsIHVzZXIucGFzc3dvcmQpO1xuICAgICAgIFxuICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY3JlZGVudGlhbHNcIik7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgXG4gICAgICAgICAgICAgICBpZiAodXNlci50d29GYWN0b3JFbmFibGVkICYmIGNyZWRlbnRpYWxzLmJhY2t1cENvZGUpIHtcbiAgICAgICAgICAgICAgICAgaWYgKCFFTkNSWVBUSU9OX0tFWSkge1xuICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJNaXNzaW5nIGVuY3J5cHRpb24ga2V5OyBjYW5ub3QgcHJvY2VlZCB3aXRoIGJhY2t1cCBjb2RlIGxvZ2luLlwiKTtcbiAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcIik7XG4gICAgICAgICAgICAgICAgIH1cbiAgICAgICBcbiAgICAgICAgICAgICAgICAgaWYgKCF1c2VyLmJhY2t1cENvZGVzKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBiYWNrdXAgY29kZXMgZm91bmRcIik7XG4gICAgICAgXG4gICAgICAgICAgICAgICAgIGNvbnN0IGJhY2t1cENvZGVzID0gSlNPTi5wYXJzZShzeW1tZXRyaWNEZWNyeXB0KHVzZXIuYmFja3VwQ29kZXMsIEVOQ1JZUFRJT05fS0VZKSk7XG4gICAgICAgXG4gICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHVzZXItc3VwcGxpZWQgY29kZSBtYXRjaGVzIG9uZVxuICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGJhY2t1cENvZGVzLmluZGV4T2YoY3JlZGVudGlhbHMuYmFja3VwQ29kZS5yZXBsYWNlQWxsKFwiLVwiLCBcIlwiKSk7XG4gICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYmFja3VwIGNvZGVcIik7XG4gICAgICAgXG4gICAgICAgICAgICAgICAgIC8vIGRlbGV0ZSB2ZXJpZmllZCBiYWNrdXAgY29kZSBhbmQgcmUtZW5jcnlwdCByZW1haW5pbmdcbiAgICAgICAgICAgICAgICAgYmFja3VwQ29kZXNbaW5kZXhdID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgYXdhaXQgcHJpc21hLnVzZXIudXBkYXRlKHtcbiAgICAgICAgICAgICAgICAgICB3aGVyZToge1xuICAgICAgICAgICAgICAgICAgICAgaWQ6IHVzZXIuaWQsXG4gICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICBiYWNrdXBDb2Rlczogc3ltbWV0cmljRW5jcnlwdChKU09OLnN0cmluZ2lmeShiYWNrdXBDb2RlcyksIEVOQ1JZUFRJT05fS0VZKSxcbiAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXNlci50d29GYWN0b3JFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgIGlmICghY3JlZGVudGlhbHMudG90cENvZGUpIHtcbiAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZWNvbmQgZmFjdG9yIHJlcXVpcmVkXCIpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgXG4gICAgICAgICAgICAgICAgIGlmICghdXNlci50d29GYWN0b3JTZWNyZXQpIHtcbiAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcIik7XG4gICAgICAgICAgICAgICAgIH1cbiAgICAgICBcbiAgICAgICAgICAgICAgICAgaWYgKCFFTkNSWVBUSU9OX0tFWSkge1xuICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludGVybmFsIFNlcnZlciBFcnJvclwiKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgIFxuICAgICAgICAgICAgICAgICBjb25zdCBzZWNyZXQgPSBzeW1tZXRyaWNEZWNyeXB0KHVzZXIudHdvRmFjdG9yU2VjcmV0LCBFTkNSWVBUSU9OX0tFWSk7XG4gICAgICAgICAgICAgICAgIGlmIChzZWNyZXQubGVuZ3RoICE9PSAzMikge1xuICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludGVybmFsIFNlcnZlciBFcnJvclwiKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgIFxuICAgICAgICAgICAgICAgICBjb25zdCBpc1ZhbGlkVG9rZW4gPSAoYXdhaXQgaW1wb3J0KFwiLi90b3RwXCIpKS50b3RwQXV0aGVudGljYXRvckNoZWNrKGNyZWRlbnRpYWxzLnRvdHBDb2RlLCBzZWNyZXQpO1xuICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRUb2tlbikge1xuICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc2Vjb25kIGZhY3RvciBjb2RlXCIpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICB9ICovXG5cbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJhc2FmZGZcIilcblxuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlkOiBhcHBjb25kYVNlc3Npb24udXNlcklkLFxuICAgICAgICAgICAgICAgIGVtYWlsOiBhcHBjb25kYVNlc3Npb24ucHJvdmlkZXJVaWQsXG4gICAgICAgICAgICAgICAgZW1haWxWZXJpZmllZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpbWFnZVVybDogXCJcIixcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgQ3JlZGVudGlhbHNQcm92aWRlcih7XG4gICAgICAgICAgICBpZDogXCJ0b2tlblwiLFxuICAgICAgICAgICAgLy8gVGhlIG5hbWUgdG8gZGlzcGxheSBvbiB0aGUgc2lnbiBpbiBmb3JtIChlLmcuIFwiU2lnbiBpbiB3aXRoLi4uXCIpXG4gICAgICAgICAgICBuYW1lOiBcIlRva2VuXCIsXG4gICAgICAgICAgICAvLyBUaGUgY3JlZGVudGlhbHMgaXMgdXNlZCB0byBnZW5lcmF0ZSBhIHN1aXRhYmxlIGZvcm0gb24gdGhlIHNpZ24gaW4gcGFnZS5cbiAgICAgICAgICAgIC8vIFlvdSBjYW4gc3BlY2lmeSB3aGF0ZXZlciBmaWVsZHMgeW91IGFyZSBleHBlY3RpbmcgdG8gYmUgc3VibWl0dGVkLlxuICAgICAgICAgICAgLy8gZS5nLiBkb21haW4sIHVzZXJuYW1lLCBwYXNzd29yZCwgMkZBIHRva2VuLCBldGMuXG4gICAgICAgICAgICAvLyBZb3UgY2FuIHBhc3MgYW55IEhUTUwgYXR0cmlidXRlIHRvIHRoZSA8aW5wdXQ+IHRhZyB0aHJvdWdoIHRoZSBvYmplY3QuXG4gICAgICAgICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICAgICAgICB0b2tlbjoge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBcIlZlcmlmaWNhdGlvbiBUb2tlblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXN5bmMgYXV0aG9yaXplKGNyZWRlbnRpYWxzLCBfcmVxKSB7XG5cbiAgICAgICAgICAgICAgbGV0IHVzZXI7XG4gICAgICAgICAgICAgIC8qICB0cnkge1xuICAgICAgICAgICAgICAgICBpZiAoIWNyZWRlbnRpYWxzPy50b2tlbikge1xuICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRva2VuIG5vdCBmb3VuZFwiKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICBjb25zdCB7IGlkIH0gPSBhd2FpdCB2ZXJpZnlUb2tlbihjcmVkZW50aWFscz8udG9rZW4pO1xuICAgICAgICAgICAgICAgICB1c2VyID0gYXdhaXQgcHJpc21hLnVzZXIuZmluZFVuaXF1ZSh7XG4gICAgICAgICAgICAgICAgICAgd2hlcmU6IHtcbiAgICAgICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRWl0aGVyIGEgdXNlciBkb2VzIG5vdCBtYXRjaCB0aGUgcHJvdmlkZWQgdG9rZW4gb3IgdGhlIHRva2VuIGlzIGludmFsaWRcIik7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgXG4gICAgICAgICAgICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRWl0aGVyIGEgdXNlciBkb2VzIG5vdCBtYXRjaCB0aGUgcHJvdmlkZWQgdG9rZW4gb3IgdGhlIHRva2VuIGlzIGludmFsaWRcIik7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgXG4gICAgICAgICAgICAgICBpZiAodXNlci5lbWFpbFZlcmlmaWVkKSB7XG4gICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVtYWlsIGFscmVhZHkgdmVyaWZpZWRcIik7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgXG4gICAgICAgICAgICAgICB1c2VyID0gYXdhaXQgdXBkYXRlVXNlcih1c2VyLmlkLCB7IGVtYWlsVmVyaWZpZWQ6IG5ldyBEYXRlKCkgfSk7ICovXG5cbiAgICAgICAgICAgICAgcmV0dXJuIHVzZXIgfHwgbnVsbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgLy8gQ29uZGl0aW9uYWxseSBhZGQgZW50ZXJwcmlzZSBTU08gcHJvdmlkZXJzXG4gICAgICAgICAgLi4uKGdldEVudigpLkVOVEVSUFJJU0VfTElDRU5TRV9LRVkgPyBbXSA6IFtdKSxcbiAgICAgICAgXSxcbiAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgYXN5bmMgand0KHsgdG9rZW4gfSkge1xuXG4gICAgICAgICAgICBjb25zdCB7IHVzZXJzIH0gPSBhd2FpdCBnZXRTREtGb3JDdXJyZW50VXNlcigpO1xuICAgICAgICAgICAgY29uc3QgdXNlckxpc3QgPSBhd2FpdCB1c2Vycy5saXN0KFtRdWVyeS5lcXVhbChcImVtYWlsXCIsIHRva2VuLmVtYWlsISldKVxuXG4gICAgICAgICAgICBjb25zdCB1c2VyID0gdXNlckxpc3QudXNlcnNbMF0gPz8ge307XG5cbiAgICAgICAgICAgIC8qICBjb25zdCBleGlzdGluZ1VzZXIgPSBhd2FpdCBnZXRVc2VyQnlFbWFpbCh0b2tlbj8uZW1haWwhKTtcbiAgICAgICBcbiAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nVXNlcikge1xuICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgIH0gKi9cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4udG9rZW4sXG4gICAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgICAgICBwcm9maWxlOiB7IGlkOiB1c2VyLiRpZCwgLi4udXNlciB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFzeW5jIHNlc3Npb24oeyBzZXNzaW9uLCB0b2tlbiB9KSB7XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgIHNlc3Npb24udXNlci5pZCA9IHRva2VuPy5pZDtcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgICAgc2Vzc2lvbi51c2VyID0gdG9rZW4ucHJvZmlsZTtcblxuICAgICAgICAgICAgcmV0dXJuIHNlc3Npb247XG4gICAgICAgICAgfSxcbiAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICBhc3luYyBzaWduSW4oeyB1c2VyLCBhY2NvdW50IH06IHsgdXNlcjogYW55OyBhY2NvdW50OiBBY2NvdW50IHwgbnVsbCB9KSB7XG4gICAgICAgICAgICAvKiAgIGlmIChhY2NvdW50Py5wcm92aWRlciA9PT0gXCJjcmVkZW50aWFsc1wiIHx8IGFjY291bnQ/LnByb3ZpZGVyID09PSBcInRva2VuXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB1c2VyJ3MgZW1haWwgaXMgdmVyaWZpZWQgb3Igbm90XG4gICAgICAgICAgICAgICAgaWYgKCF1c2VyLmVtYWlsVmVyaWZpZWQgJiYgIUVNQUlMX1ZFUklGSUNBVElPTl9ESVNBQkxFRCkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW1haWwgVmVyaWZpY2F0aW9uIGlzIFBlbmRpbmdcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChFTlRFUlBSSVNFX0xJQ0VOU0VfS0VZKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVNTT0NhbGxiYWNrKHsgdXNlciwgYWNjb3VudCB9KTtcbiAgICAgICAgICAgICAgfSAqL1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcGFnZXM6IHtcbiAgICAgICAgICBzaWduSW46IFwiL2F1dGgvbG9naW5cIixcbiAgICAgICAgICBzaWduT3V0OiBcIi9hdXRoL2xvZ291dFwiLFxuICAgICAgICAgIGVycm9yOiBcIi9hdXRoL2xvZ2luXCIsIC8vIEVycm9yIGNvZGUgcGFzc2VkIGluIHF1ZXJ5IHN0cmluZyBhcyA/ZXJyb3I9XG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG59KSgpO1xuIl19
@@ -1,10 +0,0 @@
1
- export declare const actionClient: import("next-safe-action").SafeActionClient<string, undefined, undefined, undefined, {}, undefined, undefined, undefined, readonly [], {
2
- formErrors: string[];
3
- fieldErrors: {};
4
- } | undefined, readonly []>;
5
- export declare const authenticatedActionClient: import("next-safe-action").SafeActionClient<string, undefined, undefined, undefined, {
6
- user: import("..").Models.User<import("..").Models.Preferences>;
7
- }, undefined, undefined, undefined, readonly [], {
8
- formErrors: string[];
9
- fieldErrors: {};
10
- } | undefined, readonly []>;
@@ -1,41 +0,0 @@
1
- import { getServerSession } from "next-auth";
2
- import { DEFAULT_SERVER_ERROR_MESSAGE, createSafeActionClient } from "next-safe-action";
3
- import { authOptions } from "./authOptions";
4
- import { AuthenticationError, AuthorizationError } from "../lib/errors";
5
- import { getSDKForCurrentUser } from "../getSDKForCurrentUser";
6
- export const actionClient = createSafeActionClient({
7
- handleServerError(e) {
8
- /* if (
9
- e instanceof ResourceNotFoundError ||
10
- e instanceof AuthorizationError ||
11
- e instanceof InvalidInputError ||
12
- e instanceof UnknownError ||
13
- e instanceof AuthenticationError ||
14
- e instanceof OperationNotAllowedError ||
15
- e instanceof AppcondaException
16
- ) {
17
- return e.message;
18
- } */
19
- // eslint-disable-next-line no-console -- This error needs to be logged for debugging server-side errors
20
- console.error("SERVER ERROR: ", e);
21
- return DEFAULT_SERVER_ERROR_MESSAGE;
22
- },
23
- });
24
- export const authenticatedActionClient = actionClient.use(async ({ next }) => {
25
- const options = authOptions();
26
- const session = options ? await getServerSession(options) : null;
27
- //@ts-ignore
28
- if (!session?.user) {
29
- throw new AuthenticationError("Not authenticated");
30
- }
31
- //@ts-ignore
32
- const userId = session.user.id;
33
- // Get the SDK and use users.get method to fetch the user
34
- const { users } = await getSDKForCurrentUser();
35
- const user = await users.get(userId);
36
- if (!user) {
37
- throw new AuthorizationError("User not found");
38
- }
39
- return next({ ctx: { user } });
40
- });
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uQ2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FjdGlvbnMvYWN0aW9uQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM3QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUcvRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsc0JBQXNCLENBQUM7SUFDakQsaUJBQWlCLENBQUMsQ0FBUTtRQUN4Qjs7Ozs7Ozs7OztZQVVJO1FBRUosd0dBQXdHO1FBQ3hHLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkMsT0FBTyw0QkFBNEIsQ0FBQztJQUN0QyxDQUFDO0NBQ0YsQ0FBQyxDQUFDO0FBR0gsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO0lBQzNFLE1BQU0sT0FBTyxHQUFHLFdBQVcsRUFBRSxDQUFDO0lBQzlCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2pFLFlBQVk7SUFDWixJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ25CLE1BQU0sSUFBSSxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxZQUFZO0lBQ1osTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7SUFFL0IseURBQXlEO0lBQ3pELE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLG9CQUFvQixFQUFFLENBQUM7SUFDL0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHsgZ2V0U2VydmVyU2Vzc2lvbiB9IGZyb20gXCJuZXh0LWF1dGhcIjtcbmltcG9ydCB7IERFRkFVTFRfU0VSVkVSX0VSUk9SX01FU1NBR0UsIGNyZWF0ZVNhZmVBY3Rpb25DbGllbnQgfSBmcm9tIFwibmV4dC1zYWZlLWFjdGlvblwiO1xuaW1wb3J0IHsgYXV0aE9wdGlvbnMgfSBmcm9tIFwiLi9hdXRoT3B0aW9uc1wiO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25FcnJvciwgQXV0aG9yaXphdGlvbkVycm9yIH0gZnJvbSBcIi4uL2xpYi9lcnJvcnNcIjtcbmltcG9ydCB7IGdldFNES0ZvckN1cnJlbnRVc2VyIH0gZnJvbSBcIi4uL2dldFNES0ZvckN1cnJlbnRVc2VyXCI7XG5cblxuZXhwb3J0IGNvbnN0IGFjdGlvbkNsaWVudCA9IGNyZWF0ZVNhZmVBY3Rpb25DbGllbnQoe1xuICBoYW5kbGVTZXJ2ZXJFcnJvcihlOiBFcnJvcikge1xuICAgIC8qIGlmIChcbiAgICAgIGUgaW5zdGFuY2VvZiBSZXNvdXJjZU5vdEZvdW5kRXJyb3IgfHxcbiAgICAgIGUgaW5zdGFuY2VvZiBBdXRob3JpemF0aW9uRXJyb3IgfHxcbiAgICAgIGUgaW5zdGFuY2VvZiBJbnZhbGlkSW5wdXRFcnJvciB8fFxuICAgICAgZSBpbnN0YW5jZW9mIFVua25vd25FcnJvciB8fFxuICAgICAgZSBpbnN0YW5jZW9mIEF1dGhlbnRpY2F0aW9uRXJyb3IgfHxcbiAgICAgIGUgaW5zdGFuY2VvZiBPcGVyYXRpb25Ob3RBbGxvd2VkRXJyb3IgfHxcbiAgICAgIGUgaW5zdGFuY2VvZiBBcHBjb25kYUV4Y2VwdGlvblxuICAgICkge1xuICAgICAgcmV0dXJuIGUubWVzc2FnZTtcbiAgICB9ICovXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSAtLSBUaGlzIGVycm9yIG5lZWRzIHRvIGJlIGxvZ2dlZCBmb3IgZGVidWdnaW5nIHNlcnZlci1zaWRlIGVycm9yc1xuICAgIGNvbnNvbGUuZXJyb3IoXCJTRVJWRVIgRVJST1I6IFwiLCBlKTtcbiAgICByZXR1cm4gREVGQVVMVF9TRVJWRVJfRVJST1JfTUVTU0FHRTtcbiAgfSxcbn0pO1xuXG5cbmV4cG9ydCBjb25zdCBhdXRoZW50aWNhdGVkQWN0aW9uQ2xpZW50ID0gYWN0aW9uQ2xpZW50LnVzZShhc3luYyAoeyBuZXh0IH0pID0+IHtcbiAgY29uc3Qgb3B0aW9ucyA9IGF1dGhPcHRpb25zKCk7XG4gIGNvbnN0IHNlc3Npb24gPSBvcHRpb25zID8gYXdhaXQgZ2V0U2VydmVyU2Vzc2lvbihvcHRpb25zKSA6IG51bGw7XG4gIC8vQHRzLWlnbm9yZVxuICBpZiAoIXNlc3Npb24/LnVzZXIpIHtcbiAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvcihcIk5vdCBhdXRoZW50aWNhdGVkXCIpO1xuICB9XG5cbiAgLy9AdHMtaWdub3JlXG4gIGNvbnN0IHVzZXJJZCA9IHNlc3Npb24udXNlci5pZDtcblxuICAvLyBHZXQgdGhlIFNESyBhbmQgdXNlIHVzZXJzLmdldCBtZXRob2QgdG8gZmV0Y2ggdGhlIHVzZXJcbiAgY29uc3QgeyB1c2VycyB9ID0gYXdhaXQgZ2V0U0RLRm9yQ3VycmVudFVzZXIoKTtcbiAgY29uc3QgdXNlciA9IGF3YWl0IHVzZXJzLmdldCh1c2VySWQpO1xuICBpZiAoIXVzZXIpIHtcbiAgICB0aHJvdyBuZXcgQXV0aG9yaXphdGlvbkVycm9yKFwiVXNlciBub3QgZm91bmRcIik7XG4gIH1cblxuICByZXR1cm4gbmV4dCh7IGN0eDogeyB1c2VyIH0gfSk7XG59KTtcbiJdfQ==
@@ -1 +0,0 @@
1
- export declare const auth: () => Promise<unknown>;
@@ -1,7 +0,0 @@
1
- import { getServerSession } from "next-auth";
2
- import { authOptions } from "./authOptions";
3
- export const auth = async () => {
4
- const options = authOptions();
5
- return options ? await getServerSession(options) : null;
6
- };
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hY3Rpb25zL2F1dGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQzVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLEtBQUssSUFBRyxFQUFFO0lBQzFCLE1BQU0sT0FBTyxHQUFHLFdBQVcsRUFBRSxDQUFDO0lBQzlCLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDNUQsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0U2VydmVyU2Vzc2lvbiB9IGZyb20gXCJuZXh0LWF1dGhcIlxuaW1wb3J0IHsgYXV0aE9wdGlvbnMgfSBmcm9tIFwiLi9hdXRoT3B0aW9uc1wiO1xuXG5leHBvcnQgY29uc3QgYXV0aCA9IGFzeW5jICgpPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBhdXRoT3B0aW9ucygpO1xuICAgIHJldHVybiBvcHRpb25zID8gYXdhaXQgZ2V0U2VydmVyU2Vzc2lvbihvcHRpb25zKSA6IG51bGw7XG59XG4iXX0=
@@ -1,5 +0,0 @@
1
- export declare function signIn({ userName, password }: {
2
- userName: string;
3
- password: string;
4
- }): Promise<any>;
5
- export declare const authOptions: () => any;