payload-auth 1.0.2 → 1.1.1

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 (423) hide show
  1. package/dist/better-auth/adapter/index.d.ts +2 -2
  2. package/dist/better-auth/adapter/index.d.ts.map +1 -1
  3. package/dist/better-auth/adapter/index.js +115 -69
  4. package/dist/better-auth/adapter/transform/index.d.ts +22 -10
  5. package/dist/better-auth/adapter/transform/index.d.ts.map +1 -1
  6. package/dist/better-auth/adapter/transform/index.js +387 -96
  7. package/dist/better-auth/adapter/types.d.ts +2 -1
  8. package/dist/better-auth/adapter/types.d.ts.map +1 -1
  9. package/dist/better-auth/adapter/types.js +1 -1
  10. package/dist/better-auth/plugin/helpers/check-passkey-plugin.d.ts +3 -0
  11. package/dist/better-auth/plugin/helpers/check-passkey-plugin.d.ts.map +1 -0
  12. package/dist/better-auth/plugin/helpers/check-passkey-plugin.js +5 -0
  13. package/dist/better-auth/plugin/helpers/check-username-plugin.d.ts +3 -0
  14. package/dist/better-auth/plugin/helpers/check-username-plugin.d.ts.map +1 -0
  15. package/dist/better-auth/plugin/helpers/check-username-plugin.js +5 -0
  16. package/dist/better-auth/plugin/helpers/generate-verify-email-url.d.ts.map +1 -1
  17. package/dist/better-auth/plugin/helpers/generate-verify-email-url.js +8 -8
  18. package/dist/better-auth/plugin/helpers/get-admin-access.d.ts +8 -0
  19. package/dist/better-auth/plugin/helpers/get-admin-access.d.ts.map +1 -0
  20. package/dist/better-auth/plugin/helpers/get-admin-access.js +22 -0
  21. package/dist/better-auth/plugin/helpers/get-admin-routes.d.ts +14 -0
  22. package/dist/better-auth/plugin/helpers/get-admin-routes.d.ts.map +1 -0
  23. package/dist/better-auth/plugin/helpers/get-admin-routes.js +6 -0
  24. package/dist/better-auth/plugin/helpers/get-all-roles.d.ts +6 -0
  25. package/dist/better-auth/plugin/helpers/get-all-roles.d.ts.map +1 -0
  26. package/dist/better-auth/plugin/helpers/get-all-roles.js +20 -0
  27. package/dist/better-auth/plugin/helpers/get-ip.d.ts +1 -1
  28. package/dist/better-auth/plugin/helpers/get-ip.d.ts.map +1 -1
  29. package/dist/better-auth/plugin/helpers/get-ip.js +14 -14
  30. package/dist/better-auth/plugin/helpers/get-requst-collection.d.ts +3 -0
  31. package/dist/better-auth/plugin/helpers/get-requst-collection.d.ts.map +1 -0
  32. package/dist/better-auth/plugin/helpers/get-requst-collection.js +14 -0
  33. package/dist/better-auth/plugin/helpers/index.d.ts +1 -1
  34. package/dist/better-auth/plugin/helpers/index.js +2 -2
  35. package/dist/better-auth/plugin/{lib → helpers}/prepare-session-data.d.ts +3 -3
  36. package/dist/better-auth/plugin/helpers/prepare-session-data.d.ts.map +1 -0
  37. package/dist/better-auth/plugin/helpers/prepare-session-data.js +42 -0
  38. package/dist/better-auth/plugin/helpers/serialize-cookie.d.ts +4 -4
  39. package/dist/better-auth/plugin/helpers/serialize-cookie.d.ts.map +1 -1
  40. package/dist/better-auth/plugin/helpers/serialize-cookie.js +34 -34
  41. package/dist/better-auth/plugin/index.d.ts +7 -7
  42. package/dist/better-auth/plugin/index.d.ts.map +1 -1
  43. package/dist/better-auth/plugin/index.js +145 -37
  44. package/dist/better-auth/plugin/{collections → lib/build-collections}/accounts/hooks/sync-password-to-user.d.ts +1 -1
  45. package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.d.ts.map +1 -0
  46. package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.js +47 -0
  47. package/dist/better-auth/plugin/lib/build-collections/accounts/index.d.ts +7 -0
  48. package/dist/better-auth/plugin/lib/build-collections/accounts/index.d.ts.map +1 -0
  49. package/dist/better-auth/plugin/lib/build-collections/accounts/index.js +159 -0
  50. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.d.ts +6 -0
  51. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.d.ts.map +1 -0
  52. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.js +11 -0
  53. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.d.ts +3 -0
  54. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.d.ts.map +1 -0
  55. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.js +8 -0
  56. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.d.ts +7 -0
  57. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.d.ts.map +1 -0
  58. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.js +107 -0
  59. package/dist/better-auth/plugin/lib/build-collections/api-keys.d.ts +6 -0
  60. package/dist/better-auth/plugin/lib/build-collections/api-keys.d.ts.map +1 -0
  61. package/dist/better-auth/plugin/lib/build-collections/api-keys.js +196 -0
  62. package/dist/better-auth/plugin/lib/build-collections/index.d.ts +12 -0
  63. package/dist/better-auth/plugin/lib/build-collections/index.d.ts.map +1 -0
  64. package/dist/better-auth/plugin/lib/build-collections/index.js +96 -0
  65. package/dist/better-auth/plugin/lib/build-collections/invitations.d.ts +6 -0
  66. package/dist/better-auth/plugin/lib/build-collections/invitations.d.ts.map +1 -0
  67. package/dist/better-auth/plugin/lib/build-collections/invitations.js +91 -0
  68. package/dist/better-auth/plugin/lib/build-collections/jwks.d.ts +6 -0
  69. package/dist/better-auth/plugin/lib/build-collections/jwks.d.ts.map +1 -0
  70. package/dist/better-auth/plugin/lib/build-collections/jwks.js +43 -0
  71. package/dist/better-auth/plugin/lib/build-collections/members.d.ts +6 -0
  72. package/dist/better-auth/plugin/lib/build-collections/members.d.ts.map +1 -0
  73. package/dist/better-auth/plugin/lib/build-collections/members.js +71 -0
  74. package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.d.ts +6 -0
  75. package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.d.ts.map +1 -0
  76. package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.js +98 -0
  77. package/dist/better-auth/plugin/lib/build-collections/oauth-applications.d.ts +6 -0
  78. package/dist/better-auth/plugin/lib/build-collections/oauth-applications.d.ts.map +1 -0
  79. package/dist/better-auth/plugin/lib/build-collections/oauth-applications.js +113 -0
  80. package/dist/better-auth/plugin/lib/build-collections/oauth-consents.d.ts +6 -0
  81. package/dist/better-auth/plugin/lib/build-collections/oauth-consents.d.ts.map +1 -0
  82. package/dist/better-auth/plugin/lib/build-collections/oauth-consents.js +67 -0
  83. package/dist/better-auth/plugin/lib/build-collections/organizations.d.ts +6 -0
  84. package/dist/better-auth/plugin/lib/build-collections/organizations.d.ts.map +1 -0
  85. package/dist/better-auth/plugin/lib/build-collections/organizations.js +59 -0
  86. package/dist/better-auth/plugin/lib/build-collections/passkeys.d.ts +6 -0
  87. package/dist/better-auth/plugin/lib/build-collections/passkeys.d.ts.map +1 -0
  88. package/dist/better-auth/plugin/lib/build-collections/passkeys.js +108 -0
  89. package/dist/better-auth/plugin/lib/build-collections/sessions.d.ts +8 -0
  90. package/dist/better-auth/plugin/lib/build-collections/sessions.d.ts.map +1 -0
  91. package/dist/better-auth/plugin/lib/build-collections/sessions.js +123 -0
  92. package/dist/better-auth/plugin/lib/build-collections/sso-providers.d.ts +6 -0
  93. package/dist/better-auth/plugin/lib/build-collections/sso-providers.d.ts.map +1 -0
  94. package/dist/better-auth/plugin/lib/build-collections/sso-providers.js +83 -0
  95. package/dist/better-auth/plugin/lib/build-collections/teams.d.ts +6 -0
  96. package/dist/better-auth/plugin/lib/build-collections/teams.d.ts.map +1 -0
  97. package/dist/better-auth/plugin/lib/build-collections/teams.js +45 -0
  98. package/dist/better-auth/plugin/lib/build-collections/two-factors.d.ts +6 -0
  99. package/dist/better-auth/plugin/lib/build-collections/two-factors.d.ts.map +1 -0
  100. package/dist/better-auth/plugin/lib/build-collections/two-factors.js +56 -0
  101. package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.d.ts +8 -0
  102. package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.d.ts.map +1 -0
  103. package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.js +52 -0
  104. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/forgot-password.d.ts +3 -0
  105. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/forgot-password.d.ts.map +1 -0
  106. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/forgot-password.js +96 -0
  107. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.d.ts +13 -0
  108. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.d.ts.map +1 -0
  109. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.js +67 -0
  110. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/login.d.ts +4 -0
  111. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/login.d.ts.map +1 -0
  112. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/login.js +115 -0
  113. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.d.ts +3 -0
  114. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.d.ts.map +1 -0
  115. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.js +110 -0
  116. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/reset-password.d.ts +3 -0
  117. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/reset-password.d.ts.map +1 -0
  118. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/reset-password.js +62 -0
  119. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.d.ts +3 -0
  120. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.d.ts.map +1 -0
  121. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.js +42 -0
  122. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.d.ts +4 -0
  123. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.d.ts.map +1 -0
  124. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.js +79 -0
  125. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/signup.d.ts +4 -0
  126. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/signup.d.ts.map +1 -0
  127. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/signup.js +153 -0
  128. package/dist/better-auth/plugin/{collections → lib/build-collections}/users/hooks/after-login.d.ts +1 -1
  129. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.d.ts.map +1 -0
  130. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.js +75 -0
  131. package/dist/better-auth/plugin/{collections → lib/build-collections}/users/hooks/after-logout.d.ts +1 -1
  132. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.d.ts.map +1 -0
  133. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.js +74 -0
  134. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.d.ts +7 -0
  135. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.d.ts.map +1 -0
  136. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.js +45 -0
  137. package/dist/better-auth/plugin/{collections → lib/build-collections}/users/hooks/before-login.d.ts +1 -1
  138. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.d.ts.map +1 -0
  139. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.js +18 -0
  140. package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.d.ts +3 -0
  141. package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.d.ts.map +1 -0
  142. package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.js +14 -0
  143. package/dist/better-auth/plugin/{collections → lib/build-collections}/users/hooks/sync-account.d.ts +1 -1
  144. package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.d.ts.map +1 -0
  145. package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.js +82 -0
  146. package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts +8 -0
  147. package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts.map +1 -0
  148. package/dist/better-auth/plugin/lib/build-collections/users/index.js +345 -0
  149. package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.d.ts +8 -0
  150. package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.d.ts.map +1 -0
  151. package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.js +31 -0
  152. package/dist/better-auth/plugin/lib/{payload-access.d.ts → build-collections/utils/payload-access.d.ts} +1 -1
  153. package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.d.ts.map +1 -0
  154. package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.js +64 -0
  155. package/dist/better-auth/plugin/lib/build-collections/verifications.d.ts +7 -0
  156. package/dist/better-auth/plugin/lib/build-collections/verifications.d.ts.map +1 -0
  157. package/dist/better-auth/plugin/lib/build-collections/verifications.js +63 -0
  158. package/dist/better-auth/plugin/lib/{config.d.ts → constants.d.ts} +13 -1
  159. package/dist/better-auth/plugin/lib/constants.d.ts.map +1 -0
  160. package/dist/better-auth/plugin/lib/constants.js +56 -0
  161. package/dist/better-auth/plugin/lib/get-payload-auth.d.ts +2 -2
  162. package/dist/better-auth/plugin/lib/get-payload-auth.d.ts.map +1 -1
  163. package/dist/better-auth/plugin/lib/get-payload-auth.js +2 -2
  164. package/dist/better-auth/plugin/lib/get-required-collection-slugs.d.ts +4 -4
  165. package/dist/better-auth/plugin/lib/get-required-collection-slugs.d.ts.map +1 -1
  166. package/dist/better-auth/plugin/lib/get-required-collection-slugs.js +26 -43
  167. package/dist/better-auth/plugin/lib/init-better-auth.d.ts +4 -3
  168. package/dist/better-auth/plugin/lib/init-better-auth.d.ts.map +1 -1
  169. package/dist/better-auth/plugin/lib/init-better-auth.js +7 -7
  170. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.d.ts +3 -0
  171. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.d.ts.map +1 -0
  172. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.js +8 -0
  173. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.d.ts +2 -0
  174. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.d.ts.map +1 -0
  175. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.js +17 -0
  176. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.d.ts +10 -0
  177. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.d.ts.map +1 -0
  178. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.js +118 -0
  179. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.d.ts +2 -0
  180. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.d.ts.map +1 -0
  181. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.js +58 -0
  182. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.d.ts +2 -0
  183. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.d.ts.map +1 -0
  184. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.js +86 -0
  185. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.d.ts +2 -0
  186. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.d.ts.map +1 -0
  187. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.js +17 -0
  188. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.d.ts +2 -0
  189. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.d.ts.map +1 -0
  190. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.js +17 -0
  191. package/dist/better-auth/plugin/lib/{ensure-password-set-before-create.d.ts → sanitize-better-auth-options/utils/ensure-password-set-before-create.d.ts} +1 -1
  192. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/ensure-password-set-before-create.d.ts.map +1 -0
  193. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/ensure-password-set-before-create.js +23 -0
  194. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.d.ts.map +1 -0
  195. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.js +62 -0
  196. package/dist/better-auth/plugin/lib/{respect-save-to-jwt-fields-middleware.d.ts → sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts} +6 -6
  197. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts.map +1 -0
  198. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.js +30 -0
  199. package/dist/better-auth/plugin/payload/components/admin-buttons/index.d.ts +8 -0
  200. package/dist/better-auth/plugin/payload/components/admin-buttons/index.d.ts.map +1 -0
  201. package/dist/better-auth/plugin/payload/components/admin-buttons/index.js +115 -0
  202. package/dist/better-auth/plugin/payload/components/admin-buttons/index.scss +31 -0
  203. package/dist/better-auth/plugin/payload/components/admin-invite-button/index.d.ts +11 -0
  204. package/dist/better-auth/plugin/payload/components/admin-invite-button/index.d.ts.map +1 -0
  205. package/dist/better-auth/plugin/payload/components/admin-invite-button/index.js +196 -0
  206. package/dist/better-auth/plugin/payload/components/admin-invite-button/index.scss +131 -0
  207. package/dist/better-auth/plugin/payload/components/admin-social-provider-buttons/index.d.ts +14 -0
  208. package/dist/better-auth/plugin/payload/components/admin-social-provider-buttons/index.d.ts.map +1 -0
  209. package/dist/better-auth/plugin/payload/components/admin-social-provider-buttons/index.js +111 -0
  210. package/dist/better-auth/plugin/payload/components/admin-social-provider-buttons/index.scss +51 -0
  211. package/dist/better-auth/plugin/payload/components/form-header/index.d.ts +9 -0
  212. package/dist/better-auth/plugin/payload/components/form-header/index.d.ts.map +1 -0
  213. package/dist/better-auth/plugin/payload/components/form-header/index.js +23 -0
  214. package/dist/better-auth/plugin/payload/components/form-header/index.scss +8 -0
  215. package/dist/better-auth/plugin/payload/components/icons.d.ts +9 -0
  216. package/dist/better-auth/plugin/payload/components/icons.d.ts.map +1 -0
  217. package/dist/better-auth/plugin/payload/components/icons.js +437 -0
  218. package/dist/better-auth/plugin/payload/components/logo.d.ts +3 -2
  219. package/dist/better-auth/plugin/payload/components/logo.d.ts.map +1 -1
  220. package/dist/better-auth/plugin/payload/components/logo.js +22 -34
  221. package/dist/better-auth/plugin/payload/components/logout-button.d.ts +6 -0
  222. package/dist/better-auth/plugin/payload/components/logout-button.d.ts.map +1 -0
  223. package/dist/better-auth/plugin/payload/components/logout-button.js +27 -0
  224. package/dist/better-auth/plugin/payload/components/rsc-redirect.d.ts +7 -0
  225. package/dist/better-auth/plugin/payload/components/rsc-redirect.d.ts.map +1 -0
  226. package/dist/better-auth/plugin/payload/components/rsc-redirect.js +8 -0
  227. package/dist/better-auth/plugin/payload/components/styles.css +2 -2
  228. package/dist/better-auth/plugin/payload/components/token-field.d.ts +5 -0
  229. package/dist/better-auth/plugin/payload/components/token-field.d.ts.map +1 -0
  230. package/dist/better-auth/plugin/payload/components/token-field.js +30 -0
  231. package/dist/better-auth/plugin/payload/exports/client.d.ts +6 -3
  232. package/dist/better-auth/plugin/payload/exports/client.d.ts.map +1 -1
  233. package/dist/better-auth/plugin/payload/exports/client.js +7 -4
  234. package/dist/better-auth/plugin/payload/exports/rsc.d.ts +9 -5
  235. package/dist/better-auth/plugin/payload/exports/rsc.d.ts.map +1 -1
  236. package/dist/better-auth/plugin/payload/exports/rsc.js +10 -6
  237. package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.d.ts +3 -0
  238. package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.d.ts.map +1 -0
  239. package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.js +8 -0
  240. package/dist/better-auth/plugin/payload/utils/generate-metadata.d.ts +15 -0
  241. package/dist/better-auth/plugin/payload/utils/generate-metadata.d.ts.map +1 -0
  242. package/dist/better-auth/plugin/payload/utils/generate-metadata.js +74 -0
  243. package/dist/better-auth/plugin/payload/utils/get-safe-redirect.d.ts +2 -0
  244. package/dist/better-auth/plugin/payload/utils/get-safe-redirect.d.ts.map +1 -0
  245. package/dist/better-auth/plugin/payload/utils/get-safe-redirect.js +23 -0
  246. package/dist/better-auth/plugin/payload/views/admin-invite/client.d.ts +12 -0
  247. package/dist/better-auth/plugin/payload/views/admin-invite/client.d.ts.map +1 -0
  248. package/dist/better-auth/plugin/payload/views/admin-invite/client.js +92 -0
  249. package/dist/better-auth/plugin/payload/views/admin-invite/index.d.ts +11 -0
  250. package/dist/better-auth/plugin/payload/views/admin-invite/index.d.ts.map +1 -0
  251. package/dist/better-auth/plugin/payload/views/admin-invite/index.js +84 -0
  252. package/dist/better-auth/plugin/payload/views/admin-invite/index.scss +25 -0
  253. package/dist/better-auth/plugin/payload/views/create-first-admin/client.d.ts +14 -0
  254. package/dist/better-auth/plugin/payload/views/create-first-admin/client.d.ts.map +1 -0
  255. package/dist/better-auth/plugin/payload/views/create-first-admin/client.js +95 -0
  256. package/dist/better-auth/plugin/payload/views/create-first-admin/index.d.ts +10 -4
  257. package/dist/better-auth/plugin/payload/views/create-first-admin/index.d.ts.map +1 -1
  258. package/dist/better-auth/plugin/payload/views/create-first-admin/index.js +124 -92
  259. package/dist/better-auth/plugin/payload/views/create-first-admin/index.scss +29 -0
  260. package/dist/better-auth/plugin/payload/views/forgot-password/client.d.ts +8 -0
  261. package/dist/better-auth/plugin/payload/views/forgot-password/client.d.ts.map +1 -0
  262. package/dist/better-auth/plugin/payload/views/forgot-password/client.js +119 -0
  263. package/dist/better-auth/plugin/payload/views/forgot-password/index.d.ts +9 -0
  264. package/dist/better-auth/plugin/payload/views/forgot-password/index.d.ts.map +1 -0
  265. package/dist/better-auth/plugin/payload/views/forgot-password/index.js +69 -0
  266. package/dist/better-auth/plugin/payload/views/forgot-password/index.scss +0 -0
  267. package/dist/better-auth/plugin/payload/views/inactivity/index.d.ts +5 -0
  268. package/dist/better-auth/plugin/payload/views/inactivity/index.d.ts.map +1 -0
  269. package/dist/better-auth/plugin/payload/views/inactivity/index.js +12 -0
  270. package/dist/better-auth/plugin/payload/views/login/form/fields/login-field.d.ts +9 -0
  271. package/dist/better-auth/plugin/payload/views/login/form/fields/login-field.d.ts.map +1 -0
  272. package/dist/better-auth/plugin/payload/views/login/form/fields/login-field.js +54 -0
  273. package/dist/better-auth/plugin/payload/views/login/form/fields/password/index.d.ts +1 -0
  274. package/dist/better-auth/plugin/payload/views/login/form/fields/password/index.d.ts.map +1 -0
  275. package/dist/better-auth/plugin/payload/views/login/form/fields/password/index.js +121 -0
  276. package/dist/better-auth/plugin/payload/views/login/form/fields/password/index.scss +31 -0
  277. package/dist/better-auth/plugin/payload/views/login/form/fields/password/types.d.ts +56 -0
  278. package/dist/better-auth/plugin/payload/views/login/form/fields/password/types.d.ts.map +1 -0
  279. package/dist/better-auth/plugin/payload/views/login/form/fields/password/types.js +3 -0
  280. package/dist/better-auth/plugin/payload/views/login/form/index.d.ts +17 -0
  281. package/dist/better-auth/plugin/payload/views/login/form/index.d.ts.map +1 -0
  282. package/dist/better-auth/plugin/payload/views/login/form/index.js +137 -0
  283. package/dist/better-auth/plugin/payload/views/login/form/index.scss +23 -0
  284. package/dist/better-auth/plugin/payload/views/login/index.d.ts +10 -5
  285. package/dist/better-auth/plugin/payload/views/login/index.d.ts.map +1 -1
  286. package/dist/better-auth/plugin/payload/views/login/index.js +81 -61
  287. package/dist/better-auth/plugin/payload/views/login/index.scss +10 -0
  288. package/dist/better-auth/plugin/payload/views/logout/client.d.ts +8 -0
  289. package/dist/better-auth/plugin/payload/views/logout/client.d.ts.map +1 -0
  290. package/dist/better-auth/plugin/payload/views/logout/client.js +76 -0
  291. package/dist/better-auth/plugin/payload/views/logout/index.d.ts +8 -0
  292. package/dist/better-auth/plugin/payload/views/logout/index.d.ts.map +1 -0
  293. package/dist/better-auth/plugin/payload/views/logout/index.js +14 -0
  294. package/dist/better-auth/plugin/payload/views/logout/index.scss +0 -0
  295. package/dist/better-auth/plugin/payload/views/reset-password/client.d.ts +7 -0
  296. package/dist/better-auth/plugin/payload/views/reset-password/client.d.ts.map +1 -0
  297. package/dist/better-auth/plugin/payload/views/reset-password/client.js +72 -0
  298. package/dist/better-auth/plugin/payload/views/reset-password/index.d.ts +5 -0
  299. package/dist/better-auth/plugin/payload/views/reset-password/index.d.ts.map +1 -0
  300. package/dist/better-auth/plugin/payload/views/reset-password/index.js +81 -0
  301. package/dist/better-auth/plugin/payload/views/reset-password/index.scss +9 -0
  302. package/dist/better-auth/plugin/payload/views/reset-password/metadata.d.ts +3 -0
  303. package/dist/better-auth/plugin/payload/views/reset-password/metadata.d.ts.map +1 -0
  304. package/dist/better-auth/plugin/payload/views/reset-password/metadata.js +11 -0
  305. package/dist/better-auth/plugin/types.d.ts +170 -33
  306. package/dist/better-auth/plugin/types.d.ts.map +1 -1
  307. package/dist/better-auth/plugin/types.js +1 -1
  308. package/dist/clerk/plugin/components/sync-clerk-users-button.d.ts +1 -1
  309. package/dist/clerk/plugin/components/sync-clerk-users-button.d.ts.map +1 -1
  310. package/dist/clerk/utils/clerk-user.d.ts +0 -3
  311. package/dist/clerk/utils/clerk-user.d.ts.map +1 -1
  312. package/dist/clerk/utils/clerk-user.js +1 -3
  313. package/dist/clerk/utils/load-clerk-instance.d.ts +1 -1
  314. package/dist/clerk/utils/load-clerk-instance.d.ts.map +1 -1
  315. package/package.json +14 -14
  316. package/LICENSE.md +0 -17
  317. package/dist/better-auth/adapter/dev/bin/run.d.ts +0 -2
  318. package/dist/better-auth/adapter/dev/bin/run.d.ts.map +0 -1
  319. package/dist/better-auth/adapter/dev/bin/run.js +0 -64
  320. package/dist/better-auth/adapter/dev/bin/schema.d.ts +0 -23
  321. package/dist/better-auth/adapter/dev/bin/schema.d.ts.map +0 -1
  322. package/dist/better-auth/adapter/dev/bin/schema.js +0 -160
  323. package/dist/better-auth/adapter/dev/collections.d.ts +0 -4
  324. package/dist/better-auth/adapter/dev/collections.d.ts.map +0 -1
  325. package/dist/better-auth/adapter/dev/collections.js +0 -212
  326. package/dist/better-auth/adapter/dev/index.d.ts +0 -4
  327. package/dist/better-auth/adapter/dev/index.d.ts.map +0 -1
  328. package/dist/better-auth/adapter/dev/index.js +0 -168
  329. package/dist/better-auth/adapter/test/adapter.test.d.ts +0 -2
  330. package/dist/better-auth/adapter/test/adapter.test.d.ts.map +0 -1
  331. package/dist/better-auth/adapter/test/adapter.test.js +0 -181
  332. package/dist/better-auth/adapter/test/better-auth-adapter-test.d.ts +0 -8
  333. package/dist/better-auth/adapter/test/better-auth-adapter-test.d.ts.map +0 -1
  334. package/dist/better-auth/adapter/test/better-auth-adapter-test.js +0 -425
  335. package/dist/better-auth/adapter/test/schema.test.d.ts +0 -2
  336. package/dist/better-auth/adapter/test/schema.test.d.ts.map +0 -1
  337. package/dist/better-auth/adapter/test/schema.test.js +0 -796
  338. package/dist/better-auth/adapter/test/test_payload1/schema.d.ts +0 -24
  339. package/dist/better-auth/adapter/test/test_payload1/schema.d.ts.map +0 -1
  340. package/dist/better-auth/adapter/test/test_payload1/schema.js +0 -177
  341. package/dist/better-auth/adapter/test/test_payload2/schema.d.ts +0 -24
  342. package/dist/better-auth/adapter/test/test_payload2/schema.d.ts.map +0 -1
  343. package/dist/better-auth/adapter/test/test_payload2/schema.js +0 -167
  344. package/dist/better-auth/adapter/test/test_payload3/schema.d.ts +0 -24
  345. package/dist/better-auth/adapter/test/test_payload3/schema.d.ts.map +0 -1
  346. package/dist/better-auth/adapter/test/test_payload3/schema.js +0 -198
  347. package/dist/better-auth/plugin/collections/accounts/hooks/sync-password-to-user.d.ts.map +0 -1
  348. package/dist/better-auth/plugin/collections/accounts/hooks/sync-password-to-user.js +0 -47
  349. package/dist/better-auth/plugin/collections/users/endpoints/refresh-token.d.ts +0 -7
  350. package/dist/better-auth/plugin/collections/users/endpoints/refresh-token.d.ts.map +0 -1
  351. package/dist/better-auth/plugin/collections/users/endpoints/refresh-token.js +0 -106
  352. package/dist/better-auth/plugin/collections/users/hooks/after-login.d.ts.map +0 -1
  353. package/dist/better-auth/plugin/collections/users/hooks/after-login.js +0 -71
  354. package/dist/better-auth/plugin/collections/users/hooks/after-logout.d.ts.map +0 -1
  355. package/dist/better-auth/plugin/collections/users/hooks/after-logout.js +0 -49
  356. package/dist/better-auth/plugin/collections/users/hooks/before-login.d.ts.map +0 -1
  357. package/dist/better-auth/plugin/collections/users/hooks/before-login.js +0 -18
  358. package/dist/better-auth/plugin/collections/users/hooks/clean-up-user-after-delete.d.ts +0 -6
  359. package/dist/better-auth/plugin/collections/users/hooks/clean-up-user-after-delete.d.ts.map +0 -1
  360. package/dist/better-auth/plugin/collections/users/hooks/clean-up-user-after-delete.js +0 -33
  361. package/dist/better-auth/plugin/collections/users/hooks/on-verified-change.d.ts +0 -3
  362. package/dist/better-auth/plugin/collections/users/hooks/on-verified-change.d.ts.map +0 -1
  363. package/dist/better-auth/plugin/collections/users/hooks/on-verified-change.js +0 -14
  364. package/dist/better-auth/plugin/collections/users/hooks/sync-account.d.ts.map +0 -1
  365. package/dist/better-auth/plugin/collections/users/hooks/sync-account.js +0 -82
  366. package/dist/better-auth/plugin/lib/auth-strategy.d.ts +0 -9
  367. package/dist/better-auth/plugin/lib/auth-strategy.d.ts.map +0 -1
  368. package/dist/better-auth/plugin/lib/auth-strategy.js +0 -48
  369. package/dist/better-auth/plugin/lib/build-collection-configs.d.ts +0 -12
  370. package/dist/better-auth/plugin/lib/build-collection-configs.d.ts.map +0 -1
  371. package/dist/better-auth/plugin/lib/build-collection-configs.js +0 -1558
  372. package/dist/better-auth/plugin/lib/config.d.ts.map +0 -1
  373. package/dist/better-auth/plugin/lib/config.js +0 -44
  374. package/dist/better-auth/plugin/lib/ensure-password-set-before-create.d.ts.map +0 -1
  375. package/dist/better-auth/plugin/lib/ensure-password-set-before-create.js +0 -24
  376. package/dist/better-auth/plugin/lib/password.d.ts.map +0 -1
  377. package/dist/better-auth/plugin/lib/password.js +0 -63
  378. package/dist/better-auth/plugin/lib/payload-access.d.ts.map +0 -1
  379. package/dist/better-auth/plugin/lib/payload-access.js +0 -64
  380. package/dist/better-auth/plugin/lib/prepare-session-data.d.ts.map +0 -1
  381. package/dist/better-auth/plugin/lib/prepare-session-data.js +0 -42
  382. package/dist/better-auth/plugin/lib/respect-save-to-jwt-fields-middleware.d.ts.map +0 -1
  383. package/dist/better-auth/plugin/lib/respect-save-to-jwt-fields-middleware.js +0 -30
  384. package/dist/better-auth/plugin/lib/sanitize-auth-options.d.ts +0 -6
  385. package/dist/better-auth/plugin/lib/sanitize-auth-options.d.ts.map +0 -1
  386. package/dist/better-auth/plugin/lib/sanitize-auth-options.js +0 -298
  387. package/dist/better-auth/plugin/payload/components/admin-buttons.d.ts +0 -7
  388. package/dist/better-auth/plugin/payload/components/admin-buttons.d.ts.map +0 -1
  389. package/dist/better-auth/plugin/payload/components/admin-buttons.js +0 -219
  390. package/dist/better-auth/plugin/payload/components/login-redirect.d.ts +0 -2
  391. package/dist/better-auth/plugin/payload/components/login-redirect.d.ts.map +0 -1
  392. package/dist/better-auth/plugin/payload/components/login-redirect.js +0 -6
  393. package/dist/better-auth/plugin/payload/components/logout.d.ts +0 -3
  394. package/dist/better-auth/plugin/payload/components/logout.d.ts.map +0 -1
  395. package/dist/better-auth/plugin/payload/components/logout.js +0 -61
  396. package/dist/better-auth/plugin/payload/components/sign-in.d.ts +0 -4
  397. package/dist/better-auth/plugin/payload/components/sign-in.d.ts.map +0 -1
  398. package/dist/better-auth/plugin/payload/components/sign-in.js +0 -384
  399. package/dist/better-auth/plugin/payload/components/sign-up.d.ts +0 -7
  400. package/dist/better-auth/plugin/payload/components/sign-up.d.ts.map +0 -1
  401. package/dist/better-auth/plugin/payload/components/sign-up.js +0 -503
  402. package/dist/better-auth/plugin/payload/components/ui/button.d.ts +0 -11
  403. package/dist/better-auth/plugin/payload/components/ui/button.d.ts.map +0 -1
  404. package/dist/better-auth/plugin/payload/components/ui/button.js +0 -42
  405. package/dist/better-auth/plugin/payload/components/ui/card.d.ts +0 -10
  406. package/dist/better-auth/plugin/payload/components/ui/card.d.ts.map +0 -1
  407. package/dist/better-auth/plugin/payload/components/ui/card.js +0 -55
  408. package/dist/better-auth/plugin/payload/components/ui/checkbox.d.ts +0 -5
  409. package/dist/better-auth/plugin/payload/components/ui/checkbox.d.ts.map +0 -1
  410. package/dist/better-auth/plugin/payload/components/ui/checkbox.js +0 -23
  411. package/dist/better-auth/plugin/payload/components/ui/cn.d.ts +0 -3
  412. package/dist/better-auth/plugin/payload/components/ui/cn.d.ts.map +0 -1
  413. package/dist/better-auth/plugin/payload/components/ui/cn.js +0 -7
  414. package/dist/better-auth/plugin/payload/components/ui/input.d.ts +0 -4
  415. package/dist/better-auth/plugin/payload/components/ui/input.d.ts.map +0 -1
  416. package/dist/better-auth/plugin/payload/components/ui/input.js +0 -14
  417. package/dist/better-auth/plugin/payload/components/ui/label.d.ts +0 -5
  418. package/dist/better-auth/plugin/payload/components/ui/label.d.ts.map +0 -1
  419. package/dist/better-auth/plugin/payload/components/ui/label.js +0 -15
  420. package/dist/better-auth/plugin/payload/components/ui/password-input.d.ts +0 -3
  421. package/dist/better-auth/plugin/payload/components/ui/password-input.d.ts.map +0 -1
  422. package/dist/better-auth/plugin/payload/components/ui/password-input.js +0 -55
  423. /package/dist/better-auth/plugin/lib/{password.d.ts → sanitize-better-auth-options/utils/password.d.ts} +0 -0
@@ -0,0 +1,7 @@
1
+ import type { CollectionBeforeDeleteHook } from "payload";
2
+ export declare const getBeforeDeleteHook: ({ accountsSlug, sessionsSlug, verificationsSlug, }: {
3
+ accountsSlug: string;
4
+ sessionsSlug: string;
5
+ verificationsSlug: string;
6
+ }) => CollectionBeforeDeleteHook;
7
+ //# sourceMappingURL=before-delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"before-delete.d.ts","sourceRoot":"","sources":["../../../../../../../src/better-auth/plugin/lib/build-collections/users/hooks/before-delete.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAE1D,eAAO,MAAM,mBAAmB,GAAI,oDAIjC;IACD,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,KAAG,0BA+CH,CAAC"}
@@ -0,0 +1,45 @@
1
+ export const getBeforeDeleteHook = ({ accountsSlug, sessionsSlug, verificationsSlug })=>{
2
+ const hook = async ({ req, id })=>{
3
+ try {
4
+ const { payload } = req;
5
+ const userId = id;
6
+ // Delete accounts
7
+ await payload.delete({
8
+ collection: accountsSlug,
9
+ where: {
10
+ user: {
11
+ equals: userId
12
+ }
13
+ },
14
+ req
15
+ });
16
+ // Delete sessions
17
+ await payload.delete({
18
+ collection: sessionsSlug,
19
+ where: {
20
+ user: {
21
+ equals: userId
22
+ }
23
+ },
24
+ req
25
+ });
26
+ // Delete any verifications
27
+ await payload.delete({
28
+ collection: verificationsSlug,
29
+ where: {
30
+ value: {
31
+ like: `"${userId}"`
32
+ }
33
+ },
34
+ req
35
+ });
36
+ return;
37
+ } catch (error) {
38
+ console.error("Error in user afterDelete hook:", error);
39
+ return;
40
+ }
41
+ };
42
+ return hook;
43
+ };
44
+
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iZXR0ZXItYXV0aC9wbHVnaW4vbGliL2J1aWxkLWNvbGxlY3Rpb25zL3VzZXJzL2hvb2tzL2JlZm9yZS1kZWxldGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uQmVmb3JlRGVsZXRlSG9vayB9IGZyb20gXCJwYXlsb2FkXCI7XG5cbmV4cG9ydCBjb25zdCBnZXRCZWZvcmVEZWxldGVIb29rID0gKHtcbiAgYWNjb3VudHNTbHVnLFxuICBzZXNzaW9uc1NsdWcsXG4gIHZlcmlmaWNhdGlvbnNTbHVnLFxufToge1xuICBhY2NvdW50c1NsdWc6IHN0cmluZztcbiAgc2Vzc2lvbnNTbHVnOiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbnNTbHVnOiBzdHJpbmc7XG59KTogQ29sbGVjdGlvbkJlZm9yZURlbGV0ZUhvb2sgPT4ge1xuICBjb25zdCBob29rOiBDb2xsZWN0aW9uQmVmb3JlRGVsZXRlSG9vayA9IGFzeW5jICh7IHJlcSwgaWQgfSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IHBheWxvYWQgfSA9IHJlcTtcbiAgICAgIGNvbnN0IHVzZXJJZCA9IGlkO1xuXG4gICAgICAvLyBEZWxldGUgYWNjb3VudHNcbiAgICAgIGF3YWl0IHBheWxvYWQuZGVsZXRlKHtcbiAgICAgICAgY29sbGVjdGlvbjogYWNjb3VudHNTbHVnLFxuICAgICAgICB3aGVyZToge1xuICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgIGVxdWFsczogdXNlcklkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHJlcSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBEZWxldGUgc2Vzc2lvbnNcbiAgICAgIGF3YWl0IHBheWxvYWQuZGVsZXRlKHtcbiAgICAgICAgY29sbGVjdGlvbjogc2Vzc2lvbnNTbHVnLFxuICAgICAgICB3aGVyZToge1xuICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgIGVxdWFsczogdXNlcklkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHJlcSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBEZWxldGUgYW55IHZlcmlmaWNhdGlvbnNcbiAgICAgIGF3YWl0IHBheWxvYWQuZGVsZXRlKHtcbiAgICAgICAgY29sbGVjdGlvbjogdmVyaWZpY2F0aW9uc1NsdWcsXG4gICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIGxpa2U6IGBcIiR7dXNlcklkfVwiYCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICByZXEsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgaW4gdXNlciBhZnRlckRlbGV0ZSBob29rOlwiLCBlcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBob29rO1xufTtcbiJdLCJuYW1lcyI6WyJnZXRCZWZvcmVEZWxldGVIb29rIiwiYWNjb3VudHNTbHVnIiwic2Vzc2lvbnNTbHVnIiwidmVyaWZpY2F0aW9uc1NsdWciLCJob29rIiwicmVxIiwiaWQiLCJwYXlsb2FkIiwidXNlcklkIiwiZGVsZXRlIiwiY29sbGVjdGlvbiIsIndoZXJlIiwidXNlciIsImVxdWFscyIsInZhbHVlIiwibGlrZSIsImVycm9yIiwiY29uc29sZSJdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxNQUFNQSxzQkFBc0IsQ0FBQyxFQUNsQ0MsWUFBWSxFQUNaQyxZQUFZLEVBQ1pDLGlCQUFpQixFQUtsQjtJQUNDLE1BQU1DLE9BQW1DLE9BQU8sRUFBRUMsR0FBRyxFQUFFQyxFQUFFLEVBQUU7UUFDekQsSUFBSTtZQUNGLE1BQU0sRUFBRUMsT0FBTyxFQUFFLEdBQUdGO1lBQ3BCLE1BQU1HLFNBQVNGO1lBRWYsa0JBQWtCO1lBQ2xCLE1BQU1DLFFBQVFFLE1BQU0sQ0FBQztnQkFDbkJDLFlBQVlUO2dCQUNaVSxPQUFPO29CQUNMQyxNQUFNO3dCQUNKQyxRQUFRTDtvQkFDVjtnQkFDRjtnQkFDQUg7WUFDRjtZQUVBLGtCQUFrQjtZQUNsQixNQUFNRSxRQUFRRSxNQUFNLENBQUM7Z0JBQ25CQyxZQUFZUjtnQkFDWlMsT0FBTztvQkFDTEMsTUFBTTt3QkFDSkMsUUFBUUw7b0JBQ1Y7Z0JBQ0Y7Z0JBQ0FIO1lBQ0Y7WUFFQSwyQkFBMkI7WUFDM0IsTUFBTUUsUUFBUUUsTUFBTSxDQUFDO2dCQUNuQkMsWUFBWVA7Z0JBQ1pRLE9BQU87b0JBQ0xHLE9BQU87d0JBQ0xDLE1BQU0sQ0FBQyxDQUFDLEVBQUVQLE9BQU8sQ0FBQyxDQUFDO29CQUNyQjtnQkFDRjtnQkFDQUg7WUFDRjtZQUVBO1FBQ0YsRUFBRSxPQUFPVyxPQUFPO1lBQ2RDLFFBQVFELEtBQUssQ0FBQyxtQ0FBbUNBO1lBQ2pEO1FBQ0Y7SUFDRjtJQUVBLE9BQU9aO0FBQ1QsRUFBRSJ9
@@ -1,4 +1,4 @@
1
- import { CollectionBeforeLoginHook } from 'payload';
1
+ import { CollectionBeforeLoginHook } from "payload";
2
2
  /**
3
3
  * This hook blocks login attempts if email verification is required and the user's email is not verified
4
4
  */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"before-login.d.ts","sourceRoot":"","sources":["../../../../../../../src/better-auth/plugin/lib/build-collections/users/hooks/before-login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAG9D;;GAEG;AACH,eAAO,MAAM,kBAAkB,QAAO,yBAoBrC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { APIError } from "payload";
2
+ import { getPayloadAuth } from "../../../../lib/get-payload-auth";
3
+ /**
4
+ * This hook blocks login attempts if email verification is required and the user's email is not verified
5
+ */ export const getBeforeLoginHook = ()=>{
6
+ const hook = async ({ req, user })=>{
7
+ const config = req.payload.config;
8
+ const payload = await getPayloadAuth(config);
9
+ const requireEmailVerification = payload.betterAuth.options.emailAndPassword?.requireEmailVerification ?? false;
10
+ if (requireEmailVerification && !user.emailVerified) {
11
+ throw new APIError("Email verification required. Please verify your email before logging in.", 403);
12
+ }
13
+ return user;
14
+ };
15
+ return hook;
16
+ };
17
+
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iZXR0ZXItYXV0aC9wbHVnaW4vbGliL2J1aWxkLWNvbGxlY3Rpb25zL3VzZXJzL2hvb2tzL2JlZm9yZS1sb2dpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBUElFcnJvciwgQ29sbGVjdGlvbkJlZm9yZUxvZ2luSG9vayB9IGZyb20gXCJwYXlsb2FkXCI7XG5pbXBvcnQgeyBnZXRQYXlsb2FkQXV0aCB9IGZyb20gXCIuLi8uLi8uLi8uLi9saWIvZ2V0LXBheWxvYWQtYXV0aFwiO1xuXG4vKipcbiAqIFRoaXMgaG9vayBibG9ja3MgbG9naW4gYXR0ZW1wdHMgaWYgZW1haWwgdmVyaWZpY2F0aW9uIGlzIHJlcXVpcmVkIGFuZCB0aGUgdXNlcidzIGVtYWlsIGlzIG5vdCB2ZXJpZmllZFxuICovXG5leHBvcnQgY29uc3QgZ2V0QmVmb3JlTG9naW5Ib29rID0gKCk6IENvbGxlY3Rpb25CZWZvcmVMb2dpbkhvb2sgPT4ge1xuICBjb25zdCBob29rOiBDb2xsZWN0aW9uQmVmb3JlTG9naW5Ib29rID0gYXN5bmMgKHsgcmVxLCB1c2VyIH0pID0+IHtcbiAgICBjb25zdCBjb25maWcgPSByZXEucGF5bG9hZC5jb25maWc7XG4gICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IGdldFBheWxvYWRBdXRoKGNvbmZpZyk7XG5cbiAgICBjb25zdCByZXF1aXJlRW1haWxWZXJpZmljYXRpb24gPVxuICAgICAgcGF5bG9hZC5iZXR0ZXJBdXRoLm9wdGlvbnMuZW1haWxBbmRQYXNzd29yZD8ucmVxdWlyZUVtYWlsVmVyaWZpY2F0aW9uID8/XG4gICAgICBmYWxzZTtcblxuICAgIGlmIChyZXF1aXJlRW1haWxWZXJpZmljYXRpb24gJiYgIXVzZXIuZW1haWxWZXJpZmllZCkge1xuICAgICAgdGhyb3cgbmV3IEFQSUVycm9yKFxuICAgICAgICBcIkVtYWlsIHZlcmlmaWNhdGlvbiByZXF1aXJlZC4gUGxlYXNlIHZlcmlmeSB5b3VyIGVtYWlsIGJlZm9yZSBsb2dnaW5nIGluLlwiLFxuICAgICAgICA0MDNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXI7XG4gIH07XG5cbiAgcmV0dXJuIGhvb2s7XG59O1xuIl0sIm5hbWVzIjpbIkFQSUVycm9yIiwiZ2V0UGF5bG9hZEF1dGgiLCJnZXRCZWZvcmVMb2dpbkhvb2siLCJob29rIiwicmVxIiwidXNlciIsImNvbmZpZyIsInBheWxvYWQiLCJyZXF1aXJlRW1haWxWZXJpZmljYXRpb24iLCJiZXR0ZXJBdXRoIiwib3B0aW9ucyIsImVtYWlsQW5kUGFzc3dvcmQiLCJlbWFpbFZlcmlmaWVkIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxRQUFRLFFBQW1DLFVBQVU7QUFDOUQsU0FBU0MsY0FBYyxRQUFRLG1DQUFtQztBQUVsRTs7Q0FFQyxHQUNELE9BQU8sTUFBTUMscUJBQXFCO0lBQ2hDLE1BQU1DLE9BQWtDLE9BQU8sRUFBRUMsR0FBRyxFQUFFQyxJQUFJLEVBQUU7UUFDMUQsTUFBTUMsU0FBU0YsSUFBSUcsT0FBTyxDQUFDRCxNQUFNO1FBQ2pDLE1BQU1DLFVBQVUsTUFBTU4sZUFBZUs7UUFFckMsTUFBTUUsMkJBQ0pELFFBQVFFLFVBQVUsQ0FBQ0MsT0FBTyxDQUFDQyxnQkFBZ0IsRUFBRUgsNEJBQzdDO1FBRUYsSUFBSUEsNEJBQTRCLENBQUNILEtBQUtPLGFBQWEsRUFBRTtZQUNuRCxNQUFNLElBQUlaLFNBQ1IsNEVBQ0E7UUFFSjtRQUVBLE9BQU9LO0lBQ1Q7SUFFQSxPQUFPRjtBQUNULEVBQUUifQ==
@@ -0,0 +1,3 @@
1
+ import { CollectionBeforeChangeHook } from "payload";
2
+ export declare const onVerifiedChange: CollectionBeforeChangeHook;
3
+ //# sourceMappingURL=on-verified-change.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"on-verified-change.d.ts","sourceRoot":"","sources":["../../../../../../../src/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAErD,eAAO,MAAM,gBAAgB,EAAE,0BAkB9B,CAAC"}
@@ -0,0 +1,14 @@
1
+ export const onVerifiedChange = async ({ data, originalDoc })=>{
2
+ const isVerifiedChangingToTrue = Boolean(data._verified) && !Boolean(originalDoc?._verified);
3
+ const isEmailVerifiedChangingToTrue = Boolean(data.emailVerified) && !Boolean(originalDoc?.emailVerified);
4
+ if (!isVerifiedChangingToTrue && !isEmailVerifiedChangingToTrue) {
5
+ return data;
6
+ }
7
+ return {
8
+ ...data,
9
+ _verified: true,
10
+ emailVerified: true
11
+ };
12
+ };
13
+
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iZXR0ZXItYXV0aC9wbHVnaW4vbGliL2J1aWxkLWNvbGxlY3Rpb25zL3VzZXJzL2hvb2tzL29uLXZlcmlmaWVkLWNoYW5nZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xsZWN0aW9uQmVmb3JlQ2hhbmdlSG9vayB9IGZyb20gXCJwYXlsb2FkXCI7XG5cbmV4cG9ydCBjb25zdCBvblZlcmlmaWVkQ2hhbmdlOiBDb2xsZWN0aW9uQmVmb3JlQ2hhbmdlSG9vayA9IGFzeW5jICh7XG4gIGRhdGEsXG4gIG9yaWdpbmFsRG9jLFxufSkgPT4ge1xuICBjb25zdCBpc1ZlcmlmaWVkQ2hhbmdpbmdUb1RydWUgPVxuICAgIEJvb2xlYW4oZGF0YS5fdmVyaWZpZWQpICYmICFCb29sZWFuKG9yaWdpbmFsRG9jPy5fdmVyaWZpZWQpO1xuICBjb25zdCBpc0VtYWlsVmVyaWZpZWRDaGFuZ2luZ1RvVHJ1ZSA9XG4gICAgQm9vbGVhbihkYXRhLmVtYWlsVmVyaWZpZWQpICYmICFCb29sZWFuKG9yaWdpbmFsRG9jPy5lbWFpbFZlcmlmaWVkKTtcblxuICBpZiAoIWlzVmVyaWZpZWRDaGFuZ2luZ1RvVHJ1ZSAmJiAhaXNFbWFpbFZlcmlmaWVkQ2hhbmdpbmdUb1RydWUpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uZGF0YSxcbiAgICBfdmVyaWZpZWQ6IHRydWUsXG4gICAgZW1haWxWZXJpZmllZDogdHJ1ZSxcbiAgfTtcbn07XG4iXSwibmFtZXMiOlsib25WZXJpZmllZENoYW5nZSIsImRhdGEiLCJvcmlnaW5hbERvYyIsImlzVmVyaWZpZWRDaGFuZ2luZ1RvVHJ1ZSIsIkJvb2xlYW4iLCJfdmVyaWZpZWQiLCJpc0VtYWlsVmVyaWZpZWRDaGFuZ2luZ1RvVHJ1ZSIsImVtYWlsVmVyaWZpZWQiXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sTUFBTUEsbUJBQStDLE9BQU8sRUFDakVDLElBQUksRUFDSkMsV0FBVyxFQUNaO0lBQ0MsTUFBTUMsMkJBQ0pDLFFBQVFILEtBQUtJLFNBQVMsS0FBSyxDQUFDRCxRQUFRRixhQUFhRztJQUNuRCxNQUFNQyxnQ0FDSkYsUUFBUUgsS0FBS00sYUFBYSxLQUFLLENBQUNILFFBQVFGLGFBQWFLO0lBRXZELElBQUksQ0FBQ0osNEJBQTRCLENBQUNHLCtCQUErQjtRQUMvRCxPQUFPTDtJQUNUO0lBRUEsT0FBTztRQUNMLEdBQUdBLElBQUk7UUFDUEksV0FBVztRQUNYRSxlQUFlO0lBQ2pCO0FBQ0YsRUFBRSJ9
@@ -1,4 +1,4 @@
1
- import type { CollectionAfterChangeHook } from 'payload';
1
+ import type { CollectionAfterChangeHook } from "payload";
2
2
  type SyncAccountOptions = {
3
3
  userSlug: string;
4
4
  accountSlug: string;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-account.d.ts","sourceRoot":"","sources":["../../../../../../../src/better-auth/plugin/lib/build-collections/users/hooks/sync-account.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAOzD,KAAK,kBAAkB,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,SAAS,kBAAkB,KAC1B,yBA+EF,CAAC"}
@@ -0,0 +1,82 @@
1
+ import { BETTER_AUTH_CONTEXT_KEY } from "../../../../../adapter";
2
+ export const getSyncAccountHook = (options)=>{
3
+ const hook = async ({ doc, req, operation, context })=>{
4
+ if (context?.syncPasswordToUser) return doc;
5
+ if (operation !== "create" && operation !== "update") return doc;
6
+ const user = await req.payload.findByID({
7
+ collection: options.userSlug,
8
+ id: doc.id,
9
+ depth: 0,
10
+ req,
11
+ showHiddenFields: true
12
+ });
13
+ if (!user || !user.hash || !user.salt) return doc;
14
+ const passwordValue = `${user.salt}:${user.hash}`;
15
+ const userField = req.payload.betterAuth.options.account?.fields?.userId || "userId";
16
+ if (operation === "create" && !(BETTER_AUTH_CONTEXT_KEY in context)) {
17
+ try {
18
+ await req.payload.create({
19
+ collection: options.accountSlug,
20
+ data: {
21
+ [userField]: doc.id,
22
+ accountId: doc.id.toString(),
23
+ providerId: "credential",
24
+ password: passwordValue,
25
+ context: {
26
+ syncAccountHook: true
27
+ }
28
+ },
29
+ req
30
+ });
31
+ } catch (error) {
32
+ console.error("Failed to create account for user:", error);
33
+ }
34
+ }
35
+ if (operation === "update") {
36
+ try {
37
+ const accounts = await req.payload.find({
38
+ collection: options.accountSlug,
39
+ where: {
40
+ and: [
41
+ {
42
+ [userField]: {
43
+ equals: doc.id
44
+ }
45
+ },
46
+ {
47
+ providerId: {
48
+ equals: "credential"
49
+ }
50
+ }
51
+ ]
52
+ },
53
+ req,
54
+ depth: 0,
55
+ context: {
56
+ syncAccountHook: true
57
+ }
58
+ });
59
+ const account = accounts.docs.at(0);
60
+ if (account) {
61
+ await req.payload.update({
62
+ collection: options.accountSlug,
63
+ id: account.id,
64
+ data: {
65
+ password: passwordValue
66
+ },
67
+ req,
68
+ context: {
69
+ syncAccountHook: true
70
+ }
71
+ });
72
+ }
73
+ } catch (error) {
74
+ console.error("Failed to sync hash/salt to account:", error);
75
+ }
76
+ }
77
+ return doc;
78
+ };
79
+ return hook;
80
+ };
81
+
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iZXR0ZXItYXV0aC9wbHVnaW4vbGliL2J1aWxkLWNvbGxlY3Rpb25zL3VzZXJzL2hvb2tzL3N5bmMtYWNjb3VudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbGxlY3Rpb25BZnRlckNoYW5nZUhvb2sgfSBmcm9tIFwicGF5bG9hZFwiO1xuaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uSG9va1dpdGhCZXR0ZXJBdXRoIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBCRVRURVJfQVVUSF9DT05URVhUX0tFWSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hZGFwdGVyXCI7XG5cbnR5cGUgQ29sbGVjdGlvbkFmdGVyQ2hhbmdlSG9va1dpdGhCZXR0ZXJBdXRoID1cbiAgQ29sbGVjdGlvbkhvb2tXaXRoQmV0dGVyQXV0aDxDb2xsZWN0aW9uQWZ0ZXJDaGFuZ2VIb29rPjtcblxudHlwZSBTeW5jQWNjb3VudE9wdGlvbnMgPSB7XG4gIHVzZXJTbHVnOiBzdHJpbmc7XG4gIGFjY291bnRTbHVnOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3luY0FjY291bnRIb29rID0gKFxuICBvcHRpb25zOiBTeW5jQWNjb3VudE9wdGlvbnNcbik6IENvbGxlY3Rpb25BZnRlckNoYW5nZUhvb2sgPT4ge1xuICBjb25zdCBob29rOiBDb2xsZWN0aW9uQWZ0ZXJDaGFuZ2VIb29rV2l0aEJldHRlckF1dGggPSBhc3luYyAoe1xuICAgIGRvYyxcbiAgICByZXEsXG4gICAgb3BlcmF0aW9uLFxuICAgIGNvbnRleHQsXG4gIH0pID0+IHtcbiAgICBpZiAoY29udGV4dD8uc3luY1Bhc3N3b3JkVG9Vc2VyKSByZXR1cm4gZG9jO1xuXG4gICAgaWYgKG9wZXJhdGlvbiAhPT0gXCJjcmVhdGVcIiAmJiBvcGVyYXRpb24gIT09IFwidXBkYXRlXCIpIHJldHVybiBkb2M7XG5cbiAgICBjb25zdCB1c2VyID0gYXdhaXQgcmVxLnBheWxvYWQuZmluZEJ5SUQoe1xuICAgICAgY29sbGVjdGlvbjogb3B0aW9ucy51c2VyU2x1ZyxcbiAgICAgIGlkOiBkb2MuaWQsXG4gICAgICBkZXB0aDogMCxcbiAgICAgIHJlcSxcbiAgICAgIHNob3dIaWRkZW5GaWVsZHM6IHRydWUsXG4gICAgfSk7XG5cbiAgICBpZiAoIXVzZXIgfHwgIXVzZXIuaGFzaCB8fCAhdXNlci5zYWx0KSByZXR1cm4gZG9jO1xuXG4gICAgY29uc3QgcGFzc3dvcmRWYWx1ZSA9IGAke3VzZXIuc2FsdH06JHt1c2VyLmhhc2h9YDtcbiAgICBjb25zdCB1c2VyRmllbGQgPVxuICAgICAgcmVxLnBheWxvYWQuYmV0dGVyQXV0aC5vcHRpb25zLmFjY291bnQ/LmZpZWxkcz8udXNlcklkIHx8IFwidXNlcklkXCI7XG5cbiAgICBpZiAob3BlcmF0aW9uID09PSBcImNyZWF0ZVwiICYmICEoQkVUVEVSX0FVVEhfQ09OVEVYVF9LRVkgaW4gY29udGV4dCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHJlcS5wYXlsb2FkLmNyZWF0ZSh7XG4gICAgICAgICAgY29sbGVjdGlvbjogb3B0aW9ucy5hY2NvdW50U2x1ZyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBbdXNlckZpZWxkXTogZG9jLmlkLFxuICAgICAgICAgICAgYWNjb3VudElkOiBkb2MuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHByb3ZpZGVySWQ6IFwiY3JlZGVudGlhbFwiLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkVmFsdWUsXG4gICAgICAgICAgICBjb250ZXh0OiB7IHN5bmNBY2NvdW50SG9vazogdHJ1ZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxLFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIGFjY291bnQgZm9yIHVzZXI6XCIsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3BlcmF0aW9uID09PSBcInVwZGF0ZVwiKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBhY2NvdW50cyA9IGF3YWl0IHJlcS5wYXlsb2FkLmZpbmQoe1xuICAgICAgICAgIGNvbGxlY3Rpb246IG9wdGlvbnMuYWNjb3VudFNsdWcsXG4gICAgICAgICAgd2hlcmU6IHtcbiAgICAgICAgICAgIGFuZDogW1xuICAgICAgICAgICAgICB7IFt1c2VyRmllbGRdOiB7IGVxdWFsczogZG9jLmlkIH0gfSxcbiAgICAgICAgICAgICAgeyBwcm92aWRlcklkOiB7IGVxdWFsczogXCJjcmVkZW50aWFsXCIgfSB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcSxcbiAgICAgICAgICBkZXB0aDogMCxcbiAgICAgICAgICBjb250ZXh0OiB7IHN5bmNBY2NvdW50SG9vazogdHJ1ZSB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBhY2NvdW50ID0gYWNjb3VudHMuZG9jcy5hdCgwKTtcbiAgICAgICAgaWYgKGFjY291bnQpIHtcbiAgICAgICAgICBhd2FpdCByZXEucGF5bG9hZC51cGRhdGUoe1xuICAgICAgICAgICAgY29sbGVjdGlvbjogb3B0aW9ucy5hY2NvdW50U2x1ZyxcbiAgICAgICAgICAgIGlkOiBhY2NvdW50LmlkLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICBwYXNzd29yZDogcGFzc3dvcmRWYWx1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXEsXG4gICAgICAgICAgICBjb250ZXh0OiB7IHN5bmNBY2NvdW50SG9vazogdHJ1ZSB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIHN5bmMgaGFzaC9zYWx0IHRvIGFjY291bnQ6XCIsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZG9jO1xuICB9O1xuXG4gIHJldHVybiBob29rIGFzIENvbGxlY3Rpb25BZnRlckNoYW5nZUhvb2s7XG59O1xuIl0sIm5hbWVzIjpbIkJFVFRFUl9BVVRIX0NPTlRFWFRfS0VZIiwiZ2V0U3luY0FjY291bnRIb29rIiwib3B0aW9ucyIsImhvb2siLCJkb2MiLCJyZXEiLCJvcGVyYXRpb24iLCJjb250ZXh0Iiwic3luY1Bhc3N3b3JkVG9Vc2VyIiwidXNlciIsInBheWxvYWQiLCJmaW5kQnlJRCIsImNvbGxlY3Rpb24iLCJ1c2VyU2x1ZyIsImlkIiwiZGVwdGgiLCJzaG93SGlkZGVuRmllbGRzIiwiaGFzaCIsInNhbHQiLCJwYXNzd29yZFZhbHVlIiwidXNlckZpZWxkIiwiYmV0dGVyQXV0aCIsImFjY291bnQiLCJmaWVsZHMiLCJ1c2VySWQiLCJjcmVhdGUiLCJhY2NvdW50U2x1ZyIsImRhdGEiLCJhY2NvdW50SWQiLCJ0b1N0cmluZyIsInByb3ZpZGVySWQiLCJwYXNzd29yZCIsInN5bmNBY2NvdW50SG9vayIsImVycm9yIiwiY29uc29sZSIsImFjY291bnRzIiwiZmluZCIsIndoZXJlIiwiYW5kIiwiZXF1YWxzIiwiZG9jcyIsImF0IiwidXBkYXRlIl0sIm1hcHBpbmdzIjoiQUFFQSxTQUFTQSx1QkFBdUIsUUFBUSx5QkFBeUI7QUFVakUsT0FBTyxNQUFNQyxxQkFBcUIsQ0FDaENDO0lBRUEsTUFBTUMsT0FBZ0QsT0FBTyxFQUMzREMsR0FBRyxFQUNIQyxHQUFHLEVBQ0hDLFNBQVMsRUFDVEMsT0FBTyxFQUNSO1FBQ0MsSUFBSUEsU0FBU0Msb0JBQW9CLE9BQU9KO1FBRXhDLElBQUlFLGNBQWMsWUFBWUEsY0FBYyxVQUFVLE9BQU9GO1FBRTdELE1BQU1LLE9BQU8sTUFBTUosSUFBSUssT0FBTyxDQUFDQyxRQUFRLENBQUM7WUFDdENDLFlBQVlWLFFBQVFXLFFBQVE7WUFDNUJDLElBQUlWLElBQUlVLEVBQUU7WUFDVkMsT0FBTztZQUNQVjtZQUNBVyxrQkFBa0I7UUFDcEI7UUFFQSxJQUFJLENBQUNQLFFBQVEsQ0FBQ0EsS0FBS1EsSUFBSSxJQUFJLENBQUNSLEtBQUtTLElBQUksRUFBRSxPQUFPZDtRQUU5QyxNQUFNZSxnQkFBZ0IsR0FBR1YsS0FBS1MsSUFBSSxDQUFDLENBQUMsRUFBRVQsS0FBS1EsSUFBSSxFQUFFO1FBQ2pELE1BQU1HLFlBQ0pmLElBQUlLLE9BQU8sQ0FBQ1csVUFBVSxDQUFDbkIsT0FBTyxDQUFDb0IsT0FBTyxFQUFFQyxRQUFRQyxVQUFVO1FBRTVELElBQUlsQixjQUFjLFlBQVksQ0FBRU4sQ0FBQUEsMkJBQTJCTyxPQUFNLEdBQUk7WUFDbkUsSUFBSTtnQkFDRixNQUFNRixJQUFJSyxPQUFPLENBQUNlLE1BQU0sQ0FBQztvQkFDdkJiLFlBQVlWLFFBQVF3QixXQUFXO29CQUMvQkMsTUFBTTt3QkFDSixDQUFDUCxVQUFVLEVBQUVoQixJQUFJVSxFQUFFO3dCQUNuQmMsV0FBV3hCLElBQUlVLEVBQUUsQ0FBQ2UsUUFBUTt3QkFDMUJDLFlBQVk7d0JBQ1pDLFVBQVVaO3dCQUNWWixTQUFTOzRCQUFFeUIsaUJBQWlCO3dCQUFLO29CQUNuQztvQkFDQTNCO2dCQUNGO1lBQ0YsRUFBRSxPQUFPNEIsT0FBTztnQkFDZEMsUUFBUUQsS0FBSyxDQUFDLHNDQUFzQ0E7WUFDdEQ7UUFDRjtRQUVBLElBQUkzQixjQUFjLFVBQVU7WUFDMUIsSUFBSTtnQkFDRixNQUFNNkIsV0FBVyxNQUFNOUIsSUFBSUssT0FBTyxDQUFDMEIsSUFBSSxDQUFDO29CQUN0Q3hCLFlBQVlWLFFBQVF3QixXQUFXO29CQUMvQlcsT0FBTzt3QkFDTEMsS0FBSzs0QkFDSDtnQ0FBRSxDQUFDbEIsVUFBVSxFQUFFO29DQUFFbUIsUUFBUW5DLElBQUlVLEVBQUU7Z0NBQUM7NEJBQUU7NEJBQ2xDO2dDQUFFZ0IsWUFBWTtvQ0FBRVMsUUFBUTtnQ0FBYTs0QkFBRTt5QkFDeEM7b0JBQ0g7b0JBQ0FsQztvQkFDQVUsT0FBTztvQkFDUFIsU0FBUzt3QkFBRXlCLGlCQUFpQjtvQkFBSztnQkFDbkM7Z0JBRUEsTUFBTVYsVUFBVWEsU0FBU0ssSUFBSSxDQUFDQyxFQUFFLENBQUM7Z0JBQ2pDLElBQUluQixTQUFTO29CQUNYLE1BQU1qQixJQUFJSyxPQUFPLENBQUNnQyxNQUFNLENBQUM7d0JBQ3ZCOUIsWUFBWVYsUUFBUXdCLFdBQVc7d0JBQy9CWixJQUFJUSxRQUFRUixFQUFFO3dCQUNkYSxNQUFNOzRCQUNKSSxVQUFVWjt3QkFDWjt3QkFDQWQ7d0JBQ0FFLFNBQVM7NEJBQUV5QixpQkFBaUI7d0JBQUs7b0JBQ25DO2dCQUNGO1lBQ0YsRUFBRSxPQUFPQyxPQUFPO2dCQUNkQyxRQUFRRCxLQUFLLENBQUMsd0NBQXdDQTtZQUN4RDtRQUNGO1FBRUEsT0FBTzdCO0lBQ1Q7SUFFQSxPQUFPRDtBQUNULEVBQUUifQ==
@@ -0,0 +1,8 @@
1
+ import { CollectionConfig } from "payload";
2
+ import type { BetterAuthPluginOptions, SanitizedBetterAuthOptions } from "../../../types";
3
+ export declare function buildUsersCollection({ incomingCollections, pluginOptions, betterAuthOptions, }: {
4
+ incomingCollections: CollectionConfig[];
5
+ pluginOptions: BetterAuthPluginOptions;
6
+ betterAuthOptions: SanitizedBetterAuthOptions;
7
+ }): CollectionConfig;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/better-auth/plugin/lib/build-collections/users/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EACV,uBAAuB,EACvB,0BAA0B,EAC3B,MAAM,gBAAgB,CAAC;AA0BxB,wBAAgB,oBAAoB,CAAC,EACnC,mBAAmB,EACnB,aAAa,EACb,iBAAiB,GAClB,EAAE;IACD,mBAAmB,EAAE,gBAAgB,EAAE,CAAC;IACxC,aAAa,EAAE,uBAAuB,CAAC;IACvC,iBAAiB,EAAE,0BAA0B,CAAC;CAC/C,oBA2VA"}
@@ -0,0 +1,345 @@
1
+ import { baseCollectionSlugs } from "../../constants";
2
+ import { isAdminOrCurrentUserUpdateWithAllowedFields, isAdminOrCurrentUserWithRoles, isAdminWithRoles } from "../utils/payload-access";
3
+ import { getRefreshTokenEndpoint } from "./endpoints/refresh-token";
4
+ import { onVerifiedChange } from "./hooks/on-verified-change";
5
+ import { getSyncAccountHook } from "./hooks/sync-account";
6
+ import { getBeforeLoginHook } from "./hooks/before-login";
7
+ import { getAfterLoginHook } from "./hooks/after-login";
8
+ import { getAfterLogoutHook } from "./hooks/after-logout";
9
+ import { getBeforeDeleteHook } from "./hooks/before-delete";
10
+ import { betterAuthStrategy } from "./better-auth-strategy";
11
+ import { getTimestampFields } from "../utils/get-timestamp-fields";
12
+ import { getLoginEndpoint } from "./endpoints/login";
13
+ import { getAllRoleOptions } from "../../../helpers/get-all-roles";
14
+ import { getForgotPasswordEndpoint } from "./endpoints/forgot-password";
15
+ import { getSignupEndpoint } from "./endpoints/signup";
16
+ import { getSetAdminRoleEndpoint } from "./endpoints/set-admin-role";
17
+ import { getResetPasswordEndpoint } from "./endpoints/reset-password";
18
+ import { getGenerateInviteUrlEndpoint } from "./endpoints/generate-invite-url";
19
+ import { getSendInviteUrlEndpoint } from "./endpoints/send-invite-url";
20
+ import { checkUsernamePlugin } from "../../../helpers/check-username-plugin";
21
+ export function buildUsersCollection({ incomingCollections, pluginOptions, betterAuthOptions }) {
22
+ const userSlug = pluginOptions.users?.slug ?? baseCollectionSlugs.users;
23
+ const accountSlug = pluginOptions.accounts?.slug ?? baseCollectionSlugs.accounts;
24
+ const sessionSlug = pluginOptions.sessions?.slug ?? baseCollectionSlugs.sessions;
25
+ const verificationsSlug = pluginOptions.verifications?.slug ?? baseCollectionSlugs.verifications;
26
+ const baPlugins = betterAuthOptions.plugins ?? null;
27
+ const adminRoles = pluginOptions.users?.adminRoles ?? [
28
+ "admin"
29
+ ];
30
+ const allRoleOptions = getAllRoleOptions(pluginOptions);
31
+ const hasUsernamePlugin = checkUsernamePlugin(betterAuthOptions);
32
+ const existingUserCollection = incomingCollections.find((collection)=>collection.slug === userSlug);
33
+ const allowedFields = pluginOptions.users?.allowedFields ?? [
34
+ "name"
35
+ ];
36
+ const baseUrl = betterAuthOptions.baseURL ?? process.env.NEXT_PUBLIC_URL ?? "http://localhost:3000";
37
+ let usersCollection = {
38
+ ...existingUserCollection,
39
+ slug: userSlug,
40
+ admin: {
41
+ defaultColumns: [
42
+ "email"
43
+ ],
44
+ useAsTitle: "email",
45
+ group: pluginOptions?.collectionAdminGroup ?? "Auth",
46
+ ...existingUserCollection?.admin,
47
+ hidden: pluginOptions.users?.hidden ?? false,
48
+ components: {
49
+ Description: {
50
+ path: "payload-auth/better-auth/plugin/client#AdminInviteButton",
51
+ clientProps: {
52
+ roles: allRoleOptions
53
+ }
54
+ },
55
+ views: {
56
+ edit: {
57
+ adminButtons: {
58
+ tab: {
59
+ Component: {
60
+ path: "payload-auth/better-auth/plugin/client#AdminButtons",
61
+ clientProps: {
62
+ userSlug
63
+ }
64
+ },
65
+ condition: ()=>{
66
+ // Only show the impersonate button if the admin plugin is enabled
67
+ return (baPlugins && baPlugins.some((plugin)=>plugin.id === "admin")) ?? false;
68
+ }
69
+ }
70
+ }
71
+ }
72
+ }
73
+ }
74
+ },
75
+ access: {
76
+ admin: ({ req })=>adminRoles.includes(req.user?.role ?? "user"),
77
+ read: isAdminOrCurrentUserWithRoles({
78
+ adminRoles,
79
+ idField: "id"
80
+ }),
81
+ create: isAdminWithRoles({
82
+ adminRoles
83
+ }),
84
+ delete: isAdminOrCurrentUserWithRoles({
85
+ adminRoles,
86
+ idField: "id"
87
+ }),
88
+ update: isAdminOrCurrentUserUpdateWithAllowedFields({
89
+ allowedFields,
90
+ adminRoles,
91
+ userSlug
92
+ }),
93
+ ...existingUserCollection?.access ?? {}
94
+ },
95
+ endpoints: [
96
+ ...existingUserCollection?.endpoints ? existingUserCollection.endpoints : [],
97
+ ...pluginOptions.disableDefaultPayloadAuth ? [
98
+ getLoginEndpoint(betterAuthOptions)
99
+ ] : [],
100
+ getSetAdminRoleEndpoint(pluginOptions, pluginOptions.users?.slug ?? "users"),
101
+ getGenerateInviteUrlEndpoint({
102
+ roles: allRoleOptions,
103
+ baseUrl,
104
+ pluginOptions
105
+ }),
106
+ getSendInviteUrlEndpoint(),
107
+ getSignupEndpoint(pluginOptions, betterAuthOptions),
108
+ getRefreshTokenEndpoint(userSlug),
109
+ getForgotPasswordEndpoint(),
110
+ getResetPasswordEndpoint()
111
+ ],
112
+ hooks: {
113
+ beforeChange: [
114
+ ...existingUserCollection?.hooks?.beforeChange ?? [],
115
+ ...pluginOptions.disableDefaultPayloadAuth ? [] : [
116
+ onVerifiedChange
117
+ ]
118
+ ],
119
+ afterChange: [
120
+ ...existingUserCollection?.hooks?.afterChange ?? [],
121
+ ...pluginOptions.disableDefaultPayloadAuth ? [] : [
122
+ getSyncAccountHook({
123
+ userSlug,
124
+ accountSlug
125
+ })
126
+ ]
127
+ ],
128
+ beforeLogin: [
129
+ ...existingUserCollection?.hooks?.beforeLogin ?? [],
130
+ ...pluginOptions.disableDefaultPayloadAuth ? [] : [
131
+ getBeforeLoginHook()
132
+ ]
133
+ ],
134
+ afterLogin: [
135
+ ...existingUserCollection?.hooks?.afterLogin ?? [],
136
+ ...pluginOptions.disableDefaultPayloadAuth ? [] : [
137
+ getAfterLoginHook({
138
+ sessionsCollectionSlug: sessionSlug,
139
+ usersCollectionSlug: userSlug
140
+ })
141
+ ]
142
+ ],
143
+ afterLogout: [
144
+ ...existingUserCollection?.hooks?.afterLogout ?? [],
145
+ getAfterLogoutHook({
146
+ sessionsCollectionSlug: sessionSlug
147
+ })
148
+ ],
149
+ beforeDelete: [
150
+ ...existingUserCollection?.hooks?.beforeDelete ?? [],
151
+ getBeforeDeleteHook({
152
+ accountsSlug: accountSlug,
153
+ sessionsSlug: sessionSlug,
154
+ verificationsSlug: verificationsSlug
155
+ })
156
+ ]
157
+ },
158
+ auth: {
159
+ ...existingUserCollection && typeof existingUserCollection.auth === "object" ? existingUserCollection.auth : {},
160
+ disableLocalStrategy: pluginOptions.disableDefaultPayloadAuth ? true : undefined,
161
+ ...hasUsernamePlugin && {
162
+ loginWithUsername: {
163
+ allowEmailLogin: true,
164
+ requireEmail: true,
165
+ requireUsername: false
166
+ }
167
+ },
168
+ strategies: [
169
+ betterAuthStrategy(userSlug)
170
+ ]
171
+ },
172
+ fields: [
173
+ ...existingUserCollection?.fields ?? [],
174
+ {
175
+ name: "name",
176
+ type: "text",
177
+ label: "Name",
178
+ saveToJWT: true,
179
+ admin: {
180
+ description: "Users chosen display name"
181
+ }
182
+ },
183
+ {
184
+ name: "email",
185
+ type: "text",
186
+ required: true,
187
+ unique: true,
188
+ index: true,
189
+ label: "Email",
190
+ admin: {
191
+ description: "The email of the user"
192
+ }
193
+ },
194
+ {
195
+ name: "emailVerified",
196
+ type: "checkbox",
197
+ required: true,
198
+ defaultValue: false,
199
+ saveToJWT: true,
200
+ label: "Email Verified",
201
+ admin: {
202
+ description: "Whether the email of the user has been verified"
203
+ }
204
+ },
205
+ {
206
+ name: "image",
207
+ type: "text",
208
+ label: "Image",
209
+ saveToJWT: true,
210
+ admin: {
211
+ description: "The image of the user"
212
+ }
213
+ },
214
+ {
215
+ name: "role",
216
+ label: "Role",
217
+ type: "select",
218
+ required: true,
219
+ defaultValue: pluginOptions.users?.defaultRole ?? "user",
220
+ saveToJWT: true,
221
+ options: allRoleOptions,
222
+ admin: {
223
+ description: "The role of the user"
224
+ }
225
+ },
226
+ ...getTimestampFields({
227
+ saveUpdatedAtToJWT: false,
228
+ saveCreatedAtToJWT: false
229
+ })
230
+ ]
231
+ };
232
+ if (baPlugins) {
233
+ baPlugins.forEach((plugin)=>{
234
+ switch(plugin.id){
235
+ case "two-factor":
236
+ usersCollection.fields.push({
237
+ name: "twoFactorEnabled",
238
+ type: "checkbox",
239
+ defaultValue: false,
240
+ label: "Two Factor Enabled",
241
+ admin: {
242
+ description: "Whether the user has two factor authentication enabled"
243
+ }
244
+ });
245
+ break;
246
+ case "username":
247
+ usersCollection.fields.push({
248
+ name: "username",
249
+ type: "text",
250
+ unique: true,
251
+ required: false,
252
+ label: "Username",
253
+ admin: {
254
+ description: "The username of the user"
255
+ }
256
+ }, {
257
+ name: "displayUsername",
258
+ type: "text",
259
+ required: false,
260
+ label: "Display Username",
261
+ admin: {
262
+ description: "The display username of the user"
263
+ }
264
+ });
265
+ break;
266
+ case "anonymous":
267
+ usersCollection.fields.push({
268
+ name: "isAnonymous",
269
+ type: "checkbox",
270
+ defaultValue: false,
271
+ label: "Is Anonymous",
272
+ admin: {
273
+ description: "Whether the user is anonymous."
274
+ }
275
+ });
276
+ break;
277
+ case "phone-number":
278
+ usersCollection.fields.push({
279
+ name: "phoneNumber",
280
+ type: "text",
281
+ label: "Phone Number",
282
+ admin: {
283
+ description: "The phone number of the user"
284
+ }
285
+ }, {
286
+ name: "phoneNumberVerified",
287
+ type: "checkbox",
288
+ defaultValue: false,
289
+ label: "Phone Number Verified",
290
+ admin: {
291
+ description: "Whether the phone number of the user has been verified"
292
+ }
293
+ });
294
+ break;
295
+ case "admin":
296
+ usersCollection.fields.push({
297
+ name: "banned",
298
+ type: "checkbox",
299
+ defaultValue: false,
300
+ label: "Banned",
301
+ admin: {
302
+ description: "Whether the user is banned from the platform"
303
+ }
304
+ }, {
305
+ name: "banReason",
306
+ type: "text",
307
+ label: "Ban Reason",
308
+ admin: {
309
+ description: "The reason for the ban"
310
+ }
311
+ }, {
312
+ name: "banExpires",
313
+ type: "date",
314
+ label: "Ban Expires",
315
+ admin: {
316
+ description: "The date and time when the ban will expire"
317
+ }
318
+ });
319
+ break;
320
+ case "harmony-email":
321
+ usersCollection.fields.push({
322
+ name: "normalizedEmail",
323
+ type: "text",
324
+ required: false,
325
+ unique: true,
326
+ admin: {
327
+ readOnly: true,
328
+ description: "The normalized email of the user"
329
+ }
330
+ });
331
+ break;
332
+ default:
333
+ break;
334
+ }
335
+ });
336
+ }
337
+ if (pluginOptions.users?.collectionOverrides) {
338
+ usersCollection = pluginOptions.users.collectionOverrides({
339
+ collection: usersCollection
340
+ });
341
+ }
342
+ return usersCollection;
343
+ }
344
+
345
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iZXR0ZXItYXV0aC9wbHVnaW4vbGliL2J1aWxkLWNvbGxlY3Rpb25zL3VzZXJzL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbGxlY3Rpb25Db25maWcgfSBmcm9tIFwicGF5bG9hZFwiO1xuaW1wb3J0IHR5cGUge1xuICBCZXR0ZXJBdXRoUGx1Z2luT3B0aW9ucyxcbiAgU2FuaXRpemVkQmV0dGVyQXV0aE9wdGlvbnMsXG59IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgYmFzZUNvbGxlY3Rpb25TbHVncyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIGlzQWRtaW5PckN1cnJlbnRVc2VyVXBkYXRlV2l0aEFsbG93ZWRGaWVsZHMsXG4gIGlzQWRtaW5PckN1cnJlbnRVc2VyV2l0aFJvbGVzLFxuICBpc0FkbWluV2l0aFJvbGVzLFxufSBmcm9tIFwiLi4vdXRpbHMvcGF5bG9hZC1hY2Nlc3NcIjtcbmltcG9ydCB7IGdldFJlZnJlc2hUb2tlbkVuZHBvaW50IH0gZnJvbSBcIi4vZW5kcG9pbnRzL3JlZnJlc2gtdG9rZW5cIjtcbmltcG9ydCB7IG9uVmVyaWZpZWRDaGFuZ2UgfSBmcm9tIFwiLi9ob29rcy9vbi12ZXJpZmllZC1jaGFuZ2VcIjtcbmltcG9ydCB7IGdldFN5bmNBY2NvdW50SG9vayB9IGZyb20gXCIuL2hvb2tzL3N5bmMtYWNjb3VudFwiO1xuaW1wb3J0IHsgZ2V0QmVmb3JlTG9naW5Ib29rIH0gZnJvbSBcIi4vaG9va3MvYmVmb3JlLWxvZ2luXCI7XG5pbXBvcnQgeyBnZXRBZnRlckxvZ2luSG9vayB9IGZyb20gXCIuL2hvb2tzL2FmdGVyLWxvZ2luXCI7XG5pbXBvcnQgeyBnZXRBZnRlckxvZ291dEhvb2sgfSBmcm9tIFwiLi9ob29rcy9hZnRlci1sb2dvdXRcIjtcbmltcG9ydCB7IGdldEJlZm9yZURlbGV0ZUhvb2sgfSBmcm9tIFwiLi9ob29rcy9iZWZvcmUtZGVsZXRlXCI7XG5pbXBvcnQgeyBiZXR0ZXJBdXRoU3RyYXRlZ3kgfSBmcm9tIFwiLi9iZXR0ZXItYXV0aC1zdHJhdGVneVwiO1xuaW1wb3J0IHsgZ2V0VGltZXN0YW1wRmllbGRzIH0gZnJvbSBcIi4uL3V0aWxzL2dldC10aW1lc3RhbXAtZmllbGRzXCI7XG5pbXBvcnQgeyBnZXRMb2dpbkVuZHBvaW50IH0gZnJvbSBcIi4vZW5kcG9pbnRzL2xvZ2luXCI7XG5pbXBvcnQgeyBnZXRBbGxSb2xlT3B0aW9ucyB9IGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzL2dldC1hbGwtcm9sZXNcIjtcbmltcG9ydCB7IGdldEZvcmdvdFBhc3N3b3JkRW5kcG9pbnQgfSBmcm9tIFwiLi9lbmRwb2ludHMvZm9yZ290LXBhc3N3b3JkXCI7XG5pbXBvcnQgeyBnZXRTaWdudXBFbmRwb2ludCB9IGZyb20gXCIuL2VuZHBvaW50cy9zaWdudXBcIjtcbmltcG9ydCB7IGdldFNldEFkbWluUm9sZUVuZHBvaW50IH0gZnJvbSBcIi4vZW5kcG9pbnRzL3NldC1hZG1pbi1yb2xlXCI7XG5pbXBvcnQgeyBnZXRSZXNldFBhc3N3b3JkRW5kcG9pbnQgfSBmcm9tIFwiLi9lbmRwb2ludHMvcmVzZXQtcGFzc3dvcmRcIjtcbmltcG9ydCB7IGdldEdlbmVyYXRlSW52aXRlVXJsRW5kcG9pbnQgfSBmcm9tIFwiLi9lbmRwb2ludHMvZ2VuZXJhdGUtaW52aXRlLXVybFwiO1xuaW1wb3J0IHsgZ2V0U2VuZEludml0ZVVybEVuZHBvaW50IH0gZnJvbSBcIi4vZW5kcG9pbnRzL3NlbmQtaW52aXRlLXVybFwiO1xuaW1wb3J0IHsgY2hlY2tVc2VybmFtZVBsdWdpbiB9IGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzL2NoZWNrLXVzZXJuYW1lLXBsdWdpblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRVc2Vyc0NvbGxlY3Rpb24oe1xuICBpbmNvbWluZ0NvbGxlY3Rpb25zLFxuICBwbHVnaW5PcHRpb25zLFxuICBiZXR0ZXJBdXRoT3B0aW9ucyxcbn06IHtcbiAgaW5jb21pbmdDb2xsZWN0aW9uczogQ29sbGVjdGlvbkNvbmZpZ1tdO1xuICBwbHVnaW5PcHRpb25zOiBCZXR0ZXJBdXRoUGx1Z2luT3B0aW9ucztcbiAgYmV0dGVyQXV0aE9wdGlvbnM6IFNhbml0aXplZEJldHRlckF1dGhPcHRpb25zO1xufSkge1xuICBjb25zdCB1c2VyU2x1ZyA9IHBsdWdpbk9wdGlvbnMudXNlcnM/LnNsdWcgPz8gYmFzZUNvbGxlY3Rpb25TbHVncy51c2VycztcbiAgY29uc3QgYWNjb3VudFNsdWcgPVxuICAgIHBsdWdpbk9wdGlvbnMuYWNjb3VudHM/LnNsdWcgPz8gYmFzZUNvbGxlY3Rpb25TbHVncy5hY2NvdW50cztcbiAgY29uc3Qgc2Vzc2lvblNsdWcgPVxuICAgIHBsdWdpbk9wdGlvbnMuc2Vzc2lvbnM/LnNsdWcgPz8gYmFzZUNvbGxlY3Rpb25TbHVncy5zZXNzaW9ucztcbiAgY29uc3QgdmVyaWZpY2F0aW9uc1NsdWcgPVxuICAgIHBsdWdpbk9wdGlvbnMudmVyaWZpY2F0aW9ucz8uc2x1ZyA/PyBiYXNlQ29sbGVjdGlvblNsdWdzLnZlcmlmaWNhdGlvbnM7XG4gIGNvbnN0IGJhUGx1Z2lucyA9IGJldHRlckF1dGhPcHRpb25zLnBsdWdpbnMgPz8gbnVsbDtcbiAgY29uc3QgYWRtaW5Sb2xlcyA9IHBsdWdpbk9wdGlvbnMudXNlcnM/LmFkbWluUm9sZXMgPz8gW1wiYWRtaW5cIl07XG4gIGNvbnN0IGFsbFJvbGVPcHRpb25zID0gZ2V0QWxsUm9sZU9wdGlvbnMocGx1Z2luT3B0aW9ucyk7XG4gIGNvbnN0IGhhc1VzZXJuYW1lUGx1Z2luID0gY2hlY2tVc2VybmFtZVBsdWdpbihiZXR0ZXJBdXRoT3B0aW9ucyk7XG4gIGNvbnN0IGV4aXN0aW5nVXNlckNvbGxlY3Rpb24gPSBpbmNvbWluZ0NvbGxlY3Rpb25zLmZpbmQoXG4gICAgKGNvbGxlY3Rpb24pID0+IGNvbGxlY3Rpb24uc2x1ZyA9PT0gdXNlclNsdWdcbiAgKSBhcyBDb2xsZWN0aW9uQ29uZmlnIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGFsbG93ZWRGaWVsZHMgPSBwbHVnaW5PcHRpb25zLnVzZXJzPy5hbGxvd2VkRmllbGRzID8/IFtcIm5hbWVcIl07XG5cbiAgY29uc3QgYmFzZVVybCA9XG4gICAgYmV0dGVyQXV0aE9wdGlvbnMuYmFzZVVSTCA/P1xuICAgIHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX1VSTCA/P1xuICAgIFwiaHR0cDovL2xvY2FsaG9zdDozMDAwXCI7XG5cbiAgbGV0IHVzZXJzQ29sbGVjdGlvbjogQ29sbGVjdGlvbkNvbmZpZyA9IHtcbiAgICAuLi5leGlzdGluZ1VzZXJDb2xsZWN0aW9uLFxuICAgIHNsdWc6IHVzZXJTbHVnLFxuICAgIGFkbWluOiB7XG4gICAgICBkZWZhdWx0Q29sdW1uczogW1wiZW1haWxcIl0sXG4gICAgICB1c2VBc1RpdGxlOiBcImVtYWlsXCIsXG4gICAgICBncm91cDogcGx1Z2luT3B0aW9ucz8uY29sbGVjdGlvbkFkbWluR3JvdXAgPz8gXCJBdXRoXCIsXG4gICAgICAuLi5leGlzdGluZ1VzZXJDb2xsZWN0aW9uPy5hZG1pbixcbiAgICAgIGhpZGRlbjogcGx1Z2luT3B0aW9ucy51c2Vycz8uaGlkZGVuID8/IGZhbHNlLFxuICAgICAgY29tcG9uZW50czoge1xuICAgICAgICBEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIHBhdGg6IFwicGF5bG9hZC1hdXRoL2JldHRlci1hdXRoL3BsdWdpbi9jbGllbnQjQWRtaW5JbnZpdGVCdXR0b25cIixcbiAgICAgICAgICBjbGllbnRQcm9wczoge1xuICAgICAgICAgICAgcm9sZXM6IGFsbFJvbGVPcHRpb25zLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHZpZXdzOiB7XG4gICAgICAgICAgZWRpdDoge1xuICAgICAgICAgICAgYWRtaW5CdXR0b25zOiB7XG4gICAgICAgICAgICAgIHRhYjoge1xuICAgICAgICAgICAgICAgIENvbXBvbmVudDoge1xuICAgICAgICAgICAgICAgICAgcGF0aDogXCJwYXlsb2FkLWF1dGgvYmV0dGVyLWF1dGgvcGx1Z2luL2NsaWVudCNBZG1pbkJ1dHRvbnNcIixcbiAgICAgICAgICAgICAgICAgIGNsaWVudFByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgIHVzZXJTbHVnLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gT25seSBzaG93IHRoZSBpbXBlcnNvbmF0ZSBidXR0b24gaWYgdGhlIGFkbWluIHBsdWdpbiBpcyBlbmFibGVkXG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAoYmFQbHVnaW5zICYmXG4gICAgICAgICAgICAgICAgICAgICAgYmFQbHVnaW5zLnNvbWUoKHBsdWdpbikgPT4gcGx1Z2luLmlkID09PSBcImFkbWluXCIpKSA/P1xuICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIGFjY2Vzczoge1xuICAgICAgYWRtaW46ICh7IHJlcSB9KSA9PlxuICAgICAgICBhZG1pblJvbGVzLmluY2x1ZGVzKChyZXEudXNlcj8ucm9sZSBhcyBzdHJpbmcpID8/IFwidXNlclwiKSxcbiAgICAgIHJlYWQ6IGlzQWRtaW5PckN1cnJlbnRVc2VyV2l0aFJvbGVzKHsgYWRtaW5Sb2xlcywgaWRGaWVsZDogXCJpZFwiIH0pLFxuICAgICAgY3JlYXRlOiBpc0FkbWluV2l0aFJvbGVzKHsgYWRtaW5Sb2xlcyB9KSxcbiAgICAgIGRlbGV0ZTogaXNBZG1pbk9yQ3VycmVudFVzZXJXaXRoUm9sZXMoeyBhZG1pblJvbGVzLCBpZEZpZWxkOiBcImlkXCIgfSksXG4gICAgICB1cGRhdGU6IGlzQWRtaW5PckN1cnJlbnRVc2VyVXBkYXRlV2l0aEFsbG93ZWRGaWVsZHMoe1xuICAgICAgICBhbGxvd2VkRmllbGRzLFxuICAgICAgICBhZG1pblJvbGVzLFxuICAgICAgICB1c2VyU2x1ZyxcbiAgICAgIH0pLFxuICAgICAgLi4uKGV4aXN0aW5nVXNlckNvbGxlY3Rpb24/LmFjY2VzcyA/PyB7fSksXG4gICAgfSxcbiAgICBlbmRwb2ludHM6IFtcbiAgICAgIC4uLihleGlzdGluZ1VzZXJDb2xsZWN0aW9uPy5lbmRwb2ludHNcbiAgICAgICAgPyBleGlzdGluZ1VzZXJDb2xsZWN0aW9uLmVuZHBvaW50c1xuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLihwbHVnaW5PcHRpb25zLmRpc2FibGVEZWZhdWx0UGF5bG9hZEF1dGhcbiAgICAgICAgPyBbZ2V0TG9naW5FbmRwb2ludChiZXR0ZXJBdXRoT3B0aW9ucyldXG4gICAgICAgIDogW10pLFxuICAgICAgZ2V0U2V0QWRtaW5Sb2xlRW5kcG9pbnQoXG4gICAgICAgIHBsdWdpbk9wdGlvbnMsXG4gICAgICAgIHBsdWdpbk9wdGlvbnMudXNlcnM/LnNsdWcgPz8gXCJ1c2Vyc1wiXG4gICAgICApLFxuICAgICAgZ2V0R2VuZXJhdGVJbnZpdGVVcmxFbmRwb2ludCh7XG4gICAgICAgIHJvbGVzOiBhbGxSb2xlT3B0aW9ucyxcbiAgICAgICAgYmFzZVVybCxcbiAgICAgICAgcGx1Z2luT3B0aW9ucyxcbiAgICAgIH0pLFxuICAgICAgZ2V0U2VuZEludml0ZVVybEVuZHBvaW50KCksXG4gICAgICBnZXRTaWdudXBFbmRwb2ludChwbHVnaW5PcHRpb25zLCBiZXR0ZXJBdXRoT3B0aW9ucyksXG4gICAgICBnZXRSZWZyZXNoVG9rZW5FbmRwb2ludCh1c2VyU2x1ZyksXG4gICAgICBnZXRGb3Jnb3RQYXNzd29yZEVuZHBvaW50KCksXG4gICAgICBnZXRSZXNldFBhc3N3b3JkRW5kcG9pbnQoKSxcbiAgICBdLFxuICAgIGhvb2tzOiB7XG4gICAgICBiZWZvcmVDaGFuZ2U6IFtcbiAgICAgICAgLi4uKGV4aXN0aW5nVXNlckNvbGxlY3Rpb24/Lmhvb2tzPy5iZWZvcmVDaGFuZ2UgPz8gW10pLFxuICAgICAgICAuLi4ocGx1Z2luT3B0aW9ucy5kaXNhYmxlRGVmYXVsdFBheWxvYWRBdXRoID8gW10gOiBbb25WZXJpZmllZENoYW5nZV0pLFxuICAgICAgXSxcbiAgICAgIGFmdGVyQ2hhbmdlOiBbXG4gICAgICAgIC4uLihleGlzdGluZ1VzZXJDb2xsZWN0aW9uPy5ob29rcz8uYWZ0ZXJDaGFuZ2UgPz8gW10pLFxuICAgICAgICAuLi4ocGx1Z2luT3B0aW9ucy5kaXNhYmxlRGVmYXVsdFBheWxvYWRBdXRoXG4gICAgICAgICAgPyBbXVxuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICBnZXRTeW5jQWNjb3VudEhvb2soe1xuICAgICAgICAgICAgICAgIHVzZXJTbHVnLFxuICAgICAgICAgICAgICAgIGFjY291bnRTbHVnLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgXSxcbiAgICAgIGJlZm9yZUxvZ2luOiBbXG4gICAgICAgIC4uLihleGlzdGluZ1VzZXJDb2xsZWN0aW9uPy5ob29rcz8uYmVmb3JlTG9naW4gPz8gW10pLFxuICAgICAgICAuLi4ocGx1Z2luT3B0aW9ucy5kaXNhYmxlRGVmYXVsdFBheWxvYWRBdXRoXG4gICAgICAgICAgPyBbXVxuICAgICAgICAgIDogW2dldEJlZm9yZUxvZ2luSG9vaygpXSksXG4gICAgICBdLFxuICAgICAgYWZ0ZXJMb2dpbjogW1xuICAgICAgICAuLi4oZXhpc3RpbmdVc2VyQ29sbGVjdGlvbj8uaG9va3M/LmFmdGVyTG9naW4gPz8gW10pLFxuICAgICAgICAuLi4ocGx1Z2luT3B0aW9ucy5kaXNhYmxlRGVmYXVsdFBheWxvYWRBdXRoXG4gICAgICAgICAgPyBbXVxuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICBnZXRBZnRlckxvZ2luSG9vayh7XG4gICAgICAgICAgICAgICAgc2Vzc2lvbnNDb2xsZWN0aW9uU2x1Zzogc2Vzc2lvblNsdWcsXG4gICAgICAgICAgICAgICAgdXNlcnNDb2xsZWN0aW9uU2x1ZzogdXNlclNsdWcsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSksXG4gICAgICBdLFxuICAgICAgYWZ0ZXJMb2dvdXQ6IFtcbiAgICAgICAgLi4uKGV4aXN0aW5nVXNlckNvbGxlY3Rpb24/Lmhvb2tzPy5hZnRlckxvZ291dCA/PyBbXSksXG4gICAgICAgIGdldEFmdGVyTG9nb3V0SG9vayh7IHNlc3Npb25zQ29sbGVjdGlvblNsdWc6IHNlc3Npb25TbHVnIH0pLFxuICAgICAgXSxcbiAgICAgIGJlZm9yZURlbGV0ZTogW1xuICAgICAgICAuLi4oZXhpc3RpbmdVc2VyQ29sbGVjdGlvbj8uaG9va3M/LmJlZm9yZURlbGV0ZSA/PyBbXSksXG4gICAgICAgIGdldEJlZm9yZURlbGV0ZUhvb2soe1xuICAgICAgICAgIGFjY291bnRzU2x1ZzogYWNjb3VudFNsdWcsXG4gICAgICAgICAgc2Vzc2lvbnNTbHVnOiBzZXNzaW9uU2x1ZyxcbiAgICAgICAgICB2ZXJpZmljYXRpb25zU2x1ZzogdmVyaWZpY2F0aW9uc1NsdWcsXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9LFxuICAgIGF1dGg6IHtcbiAgICAgIC4uLihleGlzdGluZ1VzZXJDb2xsZWN0aW9uICYmXG4gICAgICB0eXBlb2YgZXhpc3RpbmdVc2VyQ29sbGVjdGlvbi5hdXRoID09PSBcIm9iamVjdFwiXG4gICAgICAgID8gZXhpc3RpbmdVc2VyQ29sbGVjdGlvbi5hdXRoXG4gICAgICAgIDoge30pLFxuICAgICAgZGlzYWJsZUxvY2FsU3RyYXRlZ3k6IHBsdWdpbk9wdGlvbnMuZGlzYWJsZURlZmF1bHRQYXlsb2FkQXV0aFxuICAgICAgICA/IHRydWVcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAuLi4oaGFzVXNlcm5hbWVQbHVnaW4gJiYge1xuICAgICAgICBsb2dpbldpdGhVc2VybmFtZToge1xuICAgICAgICAgIGFsbG93RW1haWxMb2dpbjogdHJ1ZSxcbiAgICAgICAgICByZXF1aXJlRW1haWw6IHRydWUsXG4gICAgICAgICAgcmVxdWlyZVVzZXJuYW1lOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgc3RyYXRlZ2llczogW2JldHRlckF1dGhTdHJhdGVneSh1c2VyU2x1ZyldLFxuICAgIH0sXG4gICAgZmllbGRzOiBbXG4gICAgICAuLi4oZXhpc3RpbmdVc2VyQ29sbGVjdGlvbj8uZmllbGRzID8/IFtdKSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJuYW1lXCIsXG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICBsYWJlbDogXCJOYW1lXCIsXG4gICAgICAgIHNhdmVUb0pXVDogdHJ1ZSxcbiAgICAgICAgYWRtaW46IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJVc2VycyBjaG9zZW4gZGlzcGxheSBuYW1lXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiBcImVtYWlsXCIsXG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgdW5pcXVlOiB0cnVlLFxuICAgICAgICBpbmRleDogdHJ1ZSxcbiAgICAgICAgbGFiZWw6IFwiRW1haWxcIixcbiAgICAgICAgYWRtaW46IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJUaGUgZW1haWwgb2YgdGhlIHVzZXJcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiZW1haWxWZXJpZmllZFwiLFxuICAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgICBzYXZlVG9KV1Q6IHRydWUsXG4gICAgICAgIGxhYmVsOiBcIkVtYWlsIFZlcmlmaWVkXCIsXG4gICAgICAgIGFkbWluOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiV2hldGhlciB0aGUgZW1haWwgb2YgdGhlIHVzZXIgaGFzIGJlZW4gdmVyaWZpZWRcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiaW1hZ2VcIixcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIGxhYmVsOiBcIkltYWdlXCIsXG4gICAgICAgIHNhdmVUb0pXVDogdHJ1ZSxcbiAgICAgICAgYWRtaW46IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJUaGUgaW1hZ2Ugb2YgdGhlIHVzZXJcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwicm9sZVwiLFxuICAgICAgICBsYWJlbDogXCJSb2xlXCIsXG4gICAgICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHBsdWdpbk9wdGlvbnMudXNlcnM/LmRlZmF1bHRSb2xlID8/IFwidXNlclwiLFxuICAgICAgICBzYXZlVG9KV1Q6IHRydWUsXG4gICAgICAgIG9wdGlvbnM6IGFsbFJvbGVPcHRpb25zLFxuICAgICAgICBhZG1pbjoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSByb2xlIG9mIHRoZSB1c2VyXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgLi4uZ2V0VGltZXN0YW1wRmllbGRzKHtcbiAgICAgICAgc2F2ZVVwZGF0ZWRBdFRvSldUOiBmYWxzZSxcbiAgICAgICAgc2F2ZUNyZWF0ZWRBdFRvSldUOiBmYWxzZSxcbiAgICAgIH0pLFxuICAgIF0sXG4gIH07XG5cbiAgaWYgKGJhUGx1Z2lucykge1xuICAgIGJhUGx1Z2lucy5mb3JFYWNoKChwbHVnaW4pID0+IHtcbiAgICAgIHN3aXRjaCAocGx1Z2luLmlkKSB7XG4gICAgICAgIGNhc2UgXCJ0d28tZmFjdG9yXCI6XG4gICAgICAgICAgdXNlcnNDb2xsZWN0aW9uLmZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IFwidHdvRmFjdG9yRW5hYmxlZFwiLFxuICAgICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgICAgICAgIGxhYmVsOiBcIlR3byBGYWN0b3IgRW5hYmxlZFwiLFxuICAgICAgICAgICAgYWRtaW46IHtcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgXCJXaGV0aGVyIHRoZSB1c2VyIGhhcyB0d28gZmFjdG9yIGF1dGhlbnRpY2F0aW9uIGVuYWJsZWRcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ1c2VybmFtZVwiOlxuICAgICAgICAgIHVzZXJzQ29sbGVjdGlvbi5maWVsZHMucHVzaChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJ1c2VybmFtZVwiLFxuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgdW5pcXVlOiB0cnVlLFxuICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsIC8vIFRPRE86IGRlY2lkZSBpZiB0aGlzIHNob3VsZCBiZSByZXF1aXJlZCwgd2lsbCBoYXZlIHRvIHRlbGwgdXNlcnMgdGhleSBuZWVkIHRvIGFkZCB1aSBmb3IgaXQuXG4gICAgICAgICAgICAgIGxhYmVsOiBcIlVzZXJuYW1lXCIsXG4gICAgICAgICAgICAgIGFkbWluOiB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiVGhlIHVzZXJuYW1lIG9mIHRoZSB1c2VyXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcImRpc3BsYXlVc2VybmFtZVwiLFxuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBsYWJlbDogXCJEaXNwbGF5IFVzZXJuYW1lXCIsXG4gICAgICAgICAgICAgIGFkbWluOiB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiVGhlIGRpc3BsYXkgdXNlcm5hbWUgb2YgdGhlIHVzZXJcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYW5vbnltb3VzXCI6XG4gICAgICAgICAgdXNlcnNDb2xsZWN0aW9uLmZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IFwiaXNBbm9ueW1vdXNcIixcbiAgICAgICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICAgICAgICBsYWJlbDogXCJJcyBBbm9ueW1vdXNcIixcbiAgICAgICAgICAgIGFkbWluOiB7XG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIldoZXRoZXIgdGhlIHVzZXIgaXMgYW5vbnltb3VzLlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInBob25lLW51bWJlclwiOlxuICAgICAgICAgIHVzZXJzQ29sbGVjdGlvbi5maWVsZHMucHVzaChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJwaG9uZU51bWJlclwiLFxuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgbGFiZWw6IFwiUGhvbmUgTnVtYmVyXCIsXG4gICAgICAgICAgICAgIGFkbWluOiB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiVGhlIHBob25lIG51bWJlciBvZiB0aGUgdXNlclwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJwaG9uZU51bWJlclZlcmlmaWVkXCIsXG4gICAgICAgICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICAgICAgICAgICAgbGFiZWw6IFwiUGhvbmUgTnVtYmVyIFZlcmlmaWVkXCIsXG4gICAgICAgICAgICAgIGFkbWluOiB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgICBcIldoZXRoZXIgdGhlIHBob25lIG51bWJlciBvZiB0aGUgdXNlciBoYXMgYmVlbiB2ZXJpZmllZFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJhZG1pblwiOlxuICAgICAgICAgIHVzZXJzQ29sbGVjdGlvbi5maWVsZHMucHVzaChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJiYW5uZWRcIixcbiAgICAgICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgICAgICAgICBsYWJlbDogXCJCYW5uZWRcIixcbiAgICAgICAgICAgICAgYWRtaW46IHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJXaGV0aGVyIHRoZSB1c2VyIGlzIGJhbm5lZCBmcm9tIHRoZSBwbGF0Zm9ybVwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJiYW5SZWFzb25cIixcbiAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgIGxhYmVsOiBcIkJhbiBSZWFzb25cIixcbiAgICAgICAgICAgICAgYWRtaW46IHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJUaGUgcmVhc29uIGZvciB0aGUgYmFuXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcImJhbkV4cGlyZXNcIixcbiAgICAgICAgICAgICAgdHlwZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgIGxhYmVsOiBcIkJhbiBFeHBpcmVzXCIsXG4gICAgICAgICAgICAgIGFkbWluOiB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiVGhlIGRhdGUgYW5kIHRpbWUgd2hlbiB0aGUgYmFuIHdpbGwgZXhwaXJlXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImhhcm1vbnktZW1haWxcIjpcbiAgICAgICAgICB1c2Vyc0NvbGxlY3Rpb24uZmllbGRzLnB1c2goe1xuICAgICAgICAgICAgbmFtZTogXCJub3JtYWxpemVkRW1haWxcIixcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgdW5pcXVlOiB0cnVlLFxuICAgICAgICAgICAgYWRtaW46IHtcbiAgICAgICAgICAgICAgcmVhZE9ubHk6IHRydWUsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBub3JtYWxpemVkIGVtYWlsIG9mIHRoZSB1c2VyXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHBsdWdpbk9wdGlvbnMudXNlcnM/LmNvbGxlY3Rpb25PdmVycmlkZXMpIHtcbiAgICB1c2Vyc0NvbGxlY3Rpb24gPSBwbHVnaW5PcHRpb25zLnVzZXJzLmNvbGxlY3Rpb25PdmVycmlkZXMoe1xuICAgICAgY29sbGVjdGlvbjogdXNlcnNDb2xsZWN0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHVzZXJzQ29sbGVjdGlvbjtcbn1cbiJdLCJuYW1lcyI6WyJiYXNlQ29sbGVjdGlvblNsdWdzIiwiaXNBZG1pbk9yQ3VycmVudFVzZXJVcGRhdGVXaXRoQWxsb3dlZEZpZWxkcyIsImlzQWRtaW5PckN1cnJlbnRVc2VyV2l0aFJvbGVzIiwiaXNBZG1pbldpdGhSb2xlcyIsImdldFJlZnJlc2hUb2tlbkVuZHBvaW50Iiwib25WZXJpZmllZENoYW5nZSIsImdldFN5bmNBY2NvdW50SG9vayIsImdldEJlZm9yZUxvZ2luSG9vayIsImdldEFmdGVyTG9naW5Ib29rIiwiZ2V0QWZ0ZXJMb2dvdXRIb29rIiwiZ2V0QmVmb3JlRGVsZXRlSG9vayIsImJldHRlckF1dGhTdHJhdGVneSIsImdldFRpbWVzdGFtcEZpZWxkcyIsImdldExvZ2luRW5kcG9pbnQiLCJnZXRBbGxSb2xlT3B0aW9ucyIsImdldEZvcmdvdFBhc3N3b3JkRW5kcG9pbnQiLCJnZXRTaWdudXBFbmRwb2ludCIsImdldFNldEFkbWluUm9sZUVuZHBvaW50IiwiZ2V0UmVzZXRQYXNzd29yZEVuZHBvaW50IiwiZ2V0R2VuZXJhdGVJbnZpdGVVcmxFbmRwb2ludCIsImdldFNlbmRJbnZpdGVVcmxFbmRwb2ludCIsImNoZWNrVXNlcm5hbWVQbHVnaW4iLCJidWlsZFVzZXJzQ29sbGVjdGlvbiIsImluY29taW5nQ29sbGVjdGlvbnMiLCJwbHVnaW5PcHRpb25zIiwiYmV0dGVyQXV0aE9wdGlvbnMiLCJ1c2VyU2x1ZyIsInVzZXJzIiwic2x1ZyIsImFjY291bnRTbHVnIiwiYWNjb3VudHMiLCJzZXNzaW9uU2x1ZyIsInNlc3Npb25zIiwidmVyaWZpY2F0aW9uc1NsdWciLCJ2ZXJpZmljYXRpb25zIiwiYmFQbHVnaW5zIiwicGx1Z2lucyIsImFkbWluUm9sZXMiLCJhbGxSb2xlT3B0aW9ucyIsImhhc1VzZXJuYW1lUGx1Z2luIiwiZXhpc3RpbmdVc2VyQ29sbGVjdGlvbiIsImZpbmQiLCJjb2xsZWN0aW9uIiwiYWxsb3dlZEZpZWxkcyIsImJhc2VVcmwiLCJiYXNlVVJMIiwicHJvY2VzcyIsImVudiIsIk5FWFRfUFVCTElDX1VSTCIsInVzZXJzQ29sbGVjdGlvbiIsImFkbWluIiwiZGVmYXVsdENvbHVtbnMiLCJ1c2VBc1RpdGxlIiwiZ3JvdXAiLCJjb2xsZWN0aW9uQWRtaW5Hcm91cCIsImhpZGRlbiIsImNvbXBvbmVudHMiLCJEZXNjcmlwdGlvbiIsInBhdGgiLCJjbGllbnRQcm9wcyIsInJvbGVzIiwidmlld3MiLCJlZGl0IiwiYWRtaW5CdXR0b25zIiwidGFiIiwiQ29tcG9uZW50IiwiY29uZGl0aW9uIiwic29tZSIsInBsdWdpbiIsImlkIiwiYWNjZXNzIiwicmVxIiwiaW5jbHVkZXMiLCJ1c2VyIiwicm9sZSIsInJlYWQiLCJpZEZpZWxkIiwiY3JlYXRlIiwiZGVsZXRlIiwidXBkYXRlIiwiZW5kcG9pbnRzIiwiZGlzYWJsZURlZmF1bHRQYXlsb2FkQXV0aCIsImhvb2tzIiwiYmVmb3JlQ2hhbmdlIiwiYWZ0ZXJDaGFuZ2UiLCJiZWZvcmVMb2dpbiIsImFmdGVyTG9naW4iLCJzZXNzaW9uc0NvbGxlY3Rpb25TbHVnIiwidXNlcnNDb2xsZWN0aW9uU2x1ZyIsImFmdGVyTG9nb3V0IiwiYmVmb3JlRGVsZXRlIiwiYWNjb3VudHNTbHVnIiwic2Vzc2lvbnNTbHVnIiwiYXV0aCIsImRpc2FibGVMb2NhbFN0cmF0ZWd5IiwidW5kZWZpbmVkIiwibG9naW5XaXRoVXNlcm5hbWUiLCJhbGxvd0VtYWlsTG9naW4iLCJyZXF1aXJlRW1haWwiLCJyZXF1aXJlVXNlcm5hbWUiLCJzdHJhdGVnaWVzIiwiZmllbGRzIiwibmFtZSIsInR5cGUiLCJsYWJlbCIsInNhdmVUb0pXVCIsImRlc2NyaXB0aW9uIiwicmVxdWlyZWQiLCJ1bmlxdWUiLCJpbmRleCIsImRlZmF1bHRWYWx1ZSIsImRlZmF1bHRSb2xlIiwib3B0aW9ucyIsInNhdmVVcGRhdGVkQXRUb0pXVCIsInNhdmVDcmVhdGVkQXRUb0pXVCIsImZvckVhY2giLCJwdXNoIiwicmVhZE9ubHkiLCJjb2xsZWN0aW9uT3ZlcnJpZGVzIl0sIm1hcHBpbmdzIjoiQUFLQSxTQUFTQSxtQkFBbUIsUUFBUSxrQkFBa0I7QUFDdEQsU0FDRUMsMkNBQTJDLEVBQzNDQyw2QkFBNkIsRUFDN0JDLGdCQUFnQixRQUNYLDBCQUEwQjtBQUNqQyxTQUFTQyx1QkFBdUIsUUFBUSw0QkFBNEI7QUFDcEUsU0FBU0MsZ0JBQWdCLFFBQVEsNkJBQTZCO0FBQzlELFNBQVNDLGtCQUFrQixRQUFRLHVCQUF1QjtBQUMxRCxTQUFTQyxrQkFBa0IsUUFBUSx1QkFBdUI7QUFDMUQsU0FBU0MsaUJBQWlCLFFBQVEsc0JBQXNCO0FBQ3hELFNBQVNDLGtCQUFrQixRQUFRLHVCQUF1QjtBQUMxRCxTQUFTQyxtQkFBbUIsUUFBUSx3QkFBd0I7QUFDNUQsU0FBU0Msa0JBQWtCLFFBQVEseUJBQXlCO0FBQzVELFNBQVNDLGtCQUFrQixRQUFRLGdDQUFnQztBQUNuRSxTQUFTQyxnQkFBZ0IsUUFBUSxvQkFBb0I7QUFDckQsU0FBU0MsaUJBQWlCLFFBQVEsaUNBQWlDO0FBQ25FLFNBQVNDLHlCQUF5QixRQUFRLDhCQUE4QjtBQUN4RSxTQUFTQyxpQkFBaUIsUUFBUSxxQkFBcUI7QUFDdkQsU0FBU0MsdUJBQXVCLFFBQVEsNkJBQTZCO0FBQ3JFLFNBQVNDLHdCQUF3QixRQUFRLDZCQUE2QjtBQUN0RSxTQUFTQyw0QkFBNEIsUUFBUSxrQ0FBa0M7QUFDL0UsU0FBU0Msd0JBQXdCLFFBQVEsOEJBQThCO0FBQ3ZFLFNBQVNDLG1CQUFtQixRQUFRLHlDQUF5QztBQUU3RSxPQUFPLFNBQVNDLHFCQUFxQixFQUNuQ0MsbUJBQW1CLEVBQ25CQyxhQUFhLEVBQ2JDLGlCQUFpQixFQUtsQjtJQUNDLE1BQU1DLFdBQVdGLGNBQWNHLEtBQUssRUFBRUMsUUFBUTVCLG9CQUFvQjJCLEtBQUs7SUFDdkUsTUFBTUUsY0FDSkwsY0FBY00sUUFBUSxFQUFFRixRQUFRNUIsb0JBQW9COEIsUUFBUTtJQUM5RCxNQUFNQyxjQUNKUCxjQUFjUSxRQUFRLEVBQUVKLFFBQVE1QixvQkFBb0JnQyxRQUFRO0lBQzlELE1BQU1DLG9CQUNKVCxjQUFjVSxhQUFhLEVBQUVOLFFBQVE1QixvQkFBb0JrQyxhQUFhO0lBQ3hFLE1BQU1DLFlBQVlWLGtCQUFrQlcsT0FBTyxJQUFJO0lBQy9DLE1BQU1DLGFBQWFiLGNBQWNHLEtBQUssRUFBRVUsY0FBYztRQUFDO0tBQVE7SUFDL0QsTUFBTUMsaUJBQWlCeEIsa0JBQWtCVTtJQUN6QyxNQUFNZSxvQkFBb0JsQixvQkFBb0JJO0lBQzlDLE1BQU1lLHlCQUF5QmpCLG9CQUFvQmtCLElBQUksQ0FDckQsQ0FBQ0MsYUFBZUEsV0FBV2QsSUFBSSxLQUFLRjtJQUd0QyxNQUFNaUIsZ0JBQWdCbkIsY0FBY0csS0FBSyxFQUFFZ0IsaUJBQWlCO1FBQUM7S0FBTztJQUVwRSxNQUFNQyxVQUNKbkIsa0JBQWtCb0IsT0FBTyxJQUN6QkMsUUFBUUMsR0FBRyxDQUFDQyxlQUFlLElBQzNCO0lBRUYsSUFBSUMsa0JBQW9DO1FBQ3RDLEdBQUdULHNCQUFzQjtRQUN6QlosTUFBTUY7UUFDTndCLE9BQU87WUFDTEMsZ0JBQWdCO2dCQUFDO2FBQVE7WUFDekJDLFlBQVk7WUFDWkMsT0FBTzdCLGVBQWU4Qix3QkFBd0I7WUFDOUMsR0FBR2Qsd0JBQXdCVSxLQUFLO1lBQ2hDSyxRQUFRL0IsY0FBY0csS0FBSyxFQUFFNEIsVUFBVTtZQUN2Q0MsWUFBWTtnQkFDVkMsYUFBYTtvQkFDWEMsTUFBTTtvQkFDTkMsYUFBYTt3QkFDWEMsT0FBT3RCO29CQUNUO2dCQUNGO2dCQUNBdUIsT0FBTztvQkFDTEMsTUFBTTt3QkFDSkMsY0FBYzs0QkFDWkMsS0FBSztnQ0FDSEMsV0FBVztvQ0FDVFAsTUFBTTtvQ0FDTkMsYUFBYTt3Q0FDWGpDO29DQUNGO2dDQUNGO2dDQUNBd0MsV0FBVztvQ0FDVCxrRUFBa0U7b0NBQ2xFLE9BQ0UsQUFBQy9CLENBQUFBLGFBQ0NBLFVBQVVnQyxJQUFJLENBQUMsQ0FBQ0MsU0FBV0EsT0FBT0MsRUFBRSxLQUFLLFFBQU8sS0FDbEQ7Z0NBRUo7NEJBQ0Y7d0JBQ0Y7b0JBQ0Y7Z0JBQ0Y7WUFDRjtRQUNGO1FBQ0FDLFFBQVE7WUFDTnBCLE9BQU8sQ0FBQyxFQUFFcUIsR0FBRyxFQUFFLEdBQ2JsQyxXQUFXbUMsUUFBUSxDQUFDLEFBQUNELElBQUlFLElBQUksRUFBRUMsUUFBbUI7WUFDcERDLE1BQU16RSw4QkFBOEI7Z0JBQUVtQztnQkFBWXVDLFNBQVM7WUFBSztZQUNoRUMsUUFBUTFFLGlCQUFpQjtnQkFBRWtDO1lBQVc7WUFDdEN5QyxRQUFRNUUsOEJBQThCO2dCQUFFbUM7Z0JBQVl1QyxTQUFTO1lBQUs7WUFDbEVHLFFBQVE5RSw0Q0FBNEM7Z0JBQ2xEMEM7Z0JBQ0FOO2dCQUNBWDtZQUNGO1lBQ0EsR0FBSWMsd0JBQXdCOEIsVUFBVSxDQUFDLENBQUM7UUFDMUM7UUFDQVUsV0FBVztlQUNMeEMsd0JBQXdCd0MsWUFDeEJ4Qyx1QkFBdUJ3QyxTQUFTLEdBQ2hDLEVBQUU7ZUFDRnhELGNBQWN5RCx5QkFBeUIsR0FDdkM7Z0JBQUNwRSxpQkFBaUJZO2FBQW1CLEdBQ3JDLEVBQUU7WUFDTlIsd0JBQ0VPLGVBQ0FBLGNBQWNHLEtBQUssRUFBRUMsUUFBUTtZQUUvQlQsNkJBQTZCO2dCQUMzQnlDLE9BQU90QjtnQkFDUE07Z0JBQ0FwQjtZQUNGO1lBQ0FKO1lBQ0FKLGtCQUFrQlEsZUFBZUM7WUFDakNyQix3QkFBd0JzQjtZQUN4Qlg7WUFDQUc7U0FDRDtRQUNEZ0UsT0FBTztZQUNMQyxjQUFjO21CQUNSM0Msd0JBQXdCMEMsT0FBT0MsZ0JBQWdCLEVBQUU7bUJBQ2pEM0QsY0FBY3lELHlCQUF5QixHQUFHLEVBQUUsR0FBRztvQkFBQzVFO2lCQUFpQjthQUN0RTtZQUNEK0UsYUFBYTttQkFDUDVDLHdCQUF3QjBDLE9BQU9FLGVBQWUsRUFBRTttQkFDaEQ1RCxjQUFjeUQseUJBQXlCLEdBQ3ZDLEVBQUUsR0FDRjtvQkFDRTNFLG1CQUFtQjt3QkFDakJvQjt3QkFDQUc7b0JBQ0Y7aUJBQ0Q7YUFDTjtZQUNEd0QsYUFBYTttQkFDUDdDLHdCQUF3QjBDLE9BQU9HLGVBQWUsRUFBRTttQkFDaEQ3RCxjQUFjeUQseUJBQXlCLEdBQ3ZDLEVBQUUsR0FDRjtvQkFBQzFFO2lCQUFxQjthQUMzQjtZQUNEK0UsWUFBWTttQkFDTjlDLHdCQUF3QjBDLE9BQU9JLGNBQWMsRUFBRTttQkFDL0M5RCxjQUFjeUQseUJBQXlCLEdBQ3ZDLEVBQUUsR0FDRjtvQkFDRXpFLGtCQUFrQjt3QkFDaEIrRSx3QkFBd0J4RDt3QkFDeEJ5RCxxQkFBcUI5RDtvQkFDdkI7aUJBQ0Q7YUFDTjtZQUNEK0QsYUFBYTttQkFDUGpELHdCQUF3QjBDLE9BQU9PLGVBQWUsRUFBRTtnQkFDcERoRixtQkFBbUI7b0JBQUU4RSx3QkFBd0J4RDtnQkFBWTthQUMxRDtZQUNEMkQsY0FBYzttQkFDUmxELHdCQUF3QjBDLE9BQU9RLGdCQUFnQixFQUFFO2dCQUNyRGhGLG9CQUFvQjtvQkFDbEJpRixjQUFjOUQ7b0JBQ2QrRCxjQUFjN0Q7b0JBQ2RFLG1CQUFtQkE7Z0JBQ3JCO2FBQ0Q7UUFDSDtRQUNBNEQsTUFBTTtZQUNKLEdBQUlyRCwwQkFDSixPQUFPQSx1QkFBdUJxRCxJQUFJLEtBQUssV0FDbkNyRCx1QkFBdUJxRCxJQUFJLEdBQzNCLENBQUMsQ0FBQztZQUNOQyxzQkFBc0J0RSxjQUFjeUQseUJBQXlCLEdBQ3pELE9BQ0FjO1lBQ0osR0FBSXhELHFCQUFxQjtnQkFDdkJ5RCxtQkFBbUI7b0JBQ2pCQyxpQkFBaUI7b0JBQ2pCQyxjQUFjO29CQUNkQyxpQkFBaUI7Z0JBQ25CO1lBQ0YsQ0FBQztZQUNEQyxZQUFZO2dCQUFDekYsbUJBQW1CZTthQUFVO1FBQzVDO1FBQ0EyRSxRQUFRO2VBQ0Y3RCx3QkFBd0I2RCxVQUFVLEVBQUU7WUFDeEM7Z0JBQ0VDLE1BQU07Z0JBQ05DLE1BQU07Z0JBQ05DLE9BQU87Z0JBQ1BDLFdBQVc7Z0JBQ1h2RCxPQUFPO29CQUNMd0QsYUFBYTtnQkFDZjtZQUNGO1lBQ0E7Z0JBQ0VKLE1BQU07Z0JBQ05DLE1BQU07Z0JBQ05JLFVBQVU7Z0JBQ1ZDLFFBQVE7Z0JBQ1JDLE9BQU87Z0JBQ1BMLE9BQU87Z0JBQ1B0RCxPQUFPO29CQUNMd0QsYUFBYTtnQkFDZjtZQUNGO1lBQ0E7Z0JBQ0VKLE1BQU07Z0JBQ05DLE1BQU07Z0JBQ05JLFVBQVU7Z0JBQ1ZHLGNBQWM7Z0JBQ2RMLFdBQVc7Z0JBQ1hELE9BQU87Z0JBQ1B0RCxPQUFPO29CQUNMd0QsYUFBYTtnQkFDZjtZQUNGO1lBQ0E7Z0JBQ0VKLE1BQU07Z0JBQ05DLE1BQU07Z0JBQ05DLE9BQU87Z0JBQ1BDLFdBQVc7Z0JBQ1h2RCxPQUFPO29CQUNMd0QsYUFBYTtnQkFDZjtZQUNGO1lBQ0E7Z0JBQ0VKLE1BQU07Z0JBQ05FLE9BQU87Z0JBQ1BELE1BQU07Z0JBQ05JLFVBQVU7Z0JBQ1ZHLGNBQWN0RixjQUFjRyxLQUFLLEVBQUVvRixlQUFlO2dCQUNsRE4sV0FBVztnQkFDWE8sU0FBUzFFO2dCQUNUWSxPQUFPO29CQUNMd0QsYUFBYTtnQkFDZjtZQUNGO2VBQ0c5RixtQkFBbUI7Z0JBQ3BCcUcsb0JBQW9CO2dCQUNwQkMsb0JBQW9CO1lBQ3RCO1NBQ0Q7SUFDSDtJQUVBLElBQUkvRSxXQUFXO1FBQ2JBLFVBQVVnRixPQUFPLENBQUMsQ0FBQy9DO1lBQ2pCLE9BQVFBLE9BQU9DLEVBQUU7Z0JBQ2YsS0FBSztvQkFDSHBCLGdCQUFnQm9ELE1BQU0sQ0FBQ2UsSUFBSSxDQUFDO3dCQUMxQmQsTUFBTTt3QkFDTkMsTUFBTTt3QkFDTk8sY0FBYzt3QkFDZE4sT0FBTzt3QkFDUHRELE9BQU87NEJBQ0x3RCxhQUNFO3dCQUNKO29CQUNGO29CQUNBO2dCQUNGLEtBQUs7b0JBQ0h6RCxnQkFBZ0JvRCxNQUFNLENBQUNlLElBQUksQ0FDekI7d0JBQ0VkLE1BQU07d0JBQ05DLE1BQU07d0JBQ05LLFFBQVE7d0JBQ1JELFVBQVU7d0JBQ1ZILE9BQU87d0JBQ1B0RCxPQUFPOzRCQUNMd0QsYUFBYTt3QkFDZjtvQkFDRixHQUNBO3dCQUNFSixNQUFNO3dCQUNOQyxNQUFNO3dCQUNOSSxVQUFVO3dCQUNWSCxPQUFPO3dCQUNQdEQsT0FBTzs0QkFDTHdELGFBQWE7d0JBQ2Y7b0JBQ0Y7b0JBRUY7Z0JBQ0YsS0FBSztvQkFDSHpELGdCQUFnQm9ELE1BQU0sQ0FBQ2UsSUFBSSxDQUFDO3dCQUMxQmQsTUFBTTt3QkFDTkMsTUFBTTt3QkFDTk8sY0FBYzt3QkFDZE4sT0FBTzt3QkFDUHRELE9BQU87NEJBQ0x3RCxhQUFhO3dCQUNmO29CQUNGO29CQUNBO2dCQUNGLEtBQUs7b0JBQ0h6RCxnQkFBZ0JvRCxNQUFNLENBQUNlLElBQUksQ0FDekI7d0JBQ0VkLE1BQU07d0JBQ05DLE1BQU07d0JBQ05DLE9BQU87d0JBQ1B0RCxPQUFPOzRCQUNMd0QsYUFBYTt3QkFDZjtvQkFDRixHQUNBO3dCQUNFSixNQUFNO3dCQUNOQyxNQUFNO3dCQUNOTyxjQUFjO3dCQUNkTixPQUFPO3dCQUNQdEQsT0FBTzs0QkFDTHdELGFBQ0U7d0JBQ0o7b0JBQ0Y7b0JBRUY7Z0JBQ0YsS0FBSztvQkFDSHpELGdCQUFnQm9ELE1BQU0sQ0FBQ2UsSUFBSSxDQUN6Qjt3QkFDRWQsTUFBTTt3QkFDTkMsTUFBTTt3QkFDTk8sY0FBYzt3QkFDZE4sT0FBTzt3QkFDUHRELE9BQU87NEJBQ0x3RCxhQUFhO3dCQUNmO29CQUNGLEdBQ0E7d0JBQ0VKLE1BQU07d0JBQ05DLE1BQU07d0JBQ05DLE9BQU87d0JBQ1B0RCxPQUFPOzRCQUNMd0QsYUFBYTt3QkFDZjtvQkFDRixHQUNBO3dCQUNFSixNQUFNO3dCQUNOQyxNQUFNO3dCQUNOQyxPQUFPO3dCQUNQdEQsT0FBTzs0QkFDTHdELGFBQWE7d0JBQ2Y7b0JBQ0Y7b0JBRUY7Z0JBQ0YsS0FBSztvQkFDSHpELGdCQUFnQm9ELE1BQU0sQ0FBQ2UsSUFBSSxDQUFDO3dCQUMxQmQsTUFBTTt3QkFDTkMsTUFBTTt3QkFDTkksVUFBVTt3QkFDVkMsUUFBUTt3QkFDUjFELE9BQU87NEJBQ0xtRSxVQUFVOzRCQUNWWCxhQUFhO3dCQUNmO29CQUNGO29CQUNBO2dCQUNGO29CQUNFO1lBQ0o7UUFDRjtJQUNGO0lBRUEsSUFBSWxGLGNBQWNHLEtBQUssRUFBRTJGLHFCQUFxQjtRQUM1Q3JFLGtCQUFrQnpCLGNBQWNHLEtBQUssQ0FBQzJGLG1CQUFtQixDQUFDO1lBQ3hENUUsWUFBWU87UUFDZDtJQUNGO0lBRUEsT0FBT0E7QUFDVCJ9