payload-auth 1.3.4 → 1.4.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.
- package/dist/better-auth/plugin/constants.d.ts +1 -0
- package/dist/better-auth/plugin/constants.d.ts.map +1 -1
- package/dist/better-auth/plugin/constants.js +3 -2
- package/dist/better-auth/plugin/helpers/check-passkey-plugin.d.ts.map +1 -1
- package/dist/better-auth/plugin/helpers/check-passkey-plugin.js +3 -2
- package/dist/better-auth/plugin/helpers/check-two-factor-plugin.d.ts +3 -0
- package/dist/better-auth/plugin/helpers/check-two-factor-plugin.d.ts.map +1 -0
- package/dist/better-auth/plugin/helpers/check-two-factor-plugin.js +6 -0
- package/dist/better-auth/plugin/helpers/check-username-plugin.d.ts.map +1 -1
- package/dist/better-auth/plugin/helpers/check-username-plugin.js +3 -2
- package/dist/better-auth/plugin/index.d.ts.map +1 -1
- package/dist/better-auth/plugin/index.js +16 -2
- package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/users/index.js +7 -2
- package/dist/better-auth/plugin/payload/components/two-factor-auth/index.d.ts +4 -0
- package/dist/better-auth/plugin/payload/components/two-factor-auth/index.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/components/two-factor-auth/index.js +344 -0
- package/dist/better-auth/plugin/payload/components/two-factor-auth/index.scss +113 -0
- package/dist/better-auth/plugin/payload/exports/client.d.ts +2 -1
- package/dist/better-auth/plugin/payload/exports/client.d.ts.map +1 -1
- package/dist/better-auth/plugin/payload/exports/client.js +3 -2
- package/dist/better-auth/plugin/payload/exports/rsc.d.ts +2 -1
- package/dist/better-auth/plugin/payload/exports/rsc.d.ts.map +1 -1
- package/dist/better-auth/plugin/payload/exports/rsc.js +3 -2
- package/dist/better-auth/plugin/payload/views/admin-login/client.d.ts.map +1 -1
- package/dist/better-auth/plugin/payload/views/admin-login/client.js +14 -5
- package/dist/better-auth/plugin/payload/views/admin-login/index.d.ts.map +1 -1
- package/dist/better-auth/plugin/payload/views/admin-login/index.js +1 -3
- package/dist/better-auth/plugin/payload/views/two-factor-verify/client.d.ts +5 -0
- package/dist/better-auth/plugin/payload/views/two-factor-verify/client.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/views/two-factor-verify/client.js +77 -0
- package/dist/better-auth/plugin/payload/views/two-factor-verify/index.d.ts +10 -0
- package/dist/better-auth/plugin/payload/views/two-factor-verify/index.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/views/two-factor-verify/index.js +44 -0
- package/dist/shared/form/components/submit.js +3 -1
- package/dist/shared/utils/value-or-default.d.ts +10 -0
- package/dist/shared/utils/value-or-default.d.ts.map +1 -0
- package/dist/shared/utils/value-or-default.js +12 -0
- package/package.json +7 -6
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import "./index.scss";
|
|
4
|
+
import React, { useMemo, useState } from "react";
|
|
5
|
+
import { XIcon, Copy } from "lucide-react";
|
|
6
|
+
import { Button, Modal, toast, useModal, useTranslation, useFormFields, useField } from "@payloadcms/ui";
|
|
7
|
+
import { createAuthClient } from "better-auth/react";
|
|
8
|
+
import { twoFactorClient } from "better-auth/client/plugins";
|
|
9
|
+
import { Form, FormInputWrap } from "../../../../../shared/form/ui";
|
|
10
|
+
import { z } from "zod";
|
|
11
|
+
import { passwordField } from "../../../../../shared/form/validation";
|
|
12
|
+
import { QRCodeSVG } from "qrcode.react";
|
|
13
|
+
import { useAppForm } from "../../../../../shared/form";
|
|
14
|
+
const baseClass = 'two-factor-auth-modal';
|
|
15
|
+
export const TwoFactorAuth = ()=>{
|
|
16
|
+
const [totpURI, setTotpURI] = useState('');
|
|
17
|
+
const [backupCodes, setBackupCodes] = useState(null);
|
|
18
|
+
const [formState, setFormState] = useState('enable');
|
|
19
|
+
const { openModal, closeModal } = useModal();
|
|
20
|
+
const { t } = useTranslation();
|
|
21
|
+
const twoFactorEnabledField = useFormFields(([fields])=>fields.twoFactorEnabled);
|
|
22
|
+
const twoFactorEnabled = Boolean(twoFactorEnabledField?.value);
|
|
23
|
+
const { setValue: setTwoFactorEnabled } = useField({
|
|
24
|
+
path: 'twoFactorEnabled'
|
|
25
|
+
});
|
|
26
|
+
const authClient = useMemo(()=>createAuthClient({
|
|
27
|
+
plugins: [
|
|
28
|
+
twoFactorClient()
|
|
29
|
+
]
|
|
30
|
+
}), []);
|
|
31
|
+
const copyURI = async ()=>{
|
|
32
|
+
if (!totpURI) return;
|
|
33
|
+
try {
|
|
34
|
+
await navigator.clipboard.writeText(totpURI);
|
|
35
|
+
toast.success('Copied');
|
|
36
|
+
} catch {
|
|
37
|
+
toast.error('Failed to copy');
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
// Form Schemas
|
|
41
|
+
const passwordSchema = z.object({
|
|
42
|
+
password: passwordField({
|
|
43
|
+
t
|
|
44
|
+
})
|
|
45
|
+
});
|
|
46
|
+
const otpSchema = z.object({
|
|
47
|
+
otp: z.string().length(6, 'Code must be 6 digits').refine((val)=>/^\d{6}$/.test(val), 'Code must be numeric')
|
|
48
|
+
});
|
|
49
|
+
const EnableForm = ()=>{
|
|
50
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
51
|
+
const form = useAppForm({
|
|
52
|
+
defaultValues: {
|
|
53
|
+
password: ''
|
|
54
|
+
},
|
|
55
|
+
onSubmit: async ({ value })=>{
|
|
56
|
+
setIsLoading(true);
|
|
57
|
+
const { data, error } = await authClient.twoFactor.enable({
|
|
58
|
+
password: value.password
|
|
59
|
+
});
|
|
60
|
+
setIsLoading(false);
|
|
61
|
+
if (error) {
|
|
62
|
+
toast.error(error.message);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
setTotpURI(data.totpURI);
|
|
66
|
+
if (data && 'backupCodes' in data && data.backupCodes) {
|
|
67
|
+
setBackupCodes(Array.isArray(data.backupCodes) ? data.backupCodes : String(data.backupCodes).split(/\s+/).filter(Boolean));
|
|
68
|
+
} else {
|
|
69
|
+
setBackupCodes(null);
|
|
70
|
+
}
|
|
71
|
+
setFormState('verify');
|
|
72
|
+
},
|
|
73
|
+
validators: {
|
|
74
|
+
onSubmit: passwordSchema
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
return /*#__PURE__*/ _jsxs(Form, {
|
|
78
|
+
onSubmit: (e)=>{
|
|
79
|
+
e.preventDefault();
|
|
80
|
+
void form.handleSubmit();
|
|
81
|
+
},
|
|
82
|
+
className: "two-factor-enable-form",
|
|
83
|
+
children: [
|
|
84
|
+
/*#__PURE__*/ _jsx(FormInputWrap, {
|
|
85
|
+
className: "two-factor-enable-form__inputWrap",
|
|
86
|
+
children: /*#__PURE__*/ _jsx(form.AppField, {
|
|
87
|
+
name: "password",
|
|
88
|
+
children: (field)=>/*#__PURE__*/ _jsx(field.TextField, {
|
|
89
|
+
type: "password",
|
|
90
|
+
className: "password",
|
|
91
|
+
label: "Password",
|
|
92
|
+
required: true
|
|
93
|
+
})
|
|
94
|
+
})
|
|
95
|
+
}),
|
|
96
|
+
/*#__PURE__*/ _jsx(form.AppForm, {
|
|
97
|
+
children: /*#__PURE__*/ _jsx(form.Submit, {
|
|
98
|
+
label: "Enable",
|
|
99
|
+
loadingLabel: "Enabling"
|
|
100
|
+
})
|
|
101
|
+
})
|
|
102
|
+
]
|
|
103
|
+
});
|
|
104
|
+
};
|
|
105
|
+
const VerifyForm = ()=>{
|
|
106
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
107
|
+
const form = useAppForm({
|
|
108
|
+
defaultValues: {
|
|
109
|
+
otp: ''
|
|
110
|
+
},
|
|
111
|
+
onSubmit: async ({ value })=>{
|
|
112
|
+
setIsLoading(true);
|
|
113
|
+
const { data, error } = await authClient.twoFactor.verifyTotp({
|
|
114
|
+
code: value.otp
|
|
115
|
+
});
|
|
116
|
+
setIsLoading(false);
|
|
117
|
+
if (error) {
|
|
118
|
+
toast.error(error.message);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
if (data && 'backupCodes' in data && data.backupCodes) {
|
|
122
|
+
setBackupCodes(Array.isArray(data.backupCodes) ? data.backupCodes : String(data.backupCodes).split(/\s+/).filter(Boolean));
|
|
123
|
+
}
|
|
124
|
+
toast.success('Two‑factor verified & enabled');
|
|
125
|
+
setTwoFactorEnabled(true);
|
|
126
|
+
setFormState('backupCodes');
|
|
127
|
+
},
|
|
128
|
+
validators: {
|
|
129
|
+
onSubmit: otpSchema
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
return /*#__PURE__*/ _jsxs(Form, {
|
|
133
|
+
onSubmit: (e)=>{
|
|
134
|
+
e.preventDefault();
|
|
135
|
+
void form.handleSubmit();
|
|
136
|
+
},
|
|
137
|
+
className: "two-factor-verify-form",
|
|
138
|
+
children: [
|
|
139
|
+
/*#__PURE__*/ _jsx(FormInputWrap, {
|
|
140
|
+
className: "tf__inputWrap",
|
|
141
|
+
children: /*#__PURE__*/ _jsx(form.AppField, {
|
|
142
|
+
name: "otp",
|
|
143
|
+
children: (field)=>/*#__PURE__*/ _jsx(field.TextField, {
|
|
144
|
+
type: "text",
|
|
145
|
+
className: "text otp",
|
|
146
|
+
label: "6‑digit Code",
|
|
147
|
+
required: true
|
|
148
|
+
})
|
|
149
|
+
})
|
|
150
|
+
}),
|
|
151
|
+
/*#__PURE__*/ _jsx(form.AppForm, {
|
|
152
|
+
children: /*#__PURE__*/ _jsx(form.Submit, {
|
|
153
|
+
label: "Verify",
|
|
154
|
+
loadingLabel: "Verifying"
|
|
155
|
+
})
|
|
156
|
+
})
|
|
157
|
+
]
|
|
158
|
+
});
|
|
159
|
+
};
|
|
160
|
+
const DisableForm = ()=>{
|
|
161
|
+
const form = useAppForm({
|
|
162
|
+
defaultValues: {
|
|
163
|
+
password: ''
|
|
164
|
+
},
|
|
165
|
+
onSubmit: async ({ value })=>{
|
|
166
|
+
await authClient.twoFactor.disable({
|
|
167
|
+
password: value.password
|
|
168
|
+
}, {
|
|
169
|
+
onSuccess () {
|
|
170
|
+
toast.success('Two‑factor disabled');
|
|
171
|
+
setTwoFactorEnabled(false);
|
|
172
|
+
closeModal('two-factor-auth-modal');
|
|
173
|
+
return undefined;
|
|
174
|
+
},
|
|
175
|
+
onError (ctx) {
|
|
176
|
+
toast.error(ctx.error.message);
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
},
|
|
180
|
+
validators: {
|
|
181
|
+
onSubmit: passwordSchema
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
return /*#__PURE__*/ _jsxs(Form, {
|
|
185
|
+
onSubmit: (e)=>{
|
|
186
|
+
e.preventDefault();
|
|
187
|
+
void form.handleSubmit();
|
|
188
|
+
},
|
|
189
|
+
className: "two-factor-disable-form mt-4",
|
|
190
|
+
children: [
|
|
191
|
+
/*#__PURE__*/ _jsx(FormInputWrap, {
|
|
192
|
+
className: "two-factor-disable-form__inputWrap",
|
|
193
|
+
children: /*#__PURE__*/ _jsx(form.AppField, {
|
|
194
|
+
name: "password",
|
|
195
|
+
children: (field)=>/*#__PURE__*/ _jsx(field.TextField, {
|
|
196
|
+
type: "password",
|
|
197
|
+
className: "password",
|
|
198
|
+
label: "Password",
|
|
199
|
+
required: true
|
|
200
|
+
})
|
|
201
|
+
})
|
|
202
|
+
}),
|
|
203
|
+
/*#__PURE__*/ _jsx(form.AppForm, {
|
|
204
|
+
children: /*#__PURE__*/ _jsx(form.Submit, {
|
|
205
|
+
label: "Disable Two‑Factor",
|
|
206
|
+
loadingLabel: "Disabling"
|
|
207
|
+
})
|
|
208
|
+
})
|
|
209
|
+
]
|
|
210
|
+
});
|
|
211
|
+
};
|
|
212
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
213
|
+
className: "two-factor-auth-field",
|
|
214
|
+
children: [
|
|
215
|
+
twoFactorEnabled ? /*#__PURE__*/ _jsx(Button, {
|
|
216
|
+
onClick: ()=>{
|
|
217
|
+
setFormState('disable');
|
|
218
|
+
openModal('two-factor-auth-modal');
|
|
219
|
+
},
|
|
220
|
+
size: "medium",
|
|
221
|
+
buttonStyle: "pill",
|
|
222
|
+
children: "Disable Two-Factor"
|
|
223
|
+
}) : /*#__PURE__*/ _jsx(Button, {
|
|
224
|
+
onClick: ()=>{
|
|
225
|
+
setFormState('enable');
|
|
226
|
+
openModal('two-factor-auth-modal');
|
|
227
|
+
},
|
|
228
|
+
size: "medium",
|
|
229
|
+
buttonStyle: "pill",
|
|
230
|
+
children: "Enable Two-Factor"
|
|
231
|
+
}),
|
|
232
|
+
/*#__PURE__*/ _jsx(Modal, {
|
|
233
|
+
slug: "two-factor-auth-modal",
|
|
234
|
+
className: baseClass,
|
|
235
|
+
closeOnBlur: true,
|
|
236
|
+
children: /*#__PURE__*/ _jsxs("div", {
|
|
237
|
+
className: `${baseClass}__wrapper`,
|
|
238
|
+
children: [
|
|
239
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
240
|
+
onClick: ()=>closeModal('two-factor-auth-modal'),
|
|
241
|
+
buttonStyle: "icon-label",
|
|
242
|
+
size: "small",
|
|
243
|
+
className: `${baseClass}__close-button`,
|
|
244
|
+
children: /*#__PURE__*/ _jsx(XIcon, {
|
|
245
|
+
size: 24
|
|
246
|
+
})
|
|
247
|
+
}),
|
|
248
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
249
|
+
className: `${baseClass}__content`,
|
|
250
|
+
style: {
|
|
251
|
+
maxWidth: '38rem'
|
|
252
|
+
},
|
|
253
|
+
children: [
|
|
254
|
+
formState === 'enable' && /*#__PURE__*/ _jsxs(_Fragment, {
|
|
255
|
+
children: [
|
|
256
|
+
/*#__PURE__*/ _jsx("h2", {
|
|
257
|
+
children: "Enable Two‑Factor"
|
|
258
|
+
}),
|
|
259
|
+
/*#__PURE__*/ _jsx(EnableForm, {})
|
|
260
|
+
]
|
|
261
|
+
}),
|
|
262
|
+
formState === 'verify' && /*#__PURE__*/ _jsxs(_Fragment, {
|
|
263
|
+
children: [
|
|
264
|
+
/*#__PURE__*/ _jsx("h2", {
|
|
265
|
+
children: "Verify Two‑Factor"
|
|
266
|
+
}),
|
|
267
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
268
|
+
className: "two-factor-auth-modal__verify-block",
|
|
269
|
+
children: [
|
|
270
|
+
/*#__PURE__*/ _jsx("p", {
|
|
271
|
+
children: "Scan the QR code with your authenticator app or copy the URI."
|
|
272
|
+
}),
|
|
273
|
+
/*#__PURE__*/ _jsx("div", {
|
|
274
|
+
className: "two-factor-auth-modal__qrcode",
|
|
275
|
+
children: /*#__PURE__*/ _jsx(QRCodeSVG, {
|
|
276
|
+
value: totpURI,
|
|
277
|
+
size: 200
|
|
278
|
+
})
|
|
279
|
+
}),
|
|
280
|
+
/*#__PURE__*/ _jsxs(Button, {
|
|
281
|
+
size: "small",
|
|
282
|
+
buttonStyle: "transparent",
|
|
283
|
+
onClick: copyURI,
|
|
284
|
+
className: "two-factor-auth-modal__copy-btn",
|
|
285
|
+
children: [
|
|
286
|
+
/*#__PURE__*/ _jsx(Copy, {
|
|
287
|
+
size: 18,
|
|
288
|
+
className: "two-factor-auth-modal__copy-icon"
|
|
289
|
+
}),
|
|
290
|
+
" Copy URI"
|
|
291
|
+
]
|
|
292
|
+
}),
|
|
293
|
+
/*#__PURE__*/ _jsx(VerifyForm, {})
|
|
294
|
+
]
|
|
295
|
+
})
|
|
296
|
+
]
|
|
297
|
+
}),
|
|
298
|
+
formState === 'backupCodes' && backupCodes && /*#__PURE__*/ _jsxs(_Fragment, {
|
|
299
|
+
children: [
|
|
300
|
+
/*#__PURE__*/ _jsx("h2", {
|
|
301
|
+
children: "Backup Codes"
|
|
302
|
+
}),
|
|
303
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
304
|
+
className: "two-factor-auth-modal__backup-codes",
|
|
305
|
+
children: [
|
|
306
|
+
/*#__PURE__*/ _jsx("ul", {
|
|
307
|
+
children: backupCodes.map((code, i)=>/*#__PURE__*/ _jsx("li", {
|
|
308
|
+
className: "two-factor-auth-modal__backup-code",
|
|
309
|
+
children: code
|
|
310
|
+
}, i))
|
|
311
|
+
}),
|
|
312
|
+
/*#__PURE__*/ _jsx("p", {
|
|
313
|
+
className: "two-factor-auth-modal__backup-desc",
|
|
314
|
+
children: "Store these codes in a safe place. Each code can be used once if you lose access to your authenticator."
|
|
315
|
+
})
|
|
316
|
+
]
|
|
317
|
+
}),
|
|
318
|
+
/*#__PURE__*/ _jsx(Button, {
|
|
319
|
+
onClick: ()=>closeModal('two-factor-auth-modal'),
|
|
320
|
+
buttonStyle: "primary",
|
|
321
|
+
size: "large",
|
|
322
|
+
className: "two-factor-auth-modal__backup-codes-close-button",
|
|
323
|
+
children: "Saved them!"
|
|
324
|
+
})
|
|
325
|
+
]
|
|
326
|
+
}),
|
|
327
|
+
formState === 'disable' && /*#__PURE__*/ _jsxs(_Fragment, {
|
|
328
|
+
children: [
|
|
329
|
+
/*#__PURE__*/ _jsx("h2", {
|
|
330
|
+
children: "Two‑Factor Authentication"
|
|
331
|
+
}),
|
|
332
|
+
/*#__PURE__*/ _jsx(DisableForm, {})
|
|
333
|
+
]
|
|
334
|
+
})
|
|
335
|
+
]
|
|
336
|
+
})
|
|
337
|
+
]
|
|
338
|
+
})
|
|
339
|
+
})
|
|
340
|
+
]
|
|
341
|
+
});
|
|
342
|
+
};
|
|
343
|
+
|
|
344
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iZXR0ZXItYXV0aC9wbHVnaW4vcGF5bG9hZC9jb21wb25lbnRzL3R3by1mYWN0b3ItYXV0aC9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFhJY29uLCBDb3B5IH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHsgQnV0dG9uLCBNb2RhbCwgdG9hc3QsIHVzZU1vZGFsLCB1c2VUcmFuc2xhdGlvbiwgdXNlRm9ybUZpZWxkcywgdXNlRmllbGQgfSBmcm9tICdAcGF5bG9hZGNtcy91aSdcbmltcG9ydCB7IGNyZWF0ZUF1dGhDbGllbnQgfSBmcm9tICdiZXR0ZXItYXV0aC9yZWFjdCdcbmltcG9ydCB7IHR3b0ZhY3RvckNsaWVudCB9IGZyb20gJ2JldHRlci1hdXRoL2NsaWVudC9wbHVnaW5zJ1xuaW1wb3J0IHsgRm9ybSwgRm9ybUlucHV0V3JhcCB9IGZyb20gJ0Avc2hhcmVkL2Zvcm0vdWknXG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kJ1xuaW1wb3J0IHsgcGFzc3dvcmRGaWVsZCB9IGZyb20gJ0Avc2hhcmVkL2Zvcm0vdmFsaWRhdGlvbidcbmltcG9ydCB7IFFSQ29kZVNWRyB9IGZyb20gJ3FyY29kZS5yZWFjdCdcbmltcG9ydCB7IHVzZUFwcEZvcm0gfSBmcm9tICdAL3NoYXJlZC9mb3JtJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAndHdvLWZhY3Rvci1hdXRoLW1vZGFsJ1xuXG5leHBvcnQgY29uc3QgVHdvRmFjdG9yQXV0aDogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IFt0b3RwVVJJLCBzZXRUb3RwVVJJXSA9IHVzZVN0YXRlKCcnKVxuICBjb25zdCBbYmFja3VwQ29kZXMsIHNldEJhY2t1cENvZGVzXSA9IHVzZVN0YXRlPHN0cmluZ1tdIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2Zvcm1TdGF0ZSwgc2V0Rm9ybVN0YXRlXSA9IHVzZVN0YXRlPCdlbmFibGUnIHwgJ3ZlcmlmeScgfCAnYmFja3VwQ29kZXMnIHwgJ2Rpc2FibGUnPignZW5hYmxlJylcbiAgY29uc3QgeyBvcGVuTW9kYWwsIGNsb3NlTW9kYWwgfSA9IHVzZU1vZGFsKClcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpXG4gIGNvbnN0IHR3b0ZhY3RvckVuYWJsZWRGaWVsZCA9IHVzZUZvcm1GaWVsZHMoKFtmaWVsZHNdKSA9PiBmaWVsZHMudHdvRmFjdG9yRW5hYmxlZClcbiAgY29uc3QgdHdvRmFjdG9yRW5hYmxlZCA9IEJvb2xlYW4odHdvRmFjdG9yRW5hYmxlZEZpZWxkPy52YWx1ZSlcbiAgY29uc3QgeyBzZXRWYWx1ZTogc2V0VHdvRmFjdG9yRW5hYmxlZCB9ID0gdXNlRmllbGQoeyBwYXRoOiAndHdvRmFjdG9yRW5hYmxlZCcgfSlcblxuICBjb25zdCBhdXRoQ2xpZW50ID0gdXNlTWVtbygoKSA9PiBjcmVhdGVBdXRoQ2xpZW50KHsgcGx1Z2luczogW3R3b0ZhY3RvckNsaWVudCgpXSB9KSwgW10pXG5cbiAgY29uc3QgY29weVVSSSA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoIXRvdHBVUkkpIHJldHVyblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0b3RwVVJJKVxuICAgICAgdG9hc3Quc3VjY2VzcygnQ29waWVkJylcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRvYXN0LmVycm9yKCdGYWlsZWQgdG8gY29weScpXG4gICAgfVxuICB9XG5cbiAgLy8gRm9ybSBTY2hlbWFzXG4gIGNvbnN0IHBhc3N3b3JkU2NoZW1hID0gei5vYmplY3Qoe1xuICAgIHBhc3N3b3JkOiBwYXNzd29yZEZpZWxkKHsgdCB9KVxuICB9KVxuXG4gIGNvbnN0IG90cFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICBvdHA6IHpcbiAgICAgIC5zdHJpbmcoKVxuICAgICAgLmxlbmd0aCg2LCAnQ29kZSBtdXN0IGJlIDYgZGlnaXRzJylcbiAgICAgIC5yZWZpbmUoKHZhbCkgPT4gL15cXGR7Nn0kLy50ZXN0KHZhbCksICdDb2RlIG11c3QgYmUgbnVtZXJpYycpXG4gIH0pXG5cbiAgY29uc3QgRW5hYmxlRm9ybSA9ICgpID0+IHtcbiAgICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gICAgY29uc3QgZm9ybSA9IHVzZUFwcEZvcm0oe1xuICAgICAgZGVmYXVsdFZhbHVlczogeyBwYXNzd29yZDogJycgfSxcbiAgICAgIG9uU3VibWl0OiBhc3luYyAoeyB2YWx1ZSB9OiB7IHZhbHVlOiB7IHBhc3N3b3JkOiBzdHJpbmcgfSB9KSA9PiB7XG4gICAgICAgIHNldElzTG9hZGluZyh0cnVlKVxuICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBhdXRoQ2xpZW50LnR3b0ZhY3Rvci5lbmFibGUoeyBwYXNzd29yZDogdmFsdWUucGFzc3dvcmQgfSlcbiAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICB0b2FzdC5lcnJvcihlcnJvci5tZXNzYWdlKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHNldFRvdHBVUkkoZGF0YS50b3RwVVJJKVxuICAgICAgICBpZiAoZGF0YSAmJiAnYmFja3VwQ29kZXMnIGluIGRhdGEgJiYgZGF0YS5iYWNrdXBDb2Rlcykge1xuICAgICAgICAgIHNldEJhY2t1cENvZGVzKEFycmF5LmlzQXJyYXkoZGF0YS5iYWNrdXBDb2RlcykgPyBkYXRhLmJhY2t1cENvZGVzIDogU3RyaW5nKGRhdGEuYmFja3VwQ29kZXMpLnNwbGl0KC9cXHMrLykuZmlsdGVyKEJvb2xlYW4pKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldEJhY2t1cENvZGVzKG51bGwpXG4gICAgICAgIH1cbiAgICAgICAgc2V0Rm9ybVN0YXRlKCd2ZXJpZnknKVxuICAgICAgfSxcbiAgICAgIHZhbGlkYXRvcnM6IHsgb25TdWJtaXQ6IHBhc3N3b3JkU2NoZW1hIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxGb3JtXG4gICAgICAgIG9uU3VibWl0PXsoZSkgPT4ge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgIHZvaWQgZm9ybS5oYW5kbGVTdWJtaXQoKVxuICAgICAgICB9fVxuICAgICAgICBjbGFzc05hbWU9XCJ0d28tZmFjdG9yLWVuYWJsZS1mb3JtXCI+XG4gICAgICAgIDxGb3JtSW5wdXRXcmFwIGNsYXNzTmFtZT1cInR3by1mYWN0b3ItZW5hYmxlLWZvcm1fX2lucHV0V3JhcFwiPlxuICAgICAgICAgIDxmb3JtLkFwcEZpZWxkXG4gICAgICAgICAgICBuYW1lPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgY2hpbGRyZW49eyhmaWVsZDogYW55KSA9PiA8ZmllbGQuVGV4dEZpZWxkIHR5cGU9XCJwYXNzd29yZFwiIGNsYXNzTmFtZT1cInBhc3N3b3JkXCIgbGFiZWw9XCJQYXNzd29yZFwiIHJlcXVpcmVkIC8+fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvRm9ybUlucHV0V3JhcD5cbiAgICAgICAgPGZvcm0uQXBwRm9ybSBjaGlsZHJlbj17PGZvcm0uU3VibWl0IGxhYmVsPVwiRW5hYmxlXCIgbG9hZGluZ0xhYmVsPVwiRW5hYmxpbmdcIiAvPn0gLz5cbiAgICAgIDwvRm9ybT5cbiAgICApXG4gIH1cblxuICBjb25zdCBWZXJpZnlGb3JtID0gKCkgPT4ge1xuICAgIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgICBjb25zdCBmb3JtID0gdXNlQXBwRm9ybSh7XG4gICAgICBkZWZhdWx0VmFsdWVzOiB7IG90cDogJycgfSxcbiAgICAgIG9uU3VibWl0OiBhc3luYyAoeyB2YWx1ZSB9OiB7IHZhbHVlOiB7IG90cDogc3RyaW5nIH0gfSkgPT4ge1xuICAgICAgICBzZXRJc0xvYWRpbmcodHJ1ZSlcbiAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgYXV0aENsaWVudC50d29GYWN0b3IudmVyaWZ5VG90cCh7IGNvZGU6IHZhbHVlLm90cCB9KVxuICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHRvYXN0LmVycm9yKGVycm9yLm1lc3NhZ2UpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEgJiYgJ2JhY2t1cENvZGVzJyBpbiBkYXRhICYmIGRhdGEuYmFja3VwQ29kZXMpIHtcbiAgICAgICAgICBzZXRCYWNrdXBDb2RlcyhBcnJheS5pc0FycmF5KGRhdGEuYmFja3VwQ29kZXMpID8gZGF0YS5iYWNrdXBDb2RlcyA6IFN0cmluZyhkYXRhLmJhY2t1cENvZGVzKS5zcGxpdCgvXFxzKy8pLmZpbHRlcihCb29sZWFuKSlcbiAgICAgICAgfVxuICAgICAgICB0b2FzdC5zdWNjZXNzKCdUd2/igJFmYWN0b3IgdmVyaWZpZWQgJiBlbmFibGVkJylcbiAgICAgICAgc2V0VHdvRmFjdG9yRW5hYmxlZCh0cnVlKVxuICAgICAgICBzZXRGb3JtU3RhdGUoJ2JhY2t1cENvZGVzJylcbiAgICAgIH0sXG4gICAgICB2YWxpZGF0b3JzOiB7IG9uU3VibWl0OiBvdHBTY2hlbWEgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gKFxuICAgICAgPEZvcm1cbiAgICAgICAgb25TdWJtaXQ9eyhlKSA9PiB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgdm9pZCBmb3JtLmhhbmRsZVN1Ym1pdCgpXG4gICAgICAgIH19XG4gICAgICAgIGNsYXNzTmFtZT1cInR3by1mYWN0b3ItdmVyaWZ5LWZvcm1cIj5cbiAgICAgICAgPEZvcm1JbnB1dFdyYXAgY2xhc3NOYW1lPVwidGZfX2lucHV0V3JhcFwiPlxuICAgICAgICAgIDxmb3JtLkFwcEZpZWxkXG4gICAgICAgICAgICBuYW1lPVwib3RwXCJcbiAgICAgICAgICAgIGNoaWxkcmVuPXsoZmllbGQ6IGFueSkgPT4gPGZpZWxkLlRleHRGaWVsZCB0eXBlPVwidGV4dFwiIGNsYXNzTmFtZT1cInRleHQgb3RwXCIgbGFiZWw9XCI24oCRZGlnaXQgQ29kZVwiIHJlcXVpcmVkIC8+fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvRm9ybUlucHV0V3JhcD5cbiAgICAgICAgPGZvcm0uQXBwRm9ybSBjaGlsZHJlbj17PGZvcm0uU3VibWl0IGxhYmVsPVwiVmVyaWZ5XCIgbG9hZGluZ0xhYmVsPVwiVmVyaWZ5aW5nXCIgLz59IC8+XG4gICAgICA8L0Zvcm0+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgRGlzYWJsZUZvcm0gPSAoKSA9PiB7XG4gICAgY29uc3QgZm9ybSA9IHVzZUFwcEZvcm0oe1xuICAgICAgZGVmYXVsdFZhbHVlczogeyBwYXNzd29yZDogJycgfSxcbiAgICAgIG9uU3VibWl0OiBhc3luYyAoeyB2YWx1ZSB9OiB7IHZhbHVlOiB7IHBhc3N3b3JkOiBzdHJpbmcgfSB9KSA9PiB7XG4gICAgICAgIGF3YWl0IGF1dGhDbGllbnQudHdvRmFjdG9yLmRpc2FibGUoXG4gICAgICAgICAgeyBwYXNzd29yZDogdmFsdWUucGFzc3dvcmQgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBvblN1Y2Nlc3MoKSB7XG4gICAgICAgICAgICAgIHRvYXN0LnN1Y2Nlc3MoJ1R3b+KAkWZhY3RvciBkaXNhYmxlZCcpXG4gICAgICAgICAgICAgIHNldFR3b0ZhY3RvckVuYWJsZWQoZmFsc2UpXG4gICAgICAgICAgICAgIGNsb3NlTW9kYWwoJ3R3by1mYWN0b3ItYXV0aC1tb2RhbCcpXG4gICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkVycm9yKGN0eDogYW55KSB7XG4gICAgICAgICAgICAgIHRvYXN0LmVycm9yKGN0eC5lcnJvci5tZXNzYWdlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIHZhbGlkYXRvcnM6IHsgb25TdWJtaXQ6IHBhc3N3b3JkU2NoZW1hIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxGb3JtXG4gICAgICAgIG9uU3VibWl0PXsoZSkgPT4ge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgIHZvaWQgZm9ybS5oYW5kbGVTdWJtaXQoKVxuICAgICAgICB9fVxuICAgICAgICBjbGFzc05hbWU9XCJ0d28tZmFjdG9yLWRpc2FibGUtZm9ybSBtdC00XCI+XG4gICAgICAgIDxGb3JtSW5wdXRXcmFwIGNsYXNzTmFtZT1cInR3by1mYWN0b3ItZGlzYWJsZS1mb3JtX19pbnB1dFdyYXBcIj5cbiAgICAgICAgICA8Zm9ybS5BcHBGaWVsZFxuICAgICAgICAgICAgbmFtZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgIGNoaWxkcmVuPXsoZmllbGQ6IGFueSkgPT4gPGZpZWxkLlRleHRGaWVsZCB0eXBlPVwicGFzc3dvcmRcIiBjbGFzc05hbWU9XCJwYXNzd29yZFwiIGxhYmVsPVwiUGFzc3dvcmRcIiByZXF1aXJlZCAvPn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L0Zvcm1JbnB1dFdyYXA+XG4gICAgICAgIDxmb3JtLkFwcEZvcm0gY2hpbGRyZW49ezxmb3JtLlN1Ym1pdCBsYWJlbD1cIkRpc2FibGUgVHdv4oCRRmFjdG9yXCIgbG9hZGluZ0xhYmVsPVwiRGlzYWJsaW5nXCIgLz59IC8+XG4gICAgICA8L0Zvcm0+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInR3by1mYWN0b3ItYXV0aC1maWVsZFwiPlxuICAgICAge3R3b0ZhY3RvckVuYWJsZWQgPyAoXG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICBzZXRGb3JtU3RhdGUoJ2Rpc2FibGUnKVxuICAgICAgICAgICAgb3Blbk1vZGFsKCd0d28tZmFjdG9yLWF1dGgtbW9kYWwnKVxuICAgICAgICAgIH19XG4gICAgICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICAgICAgYnV0dG9uU3R5bGU9XCJwaWxsXCI+XG4gICAgICAgICAgRGlzYWJsZSBUd28tRmFjdG9yXG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgKSA6IChcbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgIHNldEZvcm1TdGF0ZSgnZW5hYmxlJylcbiAgICAgICAgICAgIG9wZW5Nb2RhbCgndHdvLWZhY3Rvci1hdXRoLW1vZGFsJylcbiAgICAgICAgICB9fVxuICAgICAgICAgIHNpemU9XCJtZWRpdW1cIlxuICAgICAgICAgIGJ1dHRvblN0eWxlPVwicGlsbFwiPlxuICAgICAgICAgIEVuYWJsZSBUd28tRmFjdG9yXG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgKX1cbiAgICAgIDxNb2RhbCBzbHVnPVwidHdvLWZhY3Rvci1hdXRoLW1vZGFsXCIgY2xhc3NOYW1lPXtiYXNlQ2xhc3N9IGNsb3NlT25CbHVyPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fd3JhcHBlcmB9PlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNsb3NlTW9kYWwoJ3R3by1mYWN0b3ItYXV0aC1tb2RhbCcpfVxuICAgICAgICAgICAgYnV0dG9uU3R5bGU9XCJpY29uLWxhYmVsXCJcbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2Nsb3NlLWJ1dHRvbmB9PlxuICAgICAgICAgICAgPFhJY29uIHNpemU9ezI0fSAvPlxuICAgICAgICAgIDwvQnV0dG9uPlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2NvbnRlbnRgfSBzdHlsZT17eyBtYXhXaWR0aDogJzM4cmVtJyB9fT5cbiAgICAgICAgICAgIHtmb3JtU3RhdGUgPT09ICdlbmFibGUnICYmIChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICA8aDI+RW5hYmxlIFR3b+KAkUZhY3RvcjwvaDI+XG4gICAgICAgICAgICAgICAgPEVuYWJsZUZvcm0gLz5cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2Zvcm1TdGF0ZSA9PT0gJ3ZlcmlmeScgJiYgKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIDxoMj5WZXJpZnkgVHdv4oCRRmFjdG9yPC9oMj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInR3by1mYWN0b3ItYXV0aC1tb2RhbF9fdmVyaWZ5LWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICA8cD5TY2FuIHRoZSBRUiBjb2RlIHdpdGggeW91ciBhdXRoZW50aWNhdG9yIGFwcCBvciBjb3B5IHRoZSBVUkkuPC9wPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0d28tZmFjdG9yLWF1dGgtbW9kYWxfX3FyY29kZVwiPlxuICAgICAgICAgICAgICAgICAgICA8UVJDb2RlU1ZHIHZhbHVlPXt0b3RwVVJJfSBzaXplPXsyMDB9IC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgYnV0dG9uU3R5bGU9XCJ0cmFuc3BhcmVudFwiIG9uQ2xpY2s9e2NvcHlVUkl9IGNsYXNzTmFtZT1cInR3by1mYWN0b3ItYXV0aC1tb2RhbF9fY29weS1idG5cIj5cbiAgICAgICAgICAgICAgICAgICAgPENvcHkgc2l6ZT17MTh9IGNsYXNzTmFtZT1cInR3by1mYWN0b3ItYXV0aC1tb2RhbF9fY29weS1pY29uXCIgLz4gQ29weSBVUklcbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPFZlcmlmeUZvcm0gLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2Zvcm1TdGF0ZSA9PT0gJ2JhY2t1cENvZGVzJyAmJiBiYWNrdXBDb2RlcyAmJiAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPGgyPkJhY2t1cCBDb2RlczwvaDI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0d28tZmFjdG9yLWF1dGgtbW9kYWxfX2JhY2t1cC1jb2Rlc1wiPlxuICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICB7YmFja3VwQ29kZXMubWFwKChjb2RlLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGxpIGtleT17aX0gY2xhc3NOYW1lPVwidHdvLWZhY3Rvci1hdXRoLW1vZGFsX19iYWNrdXAtY29kZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NvZGV9XG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidHdvLWZhY3Rvci1hdXRoLW1vZGFsX19iYWNrdXAtZGVzY1wiPlxuICAgICAgICAgICAgICAgICAgICBTdG9yZSB0aGVzZSBjb2RlcyBpbiBhIHNhZmUgcGxhY2UuIEVhY2ggY29kZSBjYW4gYmUgdXNlZCBvbmNlIGlmIHlvdSBsb3NlIGFjY2VzcyB0byB5b3VyIGF1dGhlbnRpY2F0b3IuXG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gY2xvc2VNb2RhbCgndHdvLWZhY3Rvci1hdXRoLW1vZGFsJyl9XG4gICAgICAgICAgICAgICAgICBidXR0b25TdHlsZT1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInR3by1mYWN0b3ItYXV0aC1tb2RhbF9fYmFja3VwLWNvZGVzLWNsb3NlLWJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgU2F2ZWQgdGhlbSFcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2Zvcm1TdGF0ZSA9PT0gJ2Rpc2FibGUnICYmIChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICA8aDI+VHdv4oCRRmFjdG9yIEF1dGhlbnRpY2F0aW9uPC9oMj5cbiAgICAgICAgICAgICAgICA8RGlzYWJsZUZvcm0gLz5cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvTW9kYWw+XG4gICAgPC9kaXY+XG4gIClcbn1cbiJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsIlhJY29uIiwiQ29weSIsIkJ1dHRvbiIsIk1vZGFsIiwidG9hc3QiLCJ1c2VNb2RhbCIsInVzZVRyYW5zbGF0aW9uIiwidXNlRm9ybUZpZWxkcyIsInVzZUZpZWxkIiwiY3JlYXRlQXV0aENsaWVudCIsInR3b0ZhY3RvckNsaWVudCIsIkZvcm0iLCJGb3JtSW5wdXRXcmFwIiwieiIsInBhc3N3b3JkRmllbGQiLCJRUkNvZGVTVkciLCJ1c2VBcHBGb3JtIiwiYmFzZUNsYXNzIiwiVHdvRmFjdG9yQXV0aCIsInRvdHBVUkkiLCJzZXRUb3RwVVJJIiwiYmFja3VwQ29kZXMiLCJzZXRCYWNrdXBDb2RlcyIsImZvcm1TdGF0ZSIsInNldEZvcm1TdGF0ZSIsIm9wZW5Nb2RhbCIsImNsb3NlTW9kYWwiLCJ0IiwidHdvRmFjdG9yRW5hYmxlZEZpZWxkIiwiZmllbGRzIiwidHdvRmFjdG9yRW5hYmxlZCIsIkJvb2xlYW4iLCJ2YWx1ZSIsInNldFZhbHVlIiwic2V0VHdvRmFjdG9yRW5hYmxlZCIsInBhdGgiLCJhdXRoQ2xpZW50IiwicGx1Z2lucyIsImNvcHlVUkkiLCJuYXZpZ2F0b3IiLCJjbGlwYm9hcmQiLCJ3cml0ZVRleHQiLCJzdWNjZXNzIiwiZXJyb3IiLCJwYXNzd29yZFNjaGVtYSIsIm9iamVjdCIsInBhc3N3b3JkIiwib3RwU2NoZW1hIiwib3RwIiwic3RyaW5nIiwibGVuZ3RoIiwicmVmaW5lIiwidmFsIiwidGVzdCIsIkVuYWJsZUZvcm0iLCJpc0xvYWRpbmciLCJzZXRJc0xvYWRpbmciLCJmb3JtIiwiZGVmYXVsdFZhbHVlcyIsIm9uU3VibWl0IiwiZGF0YSIsInR3b0ZhY3RvciIsImVuYWJsZSIsIm1lc3NhZ2UiLCJBcnJheSIsImlzQXJyYXkiLCJTdHJpbmciLCJzcGxpdCIsImZpbHRlciIsInZhbGlkYXRvcnMiLCJlIiwicHJldmVudERlZmF1bHQiLCJoYW5kbGVTdWJtaXQiLCJjbGFzc05hbWUiLCJBcHBGaWVsZCIsIm5hbWUiLCJjaGlsZHJlbiIsImZpZWxkIiwiVGV4dEZpZWxkIiwidHlwZSIsImxhYmVsIiwicmVxdWlyZWQiLCJBcHBGb3JtIiwiU3VibWl0IiwibG9hZGluZ0xhYmVsIiwiVmVyaWZ5Rm9ybSIsInZlcmlmeVRvdHAiLCJjb2RlIiwiRGlzYWJsZUZvcm0iLCJkaXNhYmxlIiwib25TdWNjZXNzIiwidW5kZWZpbmVkIiwib25FcnJvciIsImN0eCIsImRpdiIsIm9uQ2xpY2siLCJzaXplIiwiYnV0dG9uU3R5bGUiLCJzbHVnIiwiY2xvc2VPbkJsdXIiLCJzdHlsZSIsIm1heFdpZHRoIiwiaDIiLCJwIiwidWwiLCJtYXAiLCJpIiwibGkiXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLE9BQU8sZUFBYztBQUVyQixPQUFPQSxTQUFTQyxPQUFPLEVBQUVDLFFBQVEsUUFBUSxR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
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
@layer payload-default {
|
|
2
|
+
.two-factor-auth-modal {
|
|
3
|
+
position: fixed;
|
|
4
|
+
inset: 0;
|
|
5
|
+
z-index: 1000;
|
|
6
|
+
display: flex;
|
|
7
|
+
align-items: center;
|
|
8
|
+
justify-content: center;
|
|
9
|
+
height: 100%;
|
|
10
|
+
|
|
11
|
+
&:before {
|
|
12
|
+
content: '';
|
|
13
|
+
position: absolute;
|
|
14
|
+
inset: 0;
|
|
15
|
+
background: rgba(0, 0, 0, 0.8);
|
|
16
|
+
z-index: 0;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
&__wrapper {
|
|
20
|
+
z-index: 1;
|
|
21
|
+
position: relative;
|
|
22
|
+
display: flex;
|
|
23
|
+
flex-direction: column;
|
|
24
|
+
gap: 16px;
|
|
25
|
+
border-radius: 3px;
|
|
26
|
+
border: 1px solid var(--theme-border-color);
|
|
27
|
+
background-color: var(--theme-elevation-50);
|
|
28
|
+
min-width: 340px;
|
|
29
|
+
max-width: 90vw;
|
|
30
|
+
box-shadow: 0 8px 32px rgba(0,0,0,0.18);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
&__close-button {
|
|
34
|
+
position: absolute;
|
|
35
|
+
top: 0;
|
|
36
|
+
right: 0;
|
|
37
|
+
margin-block: 0 !important;
|
|
38
|
+
padding: 10px !important;
|
|
39
|
+
svg {
|
|
40
|
+
width: 24px;
|
|
41
|
+
height: 24px;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
&__content {
|
|
46
|
+
display: flex;
|
|
47
|
+
flex-direction: column;
|
|
48
|
+
gap: 1.5rem;
|
|
49
|
+
padding: 1.5rem 1.5rem 1rem 1.5rem;
|
|
50
|
+
h2 {
|
|
51
|
+
font-size: 1.5rem;
|
|
52
|
+
font-weight: 600;
|
|
53
|
+
margin: 0;
|
|
54
|
+
}
|
|
55
|
+
p {
|
|
56
|
+
margin: 0;
|
|
57
|
+
color: var(--theme-elevation-500);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
&__verify-block {
|
|
62
|
+
display: flex;
|
|
63
|
+
flex-direction: column;
|
|
64
|
+
gap: 1.5rem;
|
|
65
|
+
margin-top: 1.5rem;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
&__backup-codes {
|
|
69
|
+
> ul {
|
|
70
|
+
padding: 1rem;
|
|
71
|
+
background-color: var(--theme-elevation-50);
|
|
72
|
+
border: 1px solid var(--theme-elevation-100);
|
|
73
|
+
border-radius: 4px;
|
|
74
|
+
columns: 2;
|
|
75
|
+
font-family: monospace;
|
|
76
|
+
margin-bottom: 1rem;
|
|
77
|
+
list-style: none;
|
|
78
|
+
text-align: center;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
&__qrcode {
|
|
83
|
+
display: flex;
|
|
84
|
+
align-items: center;
|
|
85
|
+
justify-content: center;
|
|
86
|
+
margin-bottom: 0.5rem;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
&__uri {
|
|
90
|
+
display: flex;
|
|
91
|
+
align-items: center;
|
|
92
|
+
gap: 0.5rem;
|
|
93
|
+
border-radius: 3px;
|
|
94
|
+
background: var(--theme-elevation-100, #f3f3f3);
|
|
95
|
+
padding: 0.5rem 1rem;
|
|
96
|
+
font-size: 0.95em;
|
|
97
|
+
word-break: break-all;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
&__copy-btn {
|
|
101
|
+
margin-block: 0.5rem;
|
|
102
|
+
margin-inline: auto;
|
|
103
|
+
display: flex;
|
|
104
|
+
align-items: center;
|
|
105
|
+
gap: 0.5rem;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
&__copy-icon {
|
|
109
|
+
margin-right: 0.25rem;
|
|
110
|
+
vertical-align: middle;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -2,5 +2,6 @@ import { AdminButtons } from '../components/admin-buttons';
|
|
|
2
2
|
import { AdminInviteButton } from '../components/admin-invite-button';
|
|
3
3
|
import { LogoutButton } from '../components/logout-button';
|
|
4
4
|
import { AdminSocialProviderButtons } from '../components/social-provider-buttons';
|
|
5
|
-
|
|
5
|
+
import { TwoFactorAuth } from '../components/two-factor-auth';
|
|
6
|
+
export { AdminButtons, AdminInviteButton, LogoutButton, AdminSocialProviderButtons, TwoFactorAuth };
|
|
6
7
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../../src/better-auth/plugin/payload/exports/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../../src/better-auth/plugin/payload/exports/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAA;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAE7D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,0BAA0B,EAAE,aAAa,EAAE,CAAA"}
|
|
@@ -2,6 +2,7 @@ import { AdminButtons } from "../components/admin-buttons";
|
|
|
2
2
|
import { AdminInviteButton } from "../components/admin-invite-button";
|
|
3
3
|
import { LogoutButton } from "../components/logout-button";
|
|
4
4
|
import { AdminSocialProviderButtons } from "../components/social-provider-buttons";
|
|
5
|
-
|
|
5
|
+
import { TwoFactorAuth } from "../components/two-factor-auth";
|
|
6
|
+
export { AdminButtons, AdminInviteButton, LogoutButton, AdminSocialProviderButtons, TwoFactorAuth };
|
|
6
7
|
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9iZXR0ZXItYXV0aC9wbHVnaW4vcGF5bG9hZC9leHBvcnRzL2NsaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZG1pbkJ1dHRvbnMgfSBmcm9tICcuLi9jb21wb25lbnRzL2FkbWluLWJ1dHRvbnMnXG5pbXBvcnQgeyBBZG1pbkludml0ZUJ1dHRvbiB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWRtaW4taW52aXRlLWJ1dHRvbidcbmltcG9ydCB7IExvZ291dEJ1dHRvbiB9IGZyb20gJy4uL2NvbXBvbmVudHMvbG9nb3V0LWJ1dHRvbidcbmltcG9ydCB7IEFkbWluU29jaWFsUHJvdmlkZXJCdXR0b25zIH0gZnJvbSAnLi4vY29tcG9uZW50cy9zb2NpYWwtcHJvdmlkZXItYnV0dG9ucydcbmltcG9ydCB7IFR3b0ZhY3RvckF1dGggfSBmcm9tICcuLi9jb21wb25lbnRzL3R3by1mYWN0b3ItYXV0aCdcblxuZXhwb3J0IHsgQWRtaW5CdXR0b25zLCBBZG1pbkludml0ZUJ1dHRvbiwgTG9nb3V0QnV0dG9uLCBBZG1pblNvY2lhbFByb3ZpZGVyQnV0dG9ucywgVHdvRmFjdG9yQXV0aCB9XG4iXSwibmFtZXMiOlsiQWRtaW5CdXR0b25zIiwiQWRtaW5JbnZpdGVCdXR0b24iLCJMb2dvdXRCdXR0b24iLCJBZG1pblNvY2lhbFByb3ZpZGVyQnV0dG9ucyIsIlR3b0ZhY3RvckF1dGgiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFlBQVksUUFBUSw4QkFBNkI7QUFDMUQsU0FBU0MsaUJBQWlCLFFBQVEsb0NBQW1DO0FBQ3JFLFNBQVNDLFlBQVksUUFBUSw4QkFBNkI7QUFDMUQsU0FBU0MsMEJBQTBCLFFBQVEsd0NBQXVDO0FBQ2xGLFNBQVNDLGFBQWEsUUFBUSxnQ0FBK0I7QUFFN0QsU0FBU0osWUFBWSxFQUFFQyxpQkFBaUIsRUFBRUMsWUFBWSxFQUFFQywwQkFBMEIsRUFBRUMsYUFBYSxHQUFFIn0=
|
|
@@ -3,5 +3,6 @@ import AdminLogin from '../views/admin-login';
|
|
|
3
3
|
import ForgotPassword from '../views/forgot-password';
|
|
4
4
|
import ResetPassword from '../views/reset-password';
|
|
5
5
|
import RSCRedirect from '../components/rsc-redirect';
|
|
6
|
-
|
|
6
|
+
import TwoFactorVerify from '../views/two-factor-verify';
|
|
7
|
+
export { AdminSignup, AdminLogin, ForgotPassword, ResetPassword, RSCRedirect, TwoFactorVerify };
|
|
7
8
|
//# sourceMappingURL=rsc.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rsc.d.ts","sourceRoot":"","sources":["../../../../../src/better-auth/plugin/payload/exports/rsc.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,uBAAuB,CAAA;AAC/C,OAAO,UAAU,MAAM,sBAAsB,CAAA;AAC7C,OAAO,cAAc,MAAM,0BAA0B,CAAA;AACrD,OAAO,aAAa,MAAM,yBAAyB,CAAA;AACnD,OAAO,WAAW,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"rsc.d.ts","sourceRoot":"","sources":["../../../../../src/better-auth/plugin/payload/exports/rsc.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,uBAAuB,CAAA;AAC/C,OAAO,UAAU,MAAM,sBAAsB,CAAA;AAC7C,OAAO,cAAc,MAAM,0BAA0B,CAAA;AACrD,OAAO,aAAa,MAAM,yBAAyB,CAAA;AACnD,OAAO,WAAW,MAAM,4BAA4B,CAAA;AACpD,OAAO,eAAe,MAAM,4BAA4B,CAAA;AAExD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,CAAA"}
|
|
@@ -3,6 +3,7 @@ import AdminLogin from "../views/admin-login";
|
|
|
3
3
|
import ForgotPassword from "../views/forgot-password";
|
|
4
4
|
import ResetPassword from "../views/reset-password";
|
|
5
5
|
import RSCRedirect from "../components/rsc-redirect";
|
|
6
|
-
|
|
6
|
+
import TwoFactorVerify from "../views/two-factor-verify";
|
|
7
|
+
export { AdminSignup, AdminLogin, ForgotPassword, ResetPassword, RSCRedirect, TwoFactorVerify };
|
|
7
8
|
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9iZXR0ZXItYXV0aC9wbHVnaW4vcGF5bG9hZC9leHBvcnRzL3JzYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQWRtaW5TaWdudXAgZnJvbSAnLi4vdmlld3MvYWRtaW4tc2lnbnVwJ1xuaW1wb3J0IEFkbWluTG9naW4gZnJvbSAnLi4vdmlld3MvYWRtaW4tbG9naW4nXG5pbXBvcnQgRm9yZ290UGFzc3dvcmQgZnJvbSAnLi4vdmlld3MvZm9yZ290LXBhc3N3b3JkJ1xuaW1wb3J0IFJlc2V0UGFzc3dvcmQgZnJvbSAnLi4vdmlld3MvcmVzZXQtcGFzc3dvcmQnXG5pbXBvcnQgUlNDUmVkaXJlY3QgZnJvbSAnLi4vY29tcG9uZW50cy9yc2MtcmVkaXJlY3QnXG5pbXBvcnQgVHdvRmFjdG9yVmVyaWZ5IGZyb20gJy4uL3ZpZXdzL3R3by1mYWN0b3ItdmVyaWZ5J1xuXG5leHBvcnQgeyBBZG1pblNpZ251cCwgQWRtaW5Mb2dpbiwgRm9yZ290UGFzc3dvcmQsIFJlc2V0UGFzc3dvcmQsIFJTQ1JlZGlyZWN0LCBUd29GYWN0b3JWZXJpZnkgfVxuIl0sIm5hbWVzIjpbIkFkbWluU2lnbnVwIiwiQWRtaW5Mb2dpbiIsIkZvcmdvdFBhc3N3b3JkIiwiUmVzZXRQYXNzd29yZCIsIlJTQ1JlZGlyZWN0IiwiVHdvRmFjdG9yVmVyaWZ5Il0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxpQkFBaUIsd0JBQXVCO0FBQy9DLE9BQU9DLGdCQUFnQix1QkFBc0I7QUFDN0MsT0FBT0Msb0JBQW9CLDJCQUEwQjtBQUNyRCxPQUFPQyxtQkFBbUIsMEJBQXlCO0FBQ25ELE9BQU9DLGlCQUFpQiw2QkFBNEI7QUFDcEQsT0FBT0MscUJBQXFCLDZCQUE0QjtBQUV4RCxTQUFTTCxXQUFXLEVBQUVDLFVBQVUsRUFBRUMsY0FBYyxFQUFFQyxhQUFhLEVBQUVDLFdBQVcsRUFBRUMsZUFBZSxHQUFFIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../../../src/better-auth/plugin/payload/views/admin-login/client.tsx"],"names":[],"mappings":"AAKA,OAAO,KAA4B,MAAM,OAAO,CAAA;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../../../src/better-auth/plugin/payload/views/admin-login/client.tsx"],"names":[],"mappings":"AAKA,OAAO,KAA4B,MAAM,OAAO,CAAA;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAYvD,KAAK,qBAAqB,GAAG;IAC3B,YAAY,EAAE,WAAW,EAAE,CAAA;IAC3B,iBAAiB,EAAE,OAAO,CAAA;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAA;KAAE,CAAA;IAC9D,iBAAiB,EAAE,KAAK,GAAG,wBAAwB,CAAA;CACpD,CAAA;AAiID,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA6B5D,CAAA"}
|