payload-auth 1.0.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 (200) hide show
  1. package/LICENSE.md +17 -0
  2. package/dist/authjs/index.d.ts +1 -0
  3. package/dist/authjs/index.js +3 -0
  4. package/dist/authjs/index.js.map +1 -0
  5. package/dist/better-auth/adapter/dev/bin/run.d.ts +1 -0
  6. package/dist/better-auth/adapter/dev/bin/run.js +64 -0
  7. package/dist/better-auth/adapter/dev/bin/run.js.map +1 -0
  8. package/dist/better-auth/adapter/dev/bin/schema.d.ts +22 -0
  9. package/dist/better-auth/adapter/dev/bin/schema.js +160 -0
  10. package/dist/better-auth/adapter/dev/bin/schema.js.map +1 -0
  11. package/dist/better-auth/adapter/dev/collections.d.ts +3 -0
  12. package/dist/better-auth/adapter/dev/collections.js +212 -0
  13. package/dist/better-auth/adapter/dev/collections.js.map +1 -0
  14. package/dist/better-auth/adapter/dev/index.d.ts +3 -0
  15. package/dist/better-auth/adapter/dev/index.js +168 -0
  16. package/dist/better-auth/adapter/dev/index.js.map +1 -0
  17. package/dist/better-auth/adapter/generate-schema/generate-schema-builder.d.ts +23 -0
  18. package/dist/better-auth/adapter/generate-schema/generate-schema-builder.js +326 -0
  19. package/dist/better-auth/adapter/generate-schema/generate-schema-builder.js.map +1 -0
  20. package/dist/better-auth/adapter/generate-schema/get-payload-schema.d.ts +1 -0
  21. package/dist/better-auth/adapter/generate-schema/get-payload-schema.js +23 -0
  22. package/dist/better-auth/adapter/generate-schema/get-payload-schema.js.map +1 -0
  23. package/dist/better-auth/adapter/generate-schema/index.d.ts +4 -0
  24. package/dist/better-auth/adapter/generate-schema/index.js +19 -0
  25. package/dist/better-auth/adapter/generate-schema/index.js.map +1 -0
  26. package/dist/better-auth/adapter/generate-schema/utils.d.ts +2 -0
  27. package/dist/better-auth/adapter/generate-schema/utils.js +20 -0
  28. package/dist/better-auth/adapter/generate-schema/utils.js.map +1 -0
  29. package/dist/better-auth/adapter/index.d.ts +5 -0
  30. package/dist/better-auth/adapter/index.js +578 -0
  31. package/dist/better-auth/adapter/index.js.map +1 -0
  32. package/dist/better-auth/adapter/test/adapter.test.d.ts +1 -0
  33. package/dist/better-auth/adapter/test/adapter.test.js +181 -0
  34. package/dist/better-auth/adapter/test/adapter.test.js.map +1 -0
  35. package/dist/better-auth/adapter/test/better-auth-adapter-test.d.ts +7 -0
  36. package/dist/better-auth/adapter/test/better-auth-adapter-test.js +425 -0
  37. package/dist/better-auth/adapter/test/better-auth-adapter-test.js.map +1 -0
  38. package/dist/better-auth/adapter/test/schema.test.d.ts +1 -0
  39. package/dist/better-auth/adapter/test/schema.test.js +796 -0
  40. package/dist/better-auth/adapter/test/schema.test.js.map +1 -0
  41. package/dist/better-auth/adapter/test/test_payload1/schema.d.ts +23 -0
  42. package/dist/better-auth/adapter/test/test_payload1/schema.js +177 -0
  43. package/dist/better-auth/adapter/test/test_payload1/schema.js.map +1 -0
  44. package/dist/better-auth/adapter/test/test_payload2/schema.d.ts +23 -0
  45. package/dist/better-auth/adapter/test/test_payload2/schema.js +167 -0
  46. package/dist/better-auth/adapter/test/test_payload2/schema.js.map +1 -0
  47. package/dist/better-auth/adapter/test/test_payload3/schema.d.ts +23 -0
  48. package/dist/better-auth/adapter/test/test_payload3/schema.js +198 -0
  49. package/dist/better-auth/adapter/test/test_payload3/schema.js.map +1 -0
  50. package/dist/better-auth/adapter/transform/index.d.ts +16 -0
  51. package/dist/better-auth/adapter/transform/index.js +252 -0
  52. package/dist/better-auth/adapter/transform/index.js.map +1 -0
  53. package/dist/better-auth/adapter/types.d.ts +6 -0
  54. package/dist/better-auth/adapter/types.js +3 -0
  55. package/dist/better-auth/adapter/types.js.map +1 -0
  56. package/dist/better-auth/index.d.ts +6 -0
  57. package/dist/better-auth/index.js +8 -0
  58. package/dist/better-auth/index.js.map +1 -0
  59. package/dist/better-auth/plugin/collections/accounts/hooks/sync-password-to-user.d.ts +7 -0
  60. package/dist/better-auth/plugin/collections/accounts/hooks/sync-password-to-user.js +47 -0
  61. package/dist/better-auth/plugin/collections/accounts/hooks/sync-password-to-user.js.map +1 -0
  62. package/dist/better-auth/plugin/collections/users/endpoints/refresh-token.d.ts +6 -0
  63. package/dist/better-auth/plugin/collections/users/endpoints/refresh-token.js +106 -0
  64. package/dist/better-auth/plugin/collections/users/endpoints/refresh-token.js.map +1 -0
  65. package/dist/better-auth/plugin/collections/users/hooks/after-login.d.ts +11 -0
  66. package/dist/better-auth/plugin/collections/users/hooks/after-login.js +71 -0
  67. package/dist/better-auth/plugin/collections/users/hooks/after-login.js.map +1 -0
  68. package/dist/better-auth/plugin/collections/users/hooks/after-logout.d.ts +6 -0
  69. package/dist/better-auth/plugin/collections/users/hooks/after-logout.js +49 -0
  70. package/dist/better-auth/plugin/collections/users/hooks/after-logout.js.map +1 -0
  71. package/dist/better-auth/plugin/collections/users/hooks/before-login.d.ts +5 -0
  72. package/dist/better-auth/plugin/collections/users/hooks/before-login.js +18 -0
  73. package/dist/better-auth/plugin/collections/users/hooks/before-login.js.map +1 -0
  74. package/dist/better-auth/plugin/collections/users/hooks/clean-up-user-after-delete.d.ts +5 -0
  75. package/dist/better-auth/plugin/collections/users/hooks/clean-up-user-after-delete.js +33 -0
  76. package/dist/better-auth/plugin/collections/users/hooks/clean-up-user-after-delete.js.map +1 -0
  77. package/dist/better-auth/plugin/collections/users/hooks/on-verified-change.d.ts +2 -0
  78. package/dist/better-auth/plugin/collections/users/hooks/on-verified-change.js +14 -0
  79. package/dist/better-auth/plugin/collections/users/hooks/on-verified-change.js.map +1 -0
  80. package/dist/better-auth/plugin/collections/users/hooks/sync-account.d.ts +7 -0
  81. package/dist/better-auth/plugin/collections/users/hooks/sync-account.js +82 -0
  82. package/dist/better-auth/plugin/collections/users/hooks/sync-account.js.map +1 -0
  83. package/dist/better-auth/plugin/helpers/generate-verify-email-url.d.ts +29 -0
  84. package/dist/better-auth/plugin/helpers/generate-verify-email-url.js +46 -0
  85. package/dist/better-auth/plugin/helpers/generate-verify-email-url.js.map +1 -0
  86. package/dist/better-auth/plugin/helpers/get-ip.d.ts +2 -0
  87. package/dist/better-auth/plugin/helpers/get-ip.js +31 -0
  88. package/dist/better-auth/plugin/helpers/get-ip.js.map +1 -0
  89. package/dist/better-auth/plugin/helpers/index.d.ts +1 -0
  90. package/dist/better-auth/plugin/helpers/index.js +3 -0
  91. package/dist/better-auth/plugin/helpers/index.js.map +1 -0
  92. package/dist/better-auth/plugin/helpers/serialize-cookie.d.ts +104 -0
  93. package/dist/better-auth/plugin/helpers/serialize-cookie.js +186 -0
  94. package/dist/better-auth/plugin/helpers/serialize-cookie.js.map +1 -0
  95. package/dist/better-auth/plugin/index.d.ts +7 -0
  96. package/dist/better-auth/plugin/index.js +64 -0
  97. package/dist/better-auth/plugin/index.js.map +1 -0
  98. package/dist/better-auth/plugin/lib/auth-strategy.d.ts +8 -0
  99. package/dist/better-auth/plugin/lib/auth-strategy.js +48 -0
  100. package/dist/better-auth/plugin/lib/auth-strategy.js.map +1 -0
  101. package/dist/better-auth/plugin/lib/build-collection-configs.d.ts +11 -0
  102. package/dist/better-auth/plugin/lib/build-collection-configs.js +1558 -0
  103. package/dist/better-auth/plugin/lib/build-collection-configs.js.map +1 -0
  104. package/dist/better-auth/plugin/lib/config.d.ts +41 -0
  105. package/dist/better-auth/plugin/lib/config.js +43 -0
  106. package/dist/better-auth/plugin/lib/config.js.map +1 -0
  107. package/dist/better-auth/plugin/lib/ensure-password-set-before-create.d.ts +7 -0
  108. package/dist/better-auth/plugin/lib/ensure-password-set-before-create.js +24 -0
  109. package/dist/better-auth/plugin/lib/ensure-password-set-before-create.js.map +1 -0
  110. package/dist/better-auth/plugin/lib/get-payload-auth.d.ts +5 -0
  111. package/dist/better-auth/plugin/lib/get-payload-auth.js +9 -0
  112. package/dist/better-auth/plugin/lib/get-payload-auth.js.map +1 -0
  113. package/dist/better-auth/plugin/lib/get-required-collection-slugs.d.ts +9 -0
  114. package/dist/better-auth/plugin/lib/get-required-collection-slugs.js +52 -0
  115. package/dist/better-auth/plugin/lib/get-required-collection-slugs.js.map +1 -0
  116. package/dist/better-auth/plugin/lib/init-better-auth.d.ts +6 -0
  117. package/dist/better-auth/plugin/lib/init-better-auth.js +13 -0
  118. package/dist/better-auth/plugin/lib/init-better-auth.js.map +1 -0
  119. package/dist/better-auth/plugin/lib/password.d.ts +25 -0
  120. package/dist/better-auth/plugin/lib/password.js +63 -0
  121. package/dist/better-auth/plugin/lib/password.js.map +1 -0
  122. package/dist/better-auth/plugin/lib/payload-access.d.ts +14 -0
  123. package/dist/better-auth/plugin/lib/payload-access.js +64 -0
  124. package/dist/better-auth/plugin/lib/payload-access.js.map +1 -0
  125. package/dist/better-auth/plugin/lib/prepare-session-data.d.ts +21 -0
  126. package/dist/better-auth/plugin/lib/prepare-session-data.js +42 -0
  127. package/dist/better-auth/plugin/lib/prepare-session-data.js.map +1 -0
  128. package/dist/better-auth/plugin/lib/respect-save-to-jwt-fields-middleware.d.ts +15 -0
  129. package/dist/better-auth/plugin/lib/respect-save-to-jwt-fields-middleware.js +30 -0
  130. package/dist/better-auth/plugin/lib/respect-save-to-jwt-fields-middleware.js.map +1 -0
  131. package/dist/better-auth/plugin/lib/sanitize-auth-options.d.ts +5 -0
  132. package/dist/better-auth/plugin/lib/sanitize-auth-options.js +298 -0
  133. package/dist/better-auth/plugin/lib/sanitize-auth-options.js.map +1 -0
  134. package/dist/better-auth/plugin/payload/components/admin-buttons.d.ts +5 -0
  135. package/dist/better-auth/plugin/payload/components/admin-buttons.js +222 -0
  136. package/dist/better-auth/plugin/payload/components/admin-buttons.js.map +1 -0
  137. package/dist/better-auth/plugin/payload/components/login-redirect.d.ts +1 -0
  138. package/dist/better-auth/plugin/payload/components/login-redirect.js +6 -0
  139. package/dist/better-auth/plugin/payload/components/login-redirect.js.map +1 -0
  140. package/dist/better-auth/plugin/payload/components/logo.d.ts +1 -0
  141. package/dist/better-auth/plugin/payload/components/logo.js +36 -0
  142. package/dist/better-auth/plugin/payload/components/logo.js.map +1 -0
  143. package/dist/better-auth/plugin/payload/components/logout.d.ts +1 -0
  144. package/dist/better-auth/plugin/payload/components/logout.js +61 -0
  145. package/dist/better-auth/plugin/payload/components/logout.js.map +1 -0
  146. package/dist/better-auth/plugin/payload/components/sign-in.d.ts +3 -0
  147. package/dist/better-auth/plugin/payload/components/sign-in.js +384 -0
  148. package/dist/better-auth/plugin/payload/components/sign-in.js.map +1 -0
  149. package/dist/better-auth/plugin/payload/components/sign-up.d.ts +6 -0
  150. package/dist/better-auth/plugin/payload/components/sign-up.js +502 -0
  151. package/dist/better-auth/plugin/payload/components/sign-up.js.map +1 -0
  152. package/dist/better-auth/plugin/payload/components/styles.css +73 -0
  153. package/dist/better-auth/plugin/payload/components/ui/button.d.ts +10 -0
  154. package/dist/better-auth/plugin/payload/components/ui/button.js +42 -0
  155. package/dist/better-auth/plugin/payload/components/ui/button.js.map +1 -0
  156. package/dist/better-auth/plugin/payload/components/ui/card.d.ts +9 -0
  157. package/dist/better-auth/plugin/payload/components/ui/card.js +55 -0
  158. package/dist/better-auth/plugin/payload/components/ui/card.js.map +1 -0
  159. package/dist/better-auth/plugin/payload/components/ui/checkbox.d.ts +4 -0
  160. package/dist/better-auth/plugin/payload/components/ui/checkbox.js +23 -0
  161. package/dist/better-auth/plugin/payload/components/ui/checkbox.js.map +1 -0
  162. package/dist/better-auth/plugin/payload/components/ui/cn.d.ts +2 -0
  163. package/dist/better-auth/plugin/payload/components/ui/cn.js +7 -0
  164. package/dist/better-auth/plugin/payload/components/ui/cn.js.map +1 -0
  165. package/dist/better-auth/plugin/payload/components/ui/input.d.ts +3 -0
  166. package/dist/better-auth/plugin/payload/components/ui/input.js +14 -0
  167. package/dist/better-auth/plugin/payload/components/ui/input.js.map +1 -0
  168. package/dist/better-auth/plugin/payload/components/ui/label.d.ts +4 -0
  169. package/dist/better-auth/plugin/payload/components/ui/label.js +15 -0
  170. package/dist/better-auth/plugin/payload/components/ui/label.js.map +1 -0
  171. package/dist/better-auth/plugin/payload/components/ui/password-input.d.ts +2 -0
  172. package/dist/better-auth/plugin/payload/components/ui/password-input.js +55 -0
  173. package/dist/better-auth/plugin/payload/components/ui/password-input.js.map +1 -0
  174. package/dist/better-auth/plugin/payload/exports/client.d.ts +3 -0
  175. package/dist/better-auth/plugin/payload/exports/client.js +5 -0
  176. package/dist/better-auth/plugin/payload/exports/client.js.map +1 -0
  177. package/dist/better-auth/plugin/payload/exports/rsc.d.ts +5 -0
  178. package/dist/better-auth/plugin/payload/exports/rsc.js +7 -0
  179. package/dist/better-auth/plugin/payload/exports/rsc.js.map +1 -0
  180. package/dist/better-auth/plugin/payload/views/create-first-admin/index.d.ts +4 -0
  181. package/dist/better-auth/plugin/payload/views/create-first-admin/index.js +112 -0
  182. package/dist/better-auth/plugin/payload/views/create-first-admin/index.js.map +1 -0
  183. package/dist/better-auth/plugin/payload/views/login/index.d.ts +4 -0
  184. package/dist/better-auth/plugin/payload/views/login/index.js +78 -0
  185. package/dist/better-auth/plugin/payload/views/login/index.js.map +1 -0
  186. package/dist/better-auth/plugin/types.d.ts +224 -0
  187. package/dist/better-auth/plugin/types.js +3 -0
  188. package/dist/better-auth/plugin/types.js.map +1 -0
  189. package/dist/better-auth/types.d.ts +2 -0
  190. package/dist/better-auth/types.js +4 -0
  191. package/dist/better-auth/types.js.map +1 -0
  192. package/dist/clerk/index.d.ts +1 -0
  193. package/dist/clerk/index.js +3 -0
  194. package/dist/clerk/index.js.map +1 -0
  195. package/dist/index.js +7 -0
  196. package/dist/index.js.map +1 -0
  197. package/dist/kinde/index.d.ts +1 -0
  198. package/dist/kinde/index.js +3 -0
  199. package/dist/kinde/index.js.map +1 -0
  200. package/package.json +87 -0
@@ -0,0 +1,222 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import React, { useEffect, useState } from 'react';
4
+ import { adminClient } from 'better-auth/client/plugins';
5
+ import { createAuthClient } from 'better-auth/react';
6
+ import { useParams, usePathname, useRouter } from 'next/navigation';
7
+ import { toast } from 'sonner';
8
+ import { Toaster } from 'sonner';
9
+ import { Button } from '@payloadcms/ui';
10
+ import './styles.css';
11
+ import '@payloadcms/ui/styles.css';
12
+ async function getDocumentData(id, path) {
13
+ const apiUrl = `${path}/api`;
14
+ try {
15
+ // Try to load the /api page and parse the HTML response
16
+ const response = await fetch(apiUrl);
17
+ if (response.ok) {
18
+ const htmlResponse = await response.text();
19
+ // Parse the HTML to extract user data
20
+ try {
21
+ let documentData = null;
22
+ const parser = new DOMParser();
23
+ const doc = parser.parseFromString(htmlResponse, 'text/html');
24
+ // Look for the JSON data in the query inspector
25
+ const jsonRows = doc.querySelectorAll('.query-inspector__row-line');
26
+ if (jsonRows.length > 0) {
27
+ documentData = {};
28
+ jsonRows.forEach((row)=>{
29
+ const keyMatch = row.innerHTML.match(/"([^"]+)"\s*:/);
30
+ if (keyMatch) {
31
+ const key = keyMatch[1].trim();
32
+ const valueElement = row.querySelector('.query-inspector__value');
33
+ if (valueElement) {
34
+ let value = valueElement.textContent?.trim() ?? '';
35
+ // Convert values to appropriate types
36
+ if (value === 'true') value = 'true';
37
+ else if (value === 'false') value = 'false';
38
+ else if (value === 'null') value = 'null';
39
+ else if (!isNaN(Number(value))) value = Number(value).toString();
40
+ else if (value.startsWith('"') && value.endsWith('"')) {
41
+ value = value.substring(1, value.length - 1).trim();
42
+ }
43
+ documentData[key] = value;
44
+ }
45
+ }
46
+ });
47
+ }
48
+ return documentData;
49
+ } catch (parseError) {
50
+ console.error('Error parsing document data from HTML:', parseError);
51
+ return null;
52
+ }
53
+ }
54
+ } catch (apiError) {
55
+ console.error('Error fetching document data from API:', apiError);
56
+ }
57
+ }
58
+ export default function AdminButtons({ userSlug }) {
59
+ const router = useRouter();
60
+ const path = usePathname();
61
+ const params = useParams();
62
+ const [id, setId] = useState('');
63
+ const [documentData, setDocumentData] = useState(null);
64
+ const authClient = createAuthClient({
65
+ plugins: [
66
+ adminClient()
67
+ ]
68
+ });
69
+ useEffect(()=>{
70
+ async function fetchDocumentData() {
71
+ // Get the ID from the params.segments array
72
+ const segments = params.segments;
73
+ const userSlugIndex = segments.findIndex((segment)=>segment === userSlug);
74
+ const id = userSlugIndex !== -1 && userSlugIndex < segments.length - 1 ? segments[userSlugIndex + 1] : segments[segments.length - 1];
75
+ const documentData = await getDocumentData(id, path);
76
+ setId(id);
77
+ setDocumentData(documentData);
78
+ }
79
+ fetchDocumentData();
80
+ }, [
81
+ params,
82
+ path,
83
+ userSlug
84
+ ]);
85
+ const handleImpersonate = async ()=>{
86
+ await authClient.admin.impersonateUser({
87
+ userId: id,
88
+ fetchOptions: {
89
+ onSuccess () {
90
+ router.push('/');
91
+ },
92
+ onError (error) {
93
+ console.error('Error impersonating user:', error);
94
+ toast.error('Failed to impersonate user');
95
+ }
96
+ }
97
+ });
98
+ };
99
+ const handleBan = async ()=>{
100
+ await authClient.admin.banUser({
101
+ userId: id,
102
+ fetchOptions: {
103
+ onSuccess () {
104
+ toast.success('User banned successfully');
105
+ router.refresh();
106
+ },
107
+ onError (error) {
108
+ console.error('Error banning user:', error);
109
+ toast.error('Failed to ban user');
110
+ }
111
+ }
112
+ });
113
+ };
114
+ const handleUnban = async ()=>{
115
+ await authClient.admin.unbanUser({
116
+ userId: id,
117
+ fetchOptions: {
118
+ onSuccess () {
119
+ toast.success('User unbanned successfully');
120
+ router.refresh();
121
+ },
122
+ onError (error) {
123
+ console.error('Error unbanning user:', error);
124
+ toast.error('Failed to unban user');
125
+ }
126
+ }
127
+ });
128
+ };
129
+ const handleRevokeAllSessions = async ()=>{
130
+ await authClient.admin.revokeUserSessions({
131
+ userId: id,
132
+ fetchOptions: {
133
+ onSuccess () {
134
+ toast.success('All sessions revoked successfully');
135
+ router.refresh();
136
+ },
137
+ onError (error) {
138
+ console.error('Error revoking all sessions:', error);
139
+ toast.error('Failed to revoke all sessions');
140
+ }
141
+ }
142
+ });
143
+ };
144
+ return /*#__PURE__*/ _jsxs(_Fragment, {
145
+ children: [
146
+ /*#__PURE__*/ _jsx("style", {
147
+ children: `
148
+ .admin-actions-container {
149
+ display: flex;
150
+ flex-direction: column;
151
+ }
152
+ .admin-actions-container h3 {
153
+ margin-bottom: 1rem;
154
+ }
155
+ .admin-actions-container .btn {
156
+ margin-block: 0.5rem;
157
+ }
158
+ .ban-button {
159
+ background-color: oklch(0.258 0.092 26.042);
160
+ color: oklch(0.577 0.245 27.325);
161
+ border: 1px solid oklch(0.396 0.141 25.723);
162
+ &:hover {
163
+ color: #fff;
164
+ background-color: oklch(0.505 0.213 27.518);
165
+ }
166
+ }
167
+ .revoke-sessions-button {
168
+ --theme-elevation-800: oklch(0.396 0.141 25.723);
169
+ color: oklch(0.637 0.237 25.331);
170
+ &:hover {
171
+ --theme-elevation-400: oklch(0.396 0.141 25.723);
172
+ color: #fff;
173
+ background-color: oklch(0.396 0.141 25.723);
174
+ }
175
+ }
176
+ `
177
+ }),
178
+ /*#__PURE__*/ _jsxs("div", {
179
+ className: "admin-actions-container",
180
+ children: [
181
+ /*#__PURE__*/ _jsx("h3", {
182
+ children: "Admin Actions"
183
+ }),
184
+ /*#__PURE__*/ _jsxs("div", {
185
+ style: {
186
+ display: 'flex',
187
+ flexWrap: 'wrap',
188
+ columnGap: '0.5rem'
189
+ },
190
+ children: [
191
+ /*#__PURE__*/ _jsx(Button, {
192
+ onClick: handleImpersonate,
193
+ buttonStyle: "primary",
194
+ children: "Impersonate"
195
+ }),
196
+ /*#__PURE__*/ _jsx(Button, {
197
+ onClick: handleRevokeAllSessions,
198
+ buttonStyle: "secondary",
199
+ className: "revoke-sessions-button",
200
+ children: "Revoke All Sessions"
201
+ }),
202
+ /*#__PURE__*/ _jsx(Button, {
203
+ onClick: handleBan,
204
+ buttonStyle: "error",
205
+ className: "ban-button",
206
+ children: "Ban"
207
+ }),
208
+ /*#__PURE__*/ _jsx(Button, {
209
+ onClick: handleUnban,
210
+ buttonStyle: "primary",
211
+ children: "Unban"
212
+ })
213
+ ]
214
+ })
215
+ ]
216
+ }),
217
+ /*#__PURE__*/ _jsx(Toaster, {})
218
+ ]
219
+ });
220
+ }
221
+
222
+ //# sourceMappingURL=admin-buttons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/plugin/payload/components/admin-buttons.tsx"],"sourcesContent":["'use client'\n\nimport React, { useEffect, useState } from 'react'\nimport { adminClient } from 'better-auth/client/plugins'\nimport { createAuthClient } from 'better-auth/react'\nimport { useParams, usePathname, useRouter } from 'next/navigation'\nimport { toast } from 'sonner'\nimport { Toaster } from 'sonner'\nimport { Button } from '@payloadcms/ui'\nimport './styles.css'\n\nimport '@payloadcms/ui/styles.css'\n\nasync function getDocumentData(id: string, path: string) {\n const apiUrl = `${path}/api`\n try {\n // Try to load the /api page and parse the HTML response\n const response = await fetch(apiUrl)\n if (response.ok) {\n const htmlResponse = await response.text()\n // Parse the HTML to extract user data\n try {\n let documentData: any = null\n const parser = new DOMParser()\n const doc = parser.parseFromString(htmlResponse, 'text/html')\n\n // Look for the JSON data in the query inspector\n const jsonRows = doc.querySelectorAll('.query-inspector__row-line')\n if (jsonRows.length > 0) {\n documentData = {}\n\n jsonRows.forEach((row) => {\n const keyMatch = row.innerHTML.match(/\"([^\"]+)\"\\s*:/)\n if (keyMatch) {\n const key = keyMatch[1].trim()\n const valueElement = row.querySelector('.query-inspector__value')\n if (valueElement) {\n let value = valueElement.textContent?.trim() ?? ''\n\n // Convert values to appropriate types\n if (value === 'true') value = 'true'\n else if (value === 'false') value = 'false'\n else if (value === 'null') value = 'null'\n else if (!isNaN(Number(value))) value = Number(value).toString()\n else if (value.startsWith('\"') && value.endsWith('\"')) {\n value = value.substring(1, value.length - 1).trim()\n }\n\n documentData[key] = value\n }\n }\n })\n }\n\n return documentData\n } catch (parseError) {\n console.error('Error parsing document data from HTML:', parseError)\n return null\n }\n }\n } catch (apiError) {\n console.error('Error fetching document data from API:', apiError)\n }\n}\n\nexport default function AdminButtons({ userSlug }: { userSlug: string }) {\n const router = useRouter()\n const path = usePathname()\n const params = useParams()\n const [id, setId] = useState('')\n const [documentData, setDocumentData] = useState<any>(null)\n\n const authClient = createAuthClient({\n plugins: [adminClient()],\n })\n\n useEffect(() => {\n async function fetchDocumentData() {\n // Get the ID from the params.segments array\n const segments = params.segments as string[]\n const userSlugIndex = segments.findIndex((segment) => segment === userSlug)\n const id =\n userSlugIndex !== -1 && userSlugIndex < segments.length - 1\n ? segments[userSlugIndex + 1]\n : segments[segments.length - 1]\n\n const documentData = await getDocumentData(id, path)\n setId(id)\n setDocumentData(documentData)\n }\n fetchDocumentData()\n }, [params, path, userSlug])\n\n const handleImpersonate = async () => {\n await authClient.admin.impersonateUser({\n userId: id,\n fetchOptions: {\n onSuccess() {\n router.push('/')\n },\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 await authClient.admin.banUser({\n userId: id,\n fetchOptions: {\n onSuccess() {\n toast.success('User banned successfully')\n router.refresh()\n },\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 await authClient.admin.unbanUser({\n userId: id,\n fetchOptions: {\n onSuccess() {\n toast.success('User unbanned successfully')\n router.refresh()\n },\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 await authClient.admin.revokeUserSessions({\n userId: id,\n fetchOptions: {\n onSuccess() {\n toast.success('All sessions revoked successfully')\n router.refresh()\n },\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 <>\n <style>{`\n .admin-actions-container {\n display: flex;\n flex-direction: column;\n }\n .admin-actions-container h3 {\n margin-bottom: 1rem;\n }\n .admin-actions-container .btn {\n margin-block: 0.5rem;\n }\n .ban-button {\n background-color: oklch(0.258 0.092 26.042);\n color: oklch(0.577 0.245 27.325);\n border: 1px solid oklch(0.396 0.141 25.723);\n &:hover {\n color: #fff;\n background-color: oklch(0.505 0.213 27.518);\n }\n }\n .revoke-sessions-button {\n --theme-elevation-800: oklch(0.396 0.141 25.723);\n color: oklch(0.637 0.237 25.331);\n &:hover {\n --theme-elevation-400: oklch(0.396 0.141 25.723);\n color: #fff;\n background-color: oklch(0.396 0.141 25.723);\n }\n }\n `}</style>\n <div className=\"admin-actions-container\">\n <h3>Admin Actions</h3>\n <div style={{ display: 'flex', flexWrap: 'wrap', columnGap: '0.5rem' }}>\n <Button onClick={handleImpersonate} buttonStyle=\"primary\">\n Impersonate\n </Button>\n <Button\n onClick={handleRevokeAllSessions}\n buttonStyle=\"secondary\"\n className=\"revoke-sessions-button\"\n >\n Revoke All Sessions\n </Button>\n <Button onClick={handleBan} buttonStyle=\"error\" className=\"ban-button\">\n Ban\n </Button>\n <Button onClick={handleUnban} buttonStyle=\"primary\">\n Unban\n </Button>\n </div>\n </div>\n <Toaster />\n </>\n )\n}\n"],"names":["React","useEffect","useState","adminClient","createAuthClient","useParams","usePathname","useRouter","toast","Toaster","Button","getDocumentData","id","path","apiUrl","response","fetch","ok","htmlResponse","text","documentData","parser","DOMParser","doc","parseFromString","jsonRows","querySelectorAll","length","forEach","row","keyMatch","innerHTML","match","key","trim","valueElement","querySelector","value","textContent","isNaN","Number","toString","startsWith","endsWith","substring","parseError","console","error","apiError","AdminButtons","userSlug","router","params","setId","setDocumentData","authClient","plugins","fetchDocumentData","segments","userSlugIndex","findIndex","segment","handleImpersonate","admin","impersonateUser","userId","fetchOptions","onSuccess","push","onError","handleBan","banUser","success","refresh","handleUnban","unbanUser","handleRevokeAllSessions","revokeUserSessions","style","div","className","h3","display","flexWrap","columnGap","onClick","buttonStyle"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export default function LoginRedirect(): void;
@@ -0,0 +1,6 @@
1
+ import { redirect } from 'next/navigation';
2
+ export default function LoginRedirect() {
3
+ redirect('/admin/login');
4
+ }
5
+
6
+ //# sourceMappingURL=login-redirect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/plugin/payload/components/login-redirect.tsx"],"sourcesContent":["import { redirect } from 'next/navigation'\n\nexport default function LoginRedirect() {\n redirect('/admin/login')\n}\n"],"names":["redirect","LoginRedirect"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,kBAAiB;AAE1C,eAAe,SAASC;IACtBD,SAAS;AACX"}
@@ -0,0 +1 @@
1
+ export default function Logo(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,36 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ export default function Logo() {
4
+ return /*#__PURE__*/ _jsxs("div", {
5
+ className: "flex items-center justify-center w-full mb-8",
6
+ children: [
7
+ /*#__PURE__*/ _jsx("svg", {
8
+ width: "60",
9
+ height: "45",
10
+ viewBox: "0 0 60 45",
11
+ fill: "none",
12
+ className: "w-5 h-5",
13
+ xmlns: "http://www.w3.org/2000/svg",
14
+ children: /*#__PURE__*/ _jsx("path", {
15
+ fillRule: "evenodd",
16
+ clipRule: "evenodd",
17
+ d: "M0 0H15V15H30V30H15V45H0V30V15V0ZM45 30V15H30V0H45H60V15V30V45H45H30V30H45Z",
18
+ className: "fill-black dark:fill-white"
19
+ })
20
+ }),
21
+ /*#__PURE__*/ _jsxs("div", {
22
+ className: "ml-2 font-semibold text-black dark:text-white",
23
+ children: [
24
+ "Payload ",
25
+ /*#__PURE__*/ _jsx("span", {
26
+ className: "text-blue-600 dark:text-blue-400",
27
+ children: "×"
28
+ }),
29
+ " Better Auth"
30
+ ]
31
+ })
32
+ ]
33
+ });
34
+ }
35
+
36
+ //# sourceMappingURL=logo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/plugin/payload/components/logo.tsx"],"sourcesContent":["import React from 'react'\n\nexport default function Logo() {\n return (\n <div className=\"flex items-center justify-center w-full mb-8\">\n <svg\n width=\"60\"\n height=\"45\"\n viewBox=\"0 0 60 45\"\n fill=\"none\"\n className=\"w-5 h-5\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M0 0H15V15H30V30H15V45H0V30V15V0ZM45 30V15H30V0H45H60V15V30V45H45H30V30H45Z\"\n className=\"fill-black dark:fill-white\"\n />\n </svg>\n <div className=\"ml-2 font-semibold text-black dark:text-white\">\n Payload <span className=\"text-blue-600 dark:text-blue-400\">&times;</span> Better Auth\n </div>\n </div>\n )\n}\n"],"names":["React","Logo","div","className","svg","width","height","viewBox","fill","xmlns","path","fillRule","clipRule","d","span"],"mappings":";AAAA,OAAOA,WAAW,QAAO;AAEzB,eAAe,SAASC;IACtB,qBACE,MAACC;QAAIC,WAAU;;0BACb,KAACC;gBACCC,OAAM;gBACNC,QAAO;gBACPC,SAAQ;gBACRC,MAAK;gBACLL,WAAU;gBACVM,OAAM;0BAEN,cAAA,KAACC;oBACCC,UAAS;oBACTC,UAAS;oBACTC,GAAE;oBACFV,WAAU;;;0BAGd,MAACD;gBAAIC,WAAU;;oBAAgD;kCACrD,KAACW;wBAAKX,WAAU;kCAAmC;;oBAAc;;;;;AAIjF"}
@@ -0,0 +1 @@
1
+ export default function LogoutButton(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,61 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import React from 'react';
4
+ import { useRouter } from 'next/navigation';
5
+ import { Loader2, LogOut } from 'lucide-react';
6
+ import { createAuthClient } from 'better-auth/react';
7
+ export default function LogoutButton() {
8
+ const [loading, setLoading] = React.useState(false);
9
+ const router = useRouter();
10
+ const handleLogout = async ()=>{
11
+ setLoading(true);
12
+ try {
13
+ await createAuthClient().signOut({
14
+ fetchOptions: {
15
+ onResponse: ()=>{
16
+ setLoading(false);
17
+ },
18
+ onError: ()=>{
19
+ setLoading(false);
20
+ },
21
+ onSuccess: ()=>{
22
+ router.refresh();
23
+ }
24
+ }
25
+ });
26
+ } catch (error) {
27
+ setLoading(false);
28
+ }
29
+ };
30
+ return /*#__PURE__*/ _jsx("button", {
31
+ onClick: handleLogout,
32
+ disabled: loading,
33
+ style: {
34
+ background: 'transparent',
35
+ border: 'none',
36
+ cursor: 'pointer',
37
+ padding: '8px',
38
+ borderRadius: '4px',
39
+ display: 'flex',
40
+ alignItems: 'center',
41
+ justifyContent: 'center',
42
+ transition: 'background-color 0.2s ease'
43
+ },
44
+ onMouseOver: (e)=>e.currentTarget.style.backgroundColor = 'rgba(0, 0, 0, 0.05)',
45
+ onMouseOut: (e)=>e.currentTarget.style.backgroundColor = 'transparent',
46
+ children: loading ? /*#__PURE__*/ _jsx(Loader2, {
47
+ style: {
48
+ height: '32px',
49
+ width: '32px',
50
+ animation: 'spin 1s linear infinite'
51
+ }
52
+ }) : /*#__PURE__*/ _jsx(LogOut, {
53
+ style: {
54
+ height: '32px',
55
+ width: '32px'
56
+ }
57
+ })
58
+ });
59
+ }
60
+
61
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/plugin/payload/components/logout.tsx"],"sourcesContent":["'use client'\nimport React from 'react'\nimport { useRouter } from 'next/navigation'\nimport { Loader2, LogOut } from 'lucide-react'\nimport { createAuthClient } from 'better-auth/react'\n\nexport default function LogoutButton() {\n const [loading, setLoading] = React.useState(false)\n const router = useRouter()\n\n const handleLogout = async () => {\n setLoading(true)\n try {\n await createAuthClient().signOut({\n fetchOptions: {\n onResponse: () => {\n setLoading(false)\n },\n onError: () => {\n setLoading(false)\n },\n onSuccess: () => {\n router.refresh()\n },\n },\n })\n } catch (error) {\n setLoading(false)\n }\n }\n\n return (\n <button\n onClick={handleLogout}\n disabled={loading}\n style={{\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n padding: '8px',\n borderRadius: '4px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'background-color 0.2s ease',\n }}\n onMouseOver={(e) => (e.currentTarget.style.backgroundColor = 'rgba(0, 0, 0, 0.05)')}\n onMouseOut={(e) => (e.currentTarget.style.backgroundColor = 'transparent')}\n >\n {loading ? (\n <Loader2 style={{ height: '32px', width: '32px', animation: 'spin 1s linear infinite' }} />\n ) : (\n <LogOut style={{ height: '32px', width: '32px' }} />\n )}\n </button>\n )\n}\n"],"names":["React","useRouter","Loader2","LogOut","createAuthClient","LogoutButton","loading","setLoading","useState","router","handleLogout","signOut","fetchOptions","onResponse","onError","onSuccess","refresh","error","button","onClick","disabled","style","background","border","cursor","padding","borderRadius","display","alignItems","justifyContent","transition","onMouseOver","e","currentTarget","backgroundColor","onMouseOut","height","width","animation"],"mappings":"AAAA;;AACA,OAAOA,WAAW,QAAO;AACzB,SAASC,SAAS,QAAQ,kBAAiB;AAC3C,SAASC,OAAO,EAAEC,MAAM,QAAQ,eAAc;AAC9C,SAASC,gBAAgB,QAAQ,oBAAmB;AAEpD,eAAe,SAASC;IACtB,MAAM,CAACC,SAASC,WAAW,GAAGP,MAAMQ,QAAQ,CAAC;IAC7C,MAAMC,SAASR;IAEf,MAAMS,eAAe;QACnBH,WAAW;QACX,IAAI;YACF,MAAMH,mBAAmBO,OAAO,CAAC;gBAC/BC,cAAc;oBACZC,YAAY;wBACVN,WAAW;oBACb;oBACAO,SAAS;wBACPP,WAAW;oBACb;oBACAQ,WAAW;wBACTN,OAAOO,OAAO;oBAChB;gBACF;YACF;QACF,EAAE,OAAOC,OAAO;YACdV,WAAW;QACb;IACF;IAEA,qBACE,KAACW;QACCC,SAAST;QACTU,UAAUd;QACVe,OAAO;YACLC,YAAY;YACZC,QAAQ;YACRC,QAAQ;YACRC,SAAS;YACTC,cAAc;YACdC,SAAS;YACTC,YAAY;YACZC,gBAAgB;YAChBC,YAAY;QACd;QACAC,aAAa,CAACC,IAAOA,EAAEC,aAAa,CAACZ,KAAK,CAACa,eAAe,GAAG;QAC7DC,YAAY,CAACH,IAAOA,EAAEC,aAAa,CAACZ,KAAK,CAACa,eAAe,GAAG;kBAE3D5B,wBACC,KAACJ;YAAQmB,OAAO;gBAAEe,QAAQ;gBAAQC,OAAO;gBAAQC,WAAW;YAA0B;2BAEtF,KAACnC;YAAOkB,OAAO;gBAAEe,QAAQ;gBAAQC,OAAO;YAAO;;;AAIvD"}
@@ -0,0 +1,3 @@
1
+ export default function SignIn({ admin }: {
2
+ admin?: boolean;
3
+ }): import("react/jsx-runtime").JSX.Element;