@revealui/auth 0.0.1-pre.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (413) hide show
  1. package/LICENSE +202 -0
  2. package/dist/better-auth/adapter/__tests__/transform.test.js +213 -0
  3. package/dist/better-auth/adapter/__tests__/transform.test.js.map +1 -0
  4. package/dist/better-auth/adapter/generate-schema/biome.d.js +2 -0
  5. package/dist/better-auth/adapter/generate-schema/biome.d.js.map +1 -0
  6. package/dist/better-auth/adapter/generate-schema/generate-schema-builder.d.ts +5 -0
  7. package/dist/better-auth/adapter/generate-schema/generate-schema-builder.js +482 -0
  8. package/dist/better-auth/adapter/generate-schema/generate-schema-builder.js.map +1 -0
  9. package/dist/better-auth/adapter/generate-schema/get-payload-schema.d.ts +1 -0
  10. package/dist/better-auth/adapter/generate-schema/get-payload-schema.js +42 -0
  11. package/dist/better-auth/adapter/generate-schema/get-payload-schema.js.map +1 -0
  12. package/dist/better-auth/adapter/generate-schema/index.d.ts +4 -0
  13. package/dist/better-auth/adapter/generate-schema/index.js +19 -0
  14. package/dist/better-auth/adapter/generate-schema/index.js.map +1 -0
  15. package/dist/better-auth/adapter/generate-schema/utils.d.ts +2 -0
  16. package/dist/better-auth/adapter/generate-schema/utils.js +20 -0
  17. package/dist/better-auth/adapter/generate-schema/utils.js.map +1 -0
  18. package/dist/better-auth/adapter/index.d.ts +15 -0
  19. package/dist/better-auth/adapter/index.js +731 -0
  20. package/dist/better-auth/adapter/index.js.map +1 -0
  21. package/dist/better-auth/adapter/tests/adapter.test.js +174 -0
  22. package/dist/better-auth/adapter/tests/adapter.test.js.map +1 -0
  23. package/dist/better-auth/adapter/tests/base-collections-tests.js +575 -0
  24. package/dist/better-auth/adapter/tests/base-collections-tests.js.map +1 -0
  25. package/dist/better-auth/adapter/tests/dev/index.js +117 -0
  26. package/dist/better-auth/adapter/tests/dev/index.js.map +1 -0
  27. package/dist/better-auth/adapter/tests/dev/migrate.js +26 -0
  28. package/dist/better-auth/adapter/tests/dev/migrate.js.map +1 -0
  29. package/dist/better-auth/adapter/tests/dev/migrations/20250423_232936_init.js +218 -0
  30. package/dist/better-auth/adapter/tests/dev/migrations/20250423_232936_init.js.map +1 -0
  31. package/dist/better-auth/adapter/tests/dev/schema.js +160 -0
  32. package/dist/better-auth/adapter/tests/dev/schema.js.map +1 -0
  33. package/dist/better-auth/adapter/tests/plugins-tests.js +2 -0
  34. package/dist/better-auth/adapter/tests/plugins-tests.js.map +1 -0
  35. package/dist/better-auth/adapter/transform/index.d.ts +27 -0
  36. package/dist/better-auth/adapter/transform/index.js +664 -0
  37. package/dist/better-auth/adapter/transform/index.js.map +1 -0
  38. package/dist/better-auth/adapter/types.d.ts +10 -0
  39. package/dist/better-auth/adapter/types.js +3 -0
  40. package/dist/better-auth/adapter/types.js.map +1 -0
  41. package/dist/better-auth/generated-types.d.ts +285 -0
  42. package/dist/better-auth/index.d.ts +3 -0
  43. package/dist/better-auth/index.js +5 -0
  44. package/dist/better-auth/index.js.map +1 -0
  45. package/dist/better-auth/plugin/__tests__/plugin.test.js +162 -0
  46. package/dist/better-auth/plugin/__tests__/plugin.test.js.map +1 -0
  47. package/dist/better-auth/plugin/constants.d.ts +220 -0
  48. package/dist/better-auth/plugin/constants.js +249 -0
  49. package/dist/better-auth/plugin/constants.js.map +1 -0
  50. package/dist/better-auth/plugin/helpers/check-plugin-exists.d.ts +12 -0
  51. package/dist/better-auth/plugin/helpers/check-plugin-exists.js +14 -0
  52. package/dist/better-auth/plugin/helpers/check-plugin-exists.js.map +1 -0
  53. package/dist/better-auth/plugin/helpers/generate-verify-email-url.d.ts +29 -0
  54. package/dist/better-auth/plugin/helpers/generate-verify-email-url.js +46 -0
  55. package/dist/better-auth/plugin/helpers/generate-verify-email-url.js.map +1 -0
  56. package/dist/better-auth/plugin/helpers/get-admin-access.d.ts +7 -0
  57. package/dist/better-auth/plugin/helpers/get-admin-access.js +22 -0
  58. package/dist/better-auth/plugin/helpers/get-admin-access.js.map +1 -0
  59. package/dist/better-auth/plugin/helpers/get-all-roles.d.ts +5 -0
  60. package/dist/better-auth/plugin/helpers/get-all-roles.js +20 -0
  61. package/dist/better-auth/plugin/helpers/get-all-roles.js.map +1 -0
  62. package/dist/better-auth/plugin/helpers/get-better-auth-schema.d.ts +18 -0
  63. package/dist/better-auth/plugin/helpers/get-better-auth-schema.js +70 -0
  64. package/dist/better-auth/plugin/helpers/get-better-auth-schema.js.map +1 -0
  65. package/dist/better-auth/plugin/helpers/get-collection-slug.d.ts +5 -0
  66. package/dist/better-auth/plugin/helpers/get-collection-slug.js +20 -0
  67. package/dist/better-auth/plugin/helpers/get-collection-slug.js.map +1 -0
  68. package/dist/better-auth/plugin/helpers/get-collection.d.ts +15 -0
  69. package/dist/better-auth/plugin/helpers/get-collection.js +29 -0
  70. package/dist/better-auth/plugin/helpers/get-collection.js.map +1 -0
  71. package/dist/better-auth/plugin/helpers/get-ip.d.ts +2 -0
  72. package/dist/better-auth/plugin/helpers/get-ip.js +31 -0
  73. package/dist/better-auth/plugin/helpers/get-ip.js.map +1 -0
  74. package/dist/better-auth/plugin/helpers/get-signed-cookie.d.ts +2 -0
  75. package/dist/better-auth/plugin/helpers/get-signed-cookie.js +65 -0
  76. package/dist/better-auth/plugin/helpers/get-signed-cookie.js.map +1 -0
  77. package/dist/better-auth/plugin/helpers/index.d.ts +1 -0
  78. package/dist/better-auth/plugin/helpers/index.js +3 -0
  79. package/dist/better-auth/plugin/helpers/index.js.map +1 -0
  80. package/dist/better-auth/plugin/helpers/prepare-session-data.d.ts +59 -0
  81. package/dist/better-auth/plugin/helpers/prepare-session-data.js +49 -0
  82. package/dist/better-auth/plugin/helpers/prepare-session-data.js.map +1 -0
  83. package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.d.ts +20 -0
  84. package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.js +67 -0
  85. package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.js.map +1 -0
  86. package/dist/better-auth/plugin/index.d.ts +11 -0
  87. package/dist/better-auth/plugin/index.js +125 -0
  88. package/dist/better-auth/plugin/index.js.map +1 -0
  89. package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.d.ts +12 -0
  90. package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.js +87 -0
  91. package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.js.map +1 -0
  92. package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.d.ts +3 -0
  93. package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.js +60 -0
  94. package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.js.map +1 -0
  95. package/dist/better-auth/plugin/lib/build-collections/accounts/index.d.ts +3 -0
  96. package/dist/better-auth/plugin/lib/build-collections/accounts/index.js +154 -0
  97. package/dist/better-auth/plugin/lib/build-collections/accounts/index.js.map +1 -0
  98. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.d.ts +5 -0
  99. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.js +11 -0
  100. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.js.map +1 -0
  101. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.d.ts +2 -0
  102. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.js +8 -0
  103. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.js.map +1 -0
  104. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.d.ts +6 -0
  105. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.js +119 -0
  106. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.js.map +1 -0
  107. package/dist/better-auth/plugin/lib/build-collections/api-keys.d.ts +3 -0
  108. package/dist/better-auth/plugin/lib/build-collections/api-keys.js +177 -0
  109. package/dist/better-auth/plugin/lib/build-collections/api-keys.js.map +1 -0
  110. package/dist/better-auth/plugin/lib/build-collections/device-code.d.ts +3 -0
  111. package/dist/better-auth/plugin/lib/build-collections/device-code.js +50 -0
  112. package/dist/better-auth/plugin/lib/build-collections/device-code.js.map +1 -0
  113. package/dist/better-auth/plugin/lib/build-collections/index.d.ts +10 -0
  114. package/dist/better-auth/plugin/lib/build-collections/index.js +73 -0
  115. package/dist/better-auth/plugin/lib/build-collections/index.js.map +1 -0
  116. package/dist/better-auth/plugin/lib/build-collections/invitations.d.ts +3 -0
  117. package/dist/better-auth/plugin/lib/build-collections/invitations.js +94 -0
  118. package/dist/better-auth/plugin/lib/build-collections/invitations.js.map +1 -0
  119. package/dist/better-auth/plugin/lib/build-collections/jwks.d.ts +3 -0
  120. package/dist/better-auth/plugin/lib/build-collections/jwks.js +59 -0
  121. package/dist/better-auth/plugin/lib/build-collections/jwks.js.map +1 -0
  122. package/dist/better-auth/plugin/lib/build-collections/members.d.ts +3 -0
  123. package/dist/better-auth/plugin/lib/build-collections/members.js +73 -0
  124. package/dist/better-auth/plugin/lib/build-collections/members.js.map +1 -0
  125. package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.d.ts +3 -0
  126. package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.js +107 -0
  127. package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.js.map +1 -0
  128. package/dist/better-auth/plugin/lib/build-collections/oauth-applications.d.ts +3 -0
  129. package/dist/better-auth/plugin/lib/build-collections/oauth-applications.js +118 -0
  130. package/dist/better-auth/plugin/lib/build-collections/oauth-applications.js.map +1 -0
  131. package/dist/better-auth/plugin/lib/build-collections/oauth-consents.d.ts +3 -0
  132. package/dist/better-auth/plugin/lib/build-collections/oauth-consents.js +89 -0
  133. package/dist/better-auth/plugin/lib/build-collections/oauth-consents.js.map +1 -0
  134. package/dist/better-auth/plugin/lib/build-collections/organizations.d.ts +3 -0
  135. package/dist/better-auth/plugin/lib/build-collections/organizations.js +70 -0
  136. package/dist/better-auth/plugin/lib/build-collections/organizations.js.map +1 -0
  137. package/dist/better-auth/plugin/lib/build-collections/passkeys.d.ts +3 -0
  138. package/dist/better-auth/plugin/lib/build-collections/passkeys.js +115 -0
  139. package/dist/better-auth/plugin/lib/build-collections/passkeys.js.map +1 -0
  140. package/dist/better-auth/plugin/lib/build-collections/sessions.d.ts +3 -0
  141. package/dist/better-auth/plugin/lib/build-collections/sessions.js +170 -0
  142. package/dist/better-auth/plugin/lib/build-collections/sessions.js.map +1 -0
  143. package/dist/better-auth/plugin/lib/build-collections/sso-providers.d.ts +3 -0
  144. package/dist/better-auth/plugin/lib/build-collections/sso-providers.js +81 -0
  145. package/dist/better-auth/plugin/lib/build-collections/sso-providers.js.map +1 -0
  146. package/dist/better-auth/plugin/lib/build-collections/subscriptions.d.ts +3 -0
  147. package/dist/better-auth/plugin/lib/build-collections/subscriptions.js +111 -0
  148. package/dist/better-auth/plugin/lib/build-collections/subscriptions.js.map +1 -0
  149. package/dist/better-auth/plugin/lib/build-collections/team-members.d.ts +3 -0
  150. package/dist/better-auth/plugin/lib/build-collections/team-members.js +57 -0
  151. package/dist/better-auth/plugin/lib/build-collections/team-members.js.map +1 -0
  152. package/dist/better-auth/plugin/lib/build-collections/teams.d.ts +3 -0
  153. package/dist/better-auth/plugin/lib/build-collections/teams.js +76 -0
  154. package/dist/better-auth/plugin/lib/build-collections/teams.js.map +1 -0
  155. package/dist/better-auth/plugin/lib/build-collections/two-factors.d.ts +3 -0
  156. package/dist/better-auth/plugin/lib/build-collections/two-factors.js +67 -0
  157. package/dist/better-auth/plugin/lib/build-collections/two-factors.js.map +1 -0
  158. package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.d.ts +7 -0
  159. package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.js +53 -0
  160. package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.js.map +1 -0
  161. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.d.ts +11 -0
  162. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.js +75 -0
  163. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.js.map +1 -0
  164. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/index.d.ts +4 -0
  165. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/index.js +6 -0
  166. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/index.js.map +1 -0
  167. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.d.ts +2 -0
  168. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.js +115 -0
  169. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.js.map +1 -0
  170. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.d.ts +3 -0
  171. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.js +64 -0
  172. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.js.map +1 -0
  173. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.d.ts +3 -0
  174. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.js +80 -0
  175. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.js.map +1 -0
  176. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.d.ts +6 -0
  177. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.js +79 -0
  178. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.js.map +1 -0
  179. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.d.ts +2 -0
  180. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.js +82 -0
  181. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.js.map +1 -0
  182. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.d.ts +2 -0
  183. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.js +54 -0
  184. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.js.map +1 -0
  185. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.d.ts +6 -0
  186. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.js +15 -0
  187. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.js.map +1 -0
  188. package/dist/better-auth/plugin/lib/build-collections/users/hooks/index.d.ts +6 -0
  189. package/dist/better-auth/plugin/lib/build-collections/users/hooks/index.js +8 -0
  190. package/dist/better-auth/plugin/lib/build-collections/users/hooks/index.js.map +1 -0
  191. package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.d.ts +2 -0
  192. package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.js +17 -0
  193. package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.js.map +1 -0
  194. package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.d.ts +2 -0
  195. package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.js +91 -0
  196. package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.js.map +1 -0
  197. package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts +3 -0
  198. package/dist/better-auth/plugin/lib/build-collections/users/index.js +341 -0
  199. package/dist/better-auth/plugin/lib/build-collections/users/index.js.map +1 -0
  200. package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.d.ts +15 -0
  201. package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.js +24 -0
  202. package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.js.map +1 -0
  203. package/dist/better-auth/plugin/lib/build-collections/utils/filter-duplicate-fields.d.ts +10 -0
  204. package/dist/better-auth/plugin/lib/build-collections/utils/filter-duplicate-fields.js +67 -0
  205. package/dist/better-auth/plugin/lib/build-collections/utils/filter-duplicate-fields.js.map +1 -0
  206. package/dist/better-auth/plugin/lib/build-collections/utils/filter-properties.d.ts +9 -0
  207. package/dist/better-auth/plugin/lib/build-collections/utils/filter-properties.js +94 -0
  208. package/dist/better-auth/plugin/lib/build-collections/utils/filter-properties.js.map +1 -0
  209. package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.d.ts +7 -0
  210. package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.js +35 -0
  211. package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.js.map +1 -0
  212. package/dist/better-auth/plugin/lib/build-collections/utils/model-field-transformations.d.ts +12 -0
  213. package/dist/better-auth/plugin/lib/build-collections/utils/model-field-transformations.js +25 -0
  214. package/dist/better-auth/plugin/lib/build-collections/utils/model-field-transformations.js.map +1 -0
  215. package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.d.ts +14 -0
  216. package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.js +67 -0
  217. package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.js.map +1 -0
  218. package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.d.ts +20 -0
  219. package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.js +98 -0
  220. package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.js.map +1 -0
  221. package/dist/better-auth/plugin/lib/build-collections/verifications.d.ts +3 -0
  222. package/dist/better-auth/plugin/lib/build-collections/verifications.js +87 -0
  223. package/dist/better-auth/plugin/lib/build-collections/verifications.js.map +1 -0
  224. package/dist/better-auth/plugin/lib/get-payload-auth.d.ts +5 -0
  225. package/dist/better-auth/plugin/lib/get-payload-auth.js +9 -0
  226. package/dist/better-auth/plugin/lib/get-payload-auth.js.map +1 -0
  227. package/dist/better-auth/plugin/lib/init-better-auth.d.ts +7 -0
  228. package/dist/better-auth/plugin/lib/init-better-auth.js +46 -0
  229. package/dist/better-auth/plugin/lib/init-better-auth.js.map +1 -0
  230. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.d.ts +2 -0
  231. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.js +9 -0
  232. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.js.map +1 -0
  233. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.d.ts +2 -0
  234. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.js +10 -0
  235. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.js.map +1 -0
  236. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/device-authorization-plugin.d.ts +2 -0
  237. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/device-authorization-plugin.js +8 -0
  238. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/device-authorization-plugin.js.map +1 -0
  239. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.d.ts +10 -0
  240. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.js +156 -0
  241. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.js.map +1 -0
  242. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.d.ts +2 -0
  243. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.js +18 -0
  244. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.js.map +1 -0
  245. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.d.ts +2 -0
  246. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.js +34 -0
  247. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.js.map +1 -0
  248. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.d.ts +2 -0
  249. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.js +11 -0
  250. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.js.map +1 -0
  251. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.d.ts +2 -0
  252. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.js +10 -0
  253. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.js.map +1 -0
  254. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.d.ts +2 -0
  255. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.js +11 -0
  256. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.js.map +1 -0
  257. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/ensure-password-set-before-create.d.ts +7 -0
  258. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/ensure-password-set-before-create.js +23 -0
  259. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/ensure-password-set-before-create.js.map +1 -0
  260. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.d.ts +25 -0
  261. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.js +62 -0
  262. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.js.map +1 -0
  263. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/require-admin-invite-for-sign-up-middleware.d.ts +9 -0
  264. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/require-admin-invite-for-sign-up-middleware.js +47 -0
  265. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/require-admin-invite-for-sign-up-middleware.js.map +1 -0
  266. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts +15 -0
  267. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.js +42 -0
  268. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.js.map +1 -0
  269. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/use-admin-invite-after-email-sign-up-middleware.d.ts +9 -0
  270. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/use-admin-invite-after-email-sign-up-middleware.js +63 -0
  271. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/use-admin-invite-after-email-sign-up-middleware.js.map +1 -0
  272. package/dist/better-auth/plugin/lib/set-login-methods.d.ts +4 -0
  273. package/dist/better-auth/plugin/lib/set-login-methods.js +14 -0
  274. package/dist/better-auth/plugin/lib/set-login-methods.js.map +1 -0
  275. package/dist/better-auth/plugin/payload/components/admin-buttons/index.d.ts +9 -0
  276. package/dist/better-auth/plugin/payload/components/admin-buttons/index.js +143 -0
  277. package/dist/better-auth/plugin/payload/components/admin-buttons/index.js.map +1 -0
  278. package/dist/better-auth/plugin/payload/components/admin-invite-button/index.d.ts +10 -0
  279. package/dist/better-auth/plugin/payload/components/admin-invite-button/index.js +219 -0
  280. package/dist/better-auth/plugin/payload/components/admin-invite-button/index.js.map +1 -0
  281. package/dist/better-auth/plugin/payload/components/logout-button.d.ts +4 -0
  282. package/dist/better-auth/plugin/payload/components/logout-button.js +24 -0
  283. package/dist/better-auth/plugin/payload/components/logout-button.js.map +1 -0
  284. package/dist/better-auth/plugin/payload/components/passkeys/add-button.d.ts +8 -0
  285. package/dist/better-auth/plugin/payload/components/passkeys/add-button.js +117 -0
  286. package/dist/better-auth/plugin/payload/components/passkeys/add-button.js.map +1 -0
  287. package/dist/better-auth/plugin/payload/components/passkeys/client.d.ts +3 -0
  288. package/dist/better-auth/plugin/payload/components/passkeys/client.js +66 -0
  289. package/dist/better-auth/plugin/payload/components/passkeys/client.js.map +1 -0
  290. package/dist/better-auth/plugin/payload/components/passkeys/index.d.ts +4 -0
  291. package/dist/better-auth/plugin/payload/components/passkeys/index.js +52 -0
  292. package/dist/better-auth/plugin/payload/components/passkeys/index.js.map +1 -0
  293. package/dist/better-auth/plugin/payload/components/passkeys/list.d.ts +8 -0
  294. package/dist/better-auth/plugin/payload/components/passkeys/list.js +57 -0
  295. package/dist/better-auth/plugin/payload/components/passkeys/list.js.map +1 -0
  296. package/dist/better-auth/plugin/payload/components/passkeys/types.d.ts +22 -0
  297. package/dist/better-auth/plugin/payload/components/passkeys/types.js +3 -0
  298. package/dist/better-auth/plugin/payload/components/passkeys/types.js.map +1 -0
  299. package/dist/better-auth/plugin/payload/components/rsc-redirect.d.ts +6 -0
  300. package/dist/better-auth/plugin/payload/components/rsc-redirect.js +7 -0
  301. package/dist/better-auth/plugin/payload/components/rsc-redirect.js.map +1 -0
  302. package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.d.ts +15 -0
  303. package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.js +157 -0
  304. package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.js.map +1 -0
  305. package/dist/better-auth/plugin/payload/components/token-field.d.ts +4 -0
  306. package/dist/better-auth/plugin/payload/components/token-field.js +31 -0
  307. package/dist/better-auth/plugin/payload/components/token-field.js.map +1 -0
  308. package/dist/better-auth/plugin/payload/components/two-factor-auth/index.d.ts +8 -0
  309. package/dist/better-auth/plugin/payload/components/two-factor-auth/index.js +300 -0
  310. package/dist/better-auth/plugin/payload/components/two-factor-auth/index.js.map +1 -0
  311. package/dist/better-auth/plugin/payload/exports/client.d.ts +6 -0
  312. package/dist/better-auth/plugin/payload/exports/client.js +8 -0
  313. package/dist/better-auth/plugin/payload/exports/client.js.map +1 -0
  314. package/dist/better-auth/plugin/payload/exports/rsc.d.ts +8 -0
  315. package/dist/better-auth/plugin/payload/exports/rsc.js +10 -0
  316. package/dist/better-auth/plugin/payload/exports/rsc.js.map +1 -0
  317. package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.d.ts +2 -0
  318. package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.js +9 -0
  319. package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.js.map +1 -0
  320. package/dist/better-auth/plugin/payload/utils/get-safe-redirect.d.ts +1 -0
  321. package/dist/better-auth/plugin/payload/utils/get-safe-redirect.js +22 -0
  322. package/dist/better-auth/plugin/payload/utils/get-safe-redirect.js.map +1 -0
  323. package/dist/better-auth/plugin/payload/views/admin-login/client.d.ts +19 -0
  324. package/dist/better-auth/plugin/payload/views/admin-login/client.js +226 -0
  325. package/dist/better-auth/plugin/payload/views/admin-login/client.js.map +1 -0
  326. package/dist/better-auth/plugin/payload/views/admin-login/index.d.ts +10 -0
  327. package/dist/better-auth/plugin/payload/views/admin-login/index.js +150 -0
  328. package/dist/better-auth/plugin/payload/views/admin-login/index.js.map +1 -0
  329. package/dist/better-auth/plugin/payload/views/admin-signup/client.d.ts +16 -0
  330. package/dist/better-auth/plugin/payload/views/admin-signup/client.js +299 -0
  331. package/dist/better-auth/plugin/payload/views/admin-signup/client.js.map +1 -0
  332. package/dist/better-auth/plugin/payload/views/admin-signup/index.d.ts +9 -0
  333. package/dist/better-auth/plugin/payload/views/admin-signup/index.js +104 -0
  334. package/dist/better-auth/plugin/payload/views/admin-signup/index.js.map +1 -0
  335. package/dist/better-auth/plugin/payload/views/forgot-password/client.d.ts +7 -0
  336. package/dist/better-auth/plugin/payload/views/forgot-password/client.js +119 -0
  337. package/dist/better-auth/plugin/payload/views/forgot-password/client.js.map +1 -0
  338. package/dist/better-auth/plugin/payload/views/forgot-password/index.d.ts +8 -0
  339. package/dist/better-auth/plugin/payload/views/forgot-password/index.js +78 -0
  340. package/dist/better-auth/plugin/payload/views/forgot-password/index.js.map +1 -0
  341. package/dist/better-auth/plugin/payload/views/reset-password/client.d.ts +10 -0
  342. package/dist/better-auth/plugin/payload/views/reset-password/client.js +144 -0
  343. package/dist/better-auth/plugin/payload/views/reset-password/client.js.map +1 -0
  344. package/dist/better-auth/plugin/payload/views/reset-password/index.d.ts +8 -0
  345. package/dist/better-auth/plugin/payload/views/reset-password/index.js +96 -0
  346. package/dist/better-auth/plugin/payload/views/reset-password/index.js.map +1 -0
  347. package/dist/better-auth/plugin/payload/views/two-factor-verify/client.d.ts +6 -0
  348. package/dist/better-auth/plugin/payload/views/two-factor-verify/client.js +96 -0
  349. package/dist/better-auth/plugin/payload/views/two-factor-verify/client.js.map +1 -0
  350. package/dist/better-auth/plugin/payload/views/two-factor-verify/index.d.ts +9 -0
  351. package/dist/better-auth/plugin/payload/views/two-factor-verify/index.js +56 -0
  352. package/dist/better-auth/plugin/payload/views/two-factor-verify/index.js.map +1 -0
  353. package/dist/better-auth/plugin/types.d.ts +429 -0
  354. package/dist/better-auth/plugin/types.js +3 -0
  355. package/dist/better-auth/plugin/types.js.map +1 -0
  356. package/dist/better-auth/plugin/utils/set.d.ts +39 -0
  357. package/dist/better-auth/plugin/utils/set.js +103 -0
  358. package/dist/better-auth/plugin/utils/set.js.map +1 -0
  359. package/dist/better-auth/scripts/generate-types.d.ts +1 -0
  360. package/dist/better-auth/scripts/generate-types.js +234 -0
  361. package/dist/better-auth/scripts/generate-types.js.map +1 -0
  362. package/dist/better-auth/types.d.ts +2 -0
  363. package/dist/better-auth/types.js +4 -0
  364. package/dist/better-auth/types.js.map +1 -0
  365. package/dist/index.d.ts +1 -0
  366. package/dist/index.js +4 -0
  367. package/dist/index.js.map +1 -0
  368. package/dist/shared/components/icons.d.ts +7 -0
  369. package/dist/shared/components/icons.js +442 -0
  370. package/dist/shared/components/icons.js.map +1 -0
  371. package/dist/shared/components/logo.d.ts +3 -0
  372. package/dist/shared/components/logo.js +24 -0
  373. package/dist/shared/components/logo.js.map +1 -0
  374. package/dist/shared/form/components/submit.d.ts +7 -0
  375. package/dist/shared/form/components/submit.js +16 -0
  376. package/dist/shared/form/components/submit.js.map +1 -0
  377. package/dist/shared/form/fields/text-field.d.ts +8 -0
  378. package/dist/shared/form/fields/text-field.js +37 -0
  379. package/dist/shared/form/fields/text-field.js.map +1 -0
  380. package/dist/shared/form/index.d.ts +4 -0
  381. package/dist/shared/form/index.js +8 -0
  382. package/dist/shared/form/index.js.map +1 -0
  383. package/dist/shared/form/ui/header/index.d.ts +8 -0
  384. package/dist/shared/form/ui/header/index.js +24 -0
  385. package/dist/shared/form/ui/header/index.js.map +1 -0
  386. package/dist/shared/form/ui/index.d.ts +31 -0
  387. package/dist/shared/form/ui/index.js +57 -0
  388. package/dist/shared/form/ui/index.js.map +1 -0
  389. package/dist/shared/form/validation.d.ts +51 -0
  390. package/dist/shared/form/validation.js +127 -0
  391. package/dist/shared/form/validation.js.map +1 -0
  392. package/dist/shared/index.d.ts +2 -0
  393. package/dist/shared/index.js +4 -0
  394. package/dist/shared/index.js.map +1 -0
  395. package/dist/shared/payload/fields/field-copy-button/index.d.ts +3 -0
  396. package/dist/shared/payload/fields/field-copy-button/index.js +38 -0
  397. package/dist/shared/payload/fields/field-copy-button/index.js.map +1 -0
  398. package/dist/shared/payload/fields/generate-uuid-button/index.d.ts +3 -0
  399. package/dist/shared/payload/fields/generate-uuid-button/index.js +26 -0
  400. package/dist/shared/payload/fields/generate-uuid-button/index.js.map +1 -0
  401. package/dist/shared/payload/fields/index.d.ts +2 -0
  402. package/dist/shared/payload/fields/index.js +4 -0
  403. package/dist/shared/payload/fields/index.js.map +1 -0
  404. package/dist/shared/utils/regex.d.ts +2 -0
  405. package/dist/shared/utils/regex.js +4 -0
  406. package/dist/shared/utils/regex.js.map +1 -0
  407. package/dist/shared/utils/try-catch.d.ts +11 -0
  408. package/dist/shared/utils/try-catch.js +17 -0
  409. package/dist/shared/utils/try-catch.js.map +1 -0
  410. package/dist/shared/utils/value-or-default.d.ts +9 -0
  411. package/dist/shared/utils/value-or-default.js +12 -0
  412. package/dist/shared/utils/value-or-default.js.map +1 -0
  413. package/package.json +122 -0
@@ -0,0 +1,226 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { adminRoutes } from "@/better-auth/plugin/constants";
4
+ import { AdminSocialProviderButtons } from "@/better-auth/plugin/payload/components/social-provider-buttons";
5
+ import { getSafeRedirect } from "@/better-auth/plugin/payload/utils/get-safe-redirect";
6
+ import { zodResolver } from "@hookform/resolvers/zod";
7
+ import { FormProvider, useForm } from "react-hook-form";
8
+ const valueOrDefaultString = (value, defaultValue)=>value ?? defaultValue;
9
+ import { Button, Link, toast, useConfig, useTranslation } from "@payloadcms/ui";
10
+ import { createAuthClient } from "better-auth/client";
11
+ import { passkeyClient, twoFactorClient, usernameClient } from "better-auth/client/plugins";
12
+ import { useRouter } from "next/navigation";
13
+ import { formatAdminURL, getLoginOptions } from "payload/shared";
14
+ import React, { useMemo, useState } from "react";
15
+ import { z } from "zod";
16
+ const baseClass = 'login__form';
17
+ const LoginForm = ({ hasUsernamePlugin, hasPasskeyPlugin, prefillEmail, prefillPassword, prefillUsername, searchParams, loginWithUsername, baseURL, basePath })=>{
18
+ const { config } = useConfig();
19
+ const router = useRouter();
20
+ const adminRoute1 = valueOrDefaultString(config?.routes?.admin, '/admin');
21
+ const { t } = useTranslation();
22
+ const { canLoginWithEmail, canLoginWithUsername } = getLoginOptions(loginWithUsername);
23
+ const searchParamError = searchParams?.error;
24
+ const redirectUrl = getSafeRedirect(searchParams?.redirect ?? '', adminRoute1);
25
+ const forgotPasswordUrl = formatAdminURL({
26
+ adminRoute: adminRoute1,
27
+ path: adminRoutes?.forgotPassword
28
+ });
29
+ const authClient = useMemo(()=>{
30
+ const options = {
31
+ plugins: [
32
+ usernameClient(),
33
+ twoFactorClient({
34
+ onTwoFactorRedirect () {
35
+ router.push(`${adminRoute1}${adminRoutes.twoFactorVerify}?redirect=${redirectUrl}`);
36
+ }
37
+ }),
38
+ ...hasPasskeyPlugin ? [
39
+ passkeyClient()
40
+ ] : []
41
+ ]
42
+ };
43
+ if (baseURL) options.baseURL = baseURL;
44
+ if (basePath) options.basePath = basePath;
45
+ return createAuthClient(options);
46
+ }, []);
47
+ const loginType = useMemo(()=>{
48
+ if (canLoginWithEmail && canLoginWithUsername && hasUsernamePlugin) return 'emailOrUsername';
49
+ if (canLoginWithUsername && hasUsernamePlugin) return 'username';
50
+ return 'email';
51
+ }, [
52
+ canLoginWithEmail,
53
+ canLoginWithUsername,
54
+ hasUsernamePlugin
55
+ ]);
56
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
57
+ const isValidEmail = (email)=>emailRegex.test(email);
58
+ const loginSchema = z.object({
59
+ login: z.string().min(1, t('validation:required') || 'Required'),
60
+ password: z.string().min(1, t('validation:required') || 'Required')
61
+ });
62
+ const methods = useForm({
63
+ defaultValues: {
64
+ login: prefillEmail ?? prefillUsername ?? '',
65
+ password: prefillPassword ?? ''
66
+ },
67
+ resolver: zodResolver(loginSchema),
68
+ mode: 'onSubmit'
69
+ });
70
+ const [requireEmailVerification, setRequireEmailVerification] = useState(false);
71
+ const onSubmit = async (value)=>{
72
+ const { login, password } = value;
73
+ const isEmail = isValidEmail(login);
74
+ try {
75
+ const { data, error } = await (loginType === 'email' || loginType === 'emailOrUsername' && isEmail ? authClient.signIn.email({
76
+ email: login,
77
+ password,
78
+ callbackURL: redirectUrl
79
+ }) : authClient.signIn.username({
80
+ username: login,
81
+ password
82
+ }));
83
+ if (error) {
84
+ if (error.code === 'EMAIL_NOT_VERIFIED') {
85
+ setRequireEmailVerification(true);
86
+ }
87
+ if (error.message) {
88
+ toast.error(error.message.charAt(0).toUpperCase() + error.message.slice(1));
89
+ }
90
+ }
91
+ if (data?.token) {
92
+ toast.success(t('general:success'));
93
+ window.location.href = redirectUrl;
94
+ }
95
+ } catch (err) {
96
+ toast.error(t('error:unknown') ?? 'An unexpected error occurred');
97
+ }
98
+ };
99
+ if (requireEmailVerification) {
100
+ return /*#__PURE__*/ _jsxs("div", {
101
+ className: "form-header",
102
+ style: {
103
+ textAlign: 'center'
104
+ },
105
+ children: [
106
+ /*#__PURE__*/ _jsx("h1", {
107
+ children: "Please verify your email"
108
+ }),
109
+ t('authentication:emailSent') && /*#__PURE__*/ _jsx("p", {
110
+ children: t('authentication:emailSent')
111
+ })
112
+ ]
113
+ });
114
+ }
115
+ const getLoginTypeLabel = ()=>{
116
+ const labels = {
117
+ email: t('general:email') ?? 'Email',
118
+ username: t('authentication:username') ?? 'Username',
119
+ emailOrUsername: t('authentication:emailOrUsername') ?? 'Email or Username'
120
+ };
121
+ return labels[loginType];
122
+ };
123
+ return /*#__PURE__*/ _jsxs("div", {
124
+ className: `${baseClass}__wrapper`,
125
+ children: [
126
+ searchParamError && searchParamError === 'signup_disabled' && /*#__PURE__*/ _jsx("div", {
127
+ style: {
128
+ color: 'red',
129
+ marginBottom: '1rem'
130
+ },
131
+ children: "Sign up is disabled."
132
+ }),
133
+ /*#__PURE__*/ _jsx(FormProvider, {
134
+ ...methods,
135
+ children: /*#__PURE__*/ _jsxs("form", {
136
+ className: baseClass,
137
+ onSubmit: methods.handleSubmit(onSubmit),
138
+ children: [
139
+ /*#__PURE__*/ _jsxs("div", {
140
+ className: baseClass,
141
+ children: [
142
+ /*#__PURE__*/ _jsx("input", {
143
+ type: "text",
144
+ value: methods.watch('login'),
145
+ onChange: (e)=>methods.setValue('login', e.target.value),
146
+ autoComplete: hasPasskeyPlugin ? 'username webauthn' : 'email',
147
+ placeholder: getLoginTypeLabel(),
148
+ style: {
149
+ width: '100%',
150
+ padding: '0.5rem',
151
+ marginBottom: '1rem'
152
+ }
153
+ }),
154
+ /*#__PURE__*/ _jsx("input", {
155
+ type: "password",
156
+ value: methods.watch('password'),
157
+ onChange: (e)=>methods.setValue('password', e.target.value),
158
+ autoComplete: hasPasskeyPlugin ? 'current-password webauthn' : 'current-password',
159
+ placeholder: t('general:password'),
160
+ style: {
161
+ width: '100%',
162
+ padding: '0.5rem',
163
+ marginBottom: '1rem'
164
+ }
165
+ })
166
+ ]
167
+ }),
168
+ /*#__PURE__*/ _jsx(Link, {
169
+ href: forgotPasswordUrl,
170
+ prefetch: false,
171
+ children: t('authentication:forgotPasswordQuestion')
172
+ }),
173
+ /*#__PURE__*/ _jsx("button", {
174
+ type: "submit",
175
+ style: {
176
+ display: 'none'
177
+ },
178
+ tabIndex: -1
179
+ }),
180
+ /*#__PURE__*/ _jsx(Button, {
181
+ type: "submit",
182
+ children: t('authentication:login')
183
+ })
184
+ ]
185
+ })
186
+ })
187
+ ]
188
+ });
189
+ };
190
+ export const AdminLoginClient = ({ loginMethods, hasUsernamePlugin, hasPasskeyPlugin, prefillEmail, prefillPassword, prefillUsername, searchParams, loginWithUsername, baseURL, basePath })=>{
191
+ return /*#__PURE__*/ _jsxs(_Fragment, {
192
+ children: [
193
+ loginMethods.includes('emailPassword') && (()=>{
194
+ const props = {
195
+ hasUsernamePlugin,
196
+ hasPasskeyPlugin,
197
+ searchParams,
198
+ loginWithUsername
199
+ };
200
+ if (prefillEmail) props.prefillEmail = prefillEmail;
201
+ if (prefillPassword) props.prefillPassword = prefillPassword;
202
+ if (prefillUsername) props.prefillUsername = prefillUsername;
203
+ if (baseURL) props.baseURL = baseURL;
204
+ if (basePath) props.basePath = basePath;
205
+ return /*#__PURE__*/ _jsx(LoginForm, {
206
+ ...props
207
+ });
208
+ })(),
209
+ (()=>{
210
+ const props = {
211
+ isSignup: false,
212
+ loginMethods,
213
+ setLoading: ()=>{},
214
+ redirectUrl: getSafeRedirect(searchParams?.redirect ?? '', adminRoute)
215
+ };
216
+ if (baseURL) props.baseURL = baseURL;
217
+ if (basePath) props.basePath = basePath;
218
+ return /*#__PURE__*/ _jsx(AdminSocialProviderButtons, {
219
+ ...props
220
+ });
221
+ })()
222
+ ]
223
+ });
224
+ };
225
+
226
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/better-auth/plugin/payload/views/admin-login/client.tsx"],"sourcesContent":["'use client';\n\nimport { adminRoutes } from '@/better-auth/plugin/constants';\nimport { AdminSocialProviderButtons } from '@/better-auth/plugin/payload/components/social-provider-buttons';\nimport { getSafeRedirect } from '@/better-auth/plugin/payload/utils/get-safe-redirect';\nimport type { LoginMethod } from '@/better-auth/plugin/types';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { FormProvider, useForm } from 'react-hook-form';\nconst valueOrDefaultString = (value: string | undefined, defaultValue: string): string =>\n value ?? defaultValue;\nimport { Button, Link, toast, useConfig, useTranslation } from '@payloadcms/ui';\nimport { createAuthClient } from 'better-auth/client';\nimport { passkeyClient, twoFactorClient, usernameClient } from 'better-auth/client/plugins';\nimport { useRouter } from 'next/navigation';\nimport type { LoginWithUsernameOptions } from 'payload';\nimport { formatAdminURL, getLoginOptions } from 'payload/shared';\nimport React, { useMemo, useState } from 'react';\nimport { z } from 'zod';\n\ntype AdminLoginClientProps = {\n loginMethods: LoginMethod[];\n hasUsernamePlugin: boolean;\n hasPasskeyPlugin: boolean;\n prefillEmail?: string;\n prefillPassword?: string;\n prefillUsername?: string;\n searchParams: { [key: string]: string | string[] | undefined };\n loginWithUsername: false | LoginWithUsernameOptions;\n baseURL?: string;\n basePath?: string;\n};\n\nconst baseClass = 'login__form';\n\nconst LoginForm: React.FC<{\n hasUsernamePlugin: boolean;\n hasPasskeyPlugin: boolean;\n prefillEmail?: string;\n prefillPassword?: string;\n prefillUsername?: string;\n searchParams: { [key: string]: string | string[] | undefined };\n loginWithUsername: false | LoginWithUsernameOptions;\n baseURL?: string;\n basePath?: string;\n}> = ({\n hasUsernamePlugin,\n hasPasskeyPlugin,\n prefillEmail,\n prefillPassword,\n prefillUsername,\n searchParams,\n loginWithUsername,\n baseURL,\n basePath,\n}) => {\n const { config } = useConfig();\n const router = useRouter();\n const adminRoute = valueOrDefaultString(config?.routes?.admin, '/admin');\n const { t } = useTranslation();\n const { canLoginWithEmail, canLoginWithUsername } = getLoginOptions(loginWithUsername);\n const searchParamError = searchParams?.error;\n const redirectUrl = getSafeRedirect((searchParams?.redirect as string) ?? '', adminRoute);\n const forgotPasswordUrl = formatAdminURL({\n adminRoute,\n path: adminRoutes?.forgotPassword as `/${string}`,\n });\n const authClient = useMemo(() => {\n const options: any = {\n plugins: [\n usernameClient() as any,\n twoFactorClient({\n onTwoFactorRedirect() {\n router.push(`${adminRoute}${adminRoutes.twoFactorVerify}?redirect=${redirectUrl}`);\n },\n }) as any,\n ...(hasPasskeyPlugin ? [passkeyClient() as any] : []),\n ],\n };\n if (baseURL) options.baseURL = baseURL;\n if (basePath) options.basePath = basePath;\n return createAuthClient(options);\n }, []);\n const loginType = useMemo(() => {\n if (canLoginWithEmail && canLoginWithUsername && hasUsernamePlugin) return 'emailOrUsername';\n if (canLoginWithUsername && hasUsernamePlugin) return 'username';\n return 'email';\n }, [canLoginWithEmail, canLoginWithUsername, hasUsernamePlugin]);\n\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n const isValidEmail = (email: string) => emailRegex.test(email);\n const loginSchema = z.object({\n login: z.string().min(1, t('validation:required') || 'Required'),\n password: z.string().min(1, t('validation:required') || 'Required'),\n });\n\n const methods = useForm({\n defaultValues: {\n login: prefillEmail ?? prefillUsername ?? '',\n password: prefillPassword ?? '',\n },\n resolver: zodResolver(loginSchema),\n mode: 'onSubmit',\n });\n\n const [requireEmailVerification, setRequireEmailVerification] = useState<boolean>(false);\n\n const onSubmit = async (value: { login: string; password: string }) => {\n const { login, password } = value;\n const isEmail = isValidEmail(login);\n try {\n const { data, error } = await (loginType === 'email' ||\n (loginType === 'emailOrUsername' && isEmail)\n ? (authClient as any).signIn.email({ email: login, password, callbackURL: redirectUrl })\n : (authClient as any).signIn.username({ username: login, password }));\n if (error) {\n if (error.code === 'EMAIL_NOT_VERIFIED') {\n setRequireEmailVerification(true);\n }\n if (error.message) {\n toast.error(error.message.charAt(0).toUpperCase() + error.message.slice(1));\n }\n }\n if (data?.token) {\n toast.success(t('general:success'));\n window.location.href = redirectUrl;\n }\n } catch (err) {\n toast.error(t('error:unknown') ?? 'An unexpected error occurred');\n }\n };\n\n if (requireEmailVerification) {\n return (\n <div className='form-header' style={{ textAlign: 'center' }}>\n <h1>Please verify your email</h1>\n {t('authentication:emailSent') && <p>{t('authentication:emailSent')}</p>}\n </div>\n );\n }\n\n const getLoginTypeLabel = () => {\n const labels = {\n email: t('general:email') ?? 'Email',\n username: t('authentication:username') ?? 'Username',\n emailOrUsername: t('authentication:emailOrUsername') ?? 'Email or Username',\n };\n return labels[loginType];\n };\n\n return (\n <div className={`${baseClass}__wrapper`}>\n {searchParamError && searchParamError === 'signup_disabled' && (\n <div style={{ color: 'red', marginBottom: '1rem' }}>Sign up is disabled.</div>\n )}\n <FormProvider {...methods}>\n <form className={baseClass} onSubmit={methods.handleSubmit(onSubmit)}>\n <div className={baseClass}>\n <input\n type='text'\n value={methods.watch('login')}\n onChange={(e: any) => methods.setValue('login', e.target.value)}\n autoComplete={hasPasskeyPlugin ? 'username webauthn' : 'email'}\n placeholder={getLoginTypeLabel()}\n style={{ width: '100%', padding: '0.5rem', marginBottom: '1rem' }}\n />\n <input\n type='password'\n value={methods.watch('password')}\n onChange={(e: any) => methods.setValue('password', e.target.value)}\n autoComplete={hasPasskeyPlugin ? 'current-password webauthn' : 'current-password'}\n placeholder={t('general:password')}\n style={{ width: '100%', padding: '0.5rem', marginBottom: '1rem' }}\n />\n </div>\n <Link href={forgotPasswordUrl} prefetch={false}>\n {t('authentication:forgotPasswordQuestion')}\n </Link>\n <button type='submit' style={{ display: 'none' }} tabIndex={-1} />\n <Button type='submit'>{t('authentication:login')}</Button>\n </form>\n </FormProvider>\n </div>\n );\n};\n\nexport const AdminLoginClient: React.FC<AdminLoginClientProps> = ({\n loginMethods,\n hasUsernamePlugin,\n hasPasskeyPlugin,\n prefillEmail,\n prefillPassword,\n prefillUsername,\n searchParams,\n loginWithUsername,\n baseURL,\n basePath,\n}) => {\n return (\n <>\n {loginMethods.includes('emailPassword') &&\n (() => {\n const props: any = {\n hasUsernamePlugin,\n hasPasskeyPlugin,\n searchParams,\n loginWithUsername,\n };\n if (prefillEmail) props.prefillEmail = prefillEmail;\n if (prefillPassword) props.prefillPassword = prefillPassword;\n if (prefillUsername) props.prefillUsername = prefillUsername;\n if (baseURL) props.baseURL = baseURL;\n if (basePath) props.basePath = basePath;\n return <LoginForm {...props} />;\n })()}\n {(() => {\n const props: any = {\n isSignup: false,\n loginMethods,\n setLoading: () => {},\n redirectUrl: getSafeRedirect((searchParams?.redirect as string) ?? '', adminRoute),\n };\n if (baseURL) props.baseURL = baseURL;\n if (basePath) props.basePath = basePath;\n return <AdminSocialProviderButtons {...props} />;\n })()}\n </>\n );\n};\n"],"names":["adminRoutes","AdminSocialProviderButtons","getSafeRedirect","zodResolver","FormProvider","useForm","valueOrDefaultString","value","defaultValue","Button","Link","toast","useConfig","useTranslation","createAuthClient","passkeyClient","twoFactorClient","usernameClient","useRouter","formatAdminURL","getLoginOptions","React","useMemo","useState","z","baseClass","LoginForm","hasUsernamePlugin","hasPasskeyPlugin","prefillEmail","prefillPassword","prefillUsername","searchParams","loginWithUsername","baseURL","basePath","config","router","adminRoute","routes","admin","t","canLoginWithEmail","canLoginWithUsername","searchParamError","error","redirectUrl","redirect","forgotPasswordUrl","path","forgotPassword","authClient","options","plugins","onTwoFactorRedirect","push","twoFactorVerify","loginType","emailRegex","isValidEmail","email","test","loginSchema","object","login","string","min","password","methods","defaultValues","resolver","mode","requireEmailVerification","setRequireEmailVerification","onSubmit","isEmail","data","signIn","callbackURL","username","code","message","charAt","toUpperCase","slice","token","success","window","location","href","err","div","className","style","textAlign","h1","p","getLoginTypeLabel","labels","emailOrUsername","color","marginBottom","form","handleSubmit","input","type","watch","onChange","e","setValue","target","autoComplete","placeholder","width","padding","prefetch","button","display","tabIndex","AdminLoginClient","loginMethods","includes","props","isSignup","setLoading"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import type { BetterAuthPluginOptions } from '@/better-auth/plugin/types';
3
+ import { type AdminViewServerProps } from 'payload';
4
+ export declare const loginBaseClass = "login";
5
+ interface AdminLoginProps extends AdminViewServerProps {
6
+ adminInvitationsSlug: string;
7
+ pluginOptions: BetterAuthPluginOptions;
8
+ }
9
+ declare const AdminLogin: React.FC<AdminLoginProps>;
10
+ export default AdminLogin;
@@ -0,0 +1,150 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { redirect } from "next/navigation";
3
+ import React from "react";
4
+ import { AdminLoginClient } from "./client";
5
+ // Logo component placeholder - using minimal logo for auth package
6
+ const Logo = ({ i18n })=>/*#__PURE__*/ _jsx("div", {
7
+ style: {
8
+ textAlign: 'center',
9
+ marginBottom: '2rem'
10
+ },
11
+ children: /*#__PURE__*/ _jsx("h1", {
12
+ style: {
13
+ fontSize: '1.5rem',
14
+ fontWeight: 'bold'
15
+ },
16
+ children: i18n?.t('general:appName') || 'Admin'
17
+ })
18
+ });
19
+ import { adminRoutes, defaults, supportedBAPluginIds } from "@/better-auth/plugin/constants";
20
+ import { checkPluginExists } from "@/better-auth/plugin/helpers/check-plugin-exists";
21
+ import { getSafeRedirect } from "@/better-auth/plugin/payload/utils/get-safe-redirect";
22
+ import { MinimalTemplate } from "@payloadcms/next/templates";
23
+ import { RenderServerComponent } from "@payloadcms/ui/elements/RenderServerComponent";
24
+ export const loginBaseClass = 'login';
25
+ const AdminLogin = async ({ initPageResult, params, searchParams, pluginOptions, adminInvitationsSlug })=>{
26
+ const { locale, permissions, req } = initPageResult;
27
+ const { i18n, payload: { config, collections }, payload, user } = req;
28
+ const { admin: { components: { afterLogin, beforeLogin } = {}, user: userSlug }, routes: { admin: adminRoute } } = config;
29
+ const adminRole = pluginOptions.users?.defaultAdminRole ?? defaults.adminRole;
30
+ const redirectUrl = getSafeRedirect(searchParams?.redirect ?? '', adminRoute);
31
+ if (user) {
32
+ redirect(redirectUrl);
33
+ }
34
+ const adminCount = await req.payload.count({
35
+ collection: userSlug,
36
+ where: {
37
+ role: {
38
+ equals: adminRole
39
+ }
40
+ }
41
+ });
42
+ if (adminCount.totalDocs === 0) {
43
+ // Check if we already have an admin invitation
44
+ const existingInvitations = await req.payload.find({
45
+ collection: adminInvitationsSlug,
46
+ where: {
47
+ role: {
48
+ equals: adminRole
49
+ }
50
+ }
51
+ });
52
+ let token;
53
+ if (existingInvitations.totalDocs > 0) {
54
+ // Use existing token
55
+ token = existingInvitations.docs[0].token;
56
+ } else {
57
+ // Generate a new secure invite token
58
+ token = crypto.randomUUID();
59
+ await req.payload.create({
60
+ collection: adminInvitationsSlug,
61
+ data: {
62
+ role: adminRole,
63
+ token
64
+ }
65
+ });
66
+ }
67
+ redirect(`${adminRoute}${adminRoutes.adminSignup}?token=${token}`);
68
+ }
69
+ // Filter out the first component from afterLogin array or set to undefined if not more than 1
70
+ // This is because of the custom login redirect component, we don't want an infinite loop
71
+ const filteredAfterLogin = Array.isArray(afterLogin) && afterLogin.length > 1 ? afterLogin.slice(1) : undefined;
72
+ const prefillAutoLogin = typeof config.admin?.autoLogin === 'object' && config.admin?.autoLogin.prefillOnly;
73
+ const prefillUsername = prefillAutoLogin && typeof config.admin?.autoLogin === 'object' ? config.admin?.autoLogin.username : undefined;
74
+ const prefillEmail = prefillAutoLogin && typeof config.admin?.autoLogin === 'object' ? config.admin?.autoLogin.email : undefined;
75
+ const prefillPassword = prefillAutoLogin && typeof config.admin?.autoLogin === 'object' ? config.admin?.autoLogin.password : undefined;
76
+ const hasUsernamePlugin = checkPluginExists(pluginOptions.betterAuthOptions ?? {}, supportedBAPluginIds.username);
77
+ const hasPasskeyPlugin = checkPluginExists(pluginOptions.betterAuthOptions ?? {}, supportedBAPluginIds.passkey);
78
+ const loginMethods = pluginOptions.admin?.loginMethods ?? [];
79
+ const loginWithUsername = collections?.[userSlug]?.config.auth.loginWithUsername;
80
+ const canLoginWithUsername = (hasUsernamePlugin && loginWithUsername) ?? false;
81
+ return /*#__PURE__*/ _jsxs(MinimalTemplate, {
82
+ className: loginBaseClass,
83
+ children: [
84
+ /*#__PURE__*/ _jsx("div", {
85
+ className: `${loginBaseClass}__brand`,
86
+ children: /*#__PURE__*/ _jsx(Logo, {
87
+ i18n: i18n,
88
+ locale: locale,
89
+ params: params,
90
+ payload: payload,
91
+ permissions: permissions,
92
+ searchParams: searchParams,
93
+ user: user ?? undefined
94
+ })
95
+ }),
96
+ beforeLogin && RenderServerComponent({
97
+ Component: beforeLogin,
98
+ importMap: payload.importMap,
99
+ serverProps: {
100
+ i18n,
101
+ locale: locale ?? 'en',
102
+ params,
103
+ payload,
104
+ permissions,
105
+ searchParams,
106
+ ...user ? {
107
+ user
108
+ } : {}
109
+ }
110
+ }),
111
+ (()=>{
112
+ const props = {
113
+ loginWithUsername: canLoginWithUsername,
114
+ hasUsernamePlugin,
115
+ hasPasskeyPlugin,
116
+ loginMethods,
117
+ searchParams: searchParams ?? {}
118
+ };
119
+ if (prefillEmail) props.prefillEmail = prefillEmail;
120
+ if (prefillPassword) props.prefillPassword = prefillPassword;
121
+ if (prefillUsername) props.prefillUsername = prefillUsername;
122
+ const baseURL = pluginOptions.betterAuthOptions?.baseURL;
123
+ const basePath = pluginOptions.betterAuthOptions?.basePath;
124
+ if (baseURL) props.baseURL = baseURL;
125
+ if (basePath) props.basePath = basePath;
126
+ return /*#__PURE__*/ _jsx(AdminLoginClient, {
127
+ ...props
128
+ });
129
+ })(),
130
+ filteredAfterLogin && RenderServerComponent({
131
+ Component: filteredAfterLogin,
132
+ importMap: payload.importMap,
133
+ serverProps: {
134
+ i18n,
135
+ locale: locale ?? 'en',
136
+ params,
137
+ payload,
138
+ permissions,
139
+ searchParams,
140
+ ...user ? {
141
+ user
142
+ } : {}
143
+ }
144
+ })
145
+ ]
146
+ });
147
+ };
148
+ export default AdminLogin;
149
+
150
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/better-auth/plugin/payload/views/admin-login/index.tsx"],"sourcesContent":["import { redirect } from 'next/navigation';\nimport React from 'react';\nimport { AdminLoginClient } from './client';\n// Logo component placeholder - using minimal logo for auth package\nconst Logo = ({ i18n }: { i18n?: any; [key: string]: any }) => (\n <div style={{ textAlign: 'center', marginBottom: '2rem' }}>\n <h1 style={{ fontSize: '1.5rem', fontWeight: 'bold' }}>\n {i18n?.t('general:appName') || 'Admin'}\n </h1>\n </div>\n);\nimport { adminRoutes, defaults, supportedBAPluginIds } from '@/better-auth/plugin/constants';\nimport { checkPluginExists } from '@/better-auth/plugin/helpers/check-plugin-exists';\nimport { getSafeRedirect } from '@/better-auth/plugin/payload/utils/get-safe-redirect';\nimport type { BetterAuthPluginOptions } from '@/better-auth/plugin/types';\nimport { MinimalTemplate } from '@payloadcms/next/templates';\nimport { RenderServerComponent } from '@payloadcms/ui/elements/RenderServerComponent';\nimport { type AdminViewServerProps, type ServerProps } from 'payload';\n\nexport const loginBaseClass = 'login';\n\ninterface AdminLoginProps extends AdminViewServerProps {\n adminInvitationsSlug: string;\n pluginOptions: BetterAuthPluginOptions;\n}\n\nconst AdminLogin: React.FC<AdminLoginProps> = async ({\n initPageResult,\n params,\n searchParams,\n pluginOptions,\n adminInvitationsSlug,\n}: AdminLoginProps) => {\n const { locale, permissions, req } = initPageResult;\n const {\n i18n,\n payload: { config, collections },\n payload,\n user,\n } = req;\n\n const {\n admin: {\n components: { afterLogin, beforeLogin } = {},\n user: userSlug,\n },\n routes: { admin: adminRoute },\n } = config;\n\n const adminRole = pluginOptions.users?.defaultAdminRole ?? defaults.adminRole;\n const redirectUrl = getSafeRedirect((searchParams?.redirect as string) ?? '', adminRoute);\n\n if (user) {\n redirect(redirectUrl);\n }\n\n const adminCount = await req.payload.count({\n collection: userSlug as any,\n where: {\n role: {\n equals: adminRole,\n },\n },\n });\n\n if (adminCount.totalDocs === 0) {\n // Check if we already have an admin invitation\n const existingInvitations = await req.payload.find({\n collection: adminInvitationsSlug as any,\n where: {\n role: {\n equals: adminRole,\n },\n },\n });\n\n let token: string | undefined;\n\n if (existingInvitations.totalDocs > 0) {\n // Use existing token\n token = existingInvitations.docs[0].token;\n } else {\n // Generate a new secure invite token\n token = crypto.randomUUID();\n await req.payload.create({\n collection: adminInvitationsSlug as any,\n data: {\n role: adminRole,\n token,\n },\n });\n }\n\n redirect(`${adminRoute}${adminRoutes.adminSignup}?token=${token}`);\n }\n\n // Filter out the first component from afterLogin array or set to undefined if not more than 1\n // This is because of the custom login redirect component, we don't want an infinite loop\n const filteredAfterLogin =\n Array.isArray(afterLogin) && afterLogin.length > 1 ? afterLogin.slice(1) : undefined;\n const prefillAutoLogin =\n typeof config.admin?.autoLogin === 'object' && config.admin?.autoLogin.prefillOnly;\n const prefillUsername =\n prefillAutoLogin && typeof config.admin?.autoLogin === 'object'\n ? config.admin?.autoLogin.username\n : undefined;\n const prefillEmail =\n prefillAutoLogin && typeof config.admin?.autoLogin === 'object'\n ? config.admin?.autoLogin.email\n : undefined;\n const prefillPassword =\n prefillAutoLogin && typeof config.admin?.autoLogin === 'object'\n ? config.admin?.autoLogin.password\n : undefined;\n const hasUsernamePlugin = checkPluginExists(\n pluginOptions.betterAuthOptions ?? {},\n supportedBAPluginIds.username\n );\n const hasPasskeyPlugin = checkPluginExists(\n pluginOptions.betterAuthOptions ?? {},\n supportedBAPluginIds.passkey\n );\n const loginMethods = pluginOptions.admin?.loginMethods ?? [];\n const loginWithUsername = (collections as any)?.[userSlug]?.config.auth.loginWithUsername;\n const canLoginWithUsername = (hasUsernamePlugin && loginWithUsername) ?? false;\n\n return (\n <MinimalTemplate className={loginBaseClass}>\n <div className={`${loginBaseClass}__brand`}>\n <Logo\n i18n={i18n}\n locale={locale}\n params={params}\n payload={payload}\n permissions={permissions}\n searchParams={searchParams}\n user={user ?? undefined}\n />\n </div>\n {beforeLogin &&\n RenderServerComponent({\n Component: beforeLogin,\n importMap: payload.importMap,\n serverProps: {\n i18n,\n locale: (locale ?? 'en') as any,\n params,\n payload,\n permissions,\n searchParams,\n ...(user ? { user } : {}),\n } as unknown as ServerProps,\n })}\n {(() => {\n const props: any = {\n loginWithUsername: canLoginWithUsername,\n hasUsernamePlugin,\n hasPasskeyPlugin,\n loginMethods,\n searchParams: searchParams ?? {},\n };\n if (prefillEmail) props.prefillEmail = prefillEmail;\n if (prefillPassword) props.prefillPassword = prefillPassword;\n if (prefillUsername) props.prefillUsername = prefillUsername;\n const baseURL = pluginOptions.betterAuthOptions?.baseURL;\n const basePath = pluginOptions.betterAuthOptions?.basePath;\n if (baseURL) props.baseURL = baseURL;\n if (basePath) props.basePath = basePath;\n return <AdminLoginClient {...props} />;\n })()}\n {filteredAfterLogin &&\n RenderServerComponent({\n Component: filteredAfterLogin,\n importMap: payload.importMap,\n serverProps: {\n i18n,\n locale: (locale ?? 'en') as any,\n params,\n payload,\n permissions,\n searchParams,\n ...(user ? { user } : {}),\n } as unknown as ServerProps,\n })}\n </MinimalTemplate>\n );\n};\n\nexport default AdminLogin;\n"],"names":["redirect","React","AdminLoginClient","Logo","i18n","div","style","textAlign","marginBottom","h1","fontSize","fontWeight","t","adminRoutes","defaults","supportedBAPluginIds","checkPluginExists","getSafeRedirect","MinimalTemplate","RenderServerComponent","loginBaseClass","AdminLogin","initPageResult","params","searchParams","pluginOptions","adminInvitationsSlug","locale","permissions","req","payload","config","collections","user","admin","components","afterLogin","beforeLogin","userSlug","routes","adminRoute","adminRole","users","defaultAdminRole","redirectUrl","adminCount","count","collection","where","role","equals","totalDocs","existingInvitations","find","token","docs","crypto","randomUUID","create","data","adminSignup","filteredAfterLogin","Array","isArray","length","slice","undefined","prefillAutoLogin","autoLogin","prefillOnly","prefillUsername","username","prefillEmail","email","prefillPassword","password","hasUsernamePlugin","betterAuthOptions","hasPasskeyPlugin","passkey","loginMethods","loginWithUsername","auth","canLoginWithUsername","className","Component","importMap","serverProps","props","baseURL","basePath"],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { LoginMethod } from '@/better-auth/plugin/types';
2
+ import type { LoginWithUsernameOptions } from 'payload';
3
+ import React from 'react';
4
+ type AdminSignupClientProps = {
5
+ adminInviteToken: string;
6
+ userSlug: string;
7
+ loginMethods: LoginMethod[];
8
+ searchParams: {
9
+ [key: string]: string | string[] | undefined;
10
+ };
11
+ loginWithUsername: false | LoginWithUsernameOptions;
12
+ baseURL?: string;
13
+ basePath?: string;
14
+ };
15
+ export declare const AdminSignupClient: React.FC<AdminSignupClientProps>;
16
+ export {};