strapi-plugin-firebase-authentication 1.2.0 → 1.2.3
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-CQ9ehArz.mjs → App-BwSwStYD.mjs} +193 -195
- package/dist/_chunks/{App-B7d4qS3T.js → App-D0dXofYU.js} +277 -279
- package/dist/_chunks/api-ApHylTX3.mjs +56675 -0
- package/dist/_chunks/api-BPWH3Tkt.js +56692 -0
- package/dist/_chunks/index-BiKfIixL.mjs +2758 -0
- package/dist/_chunks/index-CEHB1Gia.js +2757 -0
- package/dist/_chunks/{index-0tTyhxbb.mjs → index-CoM6JZZ8.mjs} +139 -140
- package/dist/_chunks/{index-Cwp9xkG4.js → index-CwdQ9EjS.js} +158 -159
- package/dist/admin/index.js +1 -3
- package/dist/admin/index.mjs +2 -4
- package/dist/server/index.js +1146 -547
- package/dist/server/index.mjs +1147 -548
- package/dist/server/src/controllers/firebaseController.d.ts +3 -3
- package/dist/server/src/controllers/index.d.ts +1 -1
- package/dist/server/src/index.d.ts +15 -5
- 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/dist/server/src/services/tokenService.d.ts +1 -0
- 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,8 +1,7 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useState, useEffect } from "react";
|
|
3
|
-
import {
|
|
3
|
+
import { T, R, E, J as Jm, N as Nn, G as G0, I as Is, M as M1, D as D1, i as i1, t as t1, g as getFirebaseConfig, s as saveFirebaseConfig, f as delFirebaseConfig, j as savePasswordSettings } from "./api-ApHylTX3.mjs";
|
|
4
4
|
import { useNotification, Page } from "@strapi/strapi/admin";
|
|
5
|
-
import { g as getFirebaseConfig, s as saveFirebaseConfig, d as delFirebaseConfig, a as savePasswordSettings } from "./api-BM2UtpvM.mjs";
|
|
6
5
|
import { useNavigate } from "react-router-dom";
|
|
7
6
|
function SettingsPage() {
|
|
8
7
|
const { toggleNotification } = useNotification();
|
|
@@ -328,11 +327,11 @@ function SettingsPage() {
|
|
|
328
327
|
}
|
|
329
328
|
};
|
|
330
329
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
331
|
-
/* @__PURE__ */ jsx(
|
|
332
|
-
/* @__PURE__ */ jsxs(
|
|
333
|
-
/* @__PURE__ */ jsx(
|
|
330
|
+
/* @__PURE__ */ jsx(T, { style: { padding: 32 }, direction: "column", alignItems: "flex-start", gap: 4, children: /* @__PURE__ */ jsxs(R, { style: { width: "100%" }, children: [
|
|
331
|
+
/* @__PURE__ */ jsxs(R, { marginBottom: 6, padding: 4, background: "neutral0", borderRadius: "4px", shadow: "filterShadow", children: [
|
|
332
|
+
/* @__PURE__ */ jsx(E, { variant: "alpha", as: "h2", style: { display: "block", marginBottom: "8px" }, children: "Firebase Authentication" }),
|
|
334
333
|
/* @__PURE__ */ jsx(
|
|
335
|
-
|
|
334
|
+
E,
|
|
336
335
|
{
|
|
337
336
|
variant: "omega",
|
|
338
337
|
textColor: "neutral600",
|
|
@@ -342,9 +341,9 @@ function SettingsPage() {
|
|
|
342
341
|
),
|
|
343
342
|
(() => {
|
|
344
343
|
return !firebaseJsonValue || !firebaseJsonValue.firebaseConfigJson ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
345
|
-
/* @__PURE__ */ jsxs(
|
|
344
|
+
/* @__PURE__ */ jsxs(R, { children: [
|
|
346
345
|
/* @__PURE__ */ jsx(
|
|
347
|
-
|
|
346
|
+
E,
|
|
348
347
|
{
|
|
349
348
|
variant: "omega",
|
|
350
349
|
fontWeight: "bold",
|
|
@@ -353,7 +352,7 @@ function SettingsPage() {
|
|
|
353
352
|
}
|
|
354
353
|
),
|
|
355
354
|
/* @__PURE__ */ jsx(
|
|
356
|
-
|
|
355
|
+
Jm,
|
|
357
356
|
{
|
|
358
357
|
value: firebaseJsonValueInput,
|
|
359
358
|
height: 400,
|
|
@@ -363,9 +362,9 @@ function SettingsPage() {
|
|
|
363
362
|
}
|
|
364
363
|
)
|
|
365
364
|
] }),
|
|
366
|
-
/* @__PURE__ */ jsxs(
|
|
365
|
+
/* @__PURE__ */ jsxs(R, { marginTop: 4, children: [
|
|
367
366
|
/* @__PURE__ */ jsxs(
|
|
368
|
-
|
|
367
|
+
Nn,
|
|
369
368
|
{
|
|
370
369
|
variant: "tertiary",
|
|
371
370
|
onClick: () => setShowOptionalSettings(!showOptionalSettings),
|
|
@@ -376,11 +375,11 @@ function SettingsPage() {
|
|
|
376
375
|
]
|
|
377
376
|
}
|
|
378
377
|
),
|
|
379
|
-
showOptionalSettings && /* @__PURE__ */ jsxs(
|
|
380
|
-
/* @__PURE__ */ jsx(
|
|
381
|
-
/* @__PURE__ */ jsxs(
|
|
378
|
+
showOptionalSettings && /* @__PURE__ */ jsxs(R, { padding: 3, background: "neutral100", borderRadius: "4px", children: [
|
|
379
|
+
/* @__PURE__ */ jsx(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." }),
|
|
380
|
+
/* @__PURE__ */ jsxs(R, { marginTop: 3, children: [
|
|
382
381
|
/* @__PURE__ */ jsx(
|
|
383
|
-
|
|
382
|
+
E,
|
|
384
383
|
{
|
|
385
384
|
variant: "omega",
|
|
386
385
|
fontWeight: "bold",
|
|
@@ -389,7 +388,7 @@ function SettingsPage() {
|
|
|
389
388
|
}
|
|
390
389
|
),
|
|
391
390
|
/* @__PURE__ */ jsx(
|
|
392
|
-
|
|
391
|
+
G0,
|
|
393
392
|
{
|
|
394
393
|
name: "firebaseWebApiKey",
|
|
395
394
|
value: firebaseWebApiKey,
|
|
@@ -399,10 +398,10 @@ function SettingsPage() {
|
|
|
399
398
|
}
|
|
400
399
|
)
|
|
401
400
|
] }),
|
|
402
|
-
/* @__PURE__ */ jsxs(
|
|
403
|
-
/* @__PURE__ */ jsx(
|
|
401
|
+
/* @__PURE__ */ jsxs(R, { marginTop: 3, padding: 2, background: "primary100", borderRadius: "4px", children: [
|
|
402
|
+
/* @__PURE__ */ jsx(E, { variant: "omega", fontWeight: "bold", children: "📍 Where to find your Web API Key:" }),
|
|
404
403
|
/* @__PURE__ */ jsxs("ol", { style: { marginLeft: 20, marginTop: 8 }, children: [
|
|
405
|
-
/* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
|
|
404
|
+
/* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(E, { variant: "omega", children: [
|
|
406
405
|
"Go to",
|
|
407
406
|
" ",
|
|
408
407
|
/* @__PURE__ */ jsx(
|
|
@@ -415,25 +414,25 @@ function SettingsPage() {
|
|
|
415
414
|
}
|
|
416
415
|
)
|
|
417
416
|
] }) }),
|
|
418
|
-
/* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
|
|
419
|
-
/* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
|
|
417
|
+
/* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(E, { variant: "omega", children: "Select your project" }) }),
|
|
418
|
+
/* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(E, { variant: "omega", children: [
|
|
420
419
|
"Click the gear icon → ",
|
|
421
420
|
/* @__PURE__ */ jsx("strong", { children: "Project Settings" })
|
|
422
421
|
] }) }),
|
|
423
|
-
/* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
|
|
422
|
+
/* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(E, { variant: "omega", children: [
|
|
424
423
|
"In the ",
|
|
425
424
|
/* @__PURE__ */ jsx("strong", { children: "General" }),
|
|
426
425
|
" tab, scroll down to ",
|
|
427
426
|
/* @__PURE__ */ jsx("strong", { children: "Your apps" })
|
|
428
427
|
] }) }),
|
|
429
|
-
/* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
|
|
428
|
+
/* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(E, { variant: "omega", children: [
|
|
430
429
|
"Find ",
|
|
431
430
|
/* @__PURE__ */ jsx("strong", { children: "Web API Key" }),
|
|
432
431
|
" (looks like: AIzaSyB3Xd...)"
|
|
433
432
|
] }) })
|
|
434
433
|
] })
|
|
435
434
|
] }),
|
|
436
|
-
/* @__PURE__ */ jsx(
|
|
435
|
+
/* @__PURE__ */ jsx(R, { marginTop: 3, padding: 2, background: "warning100", borderRadius: "4px", children: /* @__PURE__ */ jsxs(E, { variant: "omega", textColor: "warning700", children: [
|
|
437
436
|
"⚠️ ",
|
|
438
437
|
/* @__PURE__ */ jsx("strong", { children: "Recommendation:" }),
|
|
439
438
|
" 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."
|
|
@@ -441,7 +440,7 @@ function SettingsPage() {
|
|
|
441
440
|
] })
|
|
442
441
|
] }),
|
|
443
442
|
/* @__PURE__ */ jsx(
|
|
444
|
-
|
|
443
|
+
T,
|
|
445
444
|
{
|
|
446
445
|
style: {
|
|
447
446
|
marginTop: 24,
|
|
@@ -449,7 +448,7 @@ function SettingsPage() {
|
|
|
449
448
|
},
|
|
450
449
|
justifyContent: "flex-end",
|
|
451
450
|
children: /* @__PURE__ */ jsx(
|
|
452
|
-
|
|
451
|
+
Nn,
|
|
453
452
|
{
|
|
454
453
|
size: "L",
|
|
455
454
|
onClick: handleFirebaseJsonSubmit,
|
|
@@ -459,14 +458,14 @@ function SettingsPage() {
|
|
|
459
458
|
)
|
|
460
459
|
}
|
|
461
460
|
),
|
|
462
|
-
/* @__PURE__ */ jsxs(
|
|
463
|
-
/* @__PURE__ */ jsx(
|
|
464
|
-
/* @__PURE__ */ jsxs(
|
|
465
|
-
/* @__PURE__ */ jsx(
|
|
466
|
-
/* @__PURE__ */ jsx(
|
|
461
|
+
/* @__PURE__ */ jsxs(R, { marginTop: 6, paddingTop: 4, style: { borderTop: "1px solid #eaeaef" }, children: [
|
|
462
|
+
/* @__PURE__ */ jsx(E, { variant: "beta", marginBottom: 3, children: "How to setup Firebase Service Account JSON:" }),
|
|
463
|
+
/* @__PURE__ */ jsxs(R, { padding: 3, background: "warning100", borderRadius: "4px", marginBottom: 4, children: [
|
|
464
|
+
/* @__PURE__ */ jsx(E, { variant: "omega", fontWeight: "bold", textColor: "warning700", children: "⚠️ Security Warning" }),
|
|
465
|
+
/* @__PURE__ */ jsx(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." })
|
|
467
466
|
] }),
|
|
468
|
-
/* @__PURE__ */ jsx(
|
|
469
|
-
/* @__PURE__ */ jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxs(
|
|
467
|
+
/* @__PURE__ */ jsx(R, { marginLeft: 4, children: /* @__PURE__ */ jsxs("ol", { style: { listStyle: "decimal", paddingLeft: "20px" }, children: [
|
|
468
|
+
/* @__PURE__ */ jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxs(E, { children: [
|
|
470
469
|
"Go to the",
|
|
471
470
|
" ",
|
|
472
471
|
/* @__PURE__ */ jsx(
|
|
@@ -481,40 +480,40 @@ function SettingsPage() {
|
|
|
481
480
|
" ",
|
|
482
481
|
"in your Firebase Console (Project Settings → Service Accounts)"
|
|
483
482
|
] }) }),
|
|
484
|
-
/* @__PURE__ */ jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxs(
|
|
483
|
+
/* @__PURE__ */ jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxs(E, { children: [
|
|
485
484
|
"Click the ",
|
|
486
485
|
/* @__PURE__ */ jsx("strong", { children: '"Generate New Private Key"' }),
|
|
487
486
|
" button"
|
|
488
487
|
] }) }),
|
|
489
|
-
/* @__PURE__ */ jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxs(
|
|
488
|
+
/* @__PURE__ */ jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxs(E, { children: [
|
|
490
489
|
"Confirm by clicking ",
|
|
491
490
|
/* @__PURE__ */ jsx("strong", { children: '"Generate Key"' }),
|
|
492
491
|
" in the confirmation dialog"
|
|
493
492
|
] }) }),
|
|
494
|
-
/* @__PURE__ */ jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxs(
|
|
493
|
+
/* @__PURE__ */ jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxs(E, { children: [
|
|
495
494
|
"A JSON file will be downloaded (e.g.,",
|
|
496
495
|
" ",
|
|
497
496
|
/* @__PURE__ */ jsx("code", { children: "your-project-firebase-adminsdk-xxxxx.json" }),
|
|
498
497
|
")"
|
|
499
498
|
] }) }),
|
|
500
|
-
/* @__PURE__ */ jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxs(
|
|
499
|
+
/* @__PURE__ */ jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxs(E, { children: [
|
|
501
500
|
"Open the downloaded JSON file, copy its ",
|
|
502
501
|
/* @__PURE__ */ jsx("strong", { children: "entire contents" }),
|
|
503
502
|
', and paste it in the "Firebase Service Account JSON" field above'
|
|
504
503
|
] }) }),
|
|
505
|
-
/* @__PURE__ */ jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxs(
|
|
504
|
+
/* @__PURE__ */ jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxs(E, { children: [
|
|
506
505
|
"Click ",
|
|
507
506
|
/* @__PURE__ */ jsx("strong", { children: "Submit" }),
|
|
508
507
|
" to save your configuration"
|
|
509
508
|
] }) }),
|
|
510
|
-
/* @__PURE__ */ jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxs(
|
|
509
|
+
/* @__PURE__ */ jsx("li", { style: { marginTop: 16 }, children: /* @__PURE__ */ jsxs(E, { children: [
|
|
511
510
|
/* @__PURE__ */ jsx("em", { children: "(Optional)" }),
|
|
512
511
|
' If you need email/password authentication, expand "Optional: Email/Password Authentication" and add your Web API Key'
|
|
513
512
|
] }) })
|
|
514
513
|
] }) }),
|
|
515
|
-
/* @__PURE__ */ jsxs(
|
|
516
|
-
/* @__PURE__ */ jsx(
|
|
517
|
-
/* @__PURE__ */ jsxs(
|
|
514
|
+
/* @__PURE__ */ jsxs(R, { marginTop: 4, padding: 3, background: "neutral100", borderRadius: "4px", children: [
|
|
515
|
+
/* @__PURE__ */ jsx(E, { variant: "omega", fontWeight: "bold", children: "📝 Note: Service Account JSON vs Web App Config" }),
|
|
516
|
+
/* @__PURE__ */ jsxs(E, { variant: "omega", marginTop: 2, children: [
|
|
518
517
|
/* @__PURE__ */ jsx("strong", { children: "Service Account JSON" }),
|
|
519
518
|
" (what you need here): Contains",
|
|
520
519
|
" ",
|
|
@@ -525,7 +524,7 @@ function SettingsPage() {
|
|
|
525
524
|
/* @__PURE__ */ jsx("strong", { children: "Service Accounts tab" }),
|
|
526
525
|
"."
|
|
527
526
|
] }),
|
|
528
|
-
/* @__PURE__ */ jsxs(
|
|
527
|
+
/* @__PURE__ */ jsxs(E, { variant: "omega", marginTop: 2, children: [
|
|
529
528
|
/* @__PURE__ */ jsx("strong", { children: "Web App Config" }),
|
|
530
529
|
" (NOT what you need): Contains ",
|
|
531
530
|
/* @__PURE__ */ jsx("code", { children: "apiKey" }),
|
|
@@ -536,16 +535,16 @@ function SettingsPage() {
|
|
|
536
535
|
] })
|
|
537
536
|
] })
|
|
538
537
|
] })
|
|
539
|
-
] }) : /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(
|
|
540
|
-
/* @__PURE__ */ jsxs(
|
|
541
|
-
/* @__PURE__ */ jsx(
|
|
542
|
-
/* @__PURE__ */ jsx(
|
|
538
|
+
] }) : /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(R, { padding: 4, background: "neutral0", children: [
|
|
539
|
+
/* @__PURE__ */ jsxs(R, { marginBottom: 4, children: [
|
|
540
|
+
/* @__PURE__ */ jsx(E, { variant: "delta", fontWeight: "bold", style: { marginBottom: "8px" }, children: "Service Account Configuration" }),
|
|
541
|
+
/* @__PURE__ */ jsx(R, { marginBottom: 3, children: /* @__PURE__ */ jsxs(E, { variant: "pi", textColor: "neutral600", component: "span", children: [
|
|
543
542
|
/* @__PURE__ */ jsx("strong", { children: "Required" }),
|
|
544
543
|
" - Enables Firebase Admin SDK for server-side authentication"
|
|
545
544
|
] }) }),
|
|
546
|
-
/* @__PURE__ */ jsxs(
|
|
547
|
-
/* @__PURE__ */ jsxs(
|
|
548
|
-
/* @__PURE__ */ jsxs(
|
|
545
|
+
/* @__PURE__ */ jsxs(T, { gap: 2, alignItems: "center", justifyContent: "space-between", children: [
|
|
546
|
+
/* @__PURE__ */ jsxs(T, { gap: 2, alignItems: "center", children: [
|
|
547
|
+
/* @__PURE__ */ jsxs(E, { variant: "omega", textColor: "neutral600", children: [
|
|
549
548
|
"Project:",
|
|
550
549
|
" ",
|
|
551
550
|
firebaseJsonValue?.firebaseConfigJson && (() => {
|
|
@@ -557,32 +556,32 @@ function SettingsPage() {
|
|
|
557
556
|
}
|
|
558
557
|
})()
|
|
559
558
|
] }),
|
|
560
|
-
/* @__PURE__ */ jsx(
|
|
559
|
+
/* @__PURE__ */ jsx(Is, { backgroundColor: "success200", textColor: "success700", size: "S", children: "✓ CONFIGURED" })
|
|
561
560
|
] }),
|
|
562
|
-
/* @__PURE__ */ jsx(
|
|
561
|
+
/* @__PURE__ */ jsx(Nn, { variant: "danger-light", size: "S", onClick: handleDeleteFirebaseJsonConfig, children: "Delete Config" })
|
|
563
562
|
] })
|
|
564
563
|
] }),
|
|
565
|
-
/* @__PURE__ */ jsxs(
|
|
566
|
-
/* @__PURE__ */ jsx(
|
|
567
|
-
/* @__PURE__ */ jsx(
|
|
564
|
+
/* @__PURE__ */ jsxs(R, { paddingTop: 4, style: { borderTop: "1px solid #eaeaef" }, children: [
|
|
565
|
+
/* @__PURE__ */ jsx(E, { variant: "delta", fontWeight: "bold", style: { marginBottom: "8px" }, children: "Web API Key Configuration" }),
|
|
566
|
+
/* @__PURE__ */ jsx(R, { marginBottom: 3, children: /* @__PURE__ */ jsxs(E, { variant: "pi", textColor: "neutral600", component: "span", children: [
|
|
568
567
|
/* @__PURE__ */ jsx("strong", { children: "Optional" }),
|
|
569
568
|
" - Only needed for email/password login via emailLogin endpoint"
|
|
570
569
|
] }) }),
|
|
571
|
-
/* @__PURE__ */ jsxs(
|
|
572
|
-
/* @__PURE__ */ jsxs(
|
|
573
|
-
firebaseWebApiKey?.trim() && /* @__PURE__ */ jsx(
|
|
574
|
-
firebaseWebApiKey?.trim() ? /* @__PURE__ */ jsx(
|
|
570
|
+
/* @__PURE__ */ jsxs(T, { gap: 2, alignItems: "center", justifyContent: "space-between", children: [
|
|
571
|
+
/* @__PURE__ */ jsxs(T, { gap: 2, alignItems: "center", children: [
|
|
572
|
+
firebaseWebApiKey?.trim() && /* @__PURE__ */ jsx(E, { variant: "omega", textColor: "neutral600", children: `${firebaseWebApiKey.substring(0, 10)}...` }),
|
|
573
|
+
firebaseWebApiKey?.trim() ? /* @__PURE__ */ jsx(Is, { backgroundColor: "success200", textColor: "success700", size: "S", children: "✓ CONFIGURED" }) : /* @__PURE__ */ jsx(Is, { backgroundColor: "neutral200", textColor: "neutral700", size: "S", children: "NOT SET" })
|
|
575
574
|
] }),
|
|
576
|
-
firebaseWebApiKey?.trim() ? /* @__PURE__ */ jsx(
|
|
575
|
+
firebaseWebApiKey?.trim() ? /* @__PURE__ */ jsx(Nn, { variant: "danger-light", size: "S", onClick: handleRemoveWebApiKey, children: "Delete Config" }) : /* @__PURE__ */ jsx(Nn, { variant: "secondary", size: "S", onClick: handleAddWebApiKey, children: "+ Add Web API Key" })
|
|
577
576
|
] })
|
|
578
577
|
] })
|
|
579
578
|
] }) });
|
|
580
579
|
})()
|
|
581
580
|
] }),
|
|
582
|
-
/* @__PURE__ */ jsxs(
|
|
583
|
-
/* @__PURE__ */ jsx(
|
|
581
|
+
/* @__PURE__ */ jsxs(R, { padding: 4, background: "neutral0", borderRadius: "4px", shadow: "filterShadow", marginBottom: 6, children: [
|
|
582
|
+
/* @__PURE__ */ jsx(E, { variant: "alpha", as: "h2", style: { display: "block", marginBottom: "8px" }, children: "Password Reset Settings" }),
|
|
584
583
|
/* @__PURE__ */ jsx(
|
|
585
|
-
|
|
584
|
+
E,
|
|
586
585
|
{
|
|
587
586
|
variant: "omega",
|
|
588
587
|
textColor: "neutral600",
|
|
@@ -590,10 +589,10 @@ function SettingsPage() {
|
|
|
590
589
|
children: "Configure password requirements and email settings for password reset functionality"
|
|
591
590
|
}
|
|
592
591
|
),
|
|
593
|
-
/* @__PURE__ */ jsxs(
|
|
594
|
-
/* @__PURE__ */ jsx(
|
|
592
|
+
/* @__PURE__ */ jsxs(R, { marginBottom: 3, children: [
|
|
593
|
+
/* @__PURE__ */ jsx(E, { variant: "omega", fontWeight: "bold", style: { display: "block", marginBottom: "8px" }, children: "Password Requirements (Regex)" }),
|
|
595
594
|
/* @__PURE__ */ jsx(
|
|
596
|
-
|
|
595
|
+
G0,
|
|
597
596
|
{
|
|
598
597
|
name: "passwordRequirementsRegex",
|
|
599
598
|
value: passwordRequirementsRegex,
|
|
@@ -603,10 +602,10 @@ function SettingsPage() {
|
|
|
603
602
|
}
|
|
604
603
|
)
|
|
605
604
|
] }),
|
|
606
|
-
/* @__PURE__ */ jsxs(
|
|
607
|
-
/* @__PURE__ */ jsx(
|
|
605
|
+
/* @__PURE__ */ jsxs(R, { marginBottom: 3, children: [
|
|
606
|
+
/* @__PURE__ */ jsx(E, { variant: "omega", fontWeight: "bold", style: { display: "block", marginBottom: "8px" }, children: "Password Requirements Message" }),
|
|
608
607
|
/* @__PURE__ */ jsx(
|
|
609
|
-
|
|
608
|
+
M1,
|
|
610
609
|
{
|
|
611
610
|
name: "passwordRequirementsMessage",
|
|
612
611
|
value: passwordRequirementsMessage,
|
|
@@ -616,9 +615,9 @@ function SettingsPage() {
|
|
|
616
615
|
}
|
|
617
616
|
)
|
|
618
617
|
] }),
|
|
619
|
-
/* @__PURE__ */ jsxs(
|
|
618
|
+
/* @__PURE__ */ jsxs(R, { marginBottom: 4, padding: 3, background: "neutral100", borderRadius: "4px", children: [
|
|
620
619
|
/* @__PURE__ */ jsx(
|
|
621
|
-
|
|
620
|
+
E,
|
|
622
621
|
{
|
|
623
622
|
variant: "omega",
|
|
624
623
|
fontWeight: "bold",
|
|
@@ -626,33 +625,33 @@ function SettingsPage() {
|
|
|
626
625
|
children: "Common Password Patterns:"
|
|
627
626
|
}
|
|
628
627
|
),
|
|
629
|
-
/* @__PURE__ */ jsxs(
|
|
630
|
-
/* @__PURE__ */ jsxs(
|
|
628
|
+
/* @__PURE__ */ jsxs(R, { marginLeft: 2, children: [
|
|
629
|
+
/* @__PURE__ */ jsxs(E, { variant: "omega", style: { display: "block", marginBottom: "8px" }, children: [
|
|
631
630
|
"• ",
|
|
632
631
|
/* @__PURE__ */ jsx("code", { children: "^.{6,}$" }),
|
|
633
632
|
" - Minimum 6 characters (simple)"
|
|
634
633
|
] }),
|
|
635
|
-
/* @__PURE__ */ jsxs(
|
|
634
|
+
/* @__PURE__ */ jsxs(E, { variant: "omega", style: { display: "block", marginBottom: "8px" }, children: [
|
|
636
635
|
"• ",
|
|
637
636
|
/* @__PURE__ */ jsx("code", { children: "^.{8,}$" }),
|
|
638
637
|
" - Minimum 8 characters"
|
|
639
638
|
] }),
|
|
640
|
-
/* @__PURE__ */ jsxs(
|
|
639
|
+
/* @__PURE__ */ jsxs(E, { variant: "omega", style: { display: "block", marginBottom: "8px" }, children: [
|
|
641
640
|
"• ",
|
|
642
641
|
/* @__PURE__ */ jsx("code", { children: "^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,}$" }),
|
|
643
642
|
" - At least 8 chars with letters and numbers"
|
|
644
643
|
] }),
|
|
645
|
-
/* @__PURE__ */ jsxs(
|
|
644
|
+
/* @__PURE__ */ jsxs(E, { variant: "omega", style: { display: "block" }, children: [
|
|
646
645
|
"• ",
|
|
647
646
|
/* @__PURE__ */ jsx("code", { children: "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$" }),
|
|
648
647
|
" - Complex (upper, lower, number, special)"
|
|
649
648
|
] })
|
|
650
649
|
] })
|
|
651
650
|
] }),
|
|
652
|
-
/* @__PURE__ */ jsxs(
|
|
653
|
-
/* @__PURE__ */ jsx(
|
|
651
|
+
/* @__PURE__ */ jsxs(R, { marginBottom: 3, children: [
|
|
652
|
+
/* @__PURE__ */ jsx(E, { variant: "omega", fontWeight: "bold", style: { display: "block", marginBottom: "8px" }, children: "Password Reset URL *" }),
|
|
654
653
|
/* @__PURE__ */ jsx(
|
|
655
|
-
|
|
654
|
+
G0,
|
|
656
655
|
{
|
|
657
656
|
name: "passwordResetUrl",
|
|
658
657
|
value: passwordResetUrl,
|
|
@@ -663,10 +662,10 @@ function SettingsPage() {
|
|
|
663
662
|
}
|
|
664
663
|
)
|
|
665
664
|
] }),
|
|
666
|
-
/* @__PURE__ */ jsxs(
|
|
667
|
-
/* @__PURE__ */ jsx(
|
|
665
|
+
/* @__PURE__ */ jsxs(R, { marginBottom: 3, children: [
|
|
666
|
+
/* @__PURE__ */ jsx(E, { variant: "omega", fontWeight: "bold", style: { display: "block", marginBottom: "8px" }, children: "Reset Email Subject" }),
|
|
668
667
|
/* @__PURE__ */ jsx(
|
|
669
|
-
|
|
668
|
+
G0,
|
|
670
669
|
{
|
|
671
670
|
name: "passwordResetEmailSubject",
|
|
672
671
|
value: passwordResetEmailSubject,
|
|
@@ -677,21 +676,21 @@ function SettingsPage() {
|
|
|
677
676
|
)
|
|
678
677
|
] }),
|
|
679
678
|
/* @__PURE__ */ jsx(
|
|
680
|
-
|
|
679
|
+
T,
|
|
681
680
|
{
|
|
682
681
|
style: {
|
|
683
682
|
marginTop: 24,
|
|
684
683
|
width: "100%"
|
|
685
684
|
},
|
|
686
685
|
justifyContent: "flex-end",
|
|
687
|
-
children: /* @__PURE__ */ jsx(
|
|
686
|
+
children: /* @__PURE__ */ jsx(Nn, { size: "L", variant: "secondary", onClick: handleSavePasswordSettings, children: "Save Password Settings" })
|
|
688
687
|
}
|
|
689
688
|
)
|
|
690
689
|
] }),
|
|
691
|
-
/* @__PURE__ */ jsxs(
|
|
692
|
-
/* @__PURE__ */ jsx(
|
|
690
|
+
/* @__PURE__ */ jsxs(R, { padding: 4, background: "neutral0", borderRadius: "4px", shadow: "filterShadow", marginBottom: 6, children: [
|
|
691
|
+
/* @__PURE__ */ jsx(E, { variant: "alpha", as: "h2", style: { display: "block", marginBottom: "8px" }, children: "Email Verification" }),
|
|
693
692
|
/* @__PURE__ */ jsx(
|
|
694
|
-
|
|
693
|
+
E,
|
|
695
694
|
{
|
|
696
695
|
variant: "omega",
|
|
697
696
|
textColor: "neutral600",
|
|
@@ -699,10 +698,10 @@ function SettingsPage() {
|
|
|
699
698
|
children: "Configure email verification settings for new user registration"
|
|
700
699
|
}
|
|
701
700
|
),
|
|
702
|
-
/* @__PURE__ */ jsxs(
|
|
703
|
-
/* @__PURE__ */ jsx(
|
|
701
|
+
/* @__PURE__ */ jsxs(R, { marginBottom: 3, children: [
|
|
702
|
+
/* @__PURE__ */ jsx(E, { variant: "omega", fontWeight: "bold", style: { display: "block", marginBottom: "8px" }, children: "Email Verification URL *" }),
|
|
704
703
|
/* @__PURE__ */ jsx(
|
|
705
|
-
|
|
704
|
+
G0,
|
|
706
705
|
{
|
|
707
706
|
name: "emailVerificationUrl",
|
|
708
707
|
value: emailVerificationUrl,
|
|
@@ -713,10 +712,10 @@ function SettingsPage() {
|
|
|
713
712
|
}
|
|
714
713
|
)
|
|
715
714
|
] }),
|
|
716
|
-
/* @__PURE__ */ jsxs(
|
|
717
|
-
/* @__PURE__ */ jsx(
|
|
715
|
+
/* @__PURE__ */ jsxs(R, { marginBottom: 3, children: [
|
|
716
|
+
/* @__PURE__ */ jsx(E, { variant: "omega", fontWeight: "bold", style: { display: "block", marginBottom: "8px" }, children: "Verification Email Subject" }),
|
|
718
717
|
/* @__PURE__ */ jsx(
|
|
719
|
-
|
|
718
|
+
G0,
|
|
720
719
|
{
|
|
721
720
|
name: "emailVerificationEmailSubject",
|
|
722
721
|
value: emailVerificationEmailSubject,
|
|
@@ -727,7 +726,7 @@ function SettingsPage() {
|
|
|
727
726
|
)
|
|
728
727
|
] }),
|
|
729
728
|
/* @__PURE__ */ jsx(
|
|
730
|
-
|
|
729
|
+
T,
|
|
731
730
|
{
|
|
732
731
|
style: {
|
|
733
732
|
marginTop: 24,
|
|
@@ -735,7 +734,7 @@ function SettingsPage() {
|
|
|
735
734
|
},
|
|
736
735
|
justifyContent: "flex-end",
|
|
737
736
|
children: /* @__PURE__ */ jsx(
|
|
738
|
-
|
|
737
|
+
Nn,
|
|
739
738
|
{
|
|
740
739
|
size: "L",
|
|
741
740
|
variant: "secondary",
|
|
@@ -747,10 +746,10 @@ function SettingsPage() {
|
|
|
747
746
|
}
|
|
748
747
|
)
|
|
749
748
|
] }),
|
|
750
|
-
/* @__PURE__ */ jsxs(
|
|
751
|
-
/* @__PURE__ */ jsx(
|
|
749
|
+
/* @__PURE__ */ jsxs(R, { padding: 4, background: "neutral0", borderRadius: "4px", shadow: "filterShadow", marginBottom: 6, children: [
|
|
750
|
+
/* @__PURE__ */ jsx(E, { variant: "alpha", as: "h2", style: { display: "block", marginBottom: "8px" }, children: "Magic Link Authentication" }),
|
|
752
751
|
/* @__PURE__ */ jsx(
|
|
753
|
-
|
|
752
|
+
E,
|
|
754
753
|
{
|
|
755
754
|
variant: "omega",
|
|
756
755
|
textColor: "neutral600",
|
|
@@ -758,9 +757,9 @@ function SettingsPage() {
|
|
|
758
757
|
children: "Configure passwordless authentication via email magic links"
|
|
759
758
|
}
|
|
760
759
|
),
|
|
761
|
-
/* @__PURE__ */ jsx(
|
|
760
|
+
/* @__PURE__ */ jsx(R, { marginBottom: 3, children: /* @__PURE__ */ jsxs(T, { alignItems: "center", gap: 2, children: [
|
|
762
761
|
/* @__PURE__ */ jsx(
|
|
763
|
-
|
|
762
|
+
D1,
|
|
764
763
|
{
|
|
765
764
|
name: "enableMagicLink",
|
|
766
765
|
label: "Enable Magic Link Authentication",
|
|
@@ -770,7 +769,7 @@ function SettingsPage() {
|
|
|
770
769
|
}
|
|
771
770
|
),
|
|
772
771
|
/* @__PURE__ */ jsx(
|
|
773
|
-
|
|
772
|
+
E,
|
|
774
773
|
{
|
|
775
774
|
variant: "pi",
|
|
776
775
|
fontWeight: "bold",
|
|
@@ -780,9 +779,9 @@ function SettingsPage() {
|
|
|
780
779
|
)
|
|
781
780
|
] }) }),
|
|
782
781
|
enableMagicLink && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
783
|
-
/* @__PURE__ */ jsxs(
|
|
782
|
+
/* @__PURE__ */ jsxs(R, { marginBottom: 3, children: [
|
|
784
783
|
/* @__PURE__ */ jsx(
|
|
785
|
-
|
|
784
|
+
E,
|
|
786
785
|
{
|
|
787
786
|
variant: "omega",
|
|
788
787
|
fontWeight: "bold",
|
|
@@ -791,7 +790,7 @@ function SettingsPage() {
|
|
|
791
790
|
}
|
|
792
791
|
),
|
|
793
792
|
/* @__PURE__ */ jsx(
|
|
794
|
-
|
|
793
|
+
G0,
|
|
795
794
|
{
|
|
796
795
|
name: "magicLinkUrl",
|
|
797
796
|
value: magicLinkUrl,
|
|
@@ -802,9 +801,9 @@ function SettingsPage() {
|
|
|
802
801
|
}
|
|
803
802
|
)
|
|
804
803
|
] }),
|
|
805
|
-
/* @__PURE__ */ jsxs(
|
|
804
|
+
/* @__PURE__ */ jsxs(R, { marginBottom: 3, children: [
|
|
806
805
|
/* @__PURE__ */ jsx(
|
|
807
|
-
|
|
806
|
+
E,
|
|
808
807
|
{
|
|
809
808
|
variant: "omega",
|
|
810
809
|
fontWeight: "bold",
|
|
@@ -813,7 +812,7 @@ function SettingsPage() {
|
|
|
813
812
|
}
|
|
814
813
|
),
|
|
815
814
|
/* @__PURE__ */ jsx(
|
|
816
|
-
|
|
815
|
+
G0,
|
|
817
816
|
{
|
|
818
817
|
name: "magicLinkEmailSubject",
|
|
819
818
|
value: magicLinkEmailSubject,
|
|
@@ -823,9 +822,9 @@ function SettingsPage() {
|
|
|
823
822
|
}
|
|
824
823
|
)
|
|
825
824
|
] }),
|
|
826
|
-
/* @__PURE__ */ jsxs(
|
|
825
|
+
/* @__PURE__ */ jsxs(R, { marginBottom: 3, children: [
|
|
827
826
|
/* @__PURE__ */ jsx(
|
|
828
|
-
|
|
827
|
+
E,
|
|
829
828
|
{
|
|
830
829
|
variant: "omega",
|
|
831
830
|
fontWeight: "bold",
|
|
@@ -834,7 +833,7 @@ function SettingsPage() {
|
|
|
834
833
|
}
|
|
835
834
|
),
|
|
836
835
|
/* @__PURE__ */ jsx(
|
|
837
|
-
|
|
836
|
+
i1,
|
|
838
837
|
{
|
|
839
838
|
name: "magicLinkExpiryHours",
|
|
840
839
|
value: magicLinkExpiryHours,
|
|
@@ -845,9 +844,9 @@ function SettingsPage() {
|
|
|
845
844
|
}
|
|
846
845
|
)
|
|
847
846
|
] }),
|
|
848
|
-
/* @__PURE__ */ jsxs(
|
|
847
|
+
/* @__PURE__ */ jsxs(R, { marginTop: 4, padding: 3, background: "primary100", borderRadius: "4px", children: [
|
|
849
848
|
/* @__PURE__ */ jsx(
|
|
850
|
-
|
|
849
|
+
E,
|
|
851
850
|
{
|
|
852
851
|
variant: "omega",
|
|
853
852
|
fontWeight: "bold",
|
|
@@ -855,32 +854,32 @@ function SettingsPage() {
|
|
|
855
854
|
children: "Setup Requirements:"
|
|
856
855
|
}
|
|
857
856
|
),
|
|
858
|
-
/* @__PURE__ */ jsxs(
|
|
859
|
-
/* @__PURE__ */ jsxs(
|
|
857
|
+
/* @__PURE__ */ jsxs(R, { marginLeft: 2, children: [
|
|
858
|
+
/* @__PURE__ */ jsxs(E, { variant: "omega", style: { display: "block", marginBottom: "8px" }, children: [
|
|
860
859
|
"1. ",
|
|
861
860
|
/* @__PURE__ */ jsx("strong", { children: "Firebase Console:" }),
|
|
862
861
|
' Enable "Email link (passwordless sign-in)" in Authentication → Sign-in method'
|
|
863
862
|
] }),
|
|
864
|
-
/* @__PURE__ */ jsxs(
|
|
863
|
+
/* @__PURE__ */ jsxs(E, { variant: "omega", style: { display: "block", marginBottom: "8px" }, children: [
|
|
865
864
|
"2. ",
|
|
866
865
|
/* @__PURE__ */ jsx("strong", { children: "Authorized Domains:" }),
|
|
867
866
|
" Add your domain to Firebase authorized domains list"
|
|
868
867
|
] }),
|
|
869
|
-
/* @__PURE__ */ jsxs(
|
|
868
|
+
/* @__PURE__ */ jsxs(E, { variant: "omega", style: { display: "block", marginBottom: "8px" }, children: [
|
|
870
869
|
"3. ",
|
|
871
870
|
/* @__PURE__ */ jsx("strong", { children: "Verification Page:" }),
|
|
872
871
|
" Deploy the client-side verification handler at the URL above"
|
|
873
872
|
] }),
|
|
874
|
-
/* @__PURE__ */ jsxs(
|
|
873
|
+
/* @__PURE__ */ jsxs(E, { variant: "omega", style: { display: "block", marginBottom: "8px" }, children: [
|
|
875
874
|
"4. ",
|
|
876
875
|
/* @__PURE__ */ jsx("strong", { children: "Email Service:" }),
|
|
877
876
|
" Configure Strapi Email plugin or custom email hook"
|
|
878
877
|
] })
|
|
879
878
|
] })
|
|
880
879
|
] }),
|
|
881
|
-
/* @__PURE__ */ jsxs(
|
|
880
|
+
/* @__PURE__ */ jsxs(R, { marginTop: 3, padding: 3, background: "neutral100", borderRadius: "4px", children: [
|
|
882
881
|
/* @__PURE__ */ jsx(
|
|
883
|
-
|
|
882
|
+
E,
|
|
884
883
|
{
|
|
885
884
|
variant: "omega",
|
|
886
885
|
fontWeight: "bold",
|
|
@@ -888,34 +887,34 @@ function SettingsPage() {
|
|
|
888
887
|
children: "🧪 Testing:"
|
|
889
888
|
}
|
|
890
889
|
),
|
|
891
|
-
/* @__PURE__ */ jsxs(
|
|
890
|
+
/* @__PURE__ */ jsxs(E, { variant: "omega", style: { display: "block" }, children: [
|
|
892
891
|
"Test page available at:",
|
|
893
892
|
" ",
|
|
894
893
|
/* @__PURE__ */ jsx("a", { href: "/test-magic-link.html", target: "_blank", rel: "noreferrer", children: "/test-magic-link.html" })
|
|
895
894
|
] }),
|
|
896
|
-
/* @__PURE__ */ jsx(
|
|
895
|
+
/* @__PURE__ */ jsx(E, { variant: "omega", style: { display: "block", marginTop: "4px" }, children: "In development mode, magic links are logged to the server console." })
|
|
897
896
|
] })
|
|
898
897
|
] }),
|
|
899
898
|
/* @__PURE__ */ jsx(
|
|
900
|
-
|
|
899
|
+
T,
|
|
901
900
|
{
|
|
902
901
|
style: {
|
|
903
902
|
marginTop: 24,
|
|
904
903
|
width: "100%"
|
|
905
904
|
},
|
|
906
905
|
justifyContent: "flex-end",
|
|
907
|
-
children: /* @__PURE__ */ jsx(
|
|
906
|
+
children: /* @__PURE__ */ jsx(Nn, { size: "L", variant: "secondary", onClick: handleSaveMagicLinkSettings, disabled: loading, children: "Save Magic Link Settings" })
|
|
908
907
|
}
|
|
909
908
|
)
|
|
910
909
|
] })
|
|
911
910
|
] }) }),
|
|
912
|
-
/* @__PURE__ */ jsx(
|
|
913
|
-
/* @__PURE__ */ jsx(
|
|
914
|
-
/* @__PURE__ */ jsx(
|
|
915
|
-
/* @__PURE__ */ jsx(
|
|
916
|
-
/* @__PURE__ */ jsxs(
|
|
911
|
+
/* @__PURE__ */ jsx(t1.Root, { open: showEditModal, onOpenChange: (open) => !open && setShowEditModal(false), children: /* @__PURE__ */ jsxs(t1.Content, { children: [
|
|
912
|
+
/* @__PURE__ */ jsx(t1.Header, { children: /* @__PURE__ */ jsx(t1.Title, { children: "Add Firebase Web API Key" }) }),
|
|
913
|
+
/* @__PURE__ */ jsx(t1.Body, { children: /* @__PURE__ */ jsxs(R, { padding: 4, children: [
|
|
914
|
+
/* @__PURE__ */ jsx(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." }),
|
|
915
|
+
/* @__PURE__ */ jsxs(R, { marginTop: 3, children: [
|
|
917
916
|
/* @__PURE__ */ jsx(
|
|
918
|
-
|
|
917
|
+
E,
|
|
919
918
|
{
|
|
920
919
|
variant: "omega",
|
|
921
920
|
fontWeight: "bold",
|
|
@@ -924,7 +923,7 @@ function SettingsPage() {
|
|
|
924
923
|
}
|
|
925
924
|
),
|
|
926
925
|
/* @__PURE__ */ jsx(
|
|
927
|
-
|
|
926
|
+
G0,
|
|
928
927
|
{
|
|
929
928
|
name: "editWebApiKey",
|
|
930
929
|
value: editWebApiKey,
|
|
@@ -934,26 +933,26 @@ function SettingsPage() {
|
|
|
934
933
|
}
|
|
935
934
|
)
|
|
936
935
|
] }),
|
|
937
|
-
/* @__PURE__ */ jsxs(
|
|
938
|
-
/* @__PURE__ */ jsx(
|
|
936
|
+
/* @__PURE__ */ jsxs(R, { marginTop: 3, padding: 2, background: "primary100", borderRadius: "4px", children: [
|
|
937
|
+
/* @__PURE__ */ jsx(E, { variant: "omega", fontWeight: "bold", children: "📍 Where to find your Web API Key:" }),
|
|
939
938
|
/* @__PURE__ */ jsxs("ol", { style: { marginLeft: 20, marginTop: 8 }, children: [
|
|
940
|
-
/* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
|
|
939
|
+
/* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(E, { variant: "omega", children: [
|
|
941
940
|
"Go to",
|
|
942
941
|
" ",
|
|
943
942
|
/* @__PURE__ */ jsx("a", { href: "https://console.firebase.google.com", target: "_blank", rel: "noreferrer", children: "Firebase Console" })
|
|
944
943
|
] }) }),
|
|
945
|
-
/* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
|
|
946
|
-
/* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
|
|
944
|
+
/* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(E, { variant: "omega", children: "Select your project" }) }),
|
|
945
|
+
/* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(E, { variant: "omega", children: [
|
|
947
946
|
"Click the gear icon ⚙️ → ",
|
|
948
947
|
/* @__PURE__ */ jsx("strong", { children: "Project Settings" })
|
|
949
948
|
] }) }),
|
|
950
|
-
/* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
|
|
949
|
+
/* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(E, { variant: "omega", children: [
|
|
951
950
|
"In the ",
|
|
952
951
|
/* @__PURE__ */ jsx("strong", { children: "General" }),
|
|
953
952
|
" tab, scroll down to ",
|
|
954
953
|
/* @__PURE__ */ jsx("strong", { children: "Your apps" })
|
|
955
954
|
] }) }),
|
|
956
|
-
/* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
|
|
955
|
+
/* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(E, { variant: "omega", children: [
|
|
957
956
|
"Find ",
|
|
958
957
|
/* @__PURE__ */ jsx("strong", { children: "Web API Key" }),
|
|
959
958
|
" (looks like: AIzaSyB3Xd...)"
|
|
@@ -961,9 +960,9 @@ function SettingsPage() {
|
|
|
961
960
|
] })
|
|
962
961
|
] })
|
|
963
962
|
] }) }),
|
|
964
|
-
/* @__PURE__ */ jsx(
|
|
965
|
-
/* @__PURE__ */ jsx(
|
|
966
|
-
/* @__PURE__ */ jsx(
|
|
963
|
+
/* @__PURE__ */ jsx(t1.Footer, { children: /* @__PURE__ */ jsxs(T, { justifyContent: "flex-end", gap: 2, children: [
|
|
964
|
+
/* @__PURE__ */ jsx(Nn, { variant: "tertiary", onClick: () => setShowEditModal(false), children: "Cancel" }),
|
|
965
|
+
/* @__PURE__ */ jsx(Nn, { variant: "default", onClick: handleSaveEditConfiguration, children: "Add API Key" })
|
|
967
966
|
] }) })
|
|
968
967
|
] }) })
|
|
969
968
|
] });
|