strapi-plugin-firebase-authentication 1.2.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/{App-B7d4qS3T.js → App-CAgq2cOo.js} +277 -279
- package/dist/_chunks/{App-CQ9ehArz.mjs → App-CyeC5fLT.mjs} +193 -195
- package/dist/_chunks/api-BL-wXuSb.js +56776 -0
- package/dist/_chunks/api-Bjer83Qp.mjs +56759 -0
- package/dist/_chunks/index-Bg-lGlji.mjs +2758 -0
- package/dist/_chunks/{index-Cwp9xkG4.js → index-CTenjpqN.js} +158 -159
- package/dist/_chunks/{index-0tTyhxbb.mjs → index-Kidqhaeq.mjs} +139 -140
- package/dist/_chunks/index-Rervtuh1.js +2757 -0
- package/dist/admin/index.js +1 -3
- package/dist/admin/index.mjs +2 -4
- package/dist/server/index.js +375 -380
- package/dist/server/index.mjs +375 -380
- package/dist/server/src/controllers/firebaseController.d.ts +2 -2
- package/dist/server/src/index.d.ts +14 -4
- package/dist/server/src/policies/index.d.ts +3 -1
- package/dist/server/src/policies/is-authenticated.d.ts +6 -0
- package/dist/server/src/routes/content-api.d.ts +10 -2
- package/dist/server/src/routes/index.d.ts +10 -2
- package/dist/server/src/services/firebaseService.d.ts +5 -1
- package/dist/server/src/services/index.d.ts +1 -1
- package/package.json +8 -8
- package/dist/_chunks/api-BM2UtpvM.mjs +0 -36
- package/dist/_chunks/api-DYP-1kdx.js +0 -35
- package/dist/_chunks/index-B5EwGI_y.js +0 -814
- package/dist/_chunks/index-CMFutRyI.mjs +0 -815
|
@@ -1,34 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
-
const
|
|
5
|
-
const
|
|
4
|
+
const m = require("react");
|
|
5
|
+
const api = require("./api-BL-wXuSb.js");
|
|
6
6
|
const admin = require("@strapi/strapi/admin");
|
|
7
|
-
const api = require("./api-DYP-1kdx.js");
|
|
8
7
|
const reactRouterDom = require("react-router-dom");
|
|
9
8
|
function SettingsPage() {
|
|
10
9
|
const { toggleNotification } = admin.useNotification();
|
|
11
|
-
const [firebaseJsonValue, setFirebaseJsonValue] =
|
|
12
|
-
const [firebaseJsonValueInput, setFirebaseJsonValueInput] =
|
|
13
|
-
const [firebaseWebApiKey, setFirebaseWebApiKey] =
|
|
14
|
-
const [showOptionalSettings, setShowOptionalSettings] =
|
|
15
|
-
const [passwordRequirementsRegex, setPasswordRequirementsRegex] =
|
|
16
|
-
const [passwordRequirementsMessage, setPasswordRequirementsMessage] =
|
|
10
|
+
const [firebaseJsonValue, setFirebaseJsonValue] = m.useState(null);
|
|
11
|
+
const [firebaseJsonValueInput, setFirebaseJsonValueInput] = m.useState("");
|
|
12
|
+
const [firebaseWebApiKey, setFirebaseWebApiKey] = m.useState("");
|
|
13
|
+
const [showOptionalSettings, setShowOptionalSettings] = m.useState(false);
|
|
14
|
+
const [passwordRequirementsRegex, setPasswordRequirementsRegex] = m.useState("^.{6,}$");
|
|
15
|
+
const [passwordRequirementsMessage, setPasswordRequirementsMessage] = m.useState(
|
|
17
16
|
"Password must be at least 6 characters long"
|
|
18
17
|
);
|
|
19
|
-
const [passwordResetUrl, setPasswordResetUrl] =
|
|
20
|
-
const [passwordResetEmailSubject, setPasswordResetEmailSubject] =
|
|
21
|
-
const [enableMagicLink, setEnableMagicLink] =
|
|
22
|
-
const [magicLinkUrl, setMagicLinkUrl] =
|
|
23
|
-
const [magicLinkEmailSubject, setMagicLinkEmailSubject] =
|
|
24
|
-
const [magicLinkExpiryHours, setMagicLinkExpiryHours] =
|
|
25
|
-
const [emailVerificationUrl, setEmailVerificationUrl] =
|
|
18
|
+
const [passwordResetUrl, setPasswordResetUrl] = m.useState("http://localhost:3000/reset-password");
|
|
19
|
+
const [passwordResetEmailSubject, setPasswordResetEmailSubject] = m.useState("Reset Your Password");
|
|
20
|
+
const [enableMagicLink, setEnableMagicLink] = m.useState(false);
|
|
21
|
+
const [magicLinkUrl, setMagicLinkUrl] = m.useState("http://localhost:1338/verify-magic-link.html");
|
|
22
|
+
const [magicLinkEmailSubject, setMagicLinkEmailSubject] = m.useState("Sign in to Your Application");
|
|
23
|
+
const [magicLinkExpiryHours, setMagicLinkExpiryHours] = m.useState(1);
|
|
24
|
+
const [emailVerificationUrl, setEmailVerificationUrl] = m.useState(
|
|
26
25
|
"http://localhost:3000/verify-email"
|
|
27
26
|
);
|
|
28
|
-
const [emailVerificationEmailSubject, setEmailVerificationEmailSubject] =
|
|
29
|
-
const [loading, setLoading] =
|
|
30
|
-
const [showEditModal, setShowEditModal] =
|
|
31
|
-
const [editWebApiKey, setEditWebApiKey] =
|
|
27
|
+
const [emailVerificationEmailSubject, setEmailVerificationEmailSubject] = m.useState("Verify Your Email");
|
|
28
|
+
const [loading, setLoading] = m.useState(true);
|
|
29
|
+
const [showEditModal, setShowEditModal] = m.useState(false);
|
|
30
|
+
const [editWebApiKey, setEditWebApiKey] = m.useState("");
|
|
32
31
|
reactRouterDom.useNavigate();
|
|
33
32
|
const handleRetrieveFirebaseJsonConfig = () => {
|
|
34
33
|
setLoading(true);
|
|
@@ -61,7 +60,7 @@ function SettingsPage() {
|
|
|
61
60
|
setFirebaseJsonValueInput("");
|
|
62
61
|
});
|
|
63
62
|
};
|
|
64
|
-
|
|
63
|
+
m.useEffect(() => {
|
|
65
64
|
handleRetrieveFirebaseJsonConfig();
|
|
66
65
|
}, []);
|
|
67
66
|
const handleDeleteFirebaseJsonConfig = async () => {
|
|
@@ -330,11 +329,11 @@ function SettingsPage() {
|
|
|
330
329
|
}
|
|
331
330
|
};
|
|
332
331
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
333
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
334
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
335
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
332
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.T, { style: { padding: 32 }, direction: "column", alignItems: "flex-start", gap: 4, children: /* @__PURE__ */ jsxRuntime.jsxs(api.R, { style: { width: "100%" }, children: [
|
|
333
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { marginBottom: 6, padding: 4, background: "neutral0", borderRadius: "4px", shadow: "filterShadow", children: [
|
|
334
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.E, { variant: "alpha", as: "h2", style: { display: "block", marginBottom: "8px" }, children: "Firebase Authentication" }),
|
|
336
335
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
337
|
-
|
|
336
|
+
api.E,
|
|
338
337
|
{
|
|
339
338
|
variant: "omega",
|
|
340
339
|
textColor: "neutral600",
|
|
@@ -344,9 +343,9 @@ function SettingsPage() {
|
|
|
344
343
|
),
|
|
345
344
|
(() => {
|
|
346
345
|
return !firebaseJsonValue || !firebaseJsonValue.firebaseConfigJson ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
347
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
346
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { children: [
|
|
348
347
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
349
|
-
|
|
348
|
+
api.E,
|
|
350
349
|
{
|
|
351
350
|
variant: "omega",
|
|
352
351
|
fontWeight: "bold",
|
|
@@ -355,7 +354,7 @@ function SettingsPage() {
|
|
|
355
354
|
}
|
|
356
355
|
),
|
|
357
356
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
358
|
-
|
|
357
|
+
api.Jm,
|
|
359
358
|
{
|
|
360
359
|
value: firebaseJsonValueInput,
|
|
361
360
|
height: 400,
|
|
@@ -365,9 +364,9 @@ function SettingsPage() {
|
|
|
365
364
|
}
|
|
366
365
|
)
|
|
367
366
|
] }),
|
|
368
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
367
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { marginTop: 4, children: [
|
|
369
368
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
370
|
-
|
|
369
|
+
api.Nn,
|
|
371
370
|
{
|
|
372
371
|
variant: "tertiary",
|
|
373
372
|
onClick: () => setShowOptionalSettings(!showOptionalSettings),
|
|
@@ -378,11 +377,11 @@ function SettingsPage() {
|
|
|
378
377
|
]
|
|
379
378
|
}
|
|
380
379
|
),
|
|
381
|
-
showOptionalSettings && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
382
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
383
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
380
|
+
showOptionalSettings && /* @__PURE__ */ jsxRuntime.jsxs(api.R, { padding: 3, background: "neutral100", borderRadius: "4px", children: [
|
|
381
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.E, { variant: "omega", marginBottom: 3, children: "The Web API Key is only needed if you want to use the emailLogin endpoint. Most users should authenticate with Firebase Client SDK instead." }),
|
|
382
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { marginTop: 3, children: [
|
|
384
383
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
385
|
-
|
|
384
|
+
api.E,
|
|
386
385
|
{
|
|
387
386
|
variant: "omega",
|
|
388
387
|
fontWeight: "bold",
|
|
@@ -391,7 +390,7 @@ function SettingsPage() {
|
|
|
391
390
|
}
|
|
392
391
|
),
|
|
393
392
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
394
|
-
|
|
393
|
+
api.G0,
|
|
395
394
|
{
|
|
396
395
|
name: "firebaseWebApiKey",
|
|
397
396
|
value: firebaseWebApiKey,
|
|
@@ -401,10 +400,10 @@ function SettingsPage() {
|
|
|
401
400
|
}
|
|
402
401
|
)
|
|
403
402
|
] }),
|
|
404
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
405
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
403
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { marginTop: 3, padding: 2, background: "primary100", borderRadius: "4px", children: [
|
|
404
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.E, { variant: "omega", fontWeight: "bold", children: "📍 Where to find your Web API Key:" }),
|
|
406
405
|
/* @__PURE__ */ jsxRuntime.jsxs("ol", { style: { marginLeft: 20, marginTop: 8 }, children: [
|
|
407
|
-
/* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
406
|
+
/* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(api.E, { variant: "omega", children: [
|
|
408
407
|
"Go to",
|
|
409
408
|
" ",
|
|
410
409
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -417,25 +416,25 @@ function SettingsPage() {
|
|
|
417
416
|
}
|
|
418
417
|
)
|
|
419
418
|
] }) }),
|
|
420
|
-
/* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
421
|
-
/* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
419
|
+
/* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(api.E, { variant: "omega", children: "Select your project" }) }),
|
|
420
|
+
/* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(api.E, { variant: "omega", children: [
|
|
422
421
|
"Click the gear icon → ",
|
|
423
422
|
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Project Settings" })
|
|
424
423
|
] }) }),
|
|
425
|
-
/* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
424
|
+
/* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(api.E, { variant: "omega", children: [
|
|
426
425
|
"In the ",
|
|
427
426
|
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "General" }),
|
|
428
427
|
" tab, scroll down to ",
|
|
429
428
|
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Your apps" })
|
|
430
429
|
] }) }),
|
|
431
|
-
/* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
430
|
+
/* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(api.E, { variant: "omega", children: [
|
|
432
431
|
"Find ",
|
|
433
432
|
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Web API Key" }),
|
|
434
433
|
" (looks like: AIzaSyB3Xd...)"
|
|
435
434
|
] }) })
|
|
436
435
|
] })
|
|
437
436
|
] }),
|
|
438
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
437
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.R, { marginTop: 3, padding: 2, background: "warning100", borderRadius: "4px", children: /* @__PURE__ */ jsxRuntime.jsxs(api.E, { variant: "omega", textColor: "warning700", children: [
|
|
439
438
|
"⚠️ ",
|
|
440
439
|
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Recommendation:" }),
|
|
441
440
|
" Instead of using emailLogin endpoint, authenticate users on the client side using Firebase SDK and exchange the ID token. This is more secure and doesn't require the Web API Key configuration."
|
|
@@ -443,7 +442,7 @@ function SettingsPage() {
|
|
|
443
442
|
] })
|
|
444
443
|
] }),
|
|
445
444
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
446
|
-
|
|
445
|
+
api.T,
|
|
447
446
|
{
|
|
448
447
|
style: {
|
|
449
448
|
marginTop: 24,
|
|
@@ -451,7 +450,7 @@ function SettingsPage() {
|
|
|
451
450
|
},
|
|
452
451
|
justifyContent: "flex-end",
|
|
453
452
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
454
|
-
|
|
453
|
+
api.Nn,
|
|
455
454
|
{
|
|
456
455
|
size: "L",
|
|
457
456
|
onClick: handleFirebaseJsonSubmit,
|
|
@@ -461,14 +460,14 @@ function SettingsPage() {
|
|
|
461
460
|
)
|
|
462
461
|
}
|
|
463
462
|
),
|
|
464
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
465
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
466
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
467
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
468
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
463
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { marginTop: 6, paddingTop: 4, style: { borderTop: "1px solid #eaeaef" }, children: [
|
|
464
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.E, { variant: "beta", marginBottom: 3, children: "How to setup Firebase Service Account JSON:" }),
|
|
465
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { padding: 3, background: "warning100", borderRadius: "4px", marginBottom: 4, children: [
|
|
466
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.E, { variant: "omega", fontWeight: "bold", textColor: "warning700", children: "⚠️ Security Warning" }),
|
|
467
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.E, { variant: "omega", textColor: "warning700", marginTop: 1, children: "The Service Account JSON contains sensitive credentials with full admin access to your Firebase project. Never commit this file to version control or share it publicly." })
|
|
469
468
|
] }),
|
|
470
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
471
|
-
/* @__PURE__ */ jsxRuntime.jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
469
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.R, { marginLeft: 4, children: /* @__PURE__ */ jsxRuntime.jsxs("ol", { style: { listStyle: "decimal", paddingLeft: "20px" }, children: [
|
|
470
|
+
/* @__PURE__ */ jsxRuntime.jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxRuntime.jsxs(api.E, { children: [
|
|
472
471
|
"Go to the",
|
|
473
472
|
" ",
|
|
474
473
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -483,40 +482,40 @@ function SettingsPage() {
|
|
|
483
482
|
" ",
|
|
484
483
|
"in your Firebase Console (Project Settings → Service Accounts)"
|
|
485
484
|
] }) }),
|
|
486
|
-
/* @__PURE__ */ jsxRuntime.jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
485
|
+
/* @__PURE__ */ jsxRuntime.jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxRuntime.jsxs(api.E, { children: [
|
|
487
486
|
"Click the ",
|
|
488
487
|
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: '"Generate New Private Key"' }),
|
|
489
488
|
" button"
|
|
490
489
|
] }) }),
|
|
491
|
-
/* @__PURE__ */ jsxRuntime.jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
490
|
+
/* @__PURE__ */ jsxRuntime.jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxRuntime.jsxs(api.E, { children: [
|
|
492
491
|
"Confirm by clicking ",
|
|
493
492
|
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: '"Generate Key"' }),
|
|
494
493
|
" in the confirmation dialog"
|
|
495
494
|
] }) }),
|
|
496
|
-
/* @__PURE__ */ jsxRuntime.jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
495
|
+
/* @__PURE__ */ jsxRuntime.jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxRuntime.jsxs(api.E, { children: [
|
|
497
496
|
"A JSON file will be downloaded (e.g.,",
|
|
498
497
|
" ",
|
|
499
498
|
/* @__PURE__ */ jsxRuntime.jsx("code", { children: "your-project-firebase-adminsdk-xxxxx.json" }),
|
|
500
499
|
")"
|
|
501
500
|
] }) }),
|
|
502
|
-
/* @__PURE__ */ jsxRuntime.jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
501
|
+
/* @__PURE__ */ jsxRuntime.jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxRuntime.jsxs(api.E, { children: [
|
|
503
502
|
"Open the downloaded JSON file, copy its ",
|
|
504
503
|
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "entire contents" }),
|
|
505
504
|
', and paste it in the "Firebase Service Account JSON" field above'
|
|
506
505
|
] }) }),
|
|
507
|
-
/* @__PURE__ */ jsxRuntime.jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
506
|
+
/* @__PURE__ */ jsxRuntime.jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxRuntime.jsxs(api.E, { children: [
|
|
508
507
|
"Click ",
|
|
509
508
|
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Submit" }),
|
|
510
509
|
" to save your configuration"
|
|
511
510
|
] }) }),
|
|
512
|
-
/* @__PURE__ */ jsxRuntime.jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
511
|
+
/* @__PURE__ */ jsxRuntime.jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxRuntime.jsxs(api.E, { children: [
|
|
513
512
|
/* @__PURE__ */ jsxRuntime.jsx("em", { children: "(Optional)" }),
|
|
514
513
|
' If you need email/password authentication, expand "Optional: Email/Password Authentication" and add your Web API Key'
|
|
515
514
|
] }) })
|
|
516
515
|
] }) }),
|
|
517
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
518
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
519
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
516
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { marginTop: 4, padding: 3, background: "neutral100", borderRadius: "4px", children: [
|
|
517
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.E, { variant: "omega", fontWeight: "bold", children: "📝 Note: Service Account JSON vs Web App Config" }),
|
|
518
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.E, { variant: "omega", marginTop: 2, children: [
|
|
520
519
|
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Service Account JSON" }),
|
|
521
520
|
" (what you need here): Contains",
|
|
522
521
|
" ",
|
|
@@ -527,7 +526,7 @@ function SettingsPage() {
|
|
|
527
526
|
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Service Accounts tab" }),
|
|
528
527
|
"."
|
|
529
528
|
] }),
|
|
530
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
529
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.E, { variant: "omega", marginTop: 2, children: [
|
|
531
530
|
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Web App Config" }),
|
|
532
531
|
" (NOT what you need): Contains ",
|
|
533
532
|
/* @__PURE__ */ jsxRuntime.jsx("code", { children: "apiKey" }),
|
|
@@ -538,16 +537,16 @@ function SettingsPage() {
|
|
|
538
537
|
] })
|
|
539
538
|
] })
|
|
540
539
|
] })
|
|
541
|
-
] }) : /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
542
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
543
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
544
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
540
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsxs(api.R, { padding: 4, background: "neutral0", children: [
|
|
541
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { marginBottom: 4, children: [
|
|
542
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.E, { variant: "delta", fontWeight: "bold", style: { marginBottom: "8px" }, children: "Service Account Configuration" }),
|
|
543
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.R, { marginBottom: 3, children: /* @__PURE__ */ jsxRuntime.jsxs(api.E, { variant: "pi", textColor: "neutral600", component: "span", children: [
|
|
545
544
|
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Required" }),
|
|
546
545
|
" - Enables Firebase Admin SDK for server-side authentication"
|
|
547
546
|
] }) }),
|
|
548
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
549
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
550
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
547
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.T, { gap: 2, alignItems: "center", justifyContent: "space-between", children: [
|
|
548
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.T, { gap: 2, alignItems: "center", children: [
|
|
549
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.E, { variant: "omega", textColor: "neutral600", children: [
|
|
551
550
|
"Project:",
|
|
552
551
|
" ",
|
|
553
552
|
firebaseJsonValue?.firebaseConfigJson && (() => {
|
|
@@ -559,32 +558,32 @@ function SettingsPage() {
|
|
|
559
558
|
}
|
|
560
559
|
})()
|
|
561
560
|
] }),
|
|
562
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
561
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.Is, { backgroundColor: "success200", textColor: "success700", size: "S", children: "✓ CONFIGURED" })
|
|
563
562
|
] }),
|
|
564
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
563
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.Nn, { variant: "danger-light", size: "S", onClick: handleDeleteFirebaseJsonConfig, children: "Delete Config" })
|
|
565
564
|
] })
|
|
566
565
|
] }),
|
|
567
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
568
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
569
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
566
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { paddingTop: 4, style: { borderTop: "1px solid #eaeaef" }, children: [
|
|
567
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.E, { variant: "delta", fontWeight: "bold", style: { marginBottom: "8px" }, children: "Web API Key Configuration" }),
|
|
568
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.R, { marginBottom: 3, children: /* @__PURE__ */ jsxRuntime.jsxs(api.E, { variant: "pi", textColor: "neutral600", component: "span", children: [
|
|
570
569
|
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Optional" }),
|
|
571
570
|
" - Only needed for email/password login via emailLogin endpoint"
|
|
572
571
|
] }) }),
|
|
573
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
574
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
575
|
-
firebaseWebApiKey?.trim() && /* @__PURE__ */ jsxRuntime.jsx(
|
|
576
|
-
firebaseWebApiKey?.trim() ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
572
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.T, { gap: 2, alignItems: "center", justifyContent: "space-between", children: [
|
|
573
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.T, { gap: 2, alignItems: "center", children: [
|
|
574
|
+
firebaseWebApiKey?.trim() && /* @__PURE__ */ jsxRuntime.jsx(api.E, { variant: "omega", textColor: "neutral600", children: `${firebaseWebApiKey.substring(0, 10)}...` }),
|
|
575
|
+
firebaseWebApiKey?.trim() ? /* @__PURE__ */ jsxRuntime.jsx(api.Is, { backgroundColor: "success200", textColor: "success700", size: "S", children: "✓ CONFIGURED" }) : /* @__PURE__ */ jsxRuntime.jsx(api.Is, { backgroundColor: "neutral200", textColor: "neutral700", size: "S", children: "NOT SET" })
|
|
577
576
|
] }),
|
|
578
|
-
firebaseWebApiKey?.trim() ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
577
|
+
firebaseWebApiKey?.trim() ? /* @__PURE__ */ jsxRuntime.jsx(api.Nn, { variant: "danger-light", size: "S", onClick: handleRemoveWebApiKey, children: "Delete Config" }) : /* @__PURE__ */ jsxRuntime.jsx(api.Nn, { variant: "secondary", size: "S", onClick: handleAddWebApiKey, children: "+ Add Web API Key" })
|
|
579
578
|
] })
|
|
580
579
|
] })
|
|
581
580
|
] }) });
|
|
582
581
|
})()
|
|
583
582
|
] }),
|
|
584
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
585
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
583
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { padding: 4, background: "neutral0", borderRadius: "4px", shadow: "filterShadow", marginBottom: 6, children: [
|
|
584
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.E, { variant: "alpha", as: "h2", style: { display: "block", marginBottom: "8px" }, children: "Password Reset Settings" }),
|
|
586
585
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
587
|
-
|
|
586
|
+
api.E,
|
|
588
587
|
{
|
|
589
588
|
variant: "omega",
|
|
590
589
|
textColor: "neutral600",
|
|
@@ -592,10 +591,10 @@ function SettingsPage() {
|
|
|
592
591
|
children: "Configure password requirements and email settings for password reset functionality"
|
|
593
592
|
}
|
|
594
593
|
),
|
|
595
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
596
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
594
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { marginBottom: 3, children: [
|
|
595
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.E, { variant: "omega", fontWeight: "bold", style: { display: "block", marginBottom: "8px" }, children: "Password Requirements (Regex)" }),
|
|
597
596
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
598
|
-
|
|
597
|
+
api.G0,
|
|
599
598
|
{
|
|
600
599
|
name: "passwordRequirementsRegex",
|
|
601
600
|
value: passwordRequirementsRegex,
|
|
@@ -605,10 +604,10 @@ function SettingsPage() {
|
|
|
605
604
|
}
|
|
606
605
|
)
|
|
607
606
|
] }),
|
|
608
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
609
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
607
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { marginBottom: 3, children: [
|
|
608
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.E, { variant: "omega", fontWeight: "bold", style: { display: "block", marginBottom: "8px" }, children: "Password Requirements Message" }),
|
|
610
609
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
611
|
-
|
|
610
|
+
api.M1,
|
|
612
611
|
{
|
|
613
612
|
name: "passwordRequirementsMessage",
|
|
614
613
|
value: passwordRequirementsMessage,
|
|
@@ -618,9 +617,9 @@ function SettingsPage() {
|
|
|
618
617
|
}
|
|
619
618
|
)
|
|
620
619
|
] }),
|
|
621
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
620
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { marginBottom: 4, padding: 3, background: "neutral100", borderRadius: "4px", children: [
|
|
622
621
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
623
|
-
|
|
622
|
+
api.E,
|
|
624
623
|
{
|
|
625
624
|
variant: "omega",
|
|
626
625
|
fontWeight: "bold",
|
|
@@ -628,33 +627,33 @@ function SettingsPage() {
|
|
|
628
627
|
children: "Common Password Patterns:"
|
|
629
628
|
}
|
|
630
629
|
),
|
|
631
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
632
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
630
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { marginLeft: 2, children: [
|
|
631
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.E, { variant: "omega", style: { display: "block", marginBottom: "8px" }, children: [
|
|
633
632
|
"• ",
|
|
634
633
|
/* @__PURE__ */ jsxRuntime.jsx("code", { children: "^.{6,}$" }),
|
|
635
634
|
" - Minimum 6 characters (simple)"
|
|
636
635
|
] }),
|
|
637
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
636
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.E, { variant: "omega", style: { display: "block", marginBottom: "8px" }, children: [
|
|
638
637
|
"• ",
|
|
639
638
|
/* @__PURE__ */ jsxRuntime.jsx("code", { children: "^.{8,}$" }),
|
|
640
639
|
" - Minimum 8 characters"
|
|
641
640
|
] }),
|
|
642
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
641
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.E, { variant: "omega", style: { display: "block", marginBottom: "8px" }, children: [
|
|
643
642
|
"• ",
|
|
644
643
|
/* @__PURE__ */ jsxRuntime.jsx("code", { children: "^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,}$" }),
|
|
645
644
|
" - At least 8 chars with letters and numbers"
|
|
646
645
|
] }),
|
|
647
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
646
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.E, { variant: "omega", style: { display: "block" }, children: [
|
|
648
647
|
"• ",
|
|
649
648
|
/* @__PURE__ */ jsxRuntime.jsx("code", { children: "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$" }),
|
|
650
649
|
" - Complex (upper, lower, number, special)"
|
|
651
650
|
] })
|
|
652
651
|
] })
|
|
653
652
|
] }),
|
|
654
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
655
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
653
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { marginBottom: 3, children: [
|
|
654
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.E, { variant: "omega", fontWeight: "bold", style: { display: "block", marginBottom: "8px" }, children: "Password Reset URL *" }),
|
|
656
655
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
657
|
-
|
|
656
|
+
api.G0,
|
|
658
657
|
{
|
|
659
658
|
name: "passwordResetUrl",
|
|
660
659
|
value: passwordResetUrl,
|
|
@@ -665,10 +664,10 @@ function SettingsPage() {
|
|
|
665
664
|
}
|
|
666
665
|
)
|
|
667
666
|
] }),
|
|
668
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
669
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
667
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { marginBottom: 3, children: [
|
|
668
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.E, { variant: "omega", fontWeight: "bold", style: { display: "block", marginBottom: "8px" }, children: "Reset Email Subject" }),
|
|
670
669
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
671
|
-
|
|
670
|
+
api.G0,
|
|
672
671
|
{
|
|
673
672
|
name: "passwordResetEmailSubject",
|
|
674
673
|
value: passwordResetEmailSubject,
|
|
@@ -679,21 +678,21 @@ function SettingsPage() {
|
|
|
679
678
|
)
|
|
680
679
|
] }),
|
|
681
680
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
682
|
-
|
|
681
|
+
api.T,
|
|
683
682
|
{
|
|
684
683
|
style: {
|
|
685
684
|
marginTop: 24,
|
|
686
685
|
width: "100%"
|
|
687
686
|
},
|
|
688
687
|
justifyContent: "flex-end",
|
|
689
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
688
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(api.Nn, { size: "L", variant: "secondary", onClick: handleSavePasswordSettings, children: "Save Password Settings" })
|
|
690
689
|
}
|
|
691
690
|
)
|
|
692
691
|
] }),
|
|
693
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
694
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
692
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { padding: 4, background: "neutral0", borderRadius: "4px", shadow: "filterShadow", marginBottom: 6, children: [
|
|
693
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.E, { variant: "alpha", as: "h2", style: { display: "block", marginBottom: "8px" }, children: "Email Verification" }),
|
|
695
694
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
696
|
-
|
|
695
|
+
api.E,
|
|
697
696
|
{
|
|
698
697
|
variant: "omega",
|
|
699
698
|
textColor: "neutral600",
|
|
@@ -701,10 +700,10 @@ function SettingsPage() {
|
|
|
701
700
|
children: "Configure email verification settings for new user registration"
|
|
702
701
|
}
|
|
703
702
|
),
|
|
704
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
705
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
703
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { marginBottom: 3, children: [
|
|
704
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.E, { variant: "omega", fontWeight: "bold", style: { display: "block", marginBottom: "8px" }, children: "Email Verification URL *" }),
|
|
706
705
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
707
|
-
|
|
706
|
+
api.G0,
|
|
708
707
|
{
|
|
709
708
|
name: "emailVerificationUrl",
|
|
710
709
|
value: emailVerificationUrl,
|
|
@@ -715,10 +714,10 @@ function SettingsPage() {
|
|
|
715
714
|
}
|
|
716
715
|
)
|
|
717
716
|
] }),
|
|
718
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
719
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
717
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { marginBottom: 3, children: [
|
|
718
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.E, { variant: "omega", fontWeight: "bold", style: { display: "block", marginBottom: "8px" }, children: "Verification Email Subject" }),
|
|
720
719
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
721
|
-
|
|
720
|
+
api.G0,
|
|
722
721
|
{
|
|
723
722
|
name: "emailVerificationEmailSubject",
|
|
724
723
|
value: emailVerificationEmailSubject,
|
|
@@ -729,7 +728,7 @@ function SettingsPage() {
|
|
|
729
728
|
)
|
|
730
729
|
] }),
|
|
731
730
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
732
|
-
|
|
731
|
+
api.T,
|
|
733
732
|
{
|
|
734
733
|
style: {
|
|
735
734
|
marginTop: 24,
|
|
@@ -737,7 +736,7 @@ function SettingsPage() {
|
|
|
737
736
|
},
|
|
738
737
|
justifyContent: "flex-end",
|
|
739
738
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
740
|
-
|
|
739
|
+
api.Nn,
|
|
741
740
|
{
|
|
742
741
|
size: "L",
|
|
743
742
|
variant: "secondary",
|
|
@@ -749,10 +748,10 @@ function SettingsPage() {
|
|
|
749
748
|
}
|
|
750
749
|
)
|
|
751
750
|
] }),
|
|
752
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
753
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
751
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { padding: 4, background: "neutral0", borderRadius: "4px", shadow: "filterShadow", marginBottom: 6, children: [
|
|
752
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.E, { variant: "alpha", as: "h2", style: { display: "block", marginBottom: "8px" }, children: "Magic Link Authentication" }),
|
|
754
753
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
755
|
-
|
|
754
|
+
api.E,
|
|
756
755
|
{
|
|
757
756
|
variant: "omega",
|
|
758
757
|
textColor: "neutral600",
|
|
@@ -760,9 +759,9 @@ function SettingsPage() {
|
|
|
760
759
|
children: "Configure passwordless authentication via email magic links"
|
|
761
760
|
}
|
|
762
761
|
),
|
|
763
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
762
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.R, { marginBottom: 3, children: /* @__PURE__ */ jsxRuntime.jsxs(api.T, { alignItems: "center", gap: 2, children: [
|
|
764
763
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
765
|
-
|
|
764
|
+
api.D1,
|
|
766
765
|
{
|
|
767
766
|
name: "enableMagicLink",
|
|
768
767
|
label: "Enable Magic Link Authentication",
|
|
@@ -772,7 +771,7 @@ function SettingsPage() {
|
|
|
772
771
|
}
|
|
773
772
|
),
|
|
774
773
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
775
|
-
|
|
774
|
+
api.E,
|
|
776
775
|
{
|
|
777
776
|
variant: "pi",
|
|
778
777
|
fontWeight: "bold",
|
|
@@ -782,9 +781,9 @@ function SettingsPage() {
|
|
|
782
781
|
)
|
|
783
782
|
] }) }),
|
|
784
783
|
enableMagicLink && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
785
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
784
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { marginBottom: 3, children: [
|
|
786
785
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
787
|
-
|
|
786
|
+
api.E,
|
|
788
787
|
{
|
|
789
788
|
variant: "omega",
|
|
790
789
|
fontWeight: "bold",
|
|
@@ -793,7 +792,7 @@ function SettingsPage() {
|
|
|
793
792
|
}
|
|
794
793
|
),
|
|
795
794
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
796
|
-
|
|
795
|
+
api.G0,
|
|
797
796
|
{
|
|
798
797
|
name: "magicLinkUrl",
|
|
799
798
|
value: magicLinkUrl,
|
|
@@ -804,9 +803,9 @@ function SettingsPage() {
|
|
|
804
803
|
}
|
|
805
804
|
)
|
|
806
805
|
] }),
|
|
807
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
806
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { marginBottom: 3, children: [
|
|
808
807
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
809
|
-
|
|
808
|
+
api.E,
|
|
810
809
|
{
|
|
811
810
|
variant: "omega",
|
|
812
811
|
fontWeight: "bold",
|
|
@@ -815,7 +814,7 @@ function SettingsPage() {
|
|
|
815
814
|
}
|
|
816
815
|
),
|
|
817
816
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
818
|
-
|
|
817
|
+
api.G0,
|
|
819
818
|
{
|
|
820
819
|
name: "magicLinkEmailSubject",
|
|
821
820
|
value: magicLinkEmailSubject,
|
|
@@ -825,9 +824,9 @@ function SettingsPage() {
|
|
|
825
824
|
}
|
|
826
825
|
)
|
|
827
826
|
] }),
|
|
828
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
827
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { marginBottom: 3, children: [
|
|
829
828
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
830
|
-
|
|
829
|
+
api.E,
|
|
831
830
|
{
|
|
832
831
|
variant: "omega",
|
|
833
832
|
fontWeight: "bold",
|
|
@@ -836,7 +835,7 @@ function SettingsPage() {
|
|
|
836
835
|
}
|
|
837
836
|
),
|
|
838
837
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
839
|
-
|
|
838
|
+
api.i1,
|
|
840
839
|
{
|
|
841
840
|
name: "magicLinkExpiryHours",
|
|
842
841
|
value: magicLinkExpiryHours,
|
|
@@ -847,9 +846,9 @@ function SettingsPage() {
|
|
|
847
846
|
}
|
|
848
847
|
)
|
|
849
848
|
] }),
|
|
850
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
849
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { marginTop: 4, padding: 3, background: "primary100", borderRadius: "4px", children: [
|
|
851
850
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
852
|
-
|
|
851
|
+
api.E,
|
|
853
852
|
{
|
|
854
853
|
variant: "omega",
|
|
855
854
|
fontWeight: "bold",
|
|
@@ -857,32 +856,32 @@ function SettingsPage() {
|
|
|
857
856
|
children: "Setup Requirements:"
|
|
858
857
|
}
|
|
859
858
|
),
|
|
860
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
861
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
859
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { marginLeft: 2, children: [
|
|
860
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.E, { variant: "omega", style: { display: "block", marginBottom: "8px" }, children: [
|
|
862
861
|
"1. ",
|
|
863
862
|
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Firebase Console:" }),
|
|
864
863
|
' Enable "Email link (passwordless sign-in)" in Authentication → Sign-in method'
|
|
865
864
|
] }),
|
|
866
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
865
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.E, { variant: "omega", style: { display: "block", marginBottom: "8px" }, children: [
|
|
867
866
|
"2. ",
|
|
868
867
|
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Authorized Domains:" }),
|
|
869
868
|
" Add your domain to Firebase authorized domains list"
|
|
870
869
|
] }),
|
|
871
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
870
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.E, { variant: "omega", style: { display: "block", marginBottom: "8px" }, children: [
|
|
872
871
|
"3. ",
|
|
873
872
|
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Verification Page:" }),
|
|
874
873
|
" Deploy the client-side verification handler at the URL above"
|
|
875
874
|
] }),
|
|
876
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
875
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.E, { variant: "omega", style: { display: "block", marginBottom: "8px" }, children: [
|
|
877
876
|
"4. ",
|
|
878
877
|
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Email Service:" }),
|
|
879
878
|
" Configure Strapi Email plugin or custom email hook"
|
|
880
879
|
] })
|
|
881
880
|
] })
|
|
882
881
|
] }),
|
|
883
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
882
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { marginTop: 3, padding: 3, background: "neutral100", borderRadius: "4px", children: [
|
|
884
883
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
885
|
-
|
|
884
|
+
api.E,
|
|
886
885
|
{
|
|
887
886
|
variant: "omega",
|
|
888
887
|
fontWeight: "bold",
|
|
@@ -890,34 +889,34 @@ function SettingsPage() {
|
|
|
890
889
|
children: "🧪 Testing:"
|
|
891
890
|
}
|
|
892
891
|
),
|
|
893
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
892
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.E, { variant: "omega", style: { display: "block" }, children: [
|
|
894
893
|
"Test page available at:",
|
|
895
894
|
" ",
|
|
896
895
|
/* @__PURE__ */ jsxRuntime.jsx("a", { href: "/test-magic-link.html", target: "_blank", rel: "noreferrer", children: "/test-magic-link.html" })
|
|
897
896
|
] }),
|
|
898
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
897
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.E, { variant: "omega", style: { display: "block", marginTop: "4px" }, children: "In development mode, magic links are logged to the server console." })
|
|
899
898
|
] })
|
|
900
899
|
] }),
|
|
901
900
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
902
|
-
|
|
901
|
+
api.T,
|
|
903
902
|
{
|
|
904
903
|
style: {
|
|
905
904
|
marginTop: 24,
|
|
906
905
|
width: "100%"
|
|
907
906
|
},
|
|
908
907
|
justifyContent: "flex-end",
|
|
909
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
908
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(api.Nn, { size: "L", variant: "secondary", onClick: handleSaveMagicLinkSettings, disabled: loading, children: "Save Magic Link Settings" })
|
|
910
909
|
}
|
|
911
910
|
)
|
|
912
911
|
] })
|
|
913
912
|
] }) }),
|
|
914
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
915
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
916
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
917
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
918
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
913
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.t1.Root, { open: showEditModal, onOpenChange: (open) => !open && setShowEditModal(false), children: /* @__PURE__ */ jsxRuntime.jsxs(api.t1.Content, { children: [
|
|
914
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.t1.Header, { children: /* @__PURE__ */ jsxRuntime.jsx(api.t1.Title, { children: "Add Firebase Web API Key" }) }),
|
|
915
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.t1.Body, { children: /* @__PURE__ */ jsxRuntime.jsxs(api.R, { padding: 4, children: [
|
|
916
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.E, { variant: "omega", marginBottom: 2, children: "Add your Firebase Web API Key to enable the emailLogin endpoint. This is optional and only needed if you want to authenticate users with email/password directly through your backend." }),
|
|
917
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { marginTop: 3, children: [
|
|
919
918
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
920
|
-
|
|
919
|
+
api.E,
|
|
921
920
|
{
|
|
922
921
|
variant: "omega",
|
|
923
922
|
fontWeight: "bold",
|
|
@@ -926,7 +925,7 @@ function SettingsPage() {
|
|
|
926
925
|
}
|
|
927
926
|
),
|
|
928
927
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
929
|
-
|
|
928
|
+
api.G0,
|
|
930
929
|
{
|
|
931
930
|
name: "editWebApiKey",
|
|
932
931
|
value: editWebApiKey,
|
|
@@ -936,26 +935,26 @@ function SettingsPage() {
|
|
|
936
935
|
}
|
|
937
936
|
)
|
|
938
937
|
] }),
|
|
939
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
940
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
938
|
+
/* @__PURE__ */ jsxRuntime.jsxs(api.R, { marginTop: 3, padding: 2, background: "primary100", borderRadius: "4px", children: [
|
|
939
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.E, { variant: "omega", fontWeight: "bold", children: "📍 Where to find your Web API Key:" }),
|
|
941
940
|
/* @__PURE__ */ jsxRuntime.jsxs("ol", { style: { marginLeft: 20, marginTop: 8 }, children: [
|
|
942
|
-
/* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
941
|
+
/* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(api.E, { variant: "omega", children: [
|
|
943
942
|
"Go to",
|
|
944
943
|
" ",
|
|
945
944
|
/* @__PURE__ */ jsxRuntime.jsx("a", { href: "https://console.firebase.google.com", target: "_blank", rel: "noreferrer", children: "Firebase Console" })
|
|
946
945
|
] }) }),
|
|
947
|
-
/* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
948
|
-
/* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
946
|
+
/* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(api.E, { variant: "omega", children: "Select your project" }) }),
|
|
947
|
+
/* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(api.E, { variant: "omega", children: [
|
|
949
948
|
"Click the gear icon ⚙️ → ",
|
|
950
949
|
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Project Settings" })
|
|
951
950
|
] }) }),
|
|
952
|
-
/* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
951
|
+
/* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(api.E, { variant: "omega", children: [
|
|
953
952
|
"In the ",
|
|
954
953
|
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "General" }),
|
|
955
954
|
" tab, scroll down to ",
|
|
956
955
|
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Your apps" })
|
|
957
956
|
] }) }),
|
|
958
|
-
/* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
957
|
+
/* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(api.E, { variant: "omega", children: [
|
|
959
958
|
"Find ",
|
|
960
959
|
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Web API Key" }),
|
|
961
960
|
" (looks like: AIzaSyB3Xd...)"
|
|
@@ -963,9 +962,9 @@ function SettingsPage() {
|
|
|
963
962
|
] })
|
|
964
963
|
] })
|
|
965
964
|
] }) }),
|
|
966
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
967
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
968
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
965
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.t1.Footer, { children: /* @__PURE__ */ jsxRuntime.jsxs(api.T, { justifyContent: "flex-end", gap: 2, children: [
|
|
966
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.Nn, { variant: "tertiary", onClick: () => setShowEditModal(false), children: "Cancel" }),
|
|
967
|
+
/* @__PURE__ */ jsxRuntime.jsx(api.Nn, { variant: "default", onClick: handleSaveEditConfiguration, children: "Add API Key" })
|
|
969
968
|
] }) })
|
|
970
969
|
] }) })
|
|
971
970
|
] });
|