payload-auth 1.5.0 → 1.6.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 (52) hide show
  1. package/dist/better-auth/plugin/lib/build-collections/index.d.ts.map +1 -1
  2. package/dist/better-auth/plugin/lib/build-collections/index.js +3 -1
  3. package/dist/better-auth/plugin/lib/build-collections/passkeys.d.ts +1 -1
  4. package/dist/better-auth/plugin/lib/build-collections/passkeys.d.ts.map +1 -1
  5. package/dist/better-auth/plugin/lib/build-collections/passkeys.js +16 -3
  6. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/index.d.ts +0 -1
  7. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/index.d.ts.map +1 -1
  8. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/index.js +1 -2
  9. package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts +1 -1
  10. package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts.map +1 -1
  11. package/dist/better-auth/plugin/lib/build-collections/users/index.js +32 -10
  12. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.d.ts.map +1 -1
  13. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.js +11 -3
  14. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/use-admin-invite-after-email-sign-up-middleware.d.ts +10 -0
  15. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/use-admin-invite-after-email-sign-up-middleware.d.ts.map +1 -0
  16. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/use-admin-invite-after-email-sign-up-middleware.js +62 -0
  17. package/dist/better-auth/plugin/payload/components/passkeys/add-button.d.ts +7 -0
  18. package/dist/better-auth/plugin/payload/components/passkeys/add-button.d.ts.map +1 -0
  19. package/dist/better-auth/plugin/payload/components/passkeys/add-button.js +120 -0
  20. package/dist/better-auth/plugin/payload/components/passkeys/client.d.ts +4 -0
  21. package/dist/better-auth/plugin/payload/components/passkeys/client.d.ts.map +1 -0
  22. package/dist/better-auth/plugin/payload/components/passkeys/client.js +59 -0
  23. package/dist/better-auth/plugin/payload/components/passkeys/index.d.ts +5 -0
  24. package/dist/better-auth/plugin/payload/components/passkeys/index.d.ts.map +1 -0
  25. package/dist/better-auth/plugin/payload/components/passkeys/index.js +40 -0
  26. package/dist/better-auth/plugin/payload/components/passkeys/index.scss +91 -0
  27. package/dist/better-auth/plugin/payload/components/passkeys/list.d.ts +9 -0
  28. package/dist/better-auth/plugin/payload/components/passkeys/list.d.ts.map +1 -0
  29. package/dist/better-auth/plugin/payload/components/passkeys/list.js +57 -0
  30. package/dist/better-auth/plugin/payload/components/passkeys/types.d.ts +20 -0
  31. package/dist/better-auth/plugin/payload/components/passkeys/types.d.ts.map +1 -0
  32. package/dist/better-auth/plugin/payload/components/passkeys/types.js +3 -0
  33. package/dist/better-auth/plugin/payload/exports/rsc.d.ts +2 -1
  34. package/dist/better-auth/plugin/payload/exports/rsc.d.ts.map +1 -1
  35. package/dist/better-auth/plugin/payload/exports/rsc.js +3 -2
  36. package/dist/better-auth/plugin/payload/views/admin-login/client.d.ts +1 -0
  37. package/dist/better-auth/plugin/payload/views/admin-login/client.d.ts.map +1 -1
  38. package/dist/better-auth/plugin/payload/views/admin-login/client.js +11 -7
  39. package/dist/better-auth/plugin/payload/views/admin-login/index.d.ts.map +1 -1
  40. package/dist/better-auth/plugin/payload/views/admin-login/index.js +3 -1
  41. package/dist/better-auth/plugin/payload/views/admin-signup/client.d.ts.map +1 -1
  42. package/dist/better-auth/plugin/payload/views/admin-signup/client.js +29 -28
  43. package/dist/better-auth/plugin/types.d.ts +2 -0
  44. package/dist/better-auth/plugin/types.d.ts.map +1 -1
  45. package/dist/better-auth/plugin/types.js +1 -1
  46. package/dist/shared/form/validation.d.ts +1 -3
  47. package/dist/shared/form/validation.d.ts.map +1 -1
  48. package/dist/shared/form/validation.js +3 -3
  49. package/package.json +1 -1
  50. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/signup.d.ts +0 -4
  51. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/signup.d.ts.map +0 -1
  52. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/signup.js +0 -157
@@ -10,10 +10,10 @@ export const emailField = ({ t, required = true })=>{
10
10
  message: t('authentication:emailNotValid') || 'Email is not valid'
11
11
  });
12
12
  };
13
- export const usernameField = ({ t, required = true, minLength = 5, maxLength = 128 })=>{
13
+ export const usernameField = ({ t, required = true })=>{
14
14
  let schema = z.string();
15
15
  if (required) schema = schema.min(1, t('validation:required'));
16
- return schema.refine((val)=>usernameRegex.test(val) && val.length >= minLength && val.length <= maxLength, {
16
+ return schema.refine((val)=>usernameRegex.test(val), {
17
17
  message: t('authentication:usernameNotValid') || 'Username is not valid'
18
18
  });
19
19
  };
@@ -113,4 +113,4 @@ export const createSignupSchema = ({ t, requireUsername = false, requireConfirmP
113
113
  });
114
114
  };
115
115
 
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zaGFyZWQvZm9ybS92YWxpZGF0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tICd6b2QnXG5cbmltcG9ydCB7IGVtYWlsUmVnZXgsIHVzZXJuYW1lUmVnZXggfSBmcm9tICdAL3NoYXJlZC91dGlscy9yZWdleCdcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUeXBlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogTWluaW1hbCB0cmFuc2xhdGlvbiBmdW5jdGlvbiB0eXBlIGV4dHJhY3RlZCBmcm9tIGBpMThuZXh0YC5cbiAqIEFjY2VwdHMgYSBrZXkgYW5kIHJldHVybnMgdGhlIHRyYW5zbGF0ZWQgc3RyaW5nLlxuICovXG5leHBvcnQgdHlwZSBUcmFuc2xhdGUgPSAoLi4uYXJnczogYW55W10pID0+IHN0cmluZ1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEZpZWxkIGJ1aWxkZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGNvbnN0IGVtYWlsRmllbGQgPSAoeyB0LCByZXF1aXJlZCA9IHRydWUgfTogeyB0OiBUcmFuc2xhdGU7IHJlcXVpcmVkPzogYm9vbGVhbiB9KSA9PiB7XG4gIGxldCBzY2hlbWEgPSB6LnN0cmluZygpXG4gIGlmIChyZXF1aXJlZCkgc2NoZW1hID0gc2NoZW1hLm1pbigxLCB0KCd2YWxpZGF0aW9uOnJlcXVpcmVkJykpXG4gIHJldHVybiBzY2hlbWEucmVmaW5lKCh2YWwpID0+IGVtYWlsUmVnZXgudGVzdCh2YWwpLCB7XG4gICAgbWVzc2FnZTogdCgnYXV0aGVudGljYXRpb246ZW1haWxOb3RWYWxpZCcpIHx8ICdFbWFpbCBpcyBub3QgdmFsaWQnXG4gIH0pXG59XG5cbmV4cG9ydCBjb25zdCB1c2VybmFtZUZpZWxkID0gKHtcbiAgdCxcbiAgcmVxdWlyZWQgPSB0cnVlLFxuICBtaW5MZW5ndGggPSA1LFxuICBtYXhMZW5ndGggPSAxMjhcbn06IHtcbiAgdDogVHJhbnNsYXRlXG4gIHJlcXVpcmVkPzogYm9vbGVhblxuICBtaW5MZW5ndGg/OiBudW1iZXJcbiAgbWF4TGVuZ3RoPzogbnVtYmVyXG59KSA9PiB7XG4gIGxldCBzY2hlbWEgPSB6LnN0cmluZygpXG4gIGlmIChyZXF1aXJlZCkgc2NoZW1hID0gc2NoZW1hLm1pbigxLCB0KCd2YWxpZGF0aW9uOnJlcXVpcmVkJykpXG4gIHJldHVybiBzY2hlbWEucmVmaW5lKCh2YWwpID0+IHVzZXJuYW1lUmVnZXgudGVzdCh2YWwpICYmIHZhbC5sZW5ndGggPj0gbWluTGVuZ3RoICYmIHZhbC5sZW5ndGggPD0gbWF4TGVuZ3RoLCB7XG4gICAgbWVzc2FnZTogdCgnYXV0aGVudGljYXRpb246dXNlcm5hbWVOb3RWYWxpZCcpIHx8ICdVc2VybmFtZSBpcyBub3QgdmFsaWQnXG4gIH0pXG59XG5cbmV4cG9ydCBjb25zdCBwYXNzd29yZEZpZWxkID0gKHsgdCwgcmVxdWlyZWQgPSB0cnVlLCBtaW5MZW5ndGggPSAxIH06IHsgdDogVHJhbnNsYXRlOyByZXF1aXJlZD86IGJvb2xlYW47IG1pbkxlbmd0aD86IG51bWJlciB9KSA9PiB7XG4gIGxldCBzY2hlbWEgPSB6LnN0cmluZygpXG4gIGlmIChyZXF1aXJlZCkgc2NoZW1hID0gc2NoZW1hLm1pbihtaW5MZW5ndGgsIHQoJ3ZhbGlkYXRpb246cmVxdWlyZWQnKSB8fCAnUGFzc3dvcmQgaXMgcmVxdWlyZWQnKVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBjb25zdCBjb25maXJtUGFzc3dvcmRGaWVsZCA9ICh7IHQsIHJlcXVpcmVkID0gdHJ1ZSB9OiB7IHQ6IFRyYW5zbGF0ZTsgcmVxdWlyZWQ/OiBib29sZWFuIH0pID0+IHtcbiAgbGV0IHNjaGVtYSA9IHouc3RyaW5nKClcbiAgaWYgKHJlcXVpcmVkKSBzY2hlbWEgPSBzY2hlbWEubWluKDEsIHQoJ3ZhbGlkYXRpb246cmVxdWlyZWQnKSB8fCAnQ29uZmlybSBwYXNzd29yZCBpcyByZXF1aXJlZCcpXG4gIHJldHVybiBzY2hlbWFcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDb21wb3NhYmxlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogUmV0dXJucyBhIFpvZCBvYmplY3Qgc2NoZW1hIHdpdGggYHBhc3N3b3JkYCBhbmQgYGNvbmZpcm1QYXNzd29yZGAgZmllbGRzXG4gKiBhbmQgYSByZWZpbmVtZW50IHRoYXQgZW5zdXJlcyB0aGV5IG1hdGNoLlxuICovXG5leHBvcnQgY29uc3QgcGFzc3dvcmRXaXRoQ29uZmlybWF0aW9uID0gKHsgdCwgbWluTGVuZ3RoID0gMSB9OiB7IHQ6IFRyYW5zbGF0ZTsgbWluTGVuZ3RoPzogbnVtYmVyIH0pID0+XG4gIHpcbiAgICAub2JqZWN0KHtcbiAgICAgIHBhc3N3b3JkOiBwYXNzd29yZEZpZWxkKHsgdCwgbWluTGVuZ3RoIH0pLFxuICAgICAgY29uZmlybVBhc3N3b3JkOiBjb25maXJtUGFzc3dvcmRGaWVsZCh7IHQgfSlcbiAgICB9KVxuICAgIC5yZWZpbmUoKGRhdGEpID0+IGRhdGEucGFzc3dvcmQgPT09IGRhdGEuY29uZmlybVBhc3N3b3JkLCB7XG4gICAgICBwYXRoOiBbJ2NvbmZpcm1QYXNzd29yZCddLFxuICAgICAgbWVzc2FnZTogdCgnZmllbGRzOnBhc3N3b3Jkc0RvTm90TWF0Y2gnKSB8fCAnUGFzc3dvcmRzIGRvIG5vdCBtYXRjaCdcbiAgICB9KVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFV0aWxpdHkgdmFsaWRhdG9ycyAobm9u4oCRWm9kKSDigJQgaGFuZHkgZm9yIGR5bmFtaWMgbG9naW4gZmllbGQgY2hlY2tzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGNvbnN0IGlzVmFsaWRFbWFpbCA9ICh2YWw6IHN0cmluZykgPT4gZW1haWxSZWdleC50ZXN0KHZhbClcbmV4cG9ydCBjb25zdCBpc1ZhbGlkVXNlcm5hbWUgPSAodmFsOiBzdHJpbmcsIHsgbWluTGVuZ3RoID0gNSwgbWF4TGVuZ3RoID0gMTI4IH06IHsgbWluTGVuZ3RoPzogbnVtYmVyOyBtYXhMZW5ndGg/OiBudW1iZXIgfSA9IHt9KSA9PlxuICB1c2VybmFtZVJlZ2V4LnRlc3QodmFsKSAmJiB2YWwubGVuZ3RoID49IG1pbkxlbmd0aCAmJiB2YWwubGVuZ3RoIDw9IG1heExlbmd0aFxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNjaGVtYSBidWlsZGVyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnR5cGUgVXNlcm5hbWVTZXR0aW5ncyA9IHsgbWluTGVuZ3RoOiBudW1iZXI7IG1heExlbmd0aDogbnVtYmVyIH1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUxvZ2luU2NoZW1hID0gKHtcbiAgdCxcbiAgbG9naW5UeXBlLFxuICBjYW5Mb2dpbldpdGhVc2VybmFtZSA9IGZhbHNlLFxuICB1c2VybmFtZVNldHRpbmdzID0geyBtaW5MZW5ndGg6IDUsIG1heExlbmd0aDogMTI4IH1cbn06IHtcbiAgdDogVHJhbnNsYXRlXG4gIGxvZ2luVHlwZTogJ2VtYWlsJyB8ICd1c2VybmFtZScgfCAnZW1haWxPclVzZXJuYW1lJ1xuICBjYW5Mb2dpbldpdGhVc2VybmFtZT86IGJvb2xlYW5cbiAgdXNlcm5hbWVTZXR0aW5ncz86IFVzZXJuYW1lU2V0dGluZ3Ncbn0pID0+XG4gIHoub2JqZWN0KHtcbiAgICBsb2dpbjogei5zdHJpbmcoKS5yZWZpbmUoXG4gICAgICAodmFsKSA9PiB7XG4gICAgICAgIGlmICghdmFsKSByZXR1cm4gZmFsc2VcbiAgICAgICAgaWYgKGxvZ2luVHlwZSA9PT0gJ2VtYWlsJykgcmV0dXJuIGlzVmFsaWRFbWFpbCh2YWwpXG4gICAgICAgIGlmIChsb2dpblR5cGUgPT09ICd1c2VybmFtZScpIHJldHVybiBpc1ZhbGlkVXNlcm5hbWUodmFsLCB1c2VybmFtZVNldHRpbmdzKVxuICAgICAgICByZXR1cm4gaXNWYWxpZEVtYWlsKHZhbCkgfHwgaXNWYWxpZFVzZXJuYW1lKHZhbCwgdXNlcm5hbWVTZXR0aW5ncylcbiAgICAgIH0sXG4gICAgICAodmFsKSA9PiB7XG4gICAgICAgIGlmICghdmFsKSByZXR1cm4geyBtZXNzYWdlOiB0KCd2YWxpZGF0aW9uOnJlcXVpcmVkJykgfVxuXG4gICAgICAgIGNvbnN0IGlzUHJvYmFibHlFbWFpbCA9IHZhbC5pbmNsdWRlcygnQCcpIHx8ICFjYW5Mb2dpbldpdGhVc2VybmFtZVxuXG4gICAgICAgIGlmIChsb2dpblR5cGUgPT09ICdlbWFpbCcpIHtcbiAgICAgICAgICByZXR1cm4geyBtZXNzYWdlOiB0KCdhdXRoZW50aWNhdGlvbjplbWFpbE5vdFZhbGlkJykgfHwgJ0VtYWlsIGlzIG5vdCB2YWxpZCcgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxvZ2luVHlwZSA9PT0gJ3VzZXJuYW1lJykge1xuICAgICAgICAgIHJldHVybiB7IG1lc3NhZ2U6IHQoJ2F1dGhlbnRpY2F0aW9uOnVzZXJuYW1lTm90VmFsaWQnKSB8fCAnVXNlcm5hbWUgaXMgbm90IHZhbGlkJyB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1lc3NhZ2U6IGlzUHJvYmFibHlFbWFpbFxuICAgICAgICAgICAgPyB0KCdhdXRoZW50aWNhdGlvbjplbWFpbE5vdFZhbGlkJykgfHwgJ0VtYWlsIGlzIG5vdCB2YWxpZCdcbiAgICAgICAgICAgIDogdCgnYXV0aGVudGljYXRpb246dXNlcm5hbWVOb3RWYWxpZCcpIHx8ICdVc2VybmFtZSBpcyBub3QgdmFsaWQnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApLFxuICAgIHBhc3N3b3JkOiBwYXNzd29yZEZpZWxkKHsgdCB9KVxuICB9KVxuXG5leHBvcnQgY29uc3QgY3JlYXRlU2lnbnVwU2NoZW1hID0gKHsgdCwgcmVxdWlyZVVzZXJuYW1lID0gZmFsc2UsIHJlcXVpcmVDb25maXJtUGFzc3dvcmQgPSBmYWxzZSB9OiB7IHQ6IFRyYW5zbGF0ZTsgcmVxdWlyZVVzZXJuYW1lPzogYm9vbGVhbjsgcmVxdWlyZUNvbmZpcm1QYXNzd29yZD86IGJvb2xlYW4gfSkgPT4ge1xuICBjb25zdCBzY2hlbWEgPSB6Lm9iamVjdCh7XG4gICAgbmFtZTogei5zdHJpbmcoeyBtZXNzYWdlOiAnTmFtZSBpcyByZXF1aXJlZCcgfSkubWluKDEpLFxuICAgIGVtYWlsOiBlbWFpbEZpZWxkKHsgdCB9KSxcbiAgICB1c2VybmFtZTogdXNlcm5hbWVGaWVsZCh7IHQsIHJlcXVpcmVkOiByZXF1aXJlVXNlcm5hbWUgfSkub3B0aW9uYWwoKSxcbiAgICBwYXNzd29yZDogcGFzc3dvcmRGaWVsZCh7IHQgfSksXG4gICAgY29uZmlybVBhc3N3b3JkOiBjb25maXJtUGFzc3dvcmRGaWVsZCh7IHQsIHJlcXVpcmVkOiByZXF1aXJlQ29uZmlybVBhc3N3b3JkIH0pLm9wdGlvbmFsKClcbiAgfSlcblxuICBpZiAoIXJlcXVpcmVDb25maXJtUGFzc3dvcmQpIHJldHVybiBzY2hlbWFcblxuICByZXR1cm4gc2NoZW1hLnJlZmluZSgoZGF0YSkgPT4gZGF0YS5wYXNzd29yZCA9PT0gZGF0YS5jb25maXJtUGFzc3dvcmQsIHtcbiAgICBwYXRoOiBbJ2NvbmZpcm1QYXNzd29yZCddLFxuICAgIG1lc3NhZ2U6IHQoJ2ZpZWxkczpwYXNzd29yZHNEb05vdE1hdGNoJykgfHwgJ1Bhc3N3b3JkcyBkbyBub3QgbWF0Y2gnXG4gIH0pXG59XG4iXSwibmFtZXMiOlsieiIsImVtYWlsUmVnZXgiLCJ1c2VybmFtZVJlZ2V4IiwiZW1haWxGaWVsZCIsInQiLCJyZXF1aXJlZCIsInNjaGVtYSIsInN0cmluZyIsIm1pbiIsInJlZmluZSIsInZhbCIsInRlc3QiLCJtZXNzYWdlIiwidXNlcm5hbWVGaWVsZCIsIm1pbkxlbmd0aCIsIm1heExlbmd0aCIsImxlbmd0aCIsInBhc3N3b3JkRmllbGQiLCJjb25maXJtUGFzc3dvcmRGaWVsZCIsInBhc3N3b3JkV2l0aENvbmZpcm1hdGlvbiIsIm9iamVjdCIsInBhc3N3b3JkIiwiY29uZmlybVBhc3N3b3JkIiwiZGF0YSIsInBhdGgiLCJpc1ZhbGlkRW1haWwiLCJpc1ZhbGlkVXNlcm5hbWUiLCJjcmVhdGVMb2dpblNjaGVtYSIsImxvZ2luVHlwZSIsImNhbkxvZ2luV2l0aFVzZXJuYW1lIiwidXNlcm5hbWVTZXR0aW5ncyIsImxvZ2luIiwiaXNQcm9iYWJseUVtYWlsIiwiaW5jbHVkZXMiLCJjcmVhdGVTaWdudXBTY2hlbWEiLCJyZXF1aXJlVXNlcm5hbWUiLCJyZXF1aXJlQ29uZmlybVBhc3N3b3JkIiwibmFtZSIsImVtYWlsIiwidXNlcm5hbWUiLCJvcHRpb25hbCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsQ0FBQyxRQUFRLE1BQUs7QUFFdkIsU0FBU0MsVUFBVSxFQUFFQyxhQUFhLFFBQVEsaUJBQXNCO0FBWWhFLDhFQUE4RTtBQUM5RSxpQkFBaUI7QUFDakIsOEVBQThFO0FBRTlFLE9BQU8sTUFBTUMsYUFBYSxDQUFDLEVBQUVDLENBQUMsRUFBRUMsV0FBVyxJQUFJLEVBQXdDO0lBQ3JGLElBQUlDLFNBQVNOLEVBQUVPLE1BQU07SUFDckIsSUFBSUYsVUFBVUMsU0FBU0EsT0FBT0UsR0FBRyxDQUFDLEdBQUdKLEVBQUU7SUFDdkMsT0FBT0UsT0FBT0csTUFBTSxDQUFDLENBQUNDLE1BQVFULFdBQVdVLElBQUksQ0FBQ0QsTUFBTTtRQUNsREUsU0FBU1IsRUFBRSxtQ0FBbUM7SUFDaEQ7QUFDRixFQUFDO0FBRUQsT0FBTyxNQUFNUyxnQkFBZ0IsQ0FBQyxFQUM1QlQsQ0FBQyxFQUNEQyxXQUFXLElBQUksRUFDZlMsWUFBWSxDQUFDLEVBQ2JDLFlBQVksR0FBRyxFQU1oQjtJQUNDLElBQUlULFNBQVNOLEVBQUVPLE1BQU07SUFDckIsSUFBSUYsVUFBVUMsU0FBU0EsT0FBT0UsR0FBRyxDQUFDLEdBQUdKLEVBQUU7SUFDdkMsT0FBT0UsT0FBT0csTUFBTSxDQUFDLENBQUNDLE1BQVFSLGNBQWNTLElBQUksQ0FBQ0QsUUFBUUEsSUFBSU0sTUFBTSxJQUFJRixhQUFhSixJQUFJTSxNQUFNLElBQUlELFdBQVc7UUFDM0dILFNBQVNSLEVBQUUsc0NBQXNDO0lBQ25EO0FBQ0YsRUFBQztBQUVELE9BQU8sTUFBTWEsZ0JBQWdCLENBQUMsRUFBRWIsQ0FBQyxFQUFFQyxXQUFXLElBQUksRUFBRVMsWUFBWSxDQUFDLEVBQTREO0lBQzNILElBQUlSLFNBQVNOLEVBQUVPLE1BQU07SUFDckIsSUFBSUYsVUFBVUMsU0FBU0EsT0FBT0UsR0FBRyxDQUFDTSxXQUFXVixFQUFFLDBCQUEwQjtJQUN6RSxPQUFPRTtBQUNULEVBQUM7QUFFRCxPQUFPLE1BQU1ZLHVCQUF1QixDQUFDLEVBQUVkLENBQUMsRUFBRUMsV0FBVyxJQUFJLEVBQXdDO0lBQy9GLElBQUlDLFNBQVNOLEVBQUVPLE1BQU07SUFDckIsSUFBSUYsVUFBVUMsU0FBU0EsT0FBT0UsR0FBRyxDQUFDLEdBQUdKLEVBQUUsMEJBQTBCO0lBQ2pFLE9BQU9FO0FBQ1QsRUFBQztBQUVELDhFQUE4RTtBQUM5RSxjQUFjO0FBQ2QsOEVBQThFO0FBRTlFOzs7Q0FHQyxHQUNELE9BQU8sTUFBTWEsMkJBQTJCLENBQUMsRUFBRWYsQ0FBQyxFQUFFVSxZQUFZLENBQUMsRUFBd0MsR0FDakdkLEVBQ0dvQixNQUFNLENBQUM7UUFDTkMsVUFBVUosY0FBYztZQUFFYjtZQUFHVTtRQUFVO1FBQ3ZDUSxpQkFBaUJKLHFCQUFxQjtZQUFFZDtRQUFFO0lBQzVDLEdBQ0NLLE1BQU0sQ0FBQyxDQUFDYyxPQUFTQSxLQUFLRixRQUFRLEtBQUtFLEtBQUtELGVBQWUsRUFBRTtRQUN4REUsTUFBTTtZQUFDO1NBQWtCO1FBQ3pCWixTQUFTUixFQUFFLGlDQUFpQztJQUM5QyxHQUFFO0FBRU4sOEVBQThFO0FBQzlFLHNFQUFzRTtBQUN0RSw4RUFBOEU7QUFFOUUsT0FBTyxNQUFNcUIsZUFBZSxDQUFDZixNQUFnQlQsV0FBV1UsSUFBSSxDQUFDRCxLQUFJO0FBQ2pFLE9BQU8sTUFBTWdCLGtCQUFrQixDQUFDaEIsS0FBYSxFQUFFSSxZQUFZLENBQUMsRUFBRUMsWUFBWSxHQUFHLEVBQThDLEdBQUcsQ0FBQyxDQUFDLEdBQzlIYixjQUFjUyxJQUFJLENBQUNELFFBQVFBLElBQUlNLE1BQU0sSUFBSUYsYUFBYUosSUFBSU0sTUFBTSxJQUFJRCxVQUFTO0FBUS9FLE9BQU8sTUFBTVksb0JBQW9CLENBQUMsRUFDaEN2QixDQUFDLEVBQ0R3QixTQUFTLEVBQ1RDLHVCQUF1QixLQUFLLEVBQzVCQyxtQkFBbUI7SUFBRWhCLFdBQVc7SUFBR0MsV0FBVztBQUFJLENBQUMsRUFNcEQsR0FDQ2YsRUFBRW9CLE1BQU0sQ0FBQztRQUNQVyxPQUFPL0IsRUFBRU8sTUFBTSxHQUFHRSxNQUFNLENBQ3RCLENBQUNDO1lBQ0MsSUFBSSxDQUFDQSxLQUFLLE9BQU87WUFDakIsSUFBSWtCLGNBQWMsU0FBUyxPQUFPSCxhQUFhZjtZQUMvQyxJQUFJa0IsY0FBYyxZQUFZLE9BQU9GLGdCQUFnQmhCLEtBQUtvQjtZQUMxRCxPQUFPTCxhQUFhZixRQUFRZ0IsZ0JBQWdCaEIsS0FBS29CO1FBQ25ELEdBQ0EsQ0FBQ3BCO1lBQ0MsSUFBSSxDQUFDQSxLQUFLLE9BQU87Z0JBQUVFLFNBQVNSLEVBQUU7WUFBdUI7WUFFckQsTUFBTTRCLGtCQUFrQnRCLElBQUl1QixRQUFRLENBQUMsUUFBUSxDQUFDSjtZQUU5QyxJQUFJRCxjQUFjLFNBQVM7Z0JBQ3pCLE9BQU87b0JBQUVoQixTQUFTUixFQUFFLG1DQUFtQztnQkFBcUI7WUFDOUU7WUFFQSxJQUFJd0IsY0FBYyxZQUFZO2dCQUM1QixPQUFPO29CQUFFaEIsU0FBU1IsRUFBRSxzQ0FBc0M7Z0JBQXdCO1lBQ3BGO1lBRUEsT0FBTztnQkFDTFEsU0FBU29CLGtCQUNMNUIsRUFBRSxtQ0FBbUMsdUJBQ3JDQSxFQUFFLHNDQUFzQztZQUM5QztRQUNGO1FBRUZpQixVQUFVSixjQUFjO1lBQUViO1FBQUU7SUFDOUIsR0FBRTtBQUVKLE9BQU8sTUFBTThCLHFCQUFxQixDQUFDLEVBQUU5QixDQUFDLEVBQUUrQixrQkFBa0IsS0FBSyxFQUFFQyx5QkFBeUIsS0FBSyxFQUFpRjtJQUM5SyxNQUFNOUIsU0FBU04sRUFBRW9CLE1BQU0sQ0FBQztRQUN0QmlCLE1BQU1yQyxFQUFFTyxNQUFNLENBQUM7WUFBRUssU0FBUztRQUFtQixHQUFHSixHQUFHLENBQUM7UUFDcEQ4QixPQUFPbkMsV0FBVztZQUFFQztRQUFFO1FBQ3RCbUMsVUFBVTFCLGNBQWM7WUFBRVQ7WUFBR0MsVUFBVThCO1FBQWdCLEdBQUdLLFFBQVE7UUFDbEVuQixVQUFVSixjQUFjO1lBQUViO1FBQUU7UUFDNUJrQixpQkFBaUJKLHFCQUFxQjtZQUFFZDtZQUFHQyxVQUFVK0I7UUFBdUIsR0FBR0ksUUFBUTtJQUN6RjtJQUVBLElBQUksQ0FBQ0osd0JBQXdCLE9BQU85QjtJQUVwQyxPQUFPQSxPQUFPRyxNQUFNLENBQUMsQ0FBQ2MsT0FBU0EsS0FBS0YsUUFBUSxLQUFLRSxLQUFLRCxlQUFlLEVBQUU7UUFDckVFLE1BQU07WUFBQztTQUFrQjtRQUN6QlosU0FBU1IsRUFBRSxpQ0FBaUM7SUFDOUM7QUFDRixFQUFDIn0=
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zaGFyZWQvZm9ybS92YWxpZGF0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tICd6b2QnXG5cbmltcG9ydCB7IGVtYWlsUmVnZXgsIHVzZXJuYW1lUmVnZXggfSBmcm9tICdAL3NoYXJlZC91dGlscy9yZWdleCdcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUeXBlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogTWluaW1hbCB0cmFuc2xhdGlvbiBmdW5jdGlvbiB0eXBlIGV4dHJhY3RlZCBmcm9tIGBpMThuZXh0YC5cbiAqIEFjY2VwdHMgYSBrZXkgYW5kIHJldHVybnMgdGhlIHRyYW5zbGF0ZWQgc3RyaW5nLlxuICovXG5leHBvcnQgdHlwZSBUcmFuc2xhdGUgPSAoLi4uYXJnczogYW55W10pID0+IHN0cmluZ1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEZpZWxkIGJ1aWxkZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGNvbnN0IGVtYWlsRmllbGQgPSAoeyB0LCByZXF1aXJlZCA9IHRydWUgfTogeyB0OiBUcmFuc2xhdGU7IHJlcXVpcmVkPzogYm9vbGVhbiB9KSA9PiB7XG4gIGxldCBzY2hlbWEgPSB6LnN0cmluZygpXG4gIGlmIChyZXF1aXJlZCkgc2NoZW1hID0gc2NoZW1hLm1pbigxLCB0KCd2YWxpZGF0aW9uOnJlcXVpcmVkJykpXG4gIHJldHVybiBzY2hlbWEucmVmaW5lKCh2YWwpID0+IGVtYWlsUmVnZXgudGVzdCh2YWwpLCB7XG4gICAgbWVzc2FnZTogdCgnYXV0aGVudGljYXRpb246ZW1haWxOb3RWYWxpZCcpIHx8ICdFbWFpbCBpcyBub3QgdmFsaWQnXG4gIH0pXG59XG5cbmV4cG9ydCBjb25zdCB1c2VybmFtZUZpZWxkID0gKHsgdCwgcmVxdWlyZWQgPSB0cnVlIH06IHsgdDogVHJhbnNsYXRlOyByZXF1aXJlZD86IGJvb2xlYW4gfSkgPT4ge1xuICBsZXQgc2NoZW1hID0gei5zdHJpbmcoKVxuICBpZiAocmVxdWlyZWQpIHNjaGVtYSA9IHNjaGVtYS5taW4oMSwgdCgndmFsaWRhdGlvbjpyZXF1aXJlZCcpKVxuICByZXR1cm4gc2NoZW1hLnJlZmluZSgodmFsKSA9PiB1c2VybmFtZVJlZ2V4LnRlc3QodmFsKSwge1xuICAgIG1lc3NhZ2U6IHQoJ2F1dGhlbnRpY2F0aW9uOnVzZXJuYW1lTm90VmFsaWQnKSB8fCAnVXNlcm5hbWUgaXMgbm90IHZhbGlkJ1xuICB9KVxufVxuXG5leHBvcnQgY29uc3QgcGFzc3dvcmRGaWVsZCA9ICh7IHQsIHJlcXVpcmVkID0gdHJ1ZSwgbWluTGVuZ3RoID0gMSB9OiB7IHQ6IFRyYW5zbGF0ZTsgcmVxdWlyZWQ/OiBib29sZWFuOyBtaW5MZW5ndGg/OiBudW1iZXIgfSkgPT4ge1xuICBsZXQgc2NoZW1hID0gei5zdHJpbmcoKVxuICBpZiAocmVxdWlyZWQpIHNjaGVtYSA9IHNjaGVtYS5taW4obWluTGVuZ3RoLCB0KCd2YWxpZGF0aW9uOnJlcXVpcmVkJykgfHwgJ1Bhc3N3b3JkIGlzIHJlcXVpcmVkJylcbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgY29uc3QgY29uZmlybVBhc3N3b3JkRmllbGQgPSAoeyB0LCByZXF1aXJlZCA9IHRydWUgfTogeyB0OiBUcmFuc2xhdGU7IHJlcXVpcmVkPzogYm9vbGVhbiB9KSA9PiB7XG4gIGxldCBzY2hlbWEgPSB6LnN0cmluZygpXG4gIGlmIChyZXF1aXJlZCkgc2NoZW1hID0gc2NoZW1hLm1pbigxLCB0KCd2YWxpZGF0aW9uOnJlcXVpcmVkJykgfHwgJ0NvbmZpcm0gcGFzc3dvcmQgaXMgcmVxdWlyZWQnKVxuICByZXR1cm4gc2NoZW1hXG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ29tcG9zYWJsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFJldHVybnMgYSBab2Qgb2JqZWN0IHNjaGVtYSB3aXRoIGBwYXNzd29yZGAgYW5kIGBjb25maXJtUGFzc3dvcmRgIGZpZWxkc1xuICogYW5kIGEgcmVmaW5lbWVudCB0aGF0IGVuc3VyZXMgdGhleSBtYXRjaC5cbiAqL1xuZXhwb3J0IGNvbnN0IHBhc3N3b3JkV2l0aENvbmZpcm1hdGlvbiA9ICh7IHQsIG1pbkxlbmd0aCA9IDEgfTogeyB0OiBUcmFuc2xhdGU7IG1pbkxlbmd0aD86IG51bWJlciB9KSA9PlxuICB6XG4gICAgLm9iamVjdCh7XG4gICAgICBwYXNzd29yZDogcGFzc3dvcmRGaWVsZCh7IHQsIG1pbkxlbmd0aCB9KSxcbiAgICAgIGNvbmZpcm1QYXNzd29yZDogY29uZmlybVBhc3N3b3JkRmllbGQoeyB0IH0pXG4gICAgfSlcbiAgICAucmVmaW5lKChkYXRhKSA9PiBkYXRhLnBhc3N3b3JkID09PSBkYXRhLmNvbmZpcm1QYXNzd29yZCwge1xuICAgICAgcGF0aDogWydjb25maXJtUGFzc3dvcmQnXSxcbiAgICAgIG1lc3NhZ2U6IHQoJ2ZpZWxkczpwYXNzd29yZHNEb05vdE1hdGNoJykgfHwgJ1Bhc3N3b3JkcyBkbyBub3QgbWF0Y2gnXG4gICAgfSlcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBVdGlsaXR5IHZhbGlkYXRvcnMgKG5vbuKAkVpvZCkg4oCUIGhhbmR5IGZvciBkeW5hbWljIGxvZ2luIGZpZWxkIGNoZWNrc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBpc1ZhbGlkRW1haWwgPSAodmFsOiBzdHJpbmcpID0+IGVtYWlsUmVnZXgudGVzdCh2YWwpXG5leHBvcnQgY29uc3QgaXNWYWxpZFVzZXJuYW1lID0gKHZhbDogc3RyaW5nLCB7IG1pbkxlbmd0aCA9IDUsIG1heExlbmd0aCA9IDEyOCB9OiB7IG1pbkxlbmd0aD86IG51bWJlcjsgbWF4TGVuZ3RoPzogbnVtYmVyIH0gPSB7fSkgPT5cbiAgdXNlcm5hbWVSZWdleC50ZXN0KHZhbCkgJiYgdmFsLmxlbmd0aCA+PSBtaW5MZW5ndGggJiYgdmFsLmxlbmd0aCA8PSBtYXhMZW5ndGhcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTY2hlbWEgYnVpbGRlcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG50eXBlIFVzZXJuYW1lU2V0dGluZ3MgPSB7IG1pbkxlbmd0aDogbnVtYmVyOyBtYXhMZW5ndGg6IG51bWJlciB9XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVMb2dpblNjaGVtYSA9ICh7XG4gIHQsXG4gIGxvZ2luVHlwZSxcbiAgY2FuTG9naW5XaXRoVXNlcm5hbWUgPSBmYWxzZSxcbiAgdXNlcm5hbWVTZXR0aW5ncyA9IHsgbWluTGVuZ3RoOiA1LCBtYXhMZW5ndGg6IDEyOCB9XG59OiB7XG4gIHQ6IFRyYW5zbGF0ZVxuICBsb2dpblR5cGU6ICdlbWFpbCcgfCAndXNlcm5hbWUnIHwgJ2VtYWlsT3JVc2VybmFtZSdcbiAgY2FuTG9naW5XaXRoVXNlcm5hbWU/OiBib29sZWFuXG4gIHVzZXJuYW1lU2V0dGluZ3M/OiBVc2VybmFtZVNldHRpbmdzXG59KSA9PlxuICB6Lm9iamVjdCh7XG4gICAgbG9naW46IHouc3RyaW5nKCkucmVmaW5lKFxuICAgICAgKHZhbCkgPT4ge1xuICAgICAgICBpZiAoIXZhbCkgcmV0dXJuIGZhbHNlXG4gICAgICAgIGlmIChsb2dpblR5cGUgPT09ICdlbWFpbCcpIHJldHVybiBpc1ZhbGlkRW1haWwodmFsKVxuICAgICAgICBpZiAobG9naW5UeXBlID09PSAndXNlcm5hbWUnKSByZXR1cm4gaXNWYWxpZFVzZXJuYW1lKHZhbCwgdXNlcm5hbWVTZXR0aW5ncylcbiAgICAgICAgcmV0dXJuIGlzVmFsaWRFbWFpbCh2YWwpIHx8IGlzVmFsaWRVc2VybmFtZSh2YWwsIHVzZXJuYW1lU2V0dGluZ3MpXG4gICAgICB9LFxuICAgICAgKHZhbCkgPT4ge1xuICAgICAgICBpZiAoIXZhbCkgcmV0dXJuIHsgbWVzc2FnZTogdCgndmFsaWRhdGlvbjpyZXF1aXJlZCcpIH1cblxuICAgICAgICBjb25zdCBpc1Byb2JhYmx5RW1haWwgPSB2YWwuaW5jbHVkZXMoJ0AnKSB8fCAhY2FuTG9naW5XaXRoVXNlcm5hbWVcblxuICAgICAgICBpZiAobG9naW5UeXBlID09PSAnZW1haWwnKSB7XG4gICAgICAgICAgcmV0dXJuIHsgbWVzc2FnZTogdCgnYXV0aGVudGljYXRpb246ZW1haWxOb3RWYWxpZCcpIHx8ICdFbWFpbCBpcyBub3QgdmFsaWQnIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2dpblR5cGUgPT09ICd1c2VybmFtZScpIHtcbiAgICAgICAgICByZXR1cm4geyBtZXNzYWdlOiB0KCdhdXRoZW50aWNhdGlvbjp1c2VybmFtZU5vdFZhbGlkJykgfHwgJ1VzZXJuYW1lIGlzIG5vdCB2YWxpZCcgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtZXNzYWdlOiBpc1Byb2JhYmx5RW1haWxcbiAgICAgICAgICAgID8gdCgnYXV0aGVudGljYXRpb246ZW1haWxOb3RWYWxpZCcpIHx8ICdFbWFpbCBpcyBub3QgdmFsaWQnXG4gICAgICAgICAgICA6IHQoJ2F1dGhlbnRpY2F0aW9uOnVzZXJuYW1lTm90VmFsaWQnKSB8fCAnVXNlcm5hbWUgaXMgbm90IHZhbGlkJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKSxcbiAgICBwYXNzd29yZDogcGFzc3dvcmRGaWVsZCh7IHQgfSlcbiAgfSlcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNpZ251cFNjaGVtYSA9ICh7IHQsIHJlcXVpcmVVc2VybmFtZSA9IGZhbHNlLCByZXF1aXJlQ29uZmlybVBhc3N3b3JkID0gZmFsc2UgfTogeyB0OiBUcmFuc2xhdGU7IHJlcXVpcmVVc2VybmFtZT86IGJvb2xlYW47IHJlcXVpcmVDb25maXJtUGFzc3dvcmQ/OiBib29sZWFuIH0pID0+IHtcbiAgY29uc3Qgc2NoZW1hID0gei5vYmplY3Qoe1xuICAgIG5hbWU6IHouc3RyaW5nKHsgbWVzc2FnZTogJ05hbWUgaXMgcmVxdWlyZWQnIH0pLm1pbigxKSxcbiAgICBlbWFpbDogZW1haWxGaWVsZCh7IHQgfSksXG4gICAgdXNlcm5hbWU6IHVzZXJuYW1lRmllbGQoeyB0LCByZXF1aXJlZDogcmVxdWlyZVVzZXJuYW1lIH0pLm9wdGlvbmFsKCksXG4gICAgcGFzc3dvcmQ6IHBhc3N3b3JkRmllbGQoeyB0IH0pLFxuICAgIGNvbmZpcm1QYXNzd29yZDogY29uZmlybVBhc3N3b3JkRmllbGQoeyB0LCByZXF1aXJlZDogcmVxdWlyZUNvbmZpcm1QYXNzd29yZCB9KS5vcHRpb25hbCgpXG4gIH0pXG5cbiAgaWYgKCFyZXF1aXJlQ29uZmlybVBhc3N3b3JkKSByZXR1cm4gc2NoZW1hXG5cbiAgcmV0dXJuIHNjaGVtYS5yZWZpbmUoKGRhdGEpID0+IGRhdGEucGFzc3dvcmQgPT09IGRhdGEuY29uZmlybVBhc3N3b3JkLCB7XG4gICAgcGF0aDogWydjb25maXJtUGFzc3dvcmQnXSxcbiAgICBtZXNzYWdlOiB0KCdmaWVsZHM6cGFzc3dvcmRzRG9Ob3RNYXRjaCcpIHx8ICdQYXNzd29yZHMgZG8gbm90IG1hdGNoJ1xuICB9KVxufVxuIl0sIm5hbWVzIjpbInoiLCJlbWFpbFJlZ2V4IiwidXNlcm5hbWVSZWdleCIsImVtYWlsRmllbGQiLCJ0IiwicmVxdWlyZWQiLCJzY2hlbWEiLCJzdHJpbmciLCJtaW4iLCJyZWZpbmUiLCJ2YWwiLCJ0ZXN0IiwibWVzc2FnZSIsInVzZXJuYW1lRmllbGQiLCJwYXNzd29yZEZpZWxkIiwibWluTGVuZ3RoIiwiY29uZmlybVBhc3N3b3JkRmllbGQiLCJwYXNzd29yZFdpdGhDb25maXJtYXRpb24iLCJvYmplY3QiLCJwYXNzd29yZCIsImNvbmZpcm1QYXNzd29yZCIsImRhdGEiLCJwYXRoIiwiaXNWYWxpZEVtYWlsIiwiaXNWYWxpZFVzZXJuYW1lIiwibWF4TGVuZ3RoIiwibGVuZ3RoIiwiY3JlYXRlTG9naW5TY2hlbWEiLCJsb2dpblR5cGUiLCJjYW5Mb2dpbldpdGhVc2VybmFtZSIsInVzZXJuYW1lU2V0dGluZ3MiLCJsb2dpbiIsImlzUHJvYmFibHlFbWFpbCIsImluY2x1ZGVzIiwiY3JlYXRlU2lnbnVwU2NoZW1hIiwicmVxdWlyZVVzZXJuYW1lIiwicmVxdWlyZUNvbmZpcm1QYXNzd29yZCIsIm5hbWUiLCJlbWFpbCIsInVzZXJuYW1lIiwib3B0aW9uYWwiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLENBQUMsUUFBUSxNQUFLO0FBRXZCLFNBQVNDLFVBQVUsRUFBRUMsYUFBYSxRQUFRLGlCQUFzQjtBQVloRSw4RUFBOEU7QUFDOUUsaUJBQWlCO0FBQ2pCLDhFQUE4RTtBQUU5RSxPQUFPLE1BQU1DLGFBQWEsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLFdBQVcsSUFBSSxFQUF3QztJQUNyRixJQUFJQyxTQUFTTixFQUFFTyxNQUFNO0lBQ3JCLElBQUlGLFVB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payload-auth",
3
- "version": "1.5.0",
3
+ "version": "1.6.0",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.mjs",
6
6
  "types": "./dist/index.d.ts",
@@ -1,4 +0,0 @@
1
- import { BetterAuthPluginOptions } from '@/better-auth/plugin/types';
2
- import { type Endpoint } from 'payload';
3
- export declare const getSignupEndpoint: (pluginOptions: BetterAuthPluginOptions) => Endpoint;
4
- //# sourceMappingURL=signup.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"signup.d.ts","sourceRoot":"","sources":["../../../../../../../src/better-auth/plugin/lib/build-collections/users/endpoints/signup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAA;AAEpE,OAAO,EAAgF,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAA;AAuBrH,eAAO,MAAM,iBAAiB,GAAI,eAAe,uBAAuB,KAAG,QAkI1E,CAAA"}
@@ -1,157 +0,0 @@
1
- import { adminEndpoints, baseSlugs, supportedBAPluginIds } from "../../../../constants";
2
- import { status as httpStatus } from "http-status";
3
- import { addDataAndFileToRequest, commitTransaction, initTransaction, killTransaction } from "payload";
4
- import { z } from "zod";
5
- import { getRequestCollection } from "../../../../helpers/get-requst-collection";
6
- import { createSignupSchema } from "../../../../../../shared/form/validation";
7
- import { checkPluginExists } from "../../../../helpers/check-plugin-exists";
8
- const sendJSON = (data, status)=>new Response(JSON.stringify(data), {
9
- headers: {
10
- 'Content-Type': 'application/json'
11
- },
12
- status
13
- });
14
- const forwardCookies = (from, to)=>{
15
- const setCookieHeader = from.headers.get('set-cookie');
16
- if (!setCookieHeader) return;
17
- setCookieHeader.split(',').forEach((c)=>to.headers.append('Set-Cookie', c.trim()));
18
- };
19
- const routeParamsSchema = z.object({
20
- token: z.string(),
21
- redirect: z.string().optional()
22
- });
23
- export const getSignupEndpoint = (pluginOptions)=>{
24
- const { betterAuthOptions = {}, adminInvitations, users } = pluginOptions;
25
- const { baseURL = '', basePath = '/api/auth', emailVerification, emailAndPassword } = betterAuthOptions;
26
- if (!baseURL) {
27
- throw new Error('betterAuthOptions.baseURL is required for server‑side authentication calls');
28
- }
29
- const adminInvitationsSlug = adminInvitations?.slug ?? baseSlugs.adminInvitations;
30
- const usersSlug = users?.slug ?? baseSlugs.users;
31
- const endpoint = {
32
- path: adminEndpoints.signup,
33
- method: 'post',
34
- handler: async (req)=>{
35
- await addDataAndFileToRequest(req);
36
- const collection = getRequestCollection(req);
37
- const { t } = req;
38
- const shouldCommit = await initTransaction(req);
39
- try {
40
- const { success: routeParamsSuccess, data: routeParamsData, error: routeParamsError } = routeParamsSchema.safeParse(req.query);
41
- if (!routeParamsSuccess) {
42
- await killTransaction(req);
43
- return sendJSON({
44
- error: 'INVALID_PARAMS',
45
- message: routeParamsError.message
46
- }, httpStatus.BAD_REQUEST);
47
- }
48
- const inviteResult = await req.payload.find({
49
- collection: adminInvitationsSlug,
50
- where: {
51
- token: {
52
- equals: routeParamsData.token
53
- }
54
- },
55
- limit: 1,
56
- req
57
- });
58
- const inviteDoc = inviteResult.docs.at(0);
59
- if (!inviteDoc) {
60
- await killTransaction(req);
61
- return sendJSON({
62
- error: 'INVALID_TOKEN',
63
- message: 'Invalid token'
64
- }, httpStatus.UNAUTHORIZED);
65
- }
66
- const hasUsernamePlugin = checkPluginExists(betterAuthOptions, supportedBAPluginIds.username);
67
- const supportsLoginWithUsername = hasUsernamePlugin && collection.config?.auth?.loginWithUsername;
68
- const requireUsername = hasUsernamePlugin && typeof collection.config?.auth?.loginWithUsername === 'object' && !!collection.config?.auth?.loginWithUsername?.requireUsername;
69
- const signupSchema = createSignupSchema({
70
- t,
71
- requireUsername,
72
- requireConfirmPassword: false
73
- });
74
- const parsedBody = signupSchema.safeParse(req.data);
75
- if (!parsedBody.success) {
76
- await killTransaction(req);
77
- const messages = parsedBody.error.issues.map((issue)=>issue.message);
78
- return sendJSON({
79
- error: {
80
- message: messages
81
- }
82
- }, httpStatus.BAD_REQUEST);
83
- }
84
- const { name, email, password, username } = parsedBody.data;
85
- const authApiURL = `${baseURL}${basePath}`;
86
- const url = new URL(`${authApiURL}/sign-up/email`);
87
- url.searchParams.set('callbackURL', routeParamsData.redirect ?? `${baseURL}${req.payload.config.routes.admin}`);
88
- if (routeParamsData.token) {
89
- url.searchParams.set('adminInviteToken', routeParamsData.token);
90
- }
91
- const apiResponse = await fetch(url.toString(), {
92
- method: 'POST',
93
- headers: {
94
- 'Content-Type': 'application/json'
95
- },
96
- body: JSON.stringify({
97
- name,
98
- email,
99
- password,
100
- ...supportsLoginWithUsername && username && {
101
- username
102
- }
103
- })
104
- });
105
- if (!apiResponse.ok) {
106
- throw new Error(apiResponse.statusText);
107
- }
108
- const responseData = await apiResponse.json();
109
- await req.payload.update({
110
- collection: usersSlug,
111
- id: responseData.user.id,
112
- data: {
113
- role: inviteDoc.role
114
- },
115
- overrideAccess: true,
116
- req
117
- });
118
- await req.payload.delete({
119
- collection: adminInvitationsSlug,
120
- where: {
121
- token: {
122
- equals: inviteDoc.token
123
- }
124
- },
125
- req
126
- });
127
- const requireEmailVerification = (emailAndPassword?.requireEmailVerification || collection.config.auth.verify) && !responseData.user.emailVerified;
128
- const sentEmailVerification = emailVerification?.sendVerificationEmail !== undefined;
129
- if (requireEmailVerification) {
130
- const res = sendJSON({
131
- message: t('authentication:verifyYourEmail'),
132
- sentEmailVerification,
133
- requireEmailVerification
134
- }, httpStatus.UNAUTHORIZED);
135
- forwardCookies(apiResponse, res);
136
- if (shouldCommit) await commitTransaction(req);
137
- return res;
138
- }
139
- const successRes = sendJSON({
140
- message: t('authentication:passed'),
141
- ...responseData
142
- }, httpStatus.OK);
143
- forwardCookies(apiResponse, successRes);
144
- if (shouldCommit) await commitTransaction(req);
145
- return successRes;
146
- } catch (error) {
147
- await killTransaction(req);
148
- return sendJSON({
149
- message: error.message
150
- }, httpStatus.INTERNAL_SERVER_ERROR);
151
- }
152
- }
153
- };
154
- return endpoint;
155
- };
156
-
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iZXR0ZXItYXV0aC9wbHVnaW4vbGliL2J1aWxkLWNvbGxlY3Rpb25zL3VzZXJzL2VuZHBvaW50cy9zaWdudXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWRtaW5FbmRwb2ludHMsIGJhc2VTbHVncywgc3VwcG9ydGVkQkFQbHVnaW5JZHMgfSBmcm9tICdAL2JldHRlci1hdXRoL3BsdWdpbi9jb25zdGFudHMnXG5pbXBvcnQgeyBCZXR0ZXJBdXRoUGx1Z2luT3B0aW9ucyB9IGZyb20gJ0AvYmV0dGVyLWF1dGgvcGx1Z2luL3R5cGVzJ1xuaW1wb3J0IHsgc3RhdHVzIGFzIGh0dHBTdGF0dXMgfSBmcm9tICdodHRwLXN0YXR1cydcbmltcG9ydCB7IGFkZERhdGFBbmRGaWxlVG9SZXF1ZXN0LCBjb21taXRUcmFuc2FjdGlvbiwgaW5pdFRyYW5zYWN0aW9uLCBraWxsVHJhbnNhY3Rpb24sIHR5cGUgRW5kcG9pbnQgfSBmcm9tICdwYXlsb2FkJ1xuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCdcbmltcG9ydCB7IGdldFJlcXVlc3RDb2xsZWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vaGVscGVycy9nZXQtcmVxdXN0LWNvbGxlY3Rpb24nXG5pbXBvcnQgeyBjcmVhdGVTaWdudXBTY2hlbWEgfSBmcm9tICdAL3NoYXJlZC9mb3JtL3ZhbGlkYXRpb24nXG5pbXBvcnQgeyBjaGVja1BsdWdpbkV4aXN0cyB9IGZyb20gJ0AvYmV0dGVyLWF1dGgvcGx1Z2luL2hlbHBlcnMvY2hlY2stcGx1Z2luLWV4aXN0cydcblxuY29uc3Qgc2VuZEpTT04gPSAoZGF0YTogdW5rbm93biwgc3RhdHVzOiBudW1iZXIpOiBSZXNwb25zZSA9PlxuICBuZXcgUmVzcG9uc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSksIHtcbiAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICBzdGF0dXNcbiAgfSlcblxuY29uc3QgZm9yd2FyZENvb2tpZXMgPSAoZnJvbTogUmVzcG9uc2UsIHRvOiBSZXNwb25zZSk6IHZvaWQgPT4ge1xuICBjb25zdCBzZXRDb29raWVIZWFkZXIgPSBmcm9tLmhlYWRlcnMuZ2V0KCdzZXQtY29va2llJylcbiAgaWYgKCFzZXRDb29raWVIZWFkZXIpIHJldHVyblxuICBzZXRDb29raWVIZWFkZXIuc3BsaXQoJywnKS5mb3JFYWNoKChjKSA9PiB0by5oZWFkZXJzLmFwcGVuZCgnU2V0LUNvb2tpZScsIGMudHJpbSgpKSlcbn1cblxuY29uc3Qgcm91dGVQYXJhbXNTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHRva2VuOiB6LnN0cmluZygpLFxuICByZWRpcmVjdDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KVxuXG5leHBvcnQgY29uc3QgZ2V0U2lnbnVwRW5kcG9pbnQgPSAocGx1Z2luT3B0aW9uczogQmV0dGVyQXV0aFBsdWdpbk9wdGlvbnMpOiBFbmRwb2ludCA9PiB7XG4gIGNvbnN0IHsgYmV0dGVyQXV0aE9wdGlvbnMgPSB7fSwgYWRtaW5JbnZpdGF0aW9ucywgdXNlcnMgfSA9IHBsdWdpbk9wdGlvbnNcbiAgY29uc3QgeyBiYXNlVVJMID0gJycsIGJhc2VQYXRoID0gJy9hcGkvYXV0aCcsIGVtYWlsVmVyaWZpY2F0aW9uLCBlbWFpbEFuZFBhc3N3b3JkIH0gPSBiZXR0ZXJBdXRoT3B0aW9uc1xuXG4gIGlmICghYmFzZVVSTCkge1xuICAgIHRocm93IG5ldyBFcnJvcignYmV0dGVyQXV0aE9wdGlvbnMuYmFzZVVSTCBpcyByZXF1aXJlZCBmb3Igc2VydmVy4oCRc2lkZSBhdXRoZW50aWNhdGlvbiBjYWxscycpXG4gIH1cblxuICBjb25zdCBhZG1pbkludml0YXRpb25zU2x1ZyA9IGFkbWluSW52aXRhdGlvbnM/LnNsdWcgPz8gYmFzZVNsdWdzLmFkbWluSW52aXRhdGlvbnNcbiAgY29uc3QgdXNlcnNTbHVnID0gdXNlcnM/LnNsdWcgPz8gYmFzZVNsdWdzLnVzZXJzXG5cbiAgY29uc3QgZW5kcG9pbnQ6IEVuZHBvaW50ID0ge1xuICAgIHBhdGg6IGFkbWluRW5kcG9pbnRzLnNpZ251cCxcbiAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICBoYW5kbGVyOiBhc3luYyAocmVxKSA9PiB7XG4gICAgICBhd2FpdCBhZGREYXRhQW5kRmlsZVRvUmVxdWVzdChyZXEpXG4gICAgICBjb25zdCBjb2xsZWN0aW9uID0gZ2V0UmVxdWVzdENvbGxlY3Rpb24ocmVxKVxuICAgICAgY29uc3QgeyB0IH0gPSByZXFcblxuICAgICAgY29uc3Qgc2hvdWxkQ29tbWl0ID0gYXdhaXQgaW5pdFRyYW5zYWN0aW9uKHJlcSlcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBzdWNjZXNzOiByb3V0ZVBhcmFtc1N1Y2Nlc3MsIGRhdGE6IHJvdXRlUGFyYW1zRGF0YSwgZXJyb3I6IHJvdXRlUGFyYW1zRXJyb3IgfSA9IHJvdXRlUGFyYW1zU2NoZW1hLnNhZmVQYXJzZShyZXEucXVlcnkpXG5cbiAgICAgICAgaWYgKCFyb3V0ZVBhcmFtc1N1Y2Nlc3MpIHtcbiAgICAgICAgICBhd2FpdCBraWxsVHJhbnNhY3Rpb24ocmVxKVxuICAgICAgICAgIHJldHVybiBzZW5kSlNPTih7IGVycm9yOiAnSU5WQUxJRF9QQVJBTVMnLCBtZXNzYWdlOiByb3V0ZVBhcmFtc0Vycm9yLm1lc3NhZ2UgfSwgaHR0cFN0YXR1cy5CQURfUkVRVUVTVClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGludml0ZVJlc3VsdCA9IGF3YWl0IHJlcS5wYXlsb2FkLmZpbmQoe1xuICAgICAgICAgIGNvbGxlY3Rpb246IGFkbWluSW52aXRhdGlvbnNTbHVnLFxuICAgICAgICAgIHdoZXJlOiB7IHRva2VuOiB7IGVxdWFsczogcm91dGVQYXJhbXNEYXRhLnRva2VuIH0gfSxcbiAgICAgICAgICBsaW1pdDogMSxcbiAgICAgICAgICByZXFcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBpbnZpdGVEb2MgPSBpbnZpdGVSZXN1bHQuZG9jcy5hdCgwKVxuXG4gICAgICAgIGlmICghaW52aXRlRG9jKSB7XG4gICAgICAgICAgYXdhaXQga2lsbFRyYW5zYWN0aW9uKHJlcSlcbiAgICAgICAgICByZXR1cm4gc2VuZEpTT04oeyBlcnJvcjogJ0lOVkFMSURfVE9LRU4nLCBtZXNzYWdlOiAnSW52YWxpZCB0b2tlbicgfSwgaHR0cFN0YXR1cy5VTkFVVEhPUklaRUQpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBoYXNVc2VybmFtZVBsdWdpbiA9IGNoZWNrUGx1Z2luRXhpc3RzKGJldHRlckF1dGhPcHRpb25zLCBzdXBwb3J0ZWRCQVBsdWdpbklkcy51c2VybmFtZSlcbiAgICAgICAgY29uc3Qgc3VwcG9ydHNMb2dpbldpdGhVc2VybmFtZSA9IGhhc1VzZXJuYW1lUGx1Z2luICYmIGNvbGxlY3Rpb24uY29uZmlnPy5hdXRoPy5sb2dpbldpdGhVc2VybmFtZVxuICAgICAgICBjb25zdCByZXF1aXJlVXNlcm5hbWUgPVxuICAgICAgICAgIGhhc1VzZXJuYW1lUGx1Z2luICYmXG4gICAgICAgICAgdHlwZW9mIGNvbGxlY3Rpb24uY29uZmlnPy5hdXRoPy5sb2dpbldpdGhVc2VybmFtZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAhIWNvbGxlY3Rpb24uY29uZmlnPy5hdXRoPy5sb2dpbldpdGhVc2VybmFtZT8ucmVxdWlyZVVzZXJuYW1lXG5cbiAgICAgICAgY29uc3Qgc2lnbnVwU2NoZW1hID0gY3JlYXRlU2lnbnVwU2NoZW1hKHsgdCwgcmVxdWlyZVVzZXJuYW1lLCByZXF1aXJlQ29uZmlybVBhc3N3b3JkOiBmYWxzZSB9KVxuICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gc2lnbnVwU2NoZW1hLnNhZmVQYXJzZShyZXEuZGF0YSlcblxuICAgICAgICBpZiAoIXBhcnNlZEJvZHkuc3VjY2Vzcykge1xuICAgICAgICAgIGF3YWl0IGtpbGxUcmFuc2FjdGlvbihyZXEpXG4gICAgICAgICAgY29uc3QgbWVzc2FnZXMgPSBwYXJzZWRCb2R5LmVycm9yLmlzc3Vlcy5tYXAoKGlzc3VlKSA9PiBpc3N1ZS5tZXNzYWdlKVxuICAgICAgICAgIHJldHVybiBzZW5kSlNPTih7IGVycm9yOiB7IG1lc3NhZ2U6IG1lc3NhZ2VzIH0gfSwgaHR0cFN0YXR1cy5CQURfUkVRVUVTVClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgbmFtZSwgZW1haWwsIHBhc3N3b3JkLCB1c2VybmFtZSB9ID0gcGFyc2VkQm9keS5kYXRhXG5cbiAgICAgICAgY29uc3QgYXV0aEFwaVVSTCA9IGAke2Jhc2VVUkx9JHtiYXNlUGF0aH1gXG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYCR7YXV0aEFwaVVSTH0vc2lnbi11cC9lbWFpbGApXG4gICAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdjYWxsYmFja1VSTCcsIHJvdXRlUGFyYW1zRGF0YS5yZWRpcmVjdCA/PyBgJHtiYXNlVVJMfSR7cmVxLnBheWxvYWQuY29uZmlnLnJvdXRlcy5hZG1pbn1gKVxuICAgICAgICBpZiAocm91dGVQYXJhbXNEYXRhLnRva2VuKSB7XG4gICAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2FkbWluSW52aXRlVG9rZW4nLCByb3V0ZVBhcmFtc0RhdGEudG9rZW4pXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcGlSZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybC50b1N0cmluZygpLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGVtYWlsLFxuICAgICAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgICAgICAuLi4oc3VwcG9ydHNMb2dpbldpdGhVc2VybmFtZSAmJiB1c2VybmFtZSAmJiB7IHVzZXJuYW1lIH0pXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoIWFwaVJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFwaVJlc3BvbnNlLnN0YXR1c1RleHQpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCBhcGlSZXNwb25zZS5qc29uKClcblxuICAgICAgICBhd2FpdCByZXEucGF5bG9hZC51cGRhdGUoe1xuICAgICAgICAgIGNvbGxlY3Rpb246IHVzZXJzU2x1ZyxcbiAgICAgICAgICBpZDogcmVzcG9uc2VEYXRhLnVzZXIuaWQsXG4gICAgICAgICAgZGF0YTogeyByb2xlOiBpbnZpdGVEb2Mucm9sZSB9LFxuICAgICAgICAgIG92ZXJyaWRlQWNjZXNzOiB0cnVlLFxuICAgICAgICAgIHJlcVxuICAgICAgICB9KVxuXG4gICAgICAgIGF3YWl0IHJlcS5wYXlsb2FkLmRlbGV0ZSh7XG4gICAgICAgICAgY29sbGVjdGlvbjogYWRtaW5JbnZpdGF0aW9uc1NsdWcsXG4gICAgICAgICAgd2hlcmU6IHsgdG9rZW46IHsgZXF1YWxzOiBpbnZpdGVEb2MudG9rZW4gfSB9LFxuICAgICAgICAgIHJlcVxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IHJlcXVpcmVFbWFpbFZlcmlmaWNhdGlvbiA9XG4gICAgICAgICAgKGVtYWlsQW5kUGFzc3dvcmQ/LnJlcXVpcmVFbWFpbFZlcmlmaWNhdGlvbiB8fCBjb2xsZWN0aW9uLmNvbmZpZy5hdXRoLnZlcmlmeSkgJiYgIXJlc3BvbnNlRGF0YS51c2VyLmVtYWlsVmVyaWZpZWRcblxuICAgICAgICBjb25zdCBzZW50RW1haWxWZXJpZmljYXRpb24gPSBlbWFpbFZlcmlmaWNhdGlvbj8uc2VuZFZlcmlmaWNhdGlvbkVtYWlsICE9PSB1bmRlZmluZWRcblxuICAgICAgICBpZiAocmVxdWlyZUVtYWlsVmVyaWZpY2F0aW9uKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gc2VuZEpTT04oXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHQoJ2F1dGhlbnRpY2F0aW9uOnZlcmlmeVlvdXJFbWFpbCcpLFxuICAgICAgICAgICAgICBzZW50RW1haWxWZXJpZmljYXRpb24sXG4gICAgICAgICAgICAgIHJlcXVpcmVFbWFpbFZlcmlmaWNhdGlvblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGh0dHBTdGF0dXMuVU5BVVRIT1JJWkVEXG4gICAgICAgICAgKVxuICAgICAgICAgIGZvcndhcmRDb29raWVzKGFwaVJlc3BvbnNlLCByZXMpXG4gICAgICAgICAgaWYgKHNob3VsZENvbW1pdCkgYXdhaXQgY29tbWl0VHJhbnNhY3Rpb24ocmVxKVxuICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NSZXMgPSBzZW5kSlNPTih7IG1lc3NhZ2U6IHQoJ2F1dGhlbnRpY2F0aW9uOnBhc3NlZCcpLCAuLi5yZXNwb25zZURhdGEgfSwgaHR0cFN0YXR1cy5PSylcbiAgICAgICAgZm9yd2FyZENvb2tpZXMoYXBpUmVzcG9uc2UsIHN1Y2Nlc3NSZXMpXG4gICAgICAgIGlmIChzaG91bGRDb21taXQpIGF3YWl0IGNvbW1pdFRyYW5zYWN0aW9uKHJlcSlcbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3NSZXNcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgYXdhaXQga2lsbFRyYW5zYWN0aW9uKHJlcSlcbiAgICAgICAgcmV0dXJuIHNlbmRKU09OKHsgbWVzc2FnZTogZXJyb3IubWVzc2FnZSB9LCBodHRwU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZW5kcG9pbnRcbn1cbiJdLCJuYW1lcyI6WyJhZG1pbkVuZHBvaW50cyIsImJhc2VTbHVncyIsInN1cHBvcnRlZEJBUGx1Z2luSWRzIiwic3RhdHVzIiwiaHR0cFN0YXR1cyIsImFkZERhdGFBbmRGaWxlVG9SZXF1ZXN0IiwiY29tbWl0VHJhbnNhY3Rpb24iLCJpbml0VHJhbnNhY3Rpb24iLCJraWxsVHJhbnNhY3Rpb24iLCJ6IiwiZ2V0UmVxdWVzdENvbGxlY3Rpb24iLCJjcmVhdGVTaWdudXBTY2hlbWEiLCJjaGVja1BsdWdpbkV4aXN0cyIsInNlbmRKU09OIiwiZGF0YSIsIlJlc3BvbnNlIiwiSlNPTiIsInN0cmluZ2lmeSIsImhlYWRlcnMiLCJmb3J3YXJkQ29va2llcyIsImZyb20iLCJ0byIsInNldENvb2tpZUhlYWRlciIsImdldCIsInNwbGl0IiwiZm9yRWFjaCIsImMiLCJhcHBlbmQiLCJ0cmltIiwicm91dGVQYXJhbXNTY2hlbWEiLCJvYmplY3QiLCJ0b2tlbiIsInN0cmluZyIsInJlZGlyZWN0Iiwib3B0aW9uYWwiLCJnZXRTaWdudXBFbmRwb2ludCIsInBsdWdpbk9wdGlvbnMiLCJiZXR0ZXJBdXRoT3B0aW9ucyIsImFkbWluSW52aXRhdGlvbnMiLCJ1c2VycyIsImJhc2VVUkwiLCJiYXNlUGF0aCIsImVtYWlsVmVyaWZpY2F0aW9uIiwiZW1haWxBbmRQYXNzd29yZCIsIkVycm9yIiwiYWRtaW5JbnZpdGF0aW9uc1NsdWciLCJzbHVnIiwidXNlcnNTbHVnIiwiZW5kcG9pbnQiLCJwYXRoIiwic2lnbnVwIiwibWV0aG9kIiwiaGFuZGxlciIsInJlcSIsImNvbGxlY3Rpb24iLCJ0Iiwic2hvdWxkQ29tbWl0Iiwic3VjY2VzcyIsInJvdXRlUGFyYW1zU3VjY2VzcyIsInJvdXRlUGFyYW1zRGF0YSIsImVycm9yIiwicm91dGVQYXJhbXNFcnJvciIsInNhZmVQYXJzZSIsInF1ZXJ5IiwibWVzc2FnZSIsIkJBRF9SRVFVRVNUIiwiaW52aXRlUmVzdWx0IiwicGF5bG9hZCIsImZpbmQiLCJ3aGVyZSIsImVxdWFscyIsImxpbWl0IiwiaW52aXRlRG9jIiwiZG9jcyIsImF0IiwiVU5BVVRIT1JJWkVEIiwiaGFzVXNlcm5hbWVQbHVnaW4iLCJ1c2VybmFtZSIsInN1cHBvcnRzTG9naW5XaXRoVXNlcm5hbWUiLCJjb25maWciLCJhdXRoIiwibG9naW5XaXRoVXNlcm5hbWUiLCJyZXF1aXJlVXNlcm5hbWUiLCJzaWdudXBTY2hlbWEiLCJyZXF1aXJlQ29uZmlybVBhc3N3b3JkIiwicGFyc2VkQm9keSIsIm1lc3NhZ2VzIiwiaXNzdWVzIiwibWFwIiwiaXNzdWUiLCJuYW1lIiwiZW1haWwiLCJwYXNzd29yZCIsImF1dGhBcGlVUkwiLCJ1cmwiLCJVUkwiLCJzZWFyY2hQYXJhbXMiLCJzZXQiLCJyb3V0ZXMiLCJhZG1pbiIsImFwaVJlc3BvbnNlIiwiZmV0Y2giLCJ0b1N0cmluZyIsImJvZHkiLCJvayIsInN0YXR1c1RleHQiLCJyZXNwb25zZURhdGEiLCJqc29uIiwidXBkYXRlIiwiaWQiLCJ1c2VyIiwicm9sZSIsIm92ZXJyaWRlQWNjZXNzIiwiZGVsZXRlIiwicmVxdWlyZUVtYWlsVmVyaWZpY2F0aW9uIiwidmVyaWZ5IiwiZW1haWxWZXJpZmllZCIsInNlbnRFbWFpbFZlcmlmaWNhdGlvbiIsInNlbmRWZXJpZmljYXRpb25FbWFpbCIsInVuZGVmaW5lZCIsInJlcyIsInN1Y2Nlc3NSZXMiLCJPSyIsIklOVEVSTkFMX1NFUlZFUl9FUlJPUiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsY0FBYyxFQUFFQyxTQUFTLEVBQUVDLG9CQUFvQixRQUFRLHdCQUFnQztBQUVoRyxTQUFTQyxVQUFVQyxVQUFVLFFBQVEsY0FBYTtBQUNsRCxTQUFTQyx1QkFBdUIsRUFBRUMsaUJBQWlCLEVBQUVDLGVBQWUsRUFBRUMsZUFBZSxRQUF1QixVQUFTO0FBQ3JILFNBQVNDLENBQUMsUUFBUSxNQUFLO0FBQ3ZCLFNBQVNDLG9CQUFvQixRQUFRLDRDQUEyQztBQUNoRixTQUFTQyxrQkFBa0IsUUFBUSwyQ0FBMEI7QUFDN0QsU0FBU0MsaUJBQWlCLFFBQVEsMENBQWtEO0FBRXBGLE1BQU1DLFdBQVcsQ0FBQ0MsTUFBZVgsU0FDL0IsSUFBSVksU0FBU0MsS0FBS0MsU0FBUyxDQUFDSCxPQUFPO1FBQ2pDSSxTQUFTO1lBQUUsZ0JBQWdCO1FB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