@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,42 @@
1
+ import { prepareSessionData } from "@/better-auth/plugin/helpers/prepare-session-data";
2
+ import { createAuthMiddleware } from "better-auth/api";
3
+ import { setSessionCookie } from "better-auth/cookies";
4
+ import { baModelKey } from "@/better-auth/plugin/constants";
5
+ /**
6
+ * Sets up a middleware that enforces the saveToJwt configuration when setting session data.
7
+ * This ensures that only fields specified in saveToJwt are included in the cookie cache
8
+ * for both user and session objects.
9
+ *
10
+ * The middleware runs after authentication and filters the session data based on
11
+ * the collection configurations before storing it in the cookie cache.
12
+ */ export function saveToJwtMiddleware({ sanitizedOptions, config, resolvedSchemas }) {
13
+ if (typeof sanitizedOptions.hooks !== 'object') sanitizedOptions.hooks = {};
14
+ const originalAfter = sanitizedOptions.hooks.after;
15
+ sanitizedOptions.hooks.after = createAuthMiddleware(async (ctx)=>{
16
+ const newSession = ctx.context.newSession;
17
+ if (newSession) {
18
+ const awaitedPayloadConfig = await config;
19
+ const usersCollection = awaitedPayloadConfig?.collections?.find((c)=>c.slug === resolvedSchemas[baModelKey.user].modelName);
20
+ const sessionsCollection = awaitedPayloadConfig?.collections?.find((c)=>c.slug === resolvedSchemas[baModelKey.session].modelName);
21
+ if (!usersCollection || !sessionsCollection) return ctx;
22
+ const filteredSessionData = await prepareSessionData({
23
+ sessionData: newSession,
24
+ usersCollection: usersCollection,
25
+ sessionsCollection: sessionsCollection
26
+ });
27
+ if (filteredSessionData) {
28
+ await setSessionCookie(ctx, filteredSessionData);
29
+ // Set back all the data internally as we only want the cookie to update.
30
+ // This allows plugins like two factor plugin to get enabledTwoFactor,
31
+ // while not exposing it in cookie cache data.
32
+ ctx.context.setNewSession(newSession);
33
+ }
34
+ }
35
+ if (typeof originalAfter === 'function') {
36
+ return originalAfter(ctx);
37
+ }
38
+ return ctx;
39
+ });
40
+ }
41
+
42
+ //# sourceMappingURL=save-to-jwt-middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.ts"],"sourcesContent":["import { prepareSessionData } from '@/better-auth/plugin/helpers/prepare-session-data';\nimport { createAuthMiddleware } from 'better-auth/api';\nimport { setSessionCookie } from 'better-auth/cookies';\n\nimport { baModelKey } from '@/better-auth/plugin/constants';\nimport type { BetterAuthSchemas, SanitizedBetterAuthOptions } from '@/better-auth/plugin/types';\nimport type { Config, Payload } from 'payload';\n\n/**\n * Sets up a middleware that enforces the saveToJwt configuration when setting session data.\n * This ensures that only fields specified in saveToJwt are included in the cookie cache\n * for both user and session objects.\n *\n * The middleware runs after authentication and filters the session data based on\n * the collection configurations before storing it in the cookie cache.\n */\nexport function saveToJwtMiddleware({\n sanitizedOptions,\n config,\n resolvedSchemas,\n}: {\n sanitizedOptions: SanitizedBetterAuthOptions;\n config: Payload['config'] | Config | Promise<Payload['config'] | Config>;\n resolvedSchemas: BetterAuthSchemas;\n}) {\n if (typeof sanitizedOptions.hooks !== 'object') sanitizedOptions.hooks = {};\n const originalAfter = sanitizedOptions.hooks.after;\n sanitizedOptions.hooks.after = createAuthMiddleware(async ctx => {\n const newSession = ctx.context.newSession;\n if (newSession) {\n const awaitedPayloadConfig = await config;\n const usersCollection = awaitedPayloadConfig?.collections?.find(\n c => c.slug === resolvedSchemas[baModelKey.user].modelName\n );\n const sessionsCollection = awaitedPayloadConfig?.collections?.find(\n c => c.slug === resolvedSchemas[baModelKey.session].modelName\n );\n if (!usersCollection || !sessionsCollection) return ctx;\n const filteredSessionData = await prepareSessionData({\n sessionData: newSession,\n usersCollection: usersCollection,\n sessionsCollection: sessionsCollection,\n });\n\n if (filteredSessionData) {\n await setSessionCookie(ctx, filteredSessionData);\n // Set back all the data internally as we only want the cookie to update.\n // This allows plugins like two factor plugin to get enabledTwoFactor,\n // while not exposing it in cookie cache data.\n ctx.context.setNewSession(newSession);\n }\n }\n\n if (typeof originalAfter === 'function') {\n return (originalAfter as any)(ctx as any);\n }\n return ctx;\n });\n}\n"],"names":["prepareSessionData","createAuthMiddleware","setSessionCookie","baModelKey","saveToJwtMiddleware","sanitizedOptions","config","resolvedSchemas","hooks","originalAfter","after","ctx","newSession","context","awaitedPayloadConfig","usersCollection","collections","find","c","slug","user","modelName","sessionsCollection","session","filteredSessionData","sessionData","setNewSession"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,oDAAoD;AACvF,SAASC,oBAAoB,QAAQ,kBAAkB;AACvD,SAASC,gBAAgB,QAAQ,sBAAsB;AAEvD,SAASC,UAAU,QAAQ,iCAAiC;AAI5D;;;;;;;CAOC,GACD,OAAO,SAASC,oBAAoB,EAClCC,gBAAgB,EAChBC,MAAM,EACNC,eAAe,EAKhB;IACC,IAAI,OAAOF,iBAAiBG,KAAK,KAAK,UAAUH,iBAAiBG,KAAK,GAAG,CAAC;IAC1E,MAAMC,gBAAgBJ,iBAAiBG,KAAK,CAACE,KAAK;IAClDL,iBAAiBG,KAAK,CAACE,KAAK,GAAGT,qBAAqB,OAAMU;QACxD,MAAMC,aAAaD,IAAIE,OAAO,CAACD,UAAU;QACzC,IAAIA,YAAY;YACd,MAAME,uBAAuB,MAAMR;YACnC,MAAMS,kBAAkBD,sBAAsBE,aAAaC,KACzDC,CAAAA,IAAKA,EAAEC,IAAI,KAAKZ,eAAe,CAACJ,WAAWiB,IAAI,CAAC,CAACC,SAAS;YAE5D,MAAMC,qBAAqBR,sBAAsBE,aAAaC,KAC5DC,CAAAA,IAAKA,EAAEC,IAAI,KAAKZ,eAAe,CAACJ,WAAWoB,OAAO,CAAC,CAACF,SAAS;YAE/D,IAAI,CAACN,mBAAmB,CAACO,oBAAoB,OAAOX;YACpD,MAAMa,sBAAsB,MAAMxB,mBAAmB;gBACnDyB,aAAab;gBACbG,iBAAiBA;gBACjBO,oBAAoBA;YACtB;YAEA,IAAIE,qBAAqB;gBACvB,MAAMtB,iBAAiBS,KAAKa;gBAC5B,yEAAyE;gBACzE,sEAAsE;gBACtE,8CAA8C;gBAC9Cb,IAAIE,OAAO,CAACa,aAAa,CAACd;YAC5B;QACF;QAEA,IAAI,OAAOH,kBAAkB,YAAY;YACvC,OAAO,AAACA,cAAsBE;QAChC;QACA,OAAOA;IACT;AACF"}
@@ -0,0 +1,9 @@
1
+ import type { SanitizedBetterAuthOptions } from '@/better-auth/plugin/types';
2
+ /**
3
+ * Modifies options object and adds a middleware to check for admin invite for sign up
4
+ */
5
+ export declare const useAdminInviteAfterEmailSignUpMiddleware: ({ options, adminInvitationCollectionSlug, userCollectionSlug, }: {
6
+ options: SanitizedBetterAuthOptions;
7
+ adminInvitationCollectionSlug: string;
8
+ userCollectionSlug: string;
9
+ }) => Promise<void>;
@@ -0,0 +1,63 @@
1
+ import { createAuthMiddleware } from "better-auth/api";
2
+ /**
3
+ * Modifies options object and adds a middleware to check for admin invite for sign up
4
+ */ export const useAdminInviteAfterEmailSignUpMiddleware = async ({ options, adminInvitationCollectionSlug, userCollectionSlug })=>{
5
+ options.hooks = options.hooks ?? {};
6
+ const originalAfter = options.hooks.after;
7
+ options.hooks.after = createAuthMiddleware(async (ctx)=>{
8
+ const adapter = ctx.context.adapter;
9
+ const internalAdapter = ctx.context.internalAdapter;
10
+ if (ctx.path !== '/sign-up/email') {
11
+ if (typeof originalAfter === 'function') return originalAfter(ctx);
12
+ return ctx;
13
+ }
14
+ const email = ctx.body.email;
15
+ const adminInviteToken = ctx?.query?.adminInviteToken ?? ctx.body.adminInviteToken;
16
+ const adminInvitation = await adapter.findOne({
17
+ model: adminInvitationCollectionSlug,
18
+ where: [
19
+ {
20
+ field: 'token',
21
+ value: adminInviteToken,
22
+ operator: 'eq'
23
+ }
24
+ ]
25
+ });
26
+ if (!adminInvitation || !adminInvitation?.role || !email) {
27
+ if (typeof originalAfter === 'function') return originalAfter(ctx);
28
+ return ctx;
29
+ }
30
+ const newlyCreatedUser = await internalAdapter.findUserByEmail(email);
31
+ if (!newlyCreatedUser) {
32
+ if (typeof originalAfter === 'function') return originalAfter(ctx);
33
+ return ctx;
34
+ }
35
+ await adapter.update({
36
+ model: userCollectionSlug,
37
+ where: [
38
+ {
39
+ field: 'id',
40
+ value: newlyCreatedUser.user.id,
41
+ operator: 'eq'
42
+ }
43
+ ],
44
+ update: {
45
+ role: adminInvitation?.role
46
+ }
47
+ });
48
+ await adapter.delete({
49
+ model: adminInvitationCollectionSlug,
50
+ where: [
51
+ {
52
+ field: 'id',
53
+ value: adminInvitation.id,
54
+ operator: 'eq'
55
+ }
56
+ ]
57
+ });
58
+ if (typeof originalAfter === 'function') return originalAfter(ctx);
59
+ return ctx;
60
+ });
61
+ };
62
+
63
+ //# sourceMappingURL=use-admin-invite-after-email-sign-up-middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/better-auth/plugin/lib/sanitize-better-auth-options/utils/use-admin-invite-after-email-sign-up-middleware.ts"],"sourcesContent":["import type { SanitizedBetterAuthOptions } from '@/better-auth/plugin/types';\nimport { createAuthMiddleware } from 'better-auth/api';\n\n/**\n * Modifies options object and adds a middleware to check for admin invite for sign up\n */\nexport const useAdminInviteAfterEmailSignUpMiddleware = async ({\n options,\n adminInvitationCollectionSlug,\n userCollectionSlug,\n}: {\n options: SanitizedBetterAuthOptions;\n adminInvitationCollectionSlug: string;\n userCollectionSlug: string;\n}) => {\n options.hooks = options.hooks ?? {};\n const originalAfter = options.hooks.after;\n options.hooks.after = createAuthMiddleware(async ctx => {\n const adapter = ctx.context.adapter;\n const internalAdapter = ctx.context.internalAdapter;\n\n if (ctx.path !== '/sign-up/email') {\n if (typeof originalAfter === 'function') return (originalAfter as any)(ctx as any);\n return ctx;\n }\n const email = ctx.body.email;\n const adminInviteToken = ctx?.query?.adminInviteToken ?? (ctx.body as any).adminInviteToken;\n const adminInvitation = (await adapter.findOne({\n model: adminInvitationCollectionSlug,\n where: [\n {\n field: 'token',\n value: adminInviteToken,\n operator: 'eq',\n },\n ],\n })) as any;\n if (!adminInvitation || !adminInvitation?.role || !email) {\n if (typeof originalAfter === 'function') return (originalAfter as any)(ctx as any);\n return ctx;\n }\n\n const newlyCreatedUser = await internalAdapter.findUserByEmail(email);\n if (!newlyCreatedUser) {\n if (typeof originalAfter === 'function') return (originalAfter as any)(ctx as any);\n return ctx;\n }\n\n await adapter.update({\n model: userCollectionSlug,\n where: [\n {\n field: 'id',\n value: newlyCreatedUser.user.id,\n operator: 'eq',\n },\n ],\n update: {\n role: adminInvitation?.role,\n },\n });\n\n await adapter.delete({\n model: adminInvitationCollectionSlug,\n where: [\n {\n field: 'id',\n value: adminInvitation.id,\n operator: 'eq',\n },\n ],\n });\n\n if (typeof originalAfter === 'function') return (originalAfter as any)(ctx as any);\n return ctx;\n });\n};\n"],"names":["createAuthMiddleware","useAdminInviteAfterEmailSignUpMiddleware","options","adminInvitationCollectionSlug","userCollectionSlug","hooks","originalAfter","after","ctx","adapter","context","internalAdapter","path","email","body","adminInviteToken","query","adminInvitation","findOne","model","where","field","value","operator","role","newlyCreatedUser","findUserByEmail","update","user","id","delete"],"mappings":"AACA,SAASA,oBAAoB,QAAQ,kBAAkB;AAEvD;;CAEC,GACD,OAAO,MAAMC,2CAA2C,OAAO,EAC7DC,OAAO,EACPC,6BAA6B,EAC7BC,kBAAkB,EAKnB;IACCF,QAAQG,KAAK,GAAGH,QAAQG,KAAK,IAAI,CAAC;IAClC,MAAMC,gBAAgBJ,QAAQG,KAAK,CAACE,KAAK;IACzCL,QAAQG,KAAK,CAACE,KAAK,GAAGP,qBAAqB,OAAMQ;QAC/C,MAAMC,UAAUD,IAAIE,OAAO,CAACD,OAAO;QACnC,MAAME,kBAAkBH,IAAIE,OAAO,CAACC,eAAe;QAEnD,IAAIH,IAAII,IAAI,KAAK,kBAAkB;YACjC,IAAI,OAAON,kBAAkB,YAAY,OAAO,AAACA,cAAsBE;YACvE,OAAOA;QACT;QACA,MAAMK,QAAQL,IAAIM,IAAI,CAACD,KAAK;QAC5B,MAAME,mBAAmBP,KAAKQ,OAAOD,oBAAoB,AAACP,IAAIM,IAAI,CAASC,gBAAgB;QAC3F,MAAME,kBAAmB,MAAMR,QAAQS,OAAO,CAAC;YAC7CC,OAAOhB;YACPiB,OAAO;gBACL;oBACEC,OAAO;oBACPC,OAAOP;oBACPQ,UAAU;gBACZ;aACD;QACH;QACA,IAAI,CAACN,mBAAmB,CAACA,iBAAiBO,QAAQ,CAACX,OAAO;YACxD,IAAI,OAAOP,kBAAkB,YAAY,OAAO,AAACA,cAAsBE;YACvE,OAAOA;QACT;QAEA,MAAMiB,mBAAmB,MAAMd,gBAAgBe,eAAe,CAACb;QAC/D,IAAI,CAACY,kBAAkB;YACrB,IAAI,OAAOnB,kBAAkB,YAAY,OAAO,AAACA,cAAsBE;YACvE,OAAOA;QACT;QAEA,MAAMC,QAAQkB,MAAM,CAAC;YACnBR,OAAOf;YACPgB,OAAO;gBACL;oBACEC,OAAO;oBACPC,OAAOG,iBAAiBG,IAAI,CAACC,EAAE;oBAC/BN,UAAU;gBACZ;aACD;YACDI,QAAQ;gBACNH,MAAMP,iBAAiBO;YACzB;QACF;QAEA,MAAMf,QAAQqB,MAAM,CAAC;YACnBX,OAAOhB;YACPiB,OAAO;gBACL;oBACEC,OAAO;oBACPC,OAAOL,gBAAgBY,EAAE;oBACzBN,UAAU;gBACZ;aACD;QACH;QAEA,IAAI,OAAOjB,kBAAkB,YAAY,OAAO,AAACA,cAAsBE;QACvE,OAAOA;IACT;AACF,EAAE"}
@@ -0,0 +1,4 @@
1
+ import type { BetterAuthPluginOptions } from '../types';
2
+ export declare function setLoginMethods({ pluginOptions }: {
3
+ pluginOptions: BetterAuthPluginOptions;
4
+ }): BetterAuthPluginOptions;
@@ -0,0 +1,14 @@
1
+ import { supportedBAPluginIds } from "../constants";
2
+ import { checkPluginExists } from "../helpers/check-plugin-exists";
3
+ export function setLoginMethods({ pluginOptions }) {
4
+ const betterAuthOptions = pluginOptions.betterAuthOptions ?? {};
5
+ if (pluginOptions?.admin?.loginMethods) return pluginOptions; // If user defined, exit early
6
+ const loginMethods = Object.keys(betterAuthOptions?.socialProviders ?? {});
7
+ if (!!betterAuthOptions?.emailAndPassword || betterAuthOptions?.emailAndPassword?.enabled) loginMethods.push('emailPassword');
8
+ if (checkPluginExists(betterAuthOptions, supportedBAPluginIds.passkey)) loginMethods.push('passkey');
9
+ pluginOptions.admin = pluginOptions.admin ?? {};
10
+ pluginOptions.admin.loginMethods = loginMethods;
11
+ return pluginOptions;
12
+ }
13
+
14
+ //# sourceMappingURL=set-login-methods.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/better-auth/plugin/lib/set-login-methods.ts"],"sourcesContent":["import { supportedBAPluginIds } from '../constants';\nimport { checkPluginExists } from '../helpers/check-plugin-exists';\nimport type { BetterAuthPluginOptions, LoginMethod } from '../types';\n\nexport function setLoginMethods({ pluginOptions }: { pluginOptions: BetterAuthPluginOptions }) {\n const betterAuthOptions = pluginOptions.betterAuthOptions ?? {};\n if (pluginOptions?.admin?.loginMethods) return pluginOptions; // If user defined, exit early\n const loginMethods = Object.keys(betterAuthOptions?.socialProviders ?? {});\n if (!!betterAuthOptions?.emailAndPassword || betterAuthOptions?.emailAndPassword?.enabled)\n loginMethods.push('emailPassword');\n if (checkPluginExists(betterAuthOptions, supportedBAPluginIds.passkey))\n loginMethods.push('passkey');\n pluginOptions.admin = pluginOptions.admin ?? {};\n pluginOptions.admin.loginMethods = loginMethods as LoginMethod[];\n return pluginOptions;\n}\n"],"names":["supportedBAPluginIds","checkPluginExists","setLoginMethods","pluginOptions","betterAuthOptions","admin","loginMethods","Object","keys","socialProviders","emailAndPassword","enabled","push","passkey"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ,eAAe;AACpD,SAASC,iBAAiB,QAAQ,iCAAiC;AAGnE,OAAO,SAASC,gBAAgB,EAAEC,aAAa,EAA8C;IAC3F,MAAMC,oBAAoBD,cAAcC,iBAAiB,IAAI,CAAC;IAC9D,IAAID,eAAeE,OAAOC,cAAc,OAAOH,eAAe,8BAA8B;IAC5F,MAAMG,eAAeC,OAAOC,IAAI,CAACJ,mBAAmBK,mBAAmB,CAAC;IACxE,IAAI,CAAC,CAACL,mBAAmBM,oBAAoBN,mBAAmBM,kBAAkBC,SAChFL,aAAaM,IAAI,CAAC;IACpB,IAAIX,kBAAkBG,mBAAmBJ,qBAAqBa,OAAO,GACnEP,aAAaM,IAAI,CAAC;IACpBT,cAAcE,KAAK,GAAGF,cAAcE,KAAK,IAAI,CAAC;IAC9CF,cAAcE,KAAK,CAACC,YAAY,GAAGA;IACnC,OAAOH;AACT"}
@@ -0,0 +1,9 @@
1
+ import type React from 'react';
2
+ import './index.scss';
3
+ type AdminButtonsProps = {
4
+ userSlug: string;
5
+ baseURL?: string;
6
+ basePath?: string;
7
+ };
8
+ export declare const AdminButtons: React.FC<AdminButtonsProps>;
9
+ export {};
@@ -0,0 +1,143 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Button, toast, useDocumentInfo, useFormFields } from "@payloadcms/ui";
4
+ import { adminClient } from "better-auth/client/plugins";
5
+ import { createAuthClient } from "better-auth/react";
6
+ import { useRouter } from "next/navigation";
7
+ import { Fragment, useMemo } from "react";
8
+ import "./index.scss";
9
+ export const AdminButtons = ({ baseURL, basePath })=>{
10
+ const router = useRouter();
11
+ const { id } = useDocumentInfo();
12
+ // Using any because PayloadCMS useFormFields returns dynamic field structures that vary by form
13
+ // biome-ignore lint/suspicious/noExplicitAny: PayloadCMS useFormFields returns dynamic field structures
14
+ const isBanned = useFormFields(([fields])=>fields.banned);
15
+ const authClient = useMemo(()=>{
16
+ // Using any because BetterAuth client options structure varies by plugin configuration
17
+ // biome-ignore lint/suspicious/noExplicitAny: BetterAuth client options structure varies by plugin configuration
18
+ // biome-ignore lint/suspicious/noExplicitAny: BetterAuth adminClient return type varies by plugin configuration
19
+ const options = {
20
+ plugins: [
21
+ adminClient()
22
+ ]
23
+ };
24
+ if (baseURL) options.baseURL = baseURL;
25
+ if (basePath) options.basePath = basePath;
26
+ return createAuthClient(options);
27
+ }, [
28
+ baseURL,
29
+ basePath
30
+ ]);
31
+ if (!id) {
32
+ return null;
33
+ }
34
+ const handleImpersonate = async ()=>{
35
+ // Using any because BetterAuth admin client methods have dynamic types that vary by plugin
36
+ // biome-ignore lint/suspicious/noExplicitAny: BetterAuth admin client methods have dynamic types
37
+ await authClient.admin.impersonateUser({
38
+ userId: String(id),
39
+ fetchOptions: {
40
+ onSuccess () {
41
+ router.push('/');
42
+ },
43
+ // Using any because BetterAuth error types vary by operation and cannot be strictly typed
44
+ // biome-ignore lint/suspicious/noExplicitAny: BetterAuth error types vary by operation
45
+ onError (error) {
46
+ console.error('Error impersonating user:', error);
47
+ toast.error('Failed to impersonate user');
48
+ }
49
+ }
50
+ });
51
+ };
52
+ const handleBan = async ()=>{
53
+ // Using any because BetterAuth admin client methods have dynamic types that vary by plugin
54
+ // biome-ignore lint/suspicious/noExplicitAny: BetterAuth admin client methods have dynamic types
55
+ await authClient.admin.banUser({
56
+ userId: String(id),
57
+ fetchOptions: {
58
+ onSuccess () {
59
+ toast.success('User banned successfully');
60
+ router.refresh();
61
+ },
62
+ // Using any because BetterAuth error types vary by operation and cannot be strictly typed
63
+ // biome-ignore lint/suspicious/noExplicitAny: BetterAuth error types vary by operation
64
+ onError (error) {
65
+ console.error('Error banning user:', error);
66
+ toast.error('Failed to ban user');
67
+ }
68
+ }
69
+ });
70
+ };
71
+ const handleUnban = async ()=>{
72
+ // Using any because BetterAuth admin client methods have dynamic types that vary by plugin
73
+ // biome-ignore lint/suspicious/noExplicitAny: BetterAuth admin client methods have dynamic types
74
+ await authClient.admin.unbanUser({
75
+ userId: String(id),
76
+ fetchOptions: {
77
+ onSuccess () {
78
+ toast.success('User unbanned successfully');
79
+ router.refresh();
80
+ },
81
+ // Using any because BetterAuth error types vary by operation and cannot be strictly typed
82
+ // biome-ignore lint/suspicious/noExplicitAny: BetterAuth error types vary by operation
83
+ onError (error) {
84
+ console.error('Error unbanning user:', error);
85
+ toast.error('Failed to unban user');
86
+ }
87
+ }
88
+ });
89
+ };
90
+ const handleRevokeAllSessions = async ()=>{
91
+ // Using any because BetterAuth admin client methods have dynamic types that vary by plugin
92
+ // biome-ignore lint/suspicious/noExplicitAny: BetterAuth admin client methods have dynamic types
93
+ await authClient.admin.revokeUserSessions({
94
+ userId: String(id),
95
+ fetchOptions: {
96
+ onSuccess () {
97
+ toast.success('All sessions revoked successfully');
98
+ router.refresh();
99
+ },
100
+ // Using any because BetterAuth error types vary by operation and cannot be strictly typed
101
+ // biome-ignore lint/suspicious/noExplicitAny: BetterAuth error types vary by operation
102
+ onError (error) {
103
+ console.error('Error revoking all sessions:', error);
104
+ toast.error('Failed to revoke all sessions');
105
+ }
106
+ }
107
+ });
108
+ };
109
+ return /*#__PURE__*/ _jsxs(Fragment, {
110
+ children: [
111
+ /*#__PURE__*/ _jsx(Button, {
112
+ onClick: handleImpersonate,
113
+ buttonStyle: "pill",
114
+ className: "impersonate-button",
115
+ size: "medium",
116
+ children: "Impersonate"
117
+ }),
118
+ /*#__PURE__*/ _jsx(Button, {
119
+ onClick: handleRevokeAllSessions,
120
+ buttonStyle: "secondary",
121
+ className: "revoke-sessions-button",
122
+ size: "medium",
123
+ children: "Revoke All Sessions"
124
+ }),
125
+ !isBanned ? /*#__PURE__*/ _jsx(Button, {
126
+ onClick: handleBan,
127
+ buttonStyle: "error",
128
+ className: "ban-button",
129
+ size: "medium",
130
+ children: "Ban"
131
+ }) : null,
132
+ isBanned ? /*#__PURE__*/ _jsx(Button, {
133
+ onClick: handleUnban,
134
+ buttonStyle: "primary",
135
+ className: "unban-button",
136
+ size: "medium",
137
+ children: "Unban"
138
+ }) : null
139
+ ]
140
+ });
141
+ };
142
+
143
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/better-auth/plugin/payload/components/admin-buttons/index.tsx"],"sourcesContent":["'use client';\n\nimport { Button, toast, useDocumentInfo, useFormFields } from '@payloadcms/ui';\nimport { adminClient } from 'better-auth/client/plugins';\nimport { createAuthClient } from 'better-auth/react';\nimport { useRouter } from 'next/navigation';\nimport type React from 'react';\nimport { Fragment, useMemo } from 'react';\n\nimport './index.scss';\n\ntype AdminButtonsProps = {\n userSlug: string;\n baseURL?: string;\n basePath?: string;\n};\n\nexport const AdminButtons: React.FC<AdminButtonsProps> = ({ baseURL, basePath }) => {\n const router = useRouter();\n const { id } = useDocumentInfo();\n // Using any because PayloadCMS useFormFields returns dynamic field structures that vary by form\n // biome-ignore lint/suspicious/noExplicitAny: PayloadCMS useFormFields returns dynamic field structures\n const isBanned = useFormFields(([fields]) => (fields as any).banned);\n\n const authClient = useMemo(() => {\n // Using any because BetterAuth client options structure varies by plugin configuration\n // biome-ignore lint/suspicious/noExplicitAny: BetterAuth client options structure varies by plugin configuration\n // biome-ignore lint/suspicious/noExplicitAny: BetterAuth adminClient return type varies by plugin configuration\n const options: any = { plugins: [adminClient() as any] };\n if (baseURL) options.baseURL = baseURL;\n if (basePath) options.basePath = basePath;\n return createAuthClient(options);\n }, [baseURL, basePath]);\n\n if (!id) {\n return null;\n }\n\n const handleImpersonate = async () => {\n // Using any because BetterAuth admin client methods have dynamic types that vary by plugin\n // biome-ignore lint/suspicious/noExplicitAny: BetterAuth admin client methods have dynamic types\n await (authClient as any).admin.impersonateUser({\n userId: String(id),\n fetchOptions: {\n onSuccess() {\n router.push('/');\n },\n // Using any because BetterAuth error types vary by operation and cannot be strictly typed\n // biome-ignore lint/suspicious/noExplicitAny: BetterAuth error types vary by operation\n onError(error: any) {\n console.error('Error impersonating user:', error);\n toast.error('Failed to impersonate user');\n },\n },\n });\n };\n\n const handleBan = async () => {\n // Using any because BetterAuth admin client methods have dynamic types that vary by plugin\n // biome-ignore lint/suspicious/noExplicitAny: BetterAuth admin client methods have dynamic types\n await (authClient as any).admin.banUser({\n userId: String(id),\n fetchOptions: {\n onSuccess() {\n toast.success('User banned successfully');\n router.refresh();\n },\n // Using any because BetterAuth error types vary by operation and cannot be strictly typed\n // biome-ignore lint/suspicious/noExplicitAny: BetterAuth error types vary by operation\n onError(error: any) {\n console.error('Error banning user:', error);\n toast.error('Failed to ban user');\n },\n },\n });\n };\n\n const handleUnban = async () => {\n // Using any because BetterAuth admin client methods have dynamic types that vary by plugin\n // biome-ignore lint/suspicious/noExplicitAny: BetterAuth admin client methods have dynamic types\n await (authClient as any).admin.unbanUser({\n userId: String(id),\n fetchOptions: {\n onSuccess() {\n toast.success('User unbanned successfully');\n router.refresh();\n },\n // Using any because BetterAuth error types vary by operation and cannot be strictly typed\n // biome-ignore lint/suspicious/noExplicitAny: BetterAuth error types vary by operation\n onError(error: any) {\n console.error('Error unbanning user:', error);\n toast.error('Failed to unban user');\n },\n },\n });\n };\n\n const handleRevokeAllSessions = async () => {\n // Using any because BetterAuth admin client methods have dynamic types that vary by plugin\n // biome-ignore lint/suspicious/noExplicitAny: BetterAuth admin client methods have dynamic types\n await (authClient as any).admin.revokeUserSessions({\n userId: String(id),\n fetchOptions: {\n onSuccess() {\n toast.success('All sessions revoked successfully');\n router.refresh();\n },\n // Using any because BetterAuth error types vary by operation and cannot be strictly typed\n // biome-ignore lint/suspicious/noExplicitAny: BetterAuth error types vary by operation\n onError(error: any) {\n console.error('Error revoking all sessions:', error);\n toast.error('Failed to revoke all sessions');\n },\n },\n });\n };\n\n return (\n <Fragment>\n <Button\n onClick={handleImpersonate}\n buttonStyle='pill'\n className='impersonate-button'\n size='medium'\n >\n Impersonate\n </Button>\n <Button\n onClick={handleRevokeAllSessions}\n buttonStyle='secondary'\n className='revoke-sessions-button'\n size='medium'\n >\n Revoke All Sessions\n </Button>\n {!isBanned ? (\n <Button onClick={handleBan} buttonStyle='error' className='ban-button' size='medium'>\n Ban\n </Button>\n ) : null}\n {isBanned ? (\n <Button onClick={handleUnban} buttonStyle='primary' className='unban-button' size='medium'>\n Unban\n </Button>\n ) : null}\n </Fragment>\n );\n};\n"],"names":["Button","toast","useDocumentInfo","useFormFields","adminClient","createAuthClient","useRouter","Fragment","useMemo","AdminButtons","baseURL","basePath","router","id","isBanned","fields","banned","authClient","options","plugins","handleImpersonate","admin","impersonateUser","userId","String","fetchOptions","onSuccess","push","onError","error","console","handleBan","banUser","success","refresh","handleUnban","unbanUser","handleRevokeAllSessions","revokeUserSessions","onClick","buttonStyle","className","size"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type React from 'react';
2
+ import './index.scss';
3
+ type AdminInviteButtonProps = {
4
+ roles: {
5
+ label: string;
6
+ value: string;
7
+ }[];
8
+ };
9
+ export declare const AdminInviteButton: React.FC<AdminInviteButtonProps>;
10
+ export {};
@@ -0,0 +1,219 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { adminEndpoints } from "@/better-auth/plugin/constants";
4
+ import { Button, Modal, Select, TextInput, toast, useConfig, useModal } from "@payloadcms/ui";
5
+ import { Copy, Loader2, X as XIcon } from "lucide-react";
6
+ import { usePathname } from "next/navigation";
7
+ import { useState } from "react";
8
+ import "./index.scss";
9
+ const baseClass = 'admin-invite-modal';
10
+ export const AdminInviteButton = ({ roles })=>{
11
+ const [role, setRole] = useState(undefined);
12
+ const [email, setEmail] = useState('');
13
+ const [inviteLink, setInviteLink] = useState('');
14
+ const [isLoading, setIsLoading] = useState(false);
15
+ const [isCopyLoading, setIsCopyLoading] = useState(false);
16
+ const { toggleModal } = useModal();
17
+ const { config: { serverURL, routes: { api: apiRoute, admin: adminRoute }, admin: { user: userSlug } } } = useConfig();
18
+ // Only render invite button in list view.
19
+ const pathname = usePathname();
20
+ if (pathname !== `${adminRoute}/collections/${userSlug}`) return null;
21
+ const handleGenerateInvite = async ()=>{
22
+ if (!role) {
23
+ toast.error('Please select a role first');
24
+ return null;
25
+ }
26
+ try {
27
+ const url = `${serverURL}${apiRoute}/${userSlug}${adminEndpoints.generateInviteUrl}`;
28
+ const response = await fetch(url, {
29
+ method: 'POST',
30
+ headers: {
31
+ 'Content-Type': 'application/json'
32
+ },
33
+ body: JSON.stringify({
34
+ role
35
+ }),
36
+ credentials: 'include'
37
+ });
38
+ if (!response.ok) throw new Error('Failed to generate invite');
39
+ const data = await response.json();
40
+ setInviteLink(data.inviteLink);
41
+ return data.inviteLink;
42
+ } catch (error) {
43
+ toast.error('Failed to generate invite link');
44
+ return null;
45
+ }
46
+ };
47
+ const handleSendEmail = async ()=>{
48
+ if (!role) {
49
+ toast.error('Please select a role first');
50
+ return;
51
+ }
52
+ if (!email) {
53
+ toast.error('Please enter an email address');
54
+ return;
55
+ }
56
+ try {
57
+ setIsLoading(true);
58
+ let linkToCopy = inviteLink;
59
+ if (!linkToCopy) {
60
+ linkToCopy = await handleGenerateInvite();
61
+ }
62
+ if (linkToCopy) {
63
+ const response = await fetch(`${serverURL}${apiRoute}/${userSlug}${adminEndpoints.sendInvite}`, {
64
+ method: 'POST',
65
+ headers: {
66
+ 'Content-Type': 'application/json'
67
+ },
68
+ body: JSON.stringify({
69
+ email,
70
+ link: linkToCopy
71
+ }),
72
+ credentials: 'include'
73
+ });
74
+ if (!response.ok) throw new Error('Failed to send invite');
75
+ toast.success('Invite sent successfully');
76
+ handleToggleModal();
77
+ }
78
+ } catch (error) {
79
+ toast.error('Failed to send invite email');
80
+ } finally{
81
+ setIsLoading(false);
82
+ }
83
+ };
84
+ const handleCopyLink = async ()=>{
85
+ if (!role) {
86
+ toast.error('Please select a role first');
87
+ return;
88
+ }
89
+ try {
90
+ setIsCopyLoading(true);
91
+ let linkToCopy = inviteLink;
92
+ if (!linkToCopy) {
93
+ linkToCopy = await handleGenerateInvite();
94
+ }
95
+ if (linkToCopy) {
96
+ await navigator.clipboard.writeText(linkToCopy);
97
+ toast.success('Invite link copied to clipboard');
98
+ toggleModal('admin-invite-modal');
99
+ }
100
+ } catch (error) {
101
+ toast.error('Failed to copy invite link');
102
+ } finally{
103
+ setIsCopyLoading(false);
104
+ }
105
+ };
106
+ const handleToggleModal = ()=>{
107
+ toggleModal('admin-invite-modal');
108
+ };
109
+ return /*#__PURE__*/ _jsxs(_Fragment, {
110
+ children: [
111
+ /*#__PURE__*/ _jsx(Button, {
112
+ onClick: handleToggleModal,
113
+ type: "button",
114
+ size: "small",
115
+ buttonStyle: "pill",
116
+ className: "admin-invite-button",
117
+ children: "Invite User"
118
+ }),
119
+ /*#__PURE__*/ _jsx(Modal, {
120
+ slug: "admin-invite-modal",
121
+ className: `${baseClass}`,
122
+ closeOnBlur: true,
123
+ children: /*#__PURE__*/ _jsxs("div", {
124
+ className: `${baseClass}__wrapper`,
125
+ children: [
126
+ /*#__PURE__*/ _jsx(Button, {
127
+ onClick: handleToggleModal,
128
+ buttonStyle: "icon-label",
129
+ size: "small",
130
+ className: `${baseClass}__close-button`,
131
+ children: /*#__PURE__*/ _jsx(XIcon, {
132
+ size: 24
133
+ })
134
+ }),
135
+ /*#__PURE__*/ _jsxs("div", {
136
+ className: `${baseClass}__content`,
137
+ style: {
138
+ maxWidth: '38rem'
139
+ },
140
+ children: [
141
+ /*#__PURE__*/ _jsx("h2", {
142
+ children: "Invite User"
143
+ }),
144
+ /*#__PURE__*/ _jsx("p", {
145
+ children: "Invite a user to your application. Select the role of the user and send the invite via email or copy the invite link."
146
+ }),
147
+ /*#__PURE__*/ _jsx(Select, {
148
+ options: roles,
149
+ ...role ? {
150
+ value: role
151
+ } : {},
152
+ placeholder: "Select Role",
153
+ // Using any because PayloadCMS Select onChange receives dynamic option types
154
+ // biome-ignore lint/suspicious/noExplicitAny: PayloadCMS Select onChange receives dynamic option types
155
+ onChange: (option)=>setRole(option)
156
+ }),
157
+ /*#__PURE__*/ _jsxs("div", {
158
+ className: `${baseClass}__invite-controls`,
159
+ children: [
160
+ /*#__PURE__*/ _jsx("div", {
161
+ className: `${baseClass}__email-field`,
162
+ children: /*#__PURE__*/ _jsx(TextInput, {
163
+ label: "Email Address",
164
+ path: "email",
165
+ value: email,
166
+ // Using any because React input onChange event types vary by input element
167
+ // biome-ignore lint/suspicious/noExplicitAny: React input onChange event types vary by input element
168
+ onChange: (e)=>setEmail(e.target.value),
169
+ placeholder: "user@example.com"
170
+ })
171
+ }),
172
+ /*#__PURE__*/ _jsxs("div", {
173
+ className: `${baseClass}__buttons`,
174
+ children: [
175
+ /*#__PURE__*/ _jsxs(Button, {
176
+ type: "button",
177
+ onClick: handleSendEmail,
178
+ disabled: isLoading || !role || !email,
179
+ children: [
180
+ isLoading ? /*#__PURE__*/ _jsx(Loader2, {
181
+ size: 24,
182
+ className: "mr-2 animate-spin"
183
+ }) : null,
184
+ "Send Email"
185
+ ]
186
+ }),
187
+ /*#__PURE__*/ _jsxs(Button, {
188
+ size: "medium",
189
+ buttonStyle: "transparent",
190
+ className: `${baseClass}__copy-button`,
191
+ type: "button",
192
+ onClick: handleCopyLink,
193
+ disabled: isCopyLoading || !role,
194
+ children: [
195
+ isCopyLoading ? /*#__PURE__*/ _jsx(Loader2, {
196
+ size: 20,
197
+ strokeWidth: 1.5,
198
+ className: "animate-spin"
199
+ }) : /*#__PURE__*/ _jsx(Copy, {
200
+ size: 20,
201
+ strokeWidth: 1.5
202
+ }),
203
+ "Generate Link"
204
+ ]
205
+ })
206
+ ]
207
+ })
208
+ ]
209
+ })
210
+ ]
211
+ })
212
+ ]
213
+ })
214
+ })
215
+ ]
216
+ });
217
+ };
218
+
219
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/better-auth/plugin/payload/components/admin-invite-button/index.tsx"],"sourcesContent":["'use client';\n\nimport { adminEndpoints } from '@/better-auth/plugin/constants';\nimport { Button, Modal, Select, TextInput, toast, useConfig, useModal } from '@payloadcms/ui';\nimport type { Option } from '@payloadcms/ui/elements/ReactSelect';\nimport { Copy, Loader2, X as XIcon } from 'lucide-react';\nimport { usePathname } from 'next/navigation';\nimport type React from 'react';\nimport { useState } from 'react';\n\nimport './index.scss';\n\nconst baseClass = 'admin-invite-modal';\n\ntype AdminInviteButtonProps = {\n roles: { label: string; value: string }[];\n};\n\nexport const AdminInviteButton: React.FC<AdminInviteButtonProps> = ({ roles }) => {\n const [role, setRole] = useState<Option | undefined>(undefined);\n const [email, setEmail] = useState('');\n const [inviteLink, setInviteLink] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n const [isCopyLoading, setIsCopyLoading] = useState(false);\n const { toggleModal } = useModal();\n\n const {\n config: {\n serverURL,\n routes: { api: apiRoute, admin: adminRoute },\n admin: { user: userSlug },\n },\n } = useConfig();\n\n // Only render invite button in list view.\n const pathname = usePathname();\n if (pathname !== `${adminRoute}/collections/${userSlug}`) return null;\n\n const handleGenerateInvite = async () => {\n if (!role) {\n toast.error('Please select a role first');\n return null;\n }\n\n try {\n const url = `${serverURL}${apiRoute}/${userSlug}${adminEndpoints.generateInviteUrl}`;\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ role }),\n credentials: 'include',\n });\n if (!response.ok) throw new Error('Failed to generate invite');\n const data = await response.json();\n setInviteLink(data.inviteLink);\n return data.inviteLink;\n } catch (error) {\n toast.error('Failed to generate invite link');\n return null;\n }\n };\n\n const handleSendEmail = async () => {\n if (!role) {\n toast.error('Please select a role first');\n return;\n }\n\n if (!email) {\n toast.error('Please enter an email address');\n return;\n }\n\n try {\n setIsLoading(true);\n let linkToCopy = inviteLink;\n if (!linkToCopy) {\n linkToCopy = await handleGenerateInvite();\n }\n if (linkToCopy) {\n const response = await fetch(\n `${serverURL}${apiRoute}/${userSlug}${adminEndpoints.sendInvite}`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ email, link: linkToCopy }),\n credentials: 'include',\n }\n );\n if (!response.ok) throw new Error('Failed to send invite');\n toast.success('Invite sent successfully');\n handleToggleModal();\n }\n } catch (error) {\n toast.error('Failed to send invite email');\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleCopyLink = async () => {\n if (!role) {\n toast.error('Please select a role first');\n return;\n }\n\n try {\n setIsCopyLoading(true);\n let linkToCopy = inviteLink;\n\n if (!linkToCopy) {\n linkToCopy = await handleGenerateInvite();\n }\n\n if (linkToCopy) {\n await navigator.clipboard.writeText(linkToCopy);\n toast.success('Invite link copied to clipboard');\n toggleModal('admin-invite-modal');\n }\n } catch (error) {\n toast.error('Failed to copy invite link');\n } finally {\n setIsCopyLoading(false);\n }\n };\n\n const handleToggleModal = () => {\n toggleModal('admin-invite-modal');\n };\n\n return (\n <>\n <Button\n onClick={handleToggleModal}\n type='button'\n size='small'\n buttonStyle='pill'\n className='admin-invite-button'\n >\n Invite User\n </Button>\n <Modal slug='admin-invite-modal' className={`${baseClass}`} closeOnBlur>\n <div className={`${baseClass}__wrapper`}>\n <Button\n onClick={handleToggleModal}\n buttonStyle='icon-label'\n size='small'\n className={`${baseClass}__close-button`}\n >\n <XIcon size={24} />\n </Button>\n <div className={`${baseClass}__content`} style={{ maxWidth: '38rem' }}>\n <h2>Invite User</h2>\n <p>\n Invite a user to your application. Select the role of the user and send the invite via\n email or copy the invite link.\n </p>\n <Select\n options={roles}\n // Using any because PayloadCMS Select component accepts dynamic option types\n // biome-ignore lint/suspicious/noExplicitAny: PayloadCMS Select component accepts dynamic option types\n {...(role ? ({ value: role as any } as any) : {})}\n placeholder='Select Role'\n // Using any because PayloadCMS Select onChange receives dynamic option types\n // biome-ignore lint/suspicious/noExplicitAny: PayloadCMS Select onChange receives dynamic option types\n onChange={(option: any) => setRole(option)}\n />\n\n <div className={`${baseClass}__invite-controls`}>\n <div className={`${baseClass}__email-field`}>\n <TextInput\n label='Email Address'\n path='email'\n value={email}\n // Using any because React input onChange event types vary by input element\n // biome-ignore lint/suspicious/noExplicitAny: React input onChange event types vary by input element\n onChange={(e: any) => setEmail(e.target.value)}\n placeholder='user@example.com'\n />\n </div>\n\n <div className={`${baseClass}__buttons`}>\n <Button\n type='button'\n onClick={handleSendEmail}\n disabled={isLoading || !role || !email}\n >\n {isLoading ? <Loader2 size={24} className='mr-2 animate-spin' /> : null}\n Send Email\n </Button>\n\n <Button\n size='medium'\n buttonStyle='transparent'\n className={`${baseClass}__copy-button`}\n type='button'\n onClick={handleCopyLink}\n disabled={isCopyLoading || !role}\n >\n {isCopyLoading ? (\n <Loader2 size={20} strokeWidth={1.5} className='animate-spin' />\n ) : (\n <Copy size={20} strokeWidth={1.5} />\n )}\n Generate Link\n </Button>\n </div>\n </div>\n </div>\n </div>\n </Modal>\n </>\n );\n};\n"],"names":["adminEndpoints","Button","Modal","Select","TextInput","toast","useConfig","useModal","Copy","Loader2","X","XIcon","usePathname","useState","baseClass","AdminInviteButton","roles","role","setRole","undefined","email","setEmail","inviteLink","setInviteLink","isLoading","setIsLoading","isCopyLoading","setIsCopyLoading","toggleModal","config","serverURL","routes","api","apiRoute","admin","adminRoute","user","userSlug","pathname","handleGenerateInvite","error","url","generateInviteUrl","response","fetch","method","headers","body","JSON","stringify","credentials","ok","Error","data","json","handleSendEmail","linkToCopy","sendInvite","link","success","handleToggleModal","handleCopyLink","navigator","clipboard","writeText","onClick","type","size","buttonStyle","className","slug","closeOnBlur","div","style","maxWidth","h2","p","options","value","placeholder","onChange","option","label","path","e","target","disabled","strokeWidth"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ export declare const LogoutButton: React.FC<{
3
+ tabIndex?: number;
4
+ }>;
@@ -0,0 +1,24 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { LogOutIcon, useConfig, useTranslation } from "@payloadcms/ui";
4
+ import { formatAdminURL } from "payload/shared";
5
+ import React from "react";
6
+ const baseClass = 'nav';
7
+ export const LogoutButton = ({ tabIndex = 0 })=>{
8
+ const { t } = useTranslation();
9
+ const { config } = useConfig();
10
+ const { admin: { routes: { logout: logoutRoute } }, routes: { admin: adminRoute } } = config;
11
+ return /*#__PURE__*/ _jsx("a", {
12
+ "aria-label": t('authentication:logOut'),
13
+ className: `${baseClass}__log-out`,
14
+ href: formatAdminURL({
15
+ adminRoute,
16
+ path: logoutRoute
17
+ }),
18
+ tabIndex: tabIndex,
19
+ title: t('authentication:logOut'),
20
+ children: /*#__PURE__*/ _jsx(LogOutIcon, {})
21
+ });
22
+ };
23
+
24
+ //# sourceMappingURL=logout-button.js.map