From 877eb71fe220bc60914021bffcb87233ba362df7 Mon Sep 17 00:00:00 2001 From: arvind-rana Date: Fri, 29 May 2026 23:38:15 +0530 Subject: [PATCH 1/6] Integrated api --- apps/server/cmd/cors.go | 34 +++++ apps/server/cmd/cors_test.go | 35 +++++ apps/server/cmd/main.go | 10 +- apps/server/internal/modules/auth/service.go | 27 +++- .../modules/auth/signup_handler_test.go | 4 +- ...e03f61a6a-5350e2163aa458a7404594b6c378b4fa | Bin 0 -> 6051 bytes ...ignUpCard_0fd14506078501166bf1ad4b13990091 | 68 +++++++++ ...pCard_0fd14506078501166bf1ad4b13990091.map | 1 + ...ampletest_1d61cb64abc64c39e39a99b8cfb419e2 | 8 + ...etest_1d61cb64abc64c39e39a99b8cfb419e2.map | 1 + ...pCardtest_2ad92192295b373e1a37119360895eb4 | 50 +++++++ ...dtest_2ad92192295b373e1a37119360895eb4.map | 1 + .../44/Modal_446b9275c025c980fb20ed2337941038 | 24 +++ ...Modal_446b9275c025c980fb20ed2337941038.map | 1 + ...LoginCard_5a178c31e870e181d8ee5070337966ce | 61 ++++++++ ...nCard_5a178c31e870e181d8ee5070337966ce.map | 1 + .../apitest_d1d2fc1b55e2496c2e64752d47e1ee08 | 82 ++++++++++ ...itest_d1d2fc1b55e2496c2e64752d47e1ee08.map | 1 + .../f3/api_f3e486684b0343eb630d8d673420e918 | 141 ++++++++++++++++++ .../api_f3e486684b0343eb630d8d673420e918.map | 1 + ...nCardtest_ffc687240b1ce7e203e11c29e4587777 | 62 ++++++++ ...dtest_ffc687240b1ce7e203e11c29e4587777.map | 1 + ...9be3f11fc-da39a3ee5e6b4b0d3255bfef95601890 | 1 + apps/web/__tests__/example.test.tsx | 3 - apps/web/app/layout.tsx | 10 +- apps/web/components/HeroSection.tsx | 48 ++++-- apps/web/components/LandingPage.tsx | 25 ++-- apps/web/components/MenteeLoginCard.tsx | 33 ++-- apps/web/components/MenteeSignUpCard.tsx | 38 +++-- apps/web/components/Modal.tsx | 4 +- apps/web/components/RoleCard.tsx | 41 +++-- apps/web/components/ThemeToggle.tsx | 3 +- apps/web/jest.config.js | 22 +++ apps/web/jest.config.ts | 24 --- apps/web/next.config.ts | 3 + apps/web/services/api.ts | 8 +- 36 files changed, 747 insertions(+), 130 deletions(-) create mode 100644 apps/server/cmd/cors.go create mode 100644 apps/server/cmd/cors_test.go create mode 100644 apps/web/.jest-cache/haste-map-0e73593c623698a6feedabd9be3f11fc-9cf691ce44df75d8f1a0609e03f61a6a-5350e2163aa458a7404594b6c378b4fa create mode 100644 apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/0f/MenteeSignUpCard_0fd14506078501166bf1ad4b13990091 create mode 100644 apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/0f/MenteeSignUpCard_0fd14506078501166bf1ad4b13990091.map create mode 100644 apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/1d/exampletest_1d61cb64abc64c39e39a99b8cfb419e2 create mode 100644 apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/1d/exampletest_1d61cb64abc64c39e39a99b8cfb419e2.map create mode 100644 apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/2a/MenteeSignUpCardtest_2ad92192295b373e1a37119360895eb4 create mode 100644 apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/2a/MenteeSignUpCardtest_2ad92192295b373e1a37119360895eb4.map create mode 100644 apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/44/Modal_446b9275c025c980fb20ed2337941038 create mode 100644 apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/44/Modal_446b9275c025c980fb20ed2337941038.map create mode 100644 apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/5a/MenteeLoginCard_5a178c31e870e181d8ee5070337966ce create mode 100644 apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/5a/MenteeLoginCard_5a178c31e870e181d8ee5070337966ce.map create mode 100644 apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/d1/apitest_d1d2fc1b55e2496c2e64752d47e1ee08 create mode 100644 apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/d1/apitest_d1d2fc1b55e2496c2e64752d47e1ee08.map create mode 100644 apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/f3/api_f3e486684b0343eb630d8d673420e918 create mode 100644 apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/f3/api_f3e486684b0343eb630d8d673420e918.map create mode 100644 apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/ff/MenteeLoginCardtest_ffc687240b1ce7e203e11c29e4587777 create mode 100644 apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/ff/MenteeLoginCardtest_ffc687240b1ce7e203e11c29e4587777.map create mode 100644 apps/web/.jest-cache/perf-cache-0e73593c623698a6feedabd9be3f11fc-da39a3ee5e6b4b0d3255bfef95601890 create mode 100644 apps/web/jest.config.js delete mode 100644 apps/web/jest.config.ts diff --git a/apps/server/cmd/cors.go b/apps/server/cmd/cors.go new file mode 100644 index 0000000..de73e1c --- /dev/null +++ b/apps/server/cmd/cors.go @@ -0,0 +1,34 @@ +package main + +import ( + "net/http" + + "github.com/labstack/echo/v5" + echoMiddleware "github.com/labstack/echo/v5/middleware" +) + +func corsConfig(frontendOrigin string) echoMiddleware.CORSConfig { + return echoMiddleware.CORSConfig{ + AllowOrigins: []string{frontendOrigin}, + AllowMethods: []string{ + http.MethodGet, + http.MethodPost, + http.MethodPut, + http.MethodPatch, + http.MethodDelete, + }, + AllowHeaders: []string{ + "Origin", + "Content-Type", + "Accept", + "Authorization", + "X-Requested-With", + }, + ExposeHeaders: []string{"Content-Length", "Content-Type", "X-Request-Id"}, + AllowCredentials: true, + } +} + +func corsMiddleware(frontendOrigin string) echo.MiddlewareFunc { + return echoMiddleware.CORSWithConfig(corsConfig(frontendOrigin)) +} diff --git a/apps/server/cmd/cors_test.go b/apps/server/cmd/cors_test.go new file mode 100644 index 0000000..33098f4 --- /dev/null +++ b/apps/server/cmd/cors_test.go @@ -0,0 +1,35 @@ +package main + +import ( + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/labstack/echo/v5" + "github.com/stretchr/testify/require" +) + +func TestCORSMiddlewareAllowsWebClientHeaders(t *testing.T) { + e := echo.New() + e.Use(corsMiddleware("http://localhost:3000")) + e.POST("/api/v1/auth/login", func(c *echo.Context) error { + return c.NoContent(http.StatusOK) + }) + + req := httptest.NewRequest(http.MethodOptions, "/api/v1/auth/login", nil) + req.Header.Set("Origin", "http://localhost:3000") + req.Header.Set("Access-Control-Request-Method", http.MethodPost) + req.Header.Set("Access-Control-Request-Headers", "content-type,x-requested-with") + rec := httptest.NewRecorder() + + e.ServeHTTP(rec, req) + + require.Equal(t, http.StatusNoContent, rec.Code) + require.Equal(t, "http://localhost:3000", rec.Header().Get("Access-Control-Allow-Origin")) + require.Equal(t, "true", rec.Header().Get("Access-Control-Allow-Credentials")) + + allowedHeaders := strings.ToLower(rec.Header().Get("Access-Control-Allow-Headers")) + require.Contains(t, allowedHeaders, "content-type") + require.Contains(t, allowedHeaders, "x-requested-with") +} diff --git a/apps/server/cmd/main.go b/apps/server/cmd/main.go index cf73277..c950a12 100644 --- a/apps/server/cmd/main.go +++ b/apps/server/cmd/main.go @@ -1,7 +1,6 @@ package main import ( - "net/http" "time" "github.com/coderz-space/coderz.space/internal/common/logger" @@ -12,7 +11,6 @@ import ( "github.com/coderz-space/coderz.space/internal/routes" _ "github.com/coderz-space/coderz.space/swagger" // Import generated docs "github.com/labstack/echo/v5" - echoMiddleware "github.com/labstack/echo/v5/middleware" echoSwagger "github.com/swaggo/echo-swagger" "go.uber.org/zap" ) @@ -64,13 +62,7 @@ func main() { e := echo.New() // middleware - e.Use(echoMiddleware.CORSWithConfig(echoMiddleware.CORSConfig{ - AllowOrigins: []string{cfg.FrontendOrigin}, - AllowMethods: []string{http.MethodGet, http.MethodPost, http.MethodPut, http.MethodPatch, http.MethodDelete}, - AllowHeaders: []string{"Origin", "Content-Type", "Accept", "Authorization"}, - ExposeHeaders: []string{"Content-Length", "Content-Type", "X-Request-Id"}, - AllowCredentials: true, - })) + e.Use(corsMiddleware(cfg.FrontendOrigin)) e.Use(middleware.ZapLogger()) e.Use(middleware.Recovery()) e.Use(timeout.TimeoutMiddleware(30 * time.Second)) // 30 second timeout to prevent resource exhaustion diff --git a/apps/server/internal/modules/auth/service.go b/apps/server/internal/modules/auth/service.go index fc986f5..8cce451 100644 --- a/apps/server/internal/modules/auth/service.go +++ b/apps/server/internal/modules/auth/service.go @@ -6,21 +6,25 @@ import ( "encoding/hex" "errors" "fmt" + "strings" "time" + "github.com/coderz-space/coderz.space/internal/common/email" "github.com/coderz-space/coderz.space/internal/common/logger" "github.com/coderz-space/coderz.space/internal/common/utils" - "github.com/coderz-space/coderz.space/internal/common/email" "github.com/coderz-space/coderz.space/internal/config" db "github.com/coderz-space/coderz.space/internal/db/sqlc" + "github.com/jackc/pgx/v5/pgconn" "github.com/jackc/pgx/v5/pgtype" "go.uber.org/zap" "golang.org/x/crypto/bcrypt" ) +const errEmailAlreadyExists = "EMAIL_ALREADY_EXISTS" + type Service struct { - queries *db.Queries - config *config.Config + queries *db.Queries + config *config.Config emailService email.Service } @@ -46,12 +50,27 @@ func (s *Service) Signup(ctx context.Context, req SignupRequest) (*AuthResponseD Role: db.UserRoleUser, }) if err != nil { - return nil, err + return nil, normalizeSignupError(err) } return s.generateAuthData(ctx, &user) } +func normalizeSignupError(err error) error { + var pgErr *pgconn.PgError + if errors.As(err, &pgErr) && pgErr.Code == "23505" && pgErr.ConstraintName == "users_email_key" { + return errors.New(errEmailAlreadyExists) + } + + errMsg := err.Error() + if strings.Contains(errMsg, "users_email_key") || + strings.Contains(errMsg, "duplicate key value violates unique constraint") { + return errors.New(errEmailAlreadyExists) + } + + return err +} + func (s *Service) Login(ctx context.Context, req LoginRequest) (*AuthResponseData, error) { user, err := s.queries.GetUserByEmail(ctx, pgtype.Text{String: req.Email, Valid: true}) if err != nil { diff --git a/apps/server/internal/modules/auth/signup_handler_test.go b/apps/server/internal/modules/auth/signup_handler_test.go index 23d73cc..3bb3b9f 100644 --- a/apps/server/internal/modules/auth/signup_handler_test.go +++ b/apps/server/internal/modules/auth/signup_handler_test.go @@ -108,8 +108,8 @@ func TestHandler_Signup(t *testing.T) { checkResponse: func(t *testing.T, rec *httptest.ResponseRecorder) { var resp map[string]interface{} json.Unmarshal(rec.Body.Bytes(), &resp) - if resp["message"] != "duplicate key value violates unique constraint" { - t.Errorf("Expected database error message, got %v", resp["message"]) + if resp["message"] != "EMAIL_ALREADY_EXISTS" { + t.Errorf("Expected EMAIL_ALREADY_EXISTS, got %v", resp["message"]) } }, }, diff --git a/apps/web/.jest-cache/haste-map-0e73593c623698a6feedabd9be3f11fc-9cf691ce44df75d8f1a0609e03f61a6a-5350e2163aa458a7404594b6c378b4fa b/apps/web/.jest-cache/haste-map-0e73593c623698a6feedabd9be3f11fc-9cf691ce44df75d8f1a0609e03f61a6a-5350e2163aa458a7404594b6c378b4fa new file mode 100644 index 0000000000000000000000000000000000000000..e3444a05edaecfc8796678ca9dd1319664e86f44 GIT binary patch literal 6051 zcmcgwNpBoQ6fT>@Ajo1nfrKc_Fj!!s%#0O4M9zVB7L-V1%V0YK%|v#&yWH-$r@QIy z8D@wCqe$U~Fc6j?KmkPp1tiQO0U`$rqAXnC2XHXrick(*I6+nQQm<=zYzGp2nO^F> z_r34E_f@(7-e_mLRMS@Hy#0eHd#6@)Ohd&!;kRpN43l1Edx&QmmY-K`YsS#?l@s1j zR~C(+g{!A$erp^ULF{kf1?6aGb|hF@2$rJYE*IS8EK>LB8<*ssBh$H>;bYTFTjDny z;;F9T_yc{YE4$$Y@#5f7Y~_zH7UI~=Q!F;(tJkwAIbzlFTHX(V&Uai8i@P1Rct^gF z=Xf+yEAW5?*RImUxmggGy^oTPTwO2SEnF=U5x2*|>KxWdj9=N1qeQ=`}!Z^JNjJ*Refc^}GmKT#jyNp*$lj*85&qIst1D zE?zn<7H?DSiep>E^1bpA;@V?G^$pviT-Jkxnwh^oixNWHKVp`*D*=U^Ht3*;EzPj> zQOXN&un9P5o@EYR>Tn5GeWcL#h@uxj^yG`DY?Bk+qRsKldnH_2FV!xOk)U?@vY^Rz*Hkx2#)fd4MbWL#lOXwEs)n0B$-D1@2GkE=9( zj?^e@G9kY7MAtWws4Vye_ zUrSU$qQr)hVBznbIj~*J0*m-){s8#szsNB4N3E8ixLy96VHn1WsJ?O- z^zrB`%=cREo8#L845Nk>w(|qP_M2Ck?Y3};+982+H9ku!WZc$u6U^1pG2nCi`x2fF z*m24xZcvdEFc$6rCcn%xlfArA0{Nw#shjpRmFYYcoFp&+f#d{N8_2{Su`~ll41rzwJ|GYp_GWnz%XFjmd~Eq%4D=k7 z)jzqc2BG^?9TY`J6b-mpHKCu(1(Cu7seXbjY0S{bG-j2Gc7Nz)>xayX!WDy_5a-a! zn@m*8mVTs%#AxR)3p$2W)vj9pXwb%oHN)p^6M}I7nC8iA3`|d;?s;|s4T$8!z9-fD zXmy$%cY{pB5F*og;2iz*HFJKK>^76?wuQ7r36Fhn^GMspM3>E=?dAk&vdTM9hr1gr z{LX|9$EJl4I_GRhs`I48{|sGEF}*_SP74uKM?NYb3t?142GZ%TPk(Ltg!|5=`mSKl zr>7zxdvhl3U1>X6fU(Z=iG6UzvrRw_kNN1TVm@1C=Qr9shp><1AzXy9Pl5SQPXv1& zJ!-Z~BvFq`Z&K1$#o3-z{Pdw~*GP^fN{B=mg0MG#$11-&I{t{(Eex}R4LoH5*7{SU zRvNibjHQT)hWM24)1{P%qT|vg96|xR6MP&-=Y`!JK_moBL5ZEPEnFeTTaG;gm%+hg zo)1J{n}HbSw8F87327HCIU!Rpmcsw{+$hN;PvW5{iR35?HJ6BMkX*ny$M#q%HhEf0-Yg;hQSG>dG%>elzULY-;!=&kNTsTPs3t6@7YHd-N$7_H z-h>6J&HROqio?QQy;qkK3Or96ry4L4+jQ;cPD!5D?8$uwHV377k@Y?ka ztCC54qDlN^UTrBHyw* zFsS5)pr)L)TH6smf!Gg4rB8@s`e>Jeov>XZ3QVMUo+g6STcJjeN08ffg&6lzbmnN) z&TiPe6JIjgS9j(KNBh7^C{|nlB?#o|+y8U@N1`}?h7 k?9V1X@Y>l9eW){=_y~Novk!Hi>=>lqkt*RQ`IBq^0i7hcqyPW_ literal 0 HcmV?d00001 diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/0f/MenteeSignUpCard_0fd14506078501166bf1ad4b13990091 b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/0f/MenteeSignUpCard_0fd14506078501166bf1ad4b13990091 new file mode 100644 index 0000000..db2905b --- /dev/null +++ b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/0f/MenteeSignUpCard_0fd14506078501166bf1ad4b13990091 @@ -0,0 +1,68 @@ +741329473dc43cabf955601f36333043 +"use strict"; +"use client"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = MenteeSignUpCard; +const jsx_runtime_1 = require("react/jsx-runtime"); +const react_1 = require("react"); +const auth_1 = require("@/services/auth"); +const Modal_1 = __importDefault(require("@/components/Modal")); +function EyeIcon({ visible }) { + return visible ? ((0, jsx_runtime_1.jsxs)("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-5 w-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: [(0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M13.875 18.825A10.05 10.05 0 0112 19c-5 0-9-4-9-7s4-7 9-7a9.956 9.956 0 016.21 2.16M15 12a3 3 0 11-6 0 3 3 0 016 0zm6 0c0 3-4 7-9 7" }), (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 3l18 18" })] })) : ((0, jsx_runtime_1.jsxs)("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-5 w-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: [(0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" }), (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M2.458 12C3.732 7.943 7.523 5 12 5c4.477 0 8.268 2.943 9.542 7-1.274 4.057-5.065 7-9.542 7-4.477 0-8.268-2.943-9.542-7z" })] })); +} +const inputClass = "w-full rounded-lg border border-purple-200 bg-white px-4 py-2 text-gray-900 transition focus:outline-none focus:ring-2 focus:ring-purple-500 dark:border-purple-800 dark:bg-gray-800 dark:text-gray-100"; +function MenteeSignUpCard({ role, onClose, onBackToLogin }) { + const [firstName, setFirstName] = (0, react_1.useState)(""); + const [lastName, setLastName] = (0, react_1.useState)(""); + const [username, setUsername] = (0, react_1.useState)(""); + const [email, setEmail] = (0, react_1.useState)(""); + const [password, setPassword] = (0, react_1.useState)(""); + const [confirmPassword, setConfirmPassword] = (0, react_1.useState)(""); + const [showPassword, setShowPassword] = (0, react_1.useState)(false); + const [showConfirm, setShowConfirm] = (0, react_1.useState)(false); + const [submitted, setSubmitted] = (0, react_1.useState)(false); + const [error, setError] = (0, react_1.useState)(""); + const [loading, setLoading] = (0, react_1.useState)(false); + const handleSignUp = async (event) => { + event === null || event === void 0 ? void 0 : event.preventDefault(); + setError(""); + if (role !== "mentee") { + setError("Mentor accounts are provisioned separately."); + return; + } + if (!firstName.trim() || !username.trim() || !email.trim() || !password) { + setError("Please fill all required fields."); + return; + } + if (password.length < 8) { + setError("Password must be at least 8 characters."); + return; + } + if (password !== confirmPassword) { + setError("Passwords do not match."); + return; + } + setLoading(true); + try { + await (0, auth_1.registerMentee)({ + firstName: firstName.trim(), + lastName: lastName.trim(), + username: username.trim().toLowerCase(), + email: email.trim(), + password, + }); + setSubmitted(true); + } + catch (error) { + setError(error instanceof Error ? error.message : "Registration failed."); + } + finally { + setLoading(false); + } + }; + return ((0, jsx_runtime_1.jsx)(Modal_1.default, { onClose: onClose, className: "mx-4 w-full max-w-sm", children: (0, jsx_runtime_1.jsxs)("form", { onSubmit: handleSignUp, className: "flex max-h-[90vh] w-full flex-col gap-4 overflow-y-auto rounded-lg border border-purple-200 bg-white p-8 shadow-xl dark:border-purple-800 dark:bg-gray-900", children: [(0, jsx_runtime_1.jsx)("h2", { className: "text-center text-xl font-semibold text-purple-700 dark:text-purple-400", children: "Mentee Sign Up" }), (0, jsx_runtime_1.jsxs)("div", { className: "grid grid-cols-1 gap-2 sm:grid-cols-2", children: [(0, jsx_runtime_1.jsx)("input", { type: "text", placeholder: "First Name", value: firstName, onChange: (event) => setFirstName(event.target.value), className: inputClass, autoComplete: "given-name" }), (0, jsx_runtime_1.jsx)("input", { type: "text", placeholder: "Last Name", value: lastName, onChange: (event) => setLastName(event.target.value), className: inputClass, autoComplete: "family-name" })] }), (0, jsx_runtime_1.jsx)("input", { type: "text", placeholder: "Username", value: username, onChange: (event) => setUsername(event.target.value), className: inputClass, autoComplete: "username" }), (0, jsx_runtime_1.jsx)("input", { type: "email", placeholder: "Email", value: email, onChange: (event) => setEmail(event.target.value), className: inputClass, autoComplete: "email" }), (0, jsx_runtime_1.jsxs)("div", { className: "relative", children: [(0, jsx_runtime_1.jsx)("input", { type: showPassword ? "text" : "password", placeholder: "Set Password (min 8 chars)", value: password, onChange: (event) => setPassword(event.target.value), className: `${inputClass} pr-10`, autoComplete: "new-password" }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => setShowPassword((value) => !value), className: "absolute right-3 top-1/2 -translate-y-1/2 text-gray-500 hover:text-purple-600 dark:text-gray-400", "aria-label": showPassword ? "Hide password" : "Show password", children: (0, jsx_runtime_1.jsx)(EyeIcon, { visible: showPassword }) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "relative", children: [(0, jsx_runtime_1.jsx)("input", { type: showConfirm ? "text" : "password", placeholder: "Confirm Password", value: confirmPassword, onChange: (event) => setConfirmPassword(event.target.value), className: `${inputClass} pr-10`, autoComplete: "new-password" }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => setShowConfirm((value) => !value), className: "absolute right-3 top-1/2 -translate-y-1/2 text-gray-500 hover:text-purple-600 dark:text-gray-400", "aria-label": showConfirm ? "Hide confirm password" : "Show confirm password", children: (0, jsx_runtime_1.jsx)(EyeIcon, { visible: showConfirm }) })] }), error ? (0, jsx_runtime_1.jsx)("p", { className: "text-center text-sm text-red-500", children: error }) : null, submitted ? ((0, jsx_runtime_1.jsx)("p", { className: "text-center text-sm text-green-500", children: "Sign-up request submitted. A mentor will approve your account before you can log in." })) : null, (0, jsx_runtime_1.jsx)("button", { type: "submit", disabled: loading, className: "w-full rounded-lg bg-purple-600 py-2 font-semibold text-white transition hover:bg-purple-700 focus:outline-none focus:ring-2 focus:ring-purple-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:focus:ring-offset-gray-900", children: loading ? "Signing up..." : "Sign Up" }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: onBackToLogin, className: "text-center text-sm text-purple-600 hover:underline dark:text-purple-400", children: "Already have an account? Log In" })] }) })); +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJmaWxlIjoiQzpcXFVzZXJzXFxIUFxcRGVza3RvcFxcY29kZXJ6LnNwYWNlXFxhcHBzXFx3ZWJcXGNvbXBvbmVudHNcXE1lbnRlZVNpZ25VcENhcmQudHN4IiwibWFwcGluZ3MiOiI7QUFBQSxZQUFZLENBQUM7Ozs7O0FBNkJiLG1DQTJKQzs7QUF0TEQsaUNBQWlEO0FBQ2pELDBDQUFpRDtBQUNqRCwrREFBdUM7QUFRdkMsU0FBUyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQXdCO0lBQ2hELE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUNmLGlDQUFLLEtBQUssRUFBQyw0QkFBNEIsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsY0FBYyxhQUMvRyxpQ0FBTSxhQUFhLEVBQUMsT0FBTyxFQUFDLGNBQWMsRUFBQyxPQUFPLEVBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMscUlBQXFJLEdBQUcsRUFDN00saUNBQU0sYUFBYSxFQUFDLE9BQU8sRUFBQyxjQUFjLEVBQUMsT0FBTyxFQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFlBQVksR0FBRyxJQUNoRixDQUNQLENBQUMsQ0FBQyxDQUFDLENBQ0YsaUNBQUssS0FBSyxFQUFDLDRCQUE0QixFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxjQUFjLGFBQy9HLGlDQUFNLGFBQWEsRUFBQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE9BQU8sRUFBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBQyxrQ0FBa0MsR0FBRyxFQUMxRyxpQ0FBTSxhQUFhLEVBQUMsT0FBTyxFQUFDLGNBQWMsRUFBQyxPQUFPLEVBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMseUhBQXlILEdBQUcsSUFDN0wsQ0FDUCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFB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QUFFLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFDM0QsU0FBUyxFQUFFLEdBQUcsVUFBVSxRQUFRLEVBQ2hDLFlBQVksRUFBQyxjQUFjLEdBQzNCLEVBQ0YsbUNBQ0UsSUFBSSxFQUFDLFFBQVEsRUFDYixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUNoRCxTQUFTLEVBQUMsa0dBQWtHLGdCQUNoRyxXQUFXLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyx1QkFBdUIsWUFFM0UsdUJBQUMsT0FBTyxJQUFDLE9BQU8sRUFBRSxXQUFXLEdBQUksR0FDMUIsSUFDTCxFQUVMLEtBQUssQ0FBQyxDQUFDLENBQUMsOEJBQUcsU0FBUyxFQUFDLGtDQUFrQyxZQUFFLEtBQUssR0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQzFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FDWCw4QkFBRyxTQUFTLEVBQUMsb0NBQW9DLHFHQUU3QyxDQUNMLENBQUMsQ0FBQyxDQUFDLElBQUksRUFFUixtQ0FDRSxJQUFJLEVBQUMsUUFBUSxFQUNiLFFBQVEsRUFBRSxPQUFPLEVBQ2pCLFNBQVMsRUFBQyx3UEFBd1AsWUFFalEsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FDL0IsRUFFVCxtQ0FBUSxJQUFJLEVBQUMsUUFBUSxFQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFDLDBFQUEwRSxnREFFekgsSUFDSixHQUNELENBQ1QsQ0FBQztBQUNKLENBQUMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiQzpcXFVzZXJzXFxIUFxcRGVza3RvcFxcY29kZXJ6LnNwYWNlXFxhcHBzXFx3ZWJcXGNvbXBvbmVudHNcXE1lbnRlZVNpZ25VcENhcmQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xyXG5cclxuaW1wb3J0IHsgdXNlU3RhdGUsIHR5cGUgRm9ybUV2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyByZWdpc3Rlck1lbnRlZSB9IGZyb20gXCJAL3NlcnZpY2VzL2F1dGhcIjtcbmltcG9ydCBNb2RhbCBmcm9tIFwiQC9jb21wb25lbnRzL01vZGFsXCI7XG5cclxuaW50ZXJmYWNlIE1lbnRlZVNpZ25VcENhcmRQcm9wcyB7XHJcbiAgcm9sZTogXCJtZW50b3JcIiB8IFwibWVudGVlXCI7XHJcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcclxuICBvbkJhY2tUb0xvZ2luOiAoKSA9PiB2b2lkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBFeWVJY29uKHsgdmlzaWJsZSB9OiB7IHZpc2libGU6IGJvb2xlYW4gfSkge1xyXG4gIHJldHVybiB2aXNpYmxlID8gKFxyXG4gICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3NOYW1lPVwiaC01IHctNVwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiPlxyXG4gICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTMuODc1IDE4LjgyNUExMC4wNSAxMC4wNSAwIDAxMTIgMTljLTUgMC05LTQtOS03czQtNyA5LTdhOS45NTYgOS45NTYgMCAwMTYuMjEgMi4xNk0xNSAxMmEzIDMgMCAxMS02IDAgMyAzIDAgMDE2IDB6bTYgMGMwIDMtNCA3LTkgN1wiIC8+XHJcbiAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0zIDNsMTggMThcIiAvPlxyXG4gICAgPC9zdmc+XHJcbiAgKSA6IChcclxuICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzTmFtZT1cImgtNSB3LTVcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIj5cclxuICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTE1IDEyYTMgMyAwIDExLTYgMCAzIDMgMCAwMTYgMHpcIiAvPlxyXG4gICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMi40NTggMTJDMy43MzIgNy45NDMgNy41MjMgNSAxMiA1YzQuNDc3IDAgOC4yNjggMi45NDMgOS41NDIgNy0xLjI3NCA0LjA1Ny01LjA2NSA3LTkuNTQyIDctNC40NzcgMC04LjI2OC0yLjk0My05LjU0Mi03elwiIC8+XHJcbiAgICA8L3N2Zz5cclxuICApO1xyXG59XHJcblxyXG5jb25zdCBpbnB1dENsYXNzID1cbiAgXCJ3LWZ1bGwgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXB1cnBsZS0yMDAgYmctd2hpdGUgcHgtNCBweS0yIHRleHQtZ3JheS05MDAgdHJhbnNpdGlvbiBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctcHVycGxlLTUwMCBkYXJrOmJvcmRlci1wdXJwbGUtODAwIGRhcms6YmctZ3JheS04MDAgZGFyazp0ZXh0LWdyYXktMTAwXCI7XG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTWVudGVlU2lnblVwQ2FyZCh7IHJvbGUsIG9uQ2xvc2UsIG9uQmFja1RvTG9naW4gfTogTWVudGVlU2lnblVwQ2FyZFByb3BzKSB7XHJcbiAgY29uc3QgW2ZpcnN0TmFtZSwgc2V0Rmlyc3ROYW1lXSA9IHVzZVN0YXRlKFwiXCIpO1xyXG4gIGNvbnN0IFtsYXN0TmFtZSwgc2V0TGFzdE5hbWVdID0gdXNlU3RhdGUoXCJcIik7XHJcbiAgY29uc3QgW3VzZXJuYW1lLCBzZXRVc2VybmFtZV0gPSB1c2VTdGF0ZShcIlwiKTtcclxuICBjb25zdCBbZW1haWwsIHNldEVtYWlsXSA9IHVzZVN0YXRlKFwiXCIpO1xyXG4gIGNvbnN0IFtwYXNzd29yZCwgc2V0UGFzc3dvcmRdID0gdXNlU3RhdGUoXCJcIik7XHJcbiAgY29uc3QgW2NvbmZpcm1QYXNzd29yZCwgc2V0Q29uZmlybVBhc3N3b3JkXSA9IHVzZVN0YXRlKFwiXCIpO1xyXG4gIGNvbnN0IFtzaG93UGFzc3dvcmQsIHNldFNob3dQYXNzd29yZF0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgY29uc3QgW3Nob3dDb25maXJtLCBzZXRTaG93Q29uZmlybV0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgY29uc3QgW3N1Ym1pdHRlZCwgc2V0U3VibWl0dGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlKFwiXCIpO1xyXG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuXHJcbiAgY29uc3QgaGFuZGxlU2lnblVwID0gYXN5bmMgKGV2ZW50PzogRm9ybUV2ZW50PEhUTUxGb3JtRWxlbWVudD4pID0+IHtcbiAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcbiAgICBzZXRFcnJvcihcIlwiKTtcbiAgICBpZiAocm9sZSAhPT0gXCJtZW50ZWVcIikge1xuICAgICAgc2V0RXJyb3IoXCJNZW50b3IgYWNjb3VudHMgYXJlIHByb3Zpc2lvbmVkIHNlcGFyYXRlbHkuXCIpO1xuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZmlyc3ROYW1lLnRyaW0oKSB8fCAhdXNlcm5hbWUudHJpbSgpIHx8ICFlbWFpbC50cmltKCkgfHwgIXBhc3N3b3JkKSB7XHJcbiAgICAgIHNldEVycm9yKFwiUGxlYXNlIGZpbGwgYWxsIHJlcXVpcmVkIGZpZWxkcy5cIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChwYXNzd29yZC5sZW5ndGggPCA4KSB7XHJcbiAgICAgIHNldEVycm9yKFwiUGFzc3dvcmQgbXVzdCBiZSBhdCBsZWFzdCA4IGNoYXJhY3RlcnMuXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAocGFzc3dvcmQgIT09IGNvbmZpcm1QYXNzd29yZCkge1xyXG4gICAgICBzZXRFcnJvcihcIlBhc3N3b3JkcyBkbyBub3QgbWF0Y2guXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TG9hZGluZyh0cnVlKTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGF3YWl0IHJlZ2lzdGVyTWVudGVlKHtcclxuICAgICAgICBmaXJzdE5hbWU6IGZpcnN0TmFtZS50cmltKCksXHJcbiAgICAgICAgbGFzdE5hbWU6IGxhc3ROYW1lLnRyaW0oKSxcclxuICAgICAgICB1c2VybmFtZTogdXNlcm5hbWUudHJpbSgpLnRvTG93ZXJDYXNlKCksXHJcbiAgICAgICAgZW1haWw6IGVtYWlsLnRyaW0oKSxcclxuICAgICAgICBwYXNzd29yZCxcclxuICAgICAgfSk7XHJcbiAgICAgIHNldFN1Ym1pdHRlZCh0cnVlKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHNldEVycm9yKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJSZWdpc3RyYXRpb24gZmFpbGVkLlwiKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH07XHJcblxuICByZXR1cm4gKFxuICAgIDxNb2RhbCBvbkNsb3NlPXtvbkNsb3NlfSBjbGFzc05hbWU9XCJteC00IHctZnVsbCBtYXgtdy1zbVwiPlxuICAgICAgPGZvcm1cbiAgICAgICAgb25TdWJtaXQ9e2hhbmRsZVNpZ25VcH1cbiAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBtYXgtaC1bOTB2aF0gdy1mdWxsIGZsZXgtY29sIGdhcC00IG92ZXJmbG93LXktYXV0byByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItcHVycGxlLTIwMCBiZy13aGl0ZSBwLTggc2hhZG93LXhsIGRhcms6Ym9yZGVyLXB1cnBsZS04MDAgZGFyazpiZy1ncmF5LTkwMFwiXG4gICAgICA+XG4gICAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciB0ZXh0LXhsIGZvbnQtc2VtaWJvbGQgdGV4dC1wdXJwbGUtNzAwIGRhcms6dGV4dC1wdXJwbGUtNDAwXCI+TWVudGVlIFNpZ24gVXA8L2gyPlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMSBnYXAtMiBzbTpncmlkLWNvbHMtMlwiPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGaXJzdCBOYW1lXCJcbiAgICAgICAgICAgIHZhbHVlPXtmaXJzdE5hbWV9XG4gICAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PiBzZXRGaXJzdE5hbWUoZXZlbnQudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17aW5wdXRDbGFzc31cbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cImdpdmVuLW5hbWVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkxhc3QgTmFtZVwiXG4gICAgICAgICAgICB2YWx1ZT17bGFzdE5hbWV9XG4gICAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PiBzZXRMYXN0TmFtZShldmVudC50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtpbnB1dENsYXNzfVxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwiZmFtaWx5LW5hbWVcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuXHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlVzZXJuYW1lXCJcclxuICAgICAgICAgIHZhbHVlPXt1c2VybmFtZX1cbiAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PiBzZXRVc2VybmFtZShldmVudC50YXJnZXQudmFsdWUpfVxuICAgICAgICAgIGNsYXNzTmFtZT17aW5wdXRDbGFzc31cbiAgICAgICAgICBhdXRvQ29tcGxldGU9XCJ1c2VybmFtZVwiXG4gICAgICAgIC8+XG5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIHR5cGU9XCJlbWFpbFwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVtYWlsXCJcclxuICAgICAgICAgIHZhbHVlPXtlbWFpbH1cbiAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PiBzZXRFbWFpbChldmVudC50YXJnZXQudmFsdWUpfVxuICAgICAgICAgIGNsYXNzTmFtZT17aW5wdXRDbGFzc31cbiAgICAgICAgICBhdXRvQ29tcGxldGU9XCJlbWFpbFwiXG4gICAgICAgIC8+XG5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XHJcbiAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgdHlwZT17c2hvd1Bhc3N3b3JkID8gXCJ0ZXh0XCIgOiBcInBhc3N3b3JkXCJ9XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2V0IFBhc3N3b3JkIChtaW4gOCBjaGFycylcIlxyXG4gICAgICAgICAgICB2YWx1ZT17cGFzc3dvcmR9XG4gICAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PiBzZXRQYXNzd29yZChldmVudC50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtpbnB1dENsYXNzfSBwci0xMGB9XG4gICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJuZXctcGFzc3dvcmRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2hvd1Bhc3N3b3JkKCh2YWx1ZSkgPT4gIXZhbHVlKX1cclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgcmlnaHQtMyB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgdGV4dC1ncmF5LTUwMCBob3Zlcjp0ZXh0LXB1cnBsZS02MDAgZGFyazp0ZXh0LWdyYXktNDAwXCJcclxuICAgICAgICAgICAgYXJpYS1sYWJlbD17c2hvd1Bhc3N3b3JkID8gXCJIaWRlIHBhc3N3b3JkXCIgOiBcIlNob3cgcGFzc3dvcmRcIn1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPEV5ZUljb24gdmlzaWJsZT17c2hvd1Bhc3N3b3JkfSAvPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cclxuICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICB0eXBlPXtzaG93Q29uZmlybSA/IFwidGV4dFwiIDogXCJwYXNzd29yZFwifVxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkNvbmZpcm0gUGFzc3dvcmRcIlxyXG4gICAgICAgICAgICB2YWx1ZT17Y29uZmlybVBhc3N3b3JkfVxuICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT4gc2V0Q29uZmlybVBhc3N3b3JkKGV2ZW50LnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2Ake2lucHV0Q2xhc3N9IHByLTEwYH1cbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm5ldy1wYXNzd29yZFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93Q29uZmlybSgodmFsdWUpID0+ICF2YWx1ZSl9XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTMgdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIHRleHQtZ3JheS01MDAgaG92ZXI6dGV4dC1wdXJwbGUtNjAwIGRhcms6dGV4dC1ncmF5LTQwMFwiXHJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3Nob3dDb25maXJtID8gXCJIaWRlIGNvbmZpcm0gcGFzc3dvcmRcIiA6IFwiU2hvdyBjb25maXJtIHBhc3N3b3JkXCJ9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxFeWVJY29uIHZpc2libGU9e3Nob3dDb25maXJtfSAvPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIHtlcnJvciA/IDxwIGNsYXNzTmFtZT1cInRleHQtY2VudGVyIHRleHQtc20gdGV4dC1yZWQtNTAwXCI+e2Vycm9yfTwvcD4gOiBudWxsfVxyXG4gICAgICAgIHtzdWJtaXR0ZWQgPyAoXHJcbiAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciB0ZXh0LXNtIHRleHQtZ3JlZW4tNTAwXCI+XHJcbiAgICAgICAgICAgIFNpZ24tdXAgcmVxdWVzdCBzdWJtaXR0ZWQuIEEgbWVudG9yIHdpbGwgYXBwcm92ZSB5b3VyIGFjY291bnQgYmVmb3JlIHlvdSBjYW4gbG9nIGluLlxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgICkgOiBudWxsfVxyXG5cclxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgZGlzYWJsZWQ9e2xvYWRpbmd9XG4gICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHJvdW5kZWQtbGcgYmctcHVycGxlLTYwMCBweS0yIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZSB0cmFuc2l0aW9uIGhvdmVyOmJnLXB1cnBsZS03MDAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLXB1cnBsZS01MDAgZm9jdXM6cmluZy1vZmZzZXQtMiBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCBkYXJrOmZvY3VzOnJpbmctb2Zmc2V0LWdyYXktOTAwXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtsb2FkaW5nID8gXCJTaWduaW5nIHVwLi4uXCIgOiBcIlNpZ24gVXBcIn1cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17b25CYWNrVG9Mb2dpbn0gY2xhc3NOYW1lPVwidGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LXB1cnBsZS02MDAgaG92ZXI6dW5kZXJsaW5lIGRhcms6dGV4dC1wdXJwbGUtNDAwXCI+XG4gICAgICAgICAgQWxyZWFkeSBoYXZlIGFuIGFjY291bnQ/IExvZyBJblxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZm9ybT5cbiAgICA8L01vZGFsPlxuICApO1xufVxuIl0sInZlcnNpb24iOjN9 \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/0f/MenteeSignUpCard_0fd14506078501166bf1ad4b13990091.map b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/0f/MenteeSignUpCard_0fd14506078501166bf1ad4b13990091.map new file mode 100644 index 0000000..63708b9 --- /dev/null +++ b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/0f/MenteeSignUpCard_0fd14506078501166bf1ad4b13990091.map @@ -0,0 +1 @@ +{"file":"C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\components\\MenteeSignUpCard.tsx","mappings":"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","names":[],"sources":["C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\components\\MenteeSignUpCard.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { useState, type FormEvent } from \"react\";\nimport { registerMentee } from \"@/services/auth\";\nimport Modal from \"@/components/Modal\";\n\r\ninterface MenteeSignUpCardProps {\r\n role: \"mentor\" | \"mentee\";\r\n onClose: () => void;\r\n onBackToLogin: () => void;\r\n}\r\n\r\nfunction EyeIcon({ visible }: { visible: boolean }) {\r\n return visible ? (\r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst inputClass =\n \"w-full rounded-lg border border-purple-200 bg-white px-4 py-2 text-gray-900 transition focus:outline-none focus:ring-2 focus:ring-purple-500 dark:border-purple-800 dark:bg-gray-800 dark:text-gray-100\";\n\r\nexport default function MenteeSignUpCard({ role, onClose, onBackToLogin }: MenteeSignUpCardProps) {\r\n const [firstName, setFirstName] = useState(\"\");\r\n const [lastName, setLastName] = useState(\"\");\r\n const [username, setUsername] = useState(\"\");\r\n const [email, setEmail] = useState(\"\");\r\n const [password, setPassword] = useState(\"\");\r\n const [confirmPassword, setConfirmPassword] = useState(\"\");\r\n const [showPassword, setShowPassword] = useState(false);\r\n const [showConfirm, setShowConfirm] = useState(false);\r\n const [submitted, setSubmitted] = useState(false);\r\n const [error, setError] = useState(\"\");\r\n const [loading, setLoading] = useState(false);\r\n\r\n const handleSignUp = async (event?: FormEvent) => {\n event?.preventDefault();\n setError(\"\");\n if (role !== \"mentee\") {\n setError(\"Mentor accounts are provisioned separately.\");\n return;\r\n }\r\n\r\n if (!firstName.trim() || !username.trim() || !email.trim() || !password) {\r\n setError(\"Please fill all required fields.\");\r\n return;\r\n }\r\n if (password.length < 8) {\r\n setError(\"Password must be at least 8 characters.\");\r\n return;\r\n }\r\n if (password !== confirmPassword) {\r\n setError(\"Passwords do not match.\");\r\n return;\r\n }\r\n\r\n setLoading(true);\r\n try {\r\n await registerMentee({\r\n firstName: firstName.trim(),\r\n lastName: lastName.trim(),\r\n username: username.trim().toLowerCase(),\r\n email: email.trim(),\r\n password,\r\n });\r\n setSubmitted(true);\r\n } catch (error) {\r\n setError(error instanceof Error ? error.message : \"Registration failed.\");\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\n return (\n \n \n

Mentee Sign Up

\n\n
\n setFirstName(event.target.value)}\n className={inputClass}\n autoComplete=\"given-name\"\n />\n setLastName(event.target.value)}\n className={inputClass}\n autoComplete=\"family-name\"\n />\n
\n\r\n setUsername(event.target.value)}\n className={inputClass}\n autoComplete=\"username\"\n />\n\r\n setEmail(event.target.value)}\n className={inputClass}\n autoComplete=\"email\"\n />\n\r\n
\r\n setPassword(event.target.value)}\n className={`${inputClass} pr-10`}\n autoComplete=\"new-password\"\n />\n setShowPassword((value) => !value)}\r\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-gray-500 hover:text-purple-600 dark:text-gray-400\"\r\n aria-label={showPassword ? \"Hide password\" : \"Show password\"}\r\n >\r\n \r\n \r\n
\r\n\r\n
\r\n setConfirmPassword(event.target.value)}\n className={`${inputClass} pr-10`}\n autoComplete=\"new-password\"\n />\n setShowConfirm((value) => !value)}\r\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-gray-500 hover:text-purple-600 dark:text-gray-400\"\r\n aria-label={showConfirm ? \"Hide confirm password\" : \"Show confirm password\"}\r\n >\r\n \r\n \r\n
\r\n\r\n {error ?

{error}

: null}\r\n {submitted ? (\r\n

\r\n Sign-up request submitted. A mentor will approve your account before you can log in.\r\n

\r\n ) : null}\r\n\r\n \n {loading ? \"Signing up...\" : \"Sign Up\"}\n \n\n \n \n
\n );\n}\n"],"version":3} \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/1d/exampletest_1d61cb64abc64c39e39a99b8cfb419e2 b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/1d/exampletest_1d61cb64abc64c39e39a99b8cfb419e2 new file mode 100644 index 0000000..92fc03b --- /dev/null +++ b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/1d/exampletest_1d61cb64abc64c39e39a99b8cfb419e2 @@ -0,0 +1,8 @@ +66de64206eac242e33e814353d0e2be6 +"use strict"; +describe('Example test', () => { + it('should pass', () => { + expect(1 + 1).toBe(2); + }); +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJmaWxlIjoiQzpcXFVzZXJzXFxIUFxcRGVza3RvcFxcY29kZXJ6LnNwYWNlXFxhcHBzXFx3ZWJcXF9fdGVzdHNfX1xcZXhhbXBsZS50ZXN0LnRzeCIsIm1hcHBpbmdzIjoiO0FBQUEsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7SUFDNUIsRUFBRSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7UUFDckIsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyJDOlxcVXNlcnNcXEhQXFxEZXNrdG9wXFxjb2Rlcnouc3BhY2VcXGFwcHNcXHdlYlxcX190ZXN0c19fXFxleGFtcGxlLnRlc3QudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImRlc2NyaWJlKCdFeGFtcGxlIHRlc3QnLCAoKSA9PiB7XG4gIGl0KCdzaG91bGQgcGFzcycsICgpID0+IHtcbiAgICBleHBlY3QoMSArIDEpLnRvQmUoMik7XG4gIH0pO1xyXG59KTtcclxuIl0sInZlcnNpb24iOjN9 \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/1d/exampletest_1d61cb64abc64c39e39a99b8cfb419e2.map b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/1d/exampletest_1d61cb64abc64c39e39a99b8cfb419e2.map new file mode 100644 index 0000000..fae33d2 --- /dev/null +++ b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/1d/exampletest_1d61cb64abc64c39e39a99b8cfb419e2.map @@ -0,0 +1 @@ +{"file":"C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\__tests__\\example.test.tsx","mappings":";AAAA,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;QACrB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","names":[],"sources":["C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\__tests__\\example.test.tsx"],"sourcesContent":["describe('Example test', () => {\n it('should pass', () => {\n expect(1 + 1).toBe(2);\n });\r\n});\r\n"],"version":3} \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/2a/MenteeSignUpCardtest_2ad92192295b373e1a37119360895eb4 b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/2a/MenteeSignUpCardtest_2ad92192295b373e1a37119360895eb4 new file mode 100644 index 0000000..86b2551 --- /dev/null +++ b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/2a/MenteeSignUpCardtest_2ad92192295b373e1a37119360895eb4 @@ -0,0 +1,50 @@ +3fa57ddf52ada09d934dfe71c5bdcf30 +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const jsx_runtime_1 = require("react/jsx-runtime"); +jest.mock("@/services/auth", () => ({ + registerMentee: jest.fn(), +})); +const react_1 = require("@testing-library/react"); +const user_event_1 = __importDefault(require("@testing-library/user-event")); +const MenteeSignUpCard_1 = __importDefault(require("./MenteeSignUpCard")); +const auth_1 = require("@/services/auth"); +describe("MenteeSignUpCard", () => { + beforeEach(() => { + auth_1.registerMentee.mockReset(); + }); + it("shows the pending approval message after signup", async () => { + auth_1.registerMentee.mockResolvedValue({ + id: "request-1", + firstName: "Alice", + lastName: "Example", + username: "alice", + email: "alice@example.com", + signedUpAt: new Date().toISOString(), + status: "pending", + }); + const user = user_event_1.default.setup(); + (0, react_1.render)((0, jsx_runtime_1.jsx)(MenteeSignUpCard_1.default, { role: "mentee", onClose: jest.fn(), onBackToLogin: jest.fn() })); + await user.type(react_1.screen.getByPlaceholderText("First Name"), "Alice"); + await user.type(react_1.screen.getByPlaceholderText("Last Name"), "Example"); + await user.type(react_1.screen.getByPlaceholderText("Username"), "alice"); + await user.type(react_1.screen.getByPlaceholderText("Email"), "alice@example.com"); + await user.type(react_1.screen.getByPlaceholderText("Set Password (min 8 chars)"), "password123"); + await user.type(react_1.screen.getByPlaceholderText("Confirm Password"), "password123"); + await user.click(react_1.screen.getByRole("button", { name: "Sign Up" })); + await (0, react_1.waitFor)(() => { + expect(auth_1.registerMentee).toHaveBeenCalledWith({ + firstName: "Alice", + lastName: "Example", + username: "alice", + email: "alice@example.com", + password: "password123", + }); + }); + expect(react_1.screen.getByText("Sign-up request submitted. A mentor will approve your account before you can log in.")).toBeInTheDocument(); + }); +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJmaWxlIjoiQzpcXFVzZXJzXFxIUFxcRGVza3RvcFxcY29kZXJ6LnNwYWNlXFxhcHBzXFx3ZWJcXGNvbXBvbmVudHNcXE1lbnRlZVNpZ25VcENhcmQudGVzdC50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBS0EsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLGNBQWMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO0NBQzFCLENBQUMsQ0FBQyxDQUFDO0FBUEosa0RBQWlFO0FBQ2pFLDZFQUFvRDtBQUNwRCwwRUFBa0Q7QUFDbEQsMENBQWlEO0FBTWpELFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUU7SUFDaEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNiLHFCQUE0QixDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzVDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGlEQUFpRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzlELHFCQUE0QixDQUFDLGlCQUFpQixDQUFDO1lBQzlDLEVBQUUsRUFBRSxXQUFXO1lBQ2YsU0FBUyxFQUFFLE9BQU87WUFDbEIsUUFBUSxFQUFFLFNBQVM7WUFDbkIsUUFBUSxFQUFFLE9BQU87WUFDakIsS0FBSyxFQUFFLG1CQUFtQjtZQUMxQixVQUFVLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDcEMsTUFBTSxFQUFFLFNBQVM7U0FDbEIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxJQUFJLEdBQUcsb0JBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixJQUFBLGNBQU0sRUFBQyx1QkFBQywwQkFBZ0IsSUFBQyxJQUFJLEVBQUMsUUFBUSxFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBSSxDQUFDLENBQUM7UUFFekYsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQU0sQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwRSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBTSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFNLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEUsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQU0sQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFNLENBQUMsb0JBQW9CLENBQUMsNEJBQTRCLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMxRixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBTSxDQUFDLG9CQUFvQixDQUFDLGtCQUFrQixDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDaEYsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVsRSxNQUFNLElBQUEsZUFBTyxFQUFDLEdBQUcsRUFBRTtZQUNqQixNQUFNLENBQUMscUJBQWMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDO2dCQUMxQyxTQUFTLEVBQUUsT0FBTztnQkFDbEIsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixLQUFLLEVBQUUsbUJBQW1CO2dCQUMxQixRQUFRLEVBQUUsYUFBYTthQUN4QixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FDSixjQUFNLENBQUMsU0FBUyxDQUFDLHNGQUFzRixDQUFDLENBQ3pHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUN4QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIkM6XFxVc2Vyc1xcSFBcXERlc2t0b3BcXGNvZGVyei5zcGFjZVxcYXBwc1xcd2ViXFxjb21wb25lbnRzXFxNZW50ZWVTaWduVXBDYXJkLnRlc3QudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciwgc2NyZWVuLCB3YWl0Rm9yIH0gZnJvbSBcIkB0ZXN0aW5nLWxpYnJhcnkvcmVhY3RcIjtcclxuaW1wb3J0IHVzZXJFdmVudCBmcm9tIFwiQHRlc3RpbmctbGlicmFyeS91c2VyLWV2ZW50XCI7XHJcbmltcG9ydCBNZW50ZWVTaWduVXBDYXJkIGZyb20gXCIuL01lbnRlZVNpZ25VcENhcmRcIjtcclxuaW1wb3J0IHsgcmVnaXN0ZXJNZW50ZWUgfSBmcm9tIFwiQC9zZXJ2aWNlcy9hdXRoXCI7XHJcblxyXG5qZXN0Lm1vY2soXCJAL3NlcnZpY2VzL2F1dGhcIiwgKCkgPT4gKHtcclxuICByZWdpc3Rlck1lbnRlZTogamVzdC5mbigpLFxyXG59KSk7XHJcblxyXG5kZXNjcmliZShcIk1lbnRlZVNpZ25VcENhcmRcIiwgKCkgPT4ge1xyXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xyXG4gICAgKHJlZ2lzdGVyTWVudGVlIGFzIGplc3QuTW9jaykubW9ja1Jlc2V0KCk7XHJcbiAgfSk7XHJcblxyXG4gIGl0KFwic2hvd3MgdGhlIHBlbmRpbmcgYXBwcm92YWwgbWVzc2FnZSBhZnRlciBzaWdudXBcIiwgYXN5bmMgKCkgPT4ge1xyXG4gICAgKHJlZ2lzdGVyTWVudGVlIGFzIGplc3QuTW9jaykubW9ja1Jlc29sdmVkVmFsdWUoe1xyXG4gICAgICBpZDogXCJyZXF1ZXN0LTFcIixcclxuICAgICAgZmlyc3ROYW1lOiBcIkFsaWNlXCIsXHJcbiAgICAgIGxhc3ROYW1lOiBcIkV4YW1wbGVcIixcclxuICAgICAgdXNlcm5hbWU6IFwiYWxpY2VcIixcclxuICAgICAgZW1haWw6IFwiYWxpY2VAZXhhbXBsZS5jb21cIixcclxuICAgICAgc2lnbmVkVXBBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxyXG4gICAgICBzdGF0dXM6IFwicGVuZGluZ1wiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xyXG4gICAgcmVuZGVyKDxNZW50ZWVTaWduVXBDYXJkIHJvbGU9XCJtZW50ZWVcIiBvbkNsb3NlPXtqZXN0LmZuKCl9IG9uQmFja1RvTG9naW49e2plc3QuZm4oKX0gLz4pO1xyXG5cclxuICAgIGF3YWl0IHVzZXIudHlwZShzY3JlZW4uZ2V0QnlQbGFjZWhvbGRlclRleHQoXCJGaXJzdCBOYW1lXCIpLCBcIkFsaWNlXCIpO1xyXG4gICAgYXdhaXQgdXNlci50eXBlKHNjcmVlbi5nZXRCeVBsYWNlaG9sZGVyVGV4dChcIkxhc3QgTmFtZVwiKSwgXCJFeGFtcGxlXCIpO1xyXG4gICAgYXdhaXQgdXNlci50eXBlKHNjcmVlbi5nZXRCeVBsYWNlaG9sZGVyVGV4dChcIlVzZXJuYW1lXCIpLCBcImFsaWNlXCIpO1xyXG4gICAgYXdhaXQgdXNlci50eXBlKHNjcmVlbi5nZXRCeVBsYWNlaG9sZGVyVGV4dChcIkVtYWlsXCIpLCBcImFsaWNlQGV4YW1wbGUuY29tXCIpO1xyXG4gICAgYXdhaXQgdXNlci50eXBlKHNjcmVlbi5nZXRCeVBsYWNlaG9sZGVyVGV4dChcIlNldCBQYXNzd29yZCAobWluIDggY2hhcnMpXCIpLCBcInBhc3N3b3JkMTIzXCIpO1xyXG4gICAgYXdhaXQgdXNlci50eXBlKHNjcmVlbi5nZXRCeVBsYWNlaG9sZGVyVGV4dChcIkNvbmZpcm0gUGFzc3dvcmRcIiksIFwicGFzc3dvcmQxMjNcIik7XHJcbiAgICBhd2FpdCB1c2VyLmNsaWNrKHNjcmVlbi5nZXRCeVJvbGUoXCJidXR0b25cIiwgeyBuYW1lOiBcIlNpZ24gVXBcIiB9KSk7XHJcblxyXG4gICAgYXdhaXQgd2FpdEZvcigoKSA9PiB7XHJcbiAgICAgIGV4cGVjdChyZWdpc3Rlck1lbnRlZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xyXG4gICAgICAgIGZpcnN0TmFtZTogXCJBbGljZVwiLFxyXG4gICAgICAgIGxhc3ROYW1lOiBcIkV4YW1wbGVcIixcclxuICAgICAgICB1c2VybmFtZTogXCJhbGljZVwiLFxyXG4gICAgICAgIGVtYWlsOiBcImFsaWNlQGV4YW1wbGUuY29tXCIsXHJcbiAgICAgICAgcGFzc3dvcmQ6IFwicGFzc3dvcmQxMjNcIixcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBleHBlY3QoXHJcbiAgICAgIHNjcmVlbi5nZXRCeVRleHQoXCJTaWduLXVwIHJlcXVlc3Qgc3VibWl0dGVkLiBBIG1lbnRvciB3aWxsIGFwcHJvdmUgeW91ciBhY2NvdW50IGJlZm9yZSB5b3UgY2FuIGxvZyBpbi5cIilcclxuICAgICkudG9CZUluVGhlRG9jdW1lbnQoKTtcclxuICB9KTtcclxufSk7XHJcbiJdLCJ2ZXJzaW9uIjozfQ== \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/2a/MenteeSignUpCardtest_2ad92192295b373e1a37119360895eb4.map b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/2a/MenteeSignUpCardtest_2ad92192295b373e1a37119360895eb4.map new file mode 100644 index 0000000..c6af195 --- /dev/null +++ b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/2a/MenteeSignUpCardtest_2ad92192295b373e1a37119360895eb4.map @@ -0,0 +1 @@ +{"file":"C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\components\\MenteeSignUpCard.test.tsx","mappings":";;;;;;AAKA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;CAC1B,CAAC,CAAC,CAAC;AAPJ,kDAAiE;AACjE,6EAAoD;AACpD,0EAAkD;AAClD,0CAAiD;AAMjD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,UAAU,CAAC,GAAG,EAAE;QACb,qBAA4B,CAAC,SAAS,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC9D,qBAA4B,CAAC,iBAAiB,CAAC;YAC9C,EAAE,EAAE,WAAW;YACf,SAAS,EAAE,OAAO;YAClB,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,mBAAmB;YAC1B,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,oBAAS,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAA,cAAM,EAAC,uBAAC,0BAAgB,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE,GAAI,CAAC,CAAC;QAEzF,MAAM,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC,oBAAoB,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;QACpE,MAAM,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,CAAC;QACrE,MAAM,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;QAClE,MAAM,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC;QAC3E,MAAM,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC,oBAAoB,CAAC,4BAA4B,CAAC,EAAE,aAAa,CAAC,CAAC;QAC1F,MAAM,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,EAAE,aAAa,CAAC,CAAC;QAChF,MAAM,IAAI,CAAC,KAAK,CAAC,cAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAElE,MAAM,IAAA,eAAO,EAAC,GAAG,EAAE;YACjB,MAAM,CAAC,qBAAc,CAAC,CAAC,oBAAoB,CAAC;gBAC1C,SAAS,EAAE,OAAO;gBAClB,QAAQ,EAAE,SAAS;gBACnB,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,mBAAmB;gBAC1B,QAAQ,EAAE,aAAa;aACxB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,CACJ,cAAM,CAAC,SAAS,CAAC,sFAAsF,CAAC,CACzG,CAAC,iBAAiB,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","names":[],"sources":["C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\components\\MenteeSignUpCard.test.tsx"],"sourcesContent":["import { render, screen, waitFor } from \"@testing-library/react\";\r\nimport userEvent from \"@testing-library/user-event\";\r\nimport MenteeSignUpCard from \"./MenteeSignUpCard\";\r\nimport { registerMentee } from \"@/services/auth\";\r\n\r\njest.mock(\"@/services/auth\", () => ({\r\n registerMentee: jest.fn(),\r\n}));\r\n\r\ndescribe(\"MenteeSignUpCard\", () => {\r\n beforeEach(() => {\r\n (registerMentee as jest.Mock).mockReset();\r\n });\r\n\r\n it(\"shows the pending approval message after signup\", async () => {\r\n (registerMentee as jest.Mock).mockResolvedValue({\r\n id: \"request-1\",\r\n firstName: \"Alice\",\r\n lastName: \"Example\",\r\n username: \"alice\",\r\n email: \"alice@example.com\",\r\n signedUpAt: new Date().toISOString(),\r\n status: \"pending\",\r\n });\r\n\r\n const user = userEvent.setup();\r\n render();\r\n\r\n await user.type(screen.getByPlaceholderText(\"First Name\"), \"Alice\");\r\n await user.type(screen.getByPlaceholderText(\"Last Name\"), \"Example\");\r\n await user.type(screen.getByPlaceholderText(\"Username\"), \"alice\");\r\n await user.type(screen.getByPlaceholderText(\"Email\"), \"alice@example.com\");\r\n await user.type(screen.getByPlaceholderText(\"Set Password (min 8 chars)\"), \"password123\");\r\n await user.type(screen.getByPlaceholderText(\"Confirm Password\"), \"password123\");\r\n await user.click(screen.getByRole(\"button\", { name: \"Sign Up\" }));\r\n\r\n await waitFor(() => {\r\n expect(registerMentee).toHaveBeenCalledWith({\r\n firstName: \"Alice\",\r\n lastName: \"Example\",\r\n username: \"alice\",\r\n email: \"alice@example.com\",\r\n password: \"password123\",\r\n });\r\n });\r\n\r\n expect(\r\n screen.getByText(\"Sign-up request submitted. A mentor will approve your account before you can log in.\")\r\n ).toBeInTheDocument();\r\n });\r\n});\r\n"],"version":3} \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/44/Modal_446b9275c025c980fb20ed2337941038 b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/44/Modal_446b9275c025c980fb20ed2337941038 new file mode 100644 index 0000000..79d7d15 --- /dev/null +++ b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/44/Modal_446b9275c025c980fb20ed2337941038 @@ -0,0 +1,24 @@ +4758f36b70b62ece33a55708e0fb5512 +"use strict"; +"use client"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = Modal; +const jsx_runtime_1 = require("react/jsx-runtime"); +const react_1 = require("react"); +function Modal({ onClose, children, className = "" }) { + const innerRef = (0, react_1.useRef)(null); + (0, react_1.useEffect)(() => { + function handleKey(e) { + if (e.key === "Escape") + onClose(); + } + document.addEventListener("keydown", handleKey); + return () => document.removeEventListener("keydown", handleKey); + }, [onClose]); + return ((0, jsx_runtime_1.jsx)("div", { role: "dialog", "aria-modal": "true", className: "fixed inset-0 z-50 flex items-center justify-center bg-black/60 p-4 backdrop-blur-sm", onMouseDown: (e) => { + if (innerRef.current && !innerRef.current.contains(e.target)) { + onClose(); + } + }, children: (0, jsx_runtime_1.jsx)("div", { ref: innerRef, className: className, children: children }) })); +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJmaWxlIjoiQzpcXFVzZXJzXFxIUFxcRGVza3RvcFxcY29kZXJ6LnNwYWNlXFxhcHBzXFx3ZWJcXGNvbXBvbmVudHNcXE1vZGFsLnRzeCIsIm1hcHBpbmdzIjoiO0FBQUEsWUFBWSxDQUFDOztBQVViLHdCQTJCQzs7QUFuQ0QsaUNBQTBEO0FBUTFELFNBQXdCLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxHQUFHLEVBQUUsRUFBYztJQUM3RSxNQUFNLFFBQVEsR0FBRyxJQUFBLGNBQU0sRUFBaUIsSUFBSSxDQUFDLENBQUM7SUFFOUMsSUFBQSxpQkFBUyxFQUFDLEdBQUcsRUFBRTtRQUNiLFNBQVMsU0FBUyxDQUFDLENBQWdCO1lBQ2pDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxRQUFRO2dCQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3BDLENBQUM7UUFDRCxRQUFRLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNsRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBRWQsT0FBTyxDQUNMLGdDQUNFLElBQUksRUFBQyxRQUFRLGdCQUNGLE1BQU0sRUFDakIsU0FBUyxFQUFDLHNGQUFzRixFQUNoRyxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNqQixJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBYyxDQUFDLEVBQUUsQ0FBQztnQkFDckUsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1FBQ0gsQ0FBQyxZQUVELGdDQUFLLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsWUFDckMsUUFBUSxHQUNMLEdBQ0YsQ0FDUCxDQUFDO0FBQ0osQ0FBQyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyJDOlxcVXNlcnNcXEhQXFxEZXNrdG9wXFxjb2Rlcnouc3BhY2VcXGFwcHNcXHdlYlxcY29tcG9uZW50c1xcTW9kYWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xyXG5cclxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHR5cGUgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XHJcblxyXG5pbnRlcmZhY2UgTW9kYWxQcm9wcyB7XHJcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcclxuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gIGNsYXNzTmFtZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW9kYWwoeyBvbkNsb3NlLCBjaGlsZHJlbiwgY2xhc3NOYW1lID0gXCJcIiB9OiBNb2RhbFByb3BzKSB7XHJcbiAgY29uc3QgaW5uZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xyXG5cclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgZnVuY3Rpb24gaGFuZGxlS2V5KGU6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgaWYgKGUua2V5ID09PSBcIkVzY2FwZVwiKSBvbkNsb3NlKCk7XHJcbiAgICB9XHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBoYW5kbGVLZXkpO1xyXG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZUtleSk7XHJcbiAgfSwgW29uQ2xvc2VdKTtcclxuXHJcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByb2xlPVwiZGlhbG9nXCJcbiAgICAgIGFyaWEtbW9kYWw9XCJ0cnVlXCJcbiAgICAgIGNsYXNzTmFtZT1cImZpeGVkIGluc2V0LTAgei01MCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy1ibGFjay82MCBwLTQgYmFja2Ryb3AtYmx1ci1zbVwiXG4gICAgICBvbk1vdXNlRG93bj17KGUpID0+IHtcbiAgICAgICAgaWYgKGlubmVyUmVmLmN1cnJlbnQgJiYgIWlubmVyUmVmLmN1cnJlbnQuY29udGFpbnMoZS50YXJnZXQgYXMgTm9kZSkpIHtcbiAgICAgICAgICBvbkNsb3NlKCk7XG4gICAgICAgIH1cclxuICAgICAgfX1cclxuICAgID5cclxuICAgICAgPGRpdiByZWY9e2lubmVyUmVmfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XHJcbiAgICAgICAge2NoaWxkcmVufVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn1cclxuIl0sInZlcnNpb24iOjN9 \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/44/Modal_446b9275c025c980fb20ed2337941038.map b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/44/Modal_446b9275c025c980fb20ed2337941038.map new file mode 100644 index 0000000..15b3698 --- /dev/null +++ b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/44/Modal_446b9275c025c980fb20ed2337941038.map @@ -0,0 +1 @@ +{"file":"C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\components\\Modal.tsx","mappings":";AAAA,YAAY,CAAC;;AAUb,wBA2BC;;AAnCD,iCAA0D;AAQ1D,SAAwB,KAAK,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,GAAG,EAAE,EAAc;IAC7E,MAAM,QAAQ,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IAE9C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,SAAS,SAAS,CAAC,CAAgB;YACjC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;gBAAE,OAAO,EAAE,CAAC;QACpC,CAAC;QACD,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAChD,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO,CACL,gCACE,IAAI,EAAC,QAAQ,gBACF,MAAM,EACjB,SAAS,EAAC,sFAAsF,EAChG,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;YACjB,IAAI,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAc,CAAC,EAAE,CAAC;gBACrE,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,YAED,gCAAK,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,YACrC,QAAQ,GACL,GACF,CACP,CAAC;AACJ,CAAC","names":[],"sources":["C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\components\\Modal.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { useEffect, useRef, type ReactNode } from \"react\";\r\n\r\ninterface ModalProps {\r\n onClose: () => void;\r\n children: ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport default function Modal({ onClose, children, className = \"\" }: ModalProps) {\r\n const innerRef = useRef(null);\r\n\r\n useEffect(() => {\r\n function handleKey(e: KeyboardEvent) {\r\n if (e.key === \"Escape\") onClose();\r\n }\r\n document.addEventListener(\"keydown\", handleKey);\r\n return () => document.removeEventListener(\"keydown\", handleKey);\r\n }, [onClose]);\r\n\r\n return (\n {\n if (innerRef.current && !innerRef.current.contains(e.target as Node)) {\n onClose();\n }\r\n }}\r\n >\r\n
\r\n {children}\r\n
\r\n \r\n );\r\n}\r\n"],"version":3} \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/5a/MenteeLoginCard_5a178c31e870e181d8ee5070337966ce b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/5a/MenteeLoginCard_5a178c31e870e181d8ee5070337966ce new file mode 100644 index 0000000..e3b1518 --- /dev/null +++ b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/5a/MenteeLoginCard_5a178c31e870e181d8ee5070337966ce @@ -0,0 +1,61 @@ +7bf6bf33ead7955786c250d305725ed9 +"use strict"; +"use client"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = MenteeLoginCard; +const jsx_runtime_1 = require("react/jsx-runtime"); +const react_1 = require("react"); +const navigation_1 = require("next/navigation"); +const auth_1 = require("@/services/auth"); +const Modal_1 = __importDefault(require("@/components/Modal")); +function EyeIcon({ visible }) { + return visible ? ((0, jsx_runtime_1.jsxs)("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-5 w-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: [(0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M13.875 18.825A10.05 10.05 0 0112 19c-5 0-9-4-9-7s4-7 9-7a9.956 9.956 0 016.21 2.16M15 12a3 3 0 11-6 0 3 3 0 016 0zm6 0c0 3-4 7-9 7" }), (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 3l18 18" })] })) : ((0, jsx_runtime_1.jsxs)("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-5 w-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: [(0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" }), (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M2.458 12C3.732 7.943 7.523 5 12 5c4.477 0 8.268 2.943 9.542 7-1.274 4.057-5.065 7-9.542 7-4.477 0-8.268-2.943-9.542-7z" })] })); +} +const inputClass = "w-full rounded-lg border border-purple-200 bg-white px-4 py-2 text-gray-900 transition focus:outline-none focus:ring-2 focus:ring-purple-500 dark:border-purple-800 dark:bg-gray-800 dark:text-gray-100"; +function MenteeLoginCard({ role, onClose, onSignUp }) { + const [email, setEmail] = (0, react_1.useState)(""); + const [password, setPassword] = (0, react_1.useState)(""); + const [showPassword, setShowPassword] = (0, react_1.useState)(false); + const [error, setError] = (0, react_1.useState)(""); + const [loading, setLoading] = (0, react_1.useState)(false); + const router = (0, navigation_1.useRouter)(); + const handleLogin = async (event) => { + event === null || event === void 0 ? void 0 : event.preventDefault(); + setError(""); + if (!email.trim() || !password) { + setError("Please fill in all fields."); + return; + } + setLoading(true); + try { + const result = await (0, auth_1.loginMenteeByEmail)(email.trim(), password); + if (result.context.accountStatus !== "approved") { + setError("Your account is still pending mentor approval."); + return; + } + if (result.context.role === "mentor") { + router.push("/mentor-dashboard"); + return; + } + if (result.context.role === "mentee") { + router.push(`/mentee-dashboard/${result.context.user.username}`); + return; + } + setError("Your account is not linked to an active Algo Buddy role."); + } + catch (error) { + setError(error instanceof Error ? error.message : "Invalid credentials."); + } + finally { + setLoading(false); + } + }; + return ((0, jsx_runtime_1.jsxs)(Modal_1.default, { onClose: onClose, className: "mx-4 w-full max-w-sm", children: [(0, jsx_runtime_1.jsxs)("form", { onSubmit: handleLogin, className: "flex w-full flex-col gap-4 rounded-lg border border-purple-200 bg-white p-8 shadow-xl dark:border-purple-800 dark:bg-gray-900", children: [(0, jsx_runtime_1.jsx)("h2", { className: "text-center text-xl font-semibold text-purple-700 dark:text-purple-400", children: role === "mentor" ? "Mentor Login" : "Mentee Login" }), (0, jsx_runtime_1.jsx)("input", { type: "email", placeholder: "Email address", value: email, onChange: (event) => setEmail(event.target.value), className: inputClass, autoComplete: "email" }), (0, jsx_runtime_1.jsxs)("div", { className: "relative", children: [(0, jsx_runtime_1.jsx)("input", { type: showPassword ? "text" : "password", placeholder: "Password", value: password, onChange: (event) => setPassword(event.target.value), className: `${inputClass} pr-10`, autoComplete: "current-password" }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => setShowPassword((value) => !value), className: "absolute right-3 top-1/2 -translate-y-1/2 text-gray-500 hover:text-purple-600 dark:text-gray-400", "aria-label": showPassword ? "Hide password" : "Show password", children: (0, jsx_runtime_1.jsx)(EyeIcon, { visible: showPassword }) })] }), (0, jsx_runtime_1.jsx)("button", { type: "button", className: "self-end text-right text-sm text-purple-600 hover:underline dark:text-purple-400", children: "Forgot Password?" }), error ? (0, jsx_runtime_1.jsx)("p", { className: "text-center text-sm text-red-500", children: error }) : null, (0, jsx_runtime_1.jsx)("button", { type: "submit", disabled: loading, className: "w-full rounded-lg bg-purple-600 py-2 font-semibold text-white transition hover:bg-purple-700 focus:outline-none focus:ring-2 focus:ring-purple-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:focus:ring-offset-gray-900", children: loading ? "Logging in..." : "Log In" }), (0, jsx_runtime_1.jsxs)("button", { type: "button", className: "flex w-full items-center justify-center gap-2 rounded-lg border border-purple-200 py-2 text-gray-700 transition hover:bg-purple-50 focus:outline-none focus:ring-2 focus:ring-purple-500 focus:ring-offset-2 dark:border-purple-800 dark:text-gray-200 dark:hover:bg-gray-800 dark:focus:ring-offset-gray-900", children: [(0, jsx_runtime_1.jsxs)("svg", { className: "h-5 w-5", viewBox: "0 0 24 24", "aria-hidden": "true", children: [(0, jsx_runtime_1.jsx)("path", { fill: "#4285F4", d: "M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z" }), (0, jsx_runtime_1.jsx)("path", { fill: "#34A853", d: "M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z" }), (0, jsx_runtime_1.jsx)("path", { fill: "#FBBC05", d: "M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l3.66-2.84z" }), (0, jsx_runtime_1.jsx)("path", { fill: "#EA4335", d: "M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z" })] }), "Login with Google"] })] }), role === "mentee" ? ((0, jsx_runtime_1.jsx)("button", { type: "button", onClick: (event) => { + event.stopPropagation(); + onSignUp(); + }, className: "mt-4 block w-full text-center text-sm text-purple-100 hover:underline", children: "New user? Sign Up" })) : null] })); +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJmaWxlIjoiQzpcXFVzZXJzXFxIUFxcRGVza3RvcFxcY29kZXJ6LnNwYWNlXFxhcHBzXFx3ZWJcXGNvbXBvbmVudHNcXE1lbnRlZUxvZ2luQ2FyZC50c3giLCJtYXBwaW5ncyI6IjtBQUFBLFlBQVksQ0FBQzs7Ozs7QUE4QmIsa0NBdUhDOztBQW5KRCxpQ0FBaUQ7QUFDakQsZ0RBQTRDO0FBQzVDLDBDQUFxRDtBQUNyRCwrREFBdUM7QUFRdkMsU0FBUyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQXdCO0lBQ2hELE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUNmLGlDQUFLLEtBQUssRUFBQyw0QkFBNEIsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsY0FBYyxhQUMvRyxpQ0FBTSxhQUFhLEVBQUMsT0FBTyxFQUFDLGNBQWMsRUFBQyxPQUFPLEVBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMscUlBQXFJLEdBQUcsRUFDN00saUNBQU0sYUFBYSxFQUFDLE9BQU8sRUFBQyxjQUFjLEVBQUMsT0FBTyxFQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFlBQVksR0FBRyxJQUNoRixDQUNQLENBQUMsQ0FBQyxDQUFDLENBQ0YsaUNBQUssS0FBSyxFQUFDLDRCQUE0QixFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxjQUFjLGFBQy9HLGlDQUFNLGFBQWEsRUFBQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE9BQU8sRUFBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBQyxrQ0FBa0MsR0FBRyxFQUMxRyxpQ0FBTSxhQUFhLEVBQUMsT0FBTyxFQUFDLGNBQWMsRUFBQyxPQUFPLEVBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMseUhBQXlILEdBQUcsSUFDN0wsQ0FDUCxDQUFDO0FBQ0osQ0FBQztB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QUFRLEVBQUMsU0FBUyxFQUFDLCtTQUErUyxhQUM3VSxpQ0FBSyxTQUFTLEVBQUMsU0FBUyxFQUFDLE9BQU8sRUFBQyxXQUFXLGlCQUFhLE1BQU0sYUFDN0QsaUNBQU0sSUFBSSxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMseUhBQXlILEdBQUcsRUFDbkosaUNBQU0sSUFBSSxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsdUlBQXVJLEdBQUcsRUFDakssaUNBQU0sSUFBSSxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsd0hBQXdILEdBQUcsRUFDbEosaUNBQU0sSUFBSSxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMscUlBQXFJLEdBQUcsSUFDM0oseUJBRUMsSUFDSixFQUVOLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQ25CLG1DQUNFLElBQUksRUFBQyxRQUFRLEVBQ2IsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQ2pCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDeEIsUUFBUSxFQUFFLENBQUM7Z0JBQ2IsQ0FBQyxFQUNELFNBQVMsRUFBQyx1RUFBdUUsa0NBRzFFLENBQ1YsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUNGLENBQ1QsQ0FBQztBQUNKLENBQUMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiQzpcXFVzZXJzXFxIUFxcRGVza3RvcFxcY29kZXJ6LnNwYWNlXFxhcHBzXFx3ZWJcXGNvbXBvbmVudHNcXE1lbnRlZUxvZ2luQ2FyZC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XHJcblxyXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdHlwZSBGb3JtRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVJvdXRlciB9IGZyb20gXCJuZXh0L25hdmlnYXRpb25cIjtcbmltcG9ydCB7IGxvZ2luTWVudGVlQnlFbWFpbCB9IGZyb20gXCJAL3NlcnZpY2VzL2F1dGhcIjtcbmltcG9ydCBNb2RhbCBmcm9tIFwiQC9jb21wb25lbnRzL01vZGFsXCI7XG5cclxuaW50ZXJmYWNlIE1lbnRlZUxvZ2luQ2FyZFByb3BzIHtcclxuICByb2xlOiBcIm1lbnRvclwiIHwgXCJtZW50ZWVcIjtcclxuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xyXG4gIG9uU2lnblVwOiAoKSA9PiB2b2lkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBFeWVJY29uKHsgdmlzaWJsZSB9OiB7IHZpc2libGU6IGJvb2xlYW4gfSkge1xyXG4gIHJldHVybiB2aXNpYmxlID8gKFxyXG4gICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3NOYW1lPVwiaC01IHctNVwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiPlxyXG4gICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTMuODc1IDE4LjgyNUExMC4wNSAxMC4wNSAwIDAxMTIgMTljLTUgMC05LTQtOS03czQtNyA5LTdhOS45NTYgOS45NTYgMCAwMTYuMjEgMi4xNk0xNSAxMmEzIDMgMCAxMS02IDAgMyAzIDAgMDE2IDB6bTYgMGMwIDMtNCA3LTkgN1wiIC8+XHJcbiAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0zIDNsMTggMThcIiAvPlxyXG4gICAgPC9zdmc+XHJcbiAgKSA6IChcclxuICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzTmFtZT1cImgtNSB3LTVcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIj5cclxuICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTE1IDEyYTMgMyAwIDExLTYgMCAzIDMgMCAwMTYgMHpcIiAvPlxyXG4gICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMi40NTggMTJDMy43MzIgNy45NDMgNy41MjMgNSAxMiA1YzQuNDc3IDAgOC4yNjggMi45NDMgOS41NDIgNy0xLjI3NCA0LjA1Ny01LjA2NSA3LTkuNTQyIDctNC40NzcgMC04LjI2OC0yLjk0My05LjU0Mi03elwiIC8+XHJcbiAgICA8L3N2Zz5cclxuICApO1xyXG59XHJcblxyXG5jb25zdCBpbnB1dENsYXNzID1cbiAgXCJ3LWZ1bGwgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXB1cnBsZS0yMDAgYmctd2hpdGUgcHgtNCBweS0yIHRleHQtZ3JheS05MDAgdHJhbnNpdGlvbiBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctcHVycGxlLTUwMCBkYXJrOmJvcmRlci1wdXJwbGUtODAwIGRhcms6YmctZ3JheS04MDAgZGFyazp0ZXh0LWdyYXktMTAwXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1lbnRlZUxvZ2luQ2FyZCh7IHJvbGUsIG9uQ2xvc2UsIG9uU2lnblVwIH06IE1lbnRlZUxvZ2luQ2FyZFByb3BzKSB7XG4gIGNvbnN0IFtlbWFpbCwgc2V0RW1haWxdID0gdXNlU3RhdGUoXCJcIik7XHJcbiAgY29uc3QgW3Bhc3N3b3JkLCBzZXRQYXNzd29yZF0gPSB1c2VTdGF0ZShcIlwiKTtcclxuICBjb25zdCBbc2hvd1Bhc3N3b3JkLCBzZXRTaG93UGFzc3dvcmRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGUoXCJcIik7XHJcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xyXG5cclxuICBjb25zdCBoYW5kbGVMb2dpbiA9IGFzeW5jIChldmVudD86IEZvcm1FdmVudDxIVE1MRm9ybUVsZW1lbnQ+KSA9PiB7XG4gICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgc2V0RXJyb3IoXCJcIik7XG4gICAgaWYgKCFlbWFpbC50cmltKCkgfHwgIXBhc3N3b3JkKSB7XG4gICAgICBzZXRFcnJvcihcIlBsZWFzZSBmaWxsIGluIGFsbCBmaWVsZHMuXCIpO1xuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHNldExvYWRpbmcodHJ1ZSk7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBsb2dpbk1lbnRlZUJ5RW1haWwoZW1haWwudHJpbSgpLCBwYXNzd29yZCk7XHJcbiAgICAgIGlmIChyZXN1bHQuY29udGV4dC5hY2NvdW50U3RhdHVzICE9PSBcImFwcHJvdmVkXCIpIHtcclxuICAgICAgICBzZXRFcnJvcihcIllvdXIgYWNjb3VudCBpcyBzdGlsbCBwZW5kaW5nIG1lbnRvciBhcHByb3ZhbC5cIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocmVzdWx0LmNvbnRleHQucm9sZSA9PT0gXCJtZW50b3JcIikge1xyXG4gICAgICAgIHJvdXRlci5wdXNoKFwiL21lbnRvci1kYXNoYm9hcmRcIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocmVzdWx0LmNvbnRleHQucm9sZSA9PT0gXCJtZW50ZWVcIikge1xyXG4gICAgICAgIHJvdXRlci5wdXNoKGAvbWVudGVlLWRhc2hib2FyZC8ke3Jlc3VsdC5jb250ZXh0LnVzZXIudXNlcm5hbWV9YCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzZXRFcnJvcihcIllvdXIgYWNjb3VudCBpcyBub3QgbGlua2VkIHRvIGFuIGFjdGl2ZSBBbGdvIEJ1ZGR5IHJvbGUuXCIpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgc2V0RXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIkludmFsaWQgY3JlZGVudGlhbHMuXCIpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXG4gIHJldHVybiAoXG4gICAgPE1vZGFsIG9uQ2xvc2U9e29uQ2xvc2V9IGNsYXNzTmFtZT1cIm14LTQgdy1mdWxsIG1heC13LXNtXCI+XG4gICAgICA8Zm9ybVxuICAgICAgICBvblN1Ym1pdD17aGFuZGxlTG9naW59XG4gICAgICAgIGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGZsZXgtY29sIGdhcC00IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1wdXJwbGUtMjAwIGJnLXdoaXRlIHAtOCBzaGFkb3cteGwgZGFyazpib3JkZXItcHVycGxlLTgwMCBkYXJrOmJnLWdyYXktOTAwXCJcbiAgICAgID5cbiAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQtY2VudGVyIHRleHQteGwgZm9udC1zZW1pYm9sZCB0ZXh0LXB1cnBsZS03MDAgZGFyazp0ZXh0LXB1cnBsZS00MDBcIj5cbiAgICAgICAgICB7cm9sZSA9PT0gXCJtZW50b3JcIiA/IFwiTWVudG9yIExvZ2luXCIgOiBcIk1lbnRlZSBMb2dpblwifVxuICAgICAgICA8L2gyPlxuXHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICB0eXBlPVwiZW1haWxcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbWFpbCBhZGRyZXNzXCJcbiAgICAgICAgICB2YWx1ZT17ZW1haWx9XG4gICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT4gc2V0RW1haWwoZXZlbnQudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICBjbGFzc05hbWU9e2lucHV0Q2xhc3N9XG4gICAgICAgICAgYXV0b0NvbXBsZXRlPVwiZW1haWxcIlxuICAgICAgICAvPlxuXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgIHR5cGU9e3Nob3dQYXNzd29yZCA/IFwidGV4dFwiIDogXCJwYXNzd29yZFwifVxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBhc3N3b3JkXCJcclxuICAgICAgICAgICAgdmFsdWU9e3Bhc3N3b3JkfVxuICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT4gc2V0UGFzc3dvcmQoZXZlbnQudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7aW5wdXRDbGFzc30gcHItMTBgfVxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwiY3VycmVudC1wYXNzd29yZFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dQYXNzd29yZCgodmFsdWUpID0+ICF2YWx1ZSl9XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTMgdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIHRleHQtZ3JheS01MDAgaG92ZXI6dGV4dC1wdXJwbGUtNjAwIGRhcms6dGV4dC1ncmF5LTQwMFwiXHJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3Nob3dQYXNzd29yZCA/IFwiSGlkZSBwYXNzd29yZFwiIDogXCJTaG93IHBhc3N3b3JkXCJ9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxFeWVJY29uIHZpc2libGU9e3Nob3dQYXNzd29yZH0gLz5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cInNlbGYtZW5kIHRleHQtcmlnaHQgdGV4dC1zbSB0ZXh0LXB1cnBsZS02MDAgaG92ZXI6dW5kZXJsaW5lIGRhcms6dGV4dC1wdXJwbGUtNDAwXCI+XG4gICAgICAgICAgRm9yZ290IFBhc3N3b3JkP1xuICAgICAgICA8L2J1dHRvbj5cblxyXG4gICAgICAgIHtlcnJvciA/IDxwIGNsYXNzTmFtZT1cInRleHQtY2VudGVyIHRleHQtc20gdGV4dC1yZWQtNTAwXCI+e2Vycm9yfTwvcD4gOiBudWxsfVxyXG5cclxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgZGlzYWJsZWQ9e2xvYWRpbmd9XG4gICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHJvdW5kZWQtbGcgYmctcHVycGxlLTYwMCBweS0yIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZSB0cmFuc2l0aW9uIGhvdmVyOmJnLXB1cnBsZS03MDAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLXB1cnBsZS01MDAgZm9jdXM6cmluZy1vZmZzZXQtMiBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCBkYXJrOmZvY3VzOnJpbmctb2Zmc2V0LWdyYXktOTAwXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtsb2FkaW5nID8gXCJMb2dnaW5nIGluLi4uXCIgOiBcIkxvZyBJblwifVxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXB1cnBsZS0yMDAgcHktMiB0ZXh0LWdyYXktNzAwIHRyYW5zaXRpb24gaG92ZXI6YmctcHVycGxlLTUwIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1wdXJwbGUtNTAwIGZvY3VzOnJpbmctb2Zmc2V0LTIgZGFyazpib3JkZXItcHVycGxlLTgwMCBkYXJrOnRleHQtZ3JheS0yMDAgZGFyazpob3ZlcjpiZy1ncmF5LTgwMCBkYXJrOmZvY3VzOnJpbmctb2Zmc2V0LWdyYXktOTAwXCI+XG4gICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJoLTUgdy01XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPHBhdGggZmlsbD1cIiM0Mjg1RjRcIiBkPVwiTTIyLjU2IDEyLjI1YzAtLjc4LS4wNy0xLjUzLS4yLTIuMjVIMTJ2NC4yNmg1LjkyYy0uMjYgMS4zNy0xLjA0IDIuNTMtMi4yMSAzLjMxdjIuNzdoMy41N2MyLjA4LTEuOTIgMy4yOC00Ljc0IDMuMjgtOC4wOXpcIiAvPlxyXG4gICAgICAgICAgICA8cGF0aCBmaWxsPVwiIzM0QTg1M1wiIGQ9XCJNMTIgMjNjMi45NyAwIDUuNDYtLjk4IDcuMjgtMi42NmwtMy41Ny0yLjc3Yy0uOTguNjYtMi4yMyAxLjA2LTMuNzEgMS4wNi0yLjg2IDAtNS4yOS0xLjkzLTYuMTYtNC41M0gyLjE4djIuODRDMy45OSAyMC41MyA3LjcgMjMgMTIgMjN6XCIgLz5cclxuICAgICAgICAgICAgPHBhdGggZmlsbD1cIiNGQkJDMDVcIiBkPVwiTTUuODQgMTQuMDljLS4yMi0uNjYtLjM1LTEuMzYtLjM1LTIuMDlzLjEzLTEuNDMuMzUtMi4wOVY3LjA3SDIuMThDMS40MyA4LjU1IDEgMTAuMjIgMSAxMnMuNDMgMy40NSAxLjE4IDQuOTNsMy42Ni0yLjg0elwiIC8+XHJcbiAgICAgICAgICAgIDxwYXRoIGZpbGw9XCIjRUE0MzM1XCIgZD1cIk0xMiA1LjM4YzEuNjIgMCAzLjA2LjU2IDQuMjEgMS42NGwzLjE1LTMuMTVDMTcuNDUgMi4wOSAxNC45NyAxIDEyIDEgNy43IDEgMy45OSAzLjQ3IDIuMTggNy4wN2wzLjY2IDIuODRjLjg3LTIuNiAzLjMtNC41MyA2LjE2LTQuNTN6XCIgLz5cclxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIExvZ2luIHdpdGggR29vZ2xlXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9mb3JtPlxuXG4gICAgICB7cm9sZSA9PT0gXCJtZW50ZWVcIiA/IChcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4ge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBvblNpZ25VcCgpO1xuICAgICAgICAgIH19XG4gICAgICAgICAgY2xhc3NOYW1lPVwibXQtNCBibG9jayB3LWZ1bGwgdGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LXB1cnBsZS0xMDAgaG92ZXI6dW5kZXJsaW5lXCJcbiAgICAgICAgPlxuICAgICAgICAgIE5ldyB1c2VyPyBTaWduIFVwXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgKSA6IG51bGx9XG4gICAgPC9Nb2RhbD5cbiAgKTtcbn1cbiJdLCJ2ZXJzaW9uIjozfQ== \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/5a/MenteeLoginCard_5a178c31e870e181d8ee5070337966ce.map b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/5a/MenteeLoginCard_5a178c31e870e181d8ee5070337966ce.map new file mode 100644 index 0000000..f92076e --- /dev/null +++ b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/5a/MenteeLoginCard_5a178c31e870e181d8ee5070337966ce.map @@ -0,0 +1 @@ +{"file":"C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\components\\MenteeLoginCard.tsx","mappings":"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","names":[],"sources":["C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\components\\MenteeLoginCard.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { useState, type FormEvent } from \"react\";\nimport { useRouter } from \"next/navigation\";\nimport { loginMenteeByEmail } from \"@/services/auth\";\nimport Modal from \"@/components/Modal\";\n\r\ninterface MenteeLoginCardProps {\r\n role: \"mentor\" | \"mentee\";\r\n onClose: () => void;\r\n onSignUp: () => void;\r\n}\r\n\r\nfunction EyeIcon({ visible }: { visible: boolean }) {\r\n return visible ? (\r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst inputClass =\n \"w-full rounded-lg border border-purple-200 bg-white px-4 py-2 text-gray-900 transition focus:outline-none focus:ring-2 focus:ring-purple-500 dark:border-purple-800 dark:bg-gray-800 dark:text-gray-100\";\n\nexport default function MenteeLoginCard({ role, onClose, onSignUp }: MenteeLoginCardProps) {\n const [email, setEmail] = useState(\"\");\r\n const [password, setPassword] = useState(\"\");\r\n const [showPassword, setShowPassword] = useState(false);\r\n const [error, setError] = useState(\"\");\r\n const [loading, setLoading] = useState(false);\r\n const router = useRouter();\r\n\r\n const handleLogin = async (event?: FormEvent) => {\n event?.preventDefault();\n setError(\"\");\n if (!email.trim() || !password) {\n setError(\"Please fill in all fields.\");\n return;\r\n }\r\n\r\n setLoading(true);\r\n try {\r\n const result = await loginMenteeByEmail(email.trim(), password);\r\n if (result.context.accountStatus !== \"approved\") {\r\n setError(\"Your account is still pending mentor approval.\");\r\n return;\r\n }\r\n\r\n if (result.context.role === \"mentor\") {\r\n router.push(\"/mentor-dashboard\");\r\n return;\r\n }\r\n\r\n if (result.context.role === \"mentee\") {\r\n router.push(`/mentee-dashboard/${result.context.user.username}`);\r\n return;\r\n }\r\n\r\n setError(\"Your account is not linked to an active Algo Buddy role.\");\r\n } catch (error) {\r\n setError(error instanceof Error ? error.message : \"Invalid credentials.\");\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\n return (\n \n \n

\n {role === \"mentor\" ? \"Mentor Login\" : \"Mentee Login\"}\n

\n\r\n setEmail(event.target.value)}\n className={inputClass}\n autoComplete=\"email\"\n />\n\r\n
\r\n setPassword(event.target.value)}\n className={`${inputClass} pr-10`}\n autoComplete=\"current-password\"\n />\n setShowPassword((value) => !value)}\r\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-gray-500 hover:text-purple-600 dark:text-gray-400\"\r\n aria-label={showPassword ? \"Hide password\" : \"Show password\"}\r\n >\r\n \r\n \r\n
\n\n \n\r\n {error ?

{error}

: null}\r\n\r\n \n {loading ? \"Logging in...\" : \"Log In\"}\n \n\n \n \n\n {role === \"mentee\" ? (\n {\n event.stopPropagation();\n onSignUp();\n }}\n className=\"mt-4 block w-full text-center text-sm text-purple-100 hover:underline\"\n >\n New user? Sign Up\n \n ) : null}\n
\n );\n}\n"],"version":3} \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/d1/apitest_d1d2fc1b55e2496c2e64752d47e1ee08 b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/d1/apitest_d1d2fc1b55e2496c2e64752d47e1ee08 new file mode 100644 index 0000000..4a293f1 --- /dev/null +++ b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/d1/apitest_d1d2fc1b55e2496c2e64752d47e1ee08 @@ -0,0 +1,82 @@ +ed9871923d5f990bfd5201872d4de57e +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || (function () { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function (o) { + var ar = []; + for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + __setModuleDefault(result, mod); + return result; + }; +})(); +jest.mock("axios", () => ({ + __esModule: true, + default: { + create: (...args) => mockCreate(...args), + post: (...args) => mockPost(...args), + }, +})); +const mockRequest = jest.fn(); +const mockCreate = jest.fn(); +const mockPost = jest.fn(); +describe("api client", () => { + beforeEach(() => { + jest.resetModules(); + mockRequest.mockReset(); + mockCreate.mockReset(); + mockPost.mockReset(); + mockCreate.mockReturnValue({ + request: mockRequest, + interceptors: { + response: { + use: jest.fn(), + }, + }, + }); + }); + it("unwraps backend envelopes", async () => { + mockRequest.mockResolvedValue({ + data: { + success: true, + data: { role: "mentee", accountStatus: "approved" }, + }, + }); + const { api } = await Promise.resolve().then(() => __importStar(require("./api"))); + await expect(api.get("/v1/app/context")).resolves.toEqual({ + role: "mentee", + accountStatus: "approved", + }); + }); + it("returns direct payloads without modification", async () => { + mockRequest.mockResolvedValue({ + data: { status: "ok" }, + }); + const { api } = await Promise.resolve().then(() => __importStar(require("./api"))); + await expect(api.get("/health")).resolves.toEqual({ status: "ok" }); + }); +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJmaWxlIjoiQzpcXFVzZXJzXFxIUFxcRGVza3RvcFxcY29kZXJ6LnNwYWNlXFxhcHBzXFx3ZWJcXHNlcnZpY2VzXFxhcGkudGVzdC50cyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSUEsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN4QixVQUFVLEVBQUUsSUFBSTtJQUNoQixPQUFPLEVBQUU7UUFDUCxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQWUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ25ELElBQUksRUFBRSxDQUFDLEdBQUcsSUFBZSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7S0FDaEQ7Q0FDRixDQUFDLENBQUMsQ0FBQztBQVZKLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM5QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDN0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBVTNCLFFBQVEsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFO0lBQzFCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN2QixRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFckIsVUFBVSxDQUFDLGVBQWUsQ0FBQztZQUN6QixPQUFPLEVBQUUsV0FBVztZQUNwQixZQUFZLEVBQUU7Z0JBQ1osUUFBUSxFQUFFO29CQUNSLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO2lCQUNmO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywyQkFBMkIsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN6QyxXQUFXLENBQUMsaUJBQWlCLENBQUM7WUFDNUIsSUFBSSxFQUFFO2dCQUNKLE9BQU8sRUFBRSxJQUFJO2dCQUNiLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRTthQUNwRDtTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyx3REFBYSxPQUFPLEdBQUMsQ0FBQztRQUV0QyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQ3hELElBQUksRUFBRSxRQUFRO1lBQ2QsYUFBYSxFQUFFLFVBQVU7U0FDMUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsOENBQThDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDNUQsV0FBVyxDQUFDLGlCQUFpQixDQUFDO1lBQzVCLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7U0FDdkIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLHdEQUFhLE9BQU8sR0FBQyxDQUFDO1FBRXRDLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyJDOlxcVXNlcnNcXEhQXFxEZXNrdG9wXFxjb2Rlcnouc3BhY2VcXGFwcHNcXHdlYlxcc2VydmljZXNcXGFwaS50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IG1vY2tSZXF1ZXN0ID0gamVzdC5mbigpO1xyXG5jb25zdCBtb2NrQ3JlYXRlID0gamVzdC5mbigpO1xyXG5jb25zdCBtb2NrUG9zdCA9IGplc3QuZm4oKTtcclxuXHJcbmplc3QubW9jayhcImF4aW9zXCIsICgpID0+ICh7XHJcbiAgX19lc01vZHVsZTogdHJ1ZSxcclxuICBkZWZhdWx0OiB7XHJcbiAgICBjcmVhdGU6ICguLi5hcmdzOiB1bmtub3duW10pID0+IG1vY2tDcmVhdGUoLi4uYXJncyksXHJcbiAgICBwb3N0OiAoLi4uYXJnczogdW5rbm93bltdKSA9PiBtb2NrUG9zdCguLi5hcmdzKSxcclxuICB9LFxyXG59KSk7XHJcblxyXG5kZXNjcmliZShcImFwaSBjbGllbnRcIiwgKCkgPT4ge1xyXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xyXG4gICAgamVzdC5yZXNldE1vZHVsZXMoKTtcclxuICAgIG1vY2tSZXF1ZXN0Lm1vY2tSZXNldCgpO1xyXG4gICAgbW9ja0NyZWF0ZS5tb2NrUmVzZXQoKTtcclxuICAgIG1vY2tQb3N0Lm1vY2tSZXNldCgpO1xyXG5cclxuICAgIG1vY2tDcmVhdGUubW9ja1JldHVyblZhbHVlKHtcclxuICAgICAgcmVxdWVzdDogbW9ja1JlcXVlc3QsXHJcbiAgICAgIGludGVyY2VwdG9yczoge1xyXG4gICAgICAgIHJlc3BvbnNlOiB7XHJcbiAgICAgICAgICB1c2U6IGplc3QuZm4oKSxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfSk7XHJcblxyXG4gIGl0KFwidW53cmFwcyBiYWNrZW5kIGVudmVsb3Blc1wiLCBhc3luYyAoKSA9PiB7XHJcbiAgICBtb2NrUmVxdWVzdC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgIGRhdGE6IHsgcm9sZTogXCJtZW50ZWVcIiwgYWNjb3VudFN0YXR1czogXCJhcHByb3ZlZFwiIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB7IGFwaSB9ID0gYXdhaXQgaW1wb3J0KFwiLi9hcGlcIik7XHJcblxyXG4gICAgYXdhaXQgZXhwZWN0KGFwaS5nZXQoXCIvdjEvYXBwL2NvbnRleHRcIikpLnJlc29sdmVzLnRvRXF1YWwoe1xyXG4gICAgICByb2xlOiBcIm1lbnRlZVwiLFxyXG4gICAgICBhY2NvdW50U3RhdHVzOiBcImFwcHJvdmVkXCIsXHJcbiAgICB9KTtcclxuICB9KTtcclxuXHJcbiAgaXQoXCJyZXR1cm5zIGRpcmVjdCBwYXlsb2FkcyB3aXRob3V0IG1vZGlmaWNhdGlvblwiLCBhc3luYyAoKSA9PiB7XHJcbiAgICBtb2NrUmVxdWVzdC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XHJcbiAgICAgIGRhdGE6IHsgc3RhdHVzOiBcIm9rXCIgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHsgYXBpIH0gPSBhd2FpdCBpbXBvcnQoXCIuL2FwaVwiKTtcclxuXHJcbiAgICBhd2FpdCBleHBlY3QoYXBpLmdldChcIi9oZWFsdGhcIikpLnJlc29sdmVzLnRvRXF1YWwoeyBzdGF0dXM6IFwib2tcIiB9KTtcclxuICB9KTtcclxufSk7XHJcbiJdLCJ2ZXJzaW9uIjozfQ== \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/d1/apitest_d1d2fc1b55e2496c2e64752d47e1ee08.map b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/d1/apitest_d1d2fc1b55e2496c2e64752d47e1ee08.map new file mode 100644 index 0000000..e8e33c8 --- /dev/null +++ b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/d1/apitest_d1d2fc1b55e2496c2e64752d47e1ee08.map @@ -0,0 +1 @@ +{"file":"C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\services\\api.test.ts","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IACxB,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE;QACP,MAAM,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;QACnD,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;KAChD;CACF,CAAC,CAAC,CAAC;AAVJ,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AAU3B,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,WAAW,CAAC,SAAS,EAAE,CAAC;QACxB,UAAU,CAAC,SAAS,EAAE,CAAC;QACvB,QAAQ,CAAC,SAAS,EAAE,CAAC;QAErB,UAAU,CAAC,eAAe,CAAC;YACzB,OAAO,EAAE,WAAW;YACpB,YAAY,EAAE;gBACZ,QAAQ,EAAE;oBACR,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE;iBACf;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,WAAW,CAAC,iBAAiB,CAAC;YAC5B,IAAI,EAAE;gBACJ,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE;aACpD;SACF,CAAC,CAAC;QAEH,MAAM,EAAE,GAAG,EAAE,GAAG,wDAAa,OAAO,GAAC,CAAC;QAEtC,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YACxD,IAAI,EAAE,QAAQ;YACd,aAAa,EAAE,UAAU;SAC1B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,WAAW,CAAC,iBAAiB,CAAC;YAC5B,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;SACvB,CAAC,CAAC;QAEH,MAAM,EAAE,GAAG,EAAE,GAAG,wDAAa,OAAO,GAAC,CAAC;QAEtC,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","names":[],"sources":["C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\services\\api.test.ts"],"sourcesContent":["const mockRequest = jest.fn();\r\nconst mockCreate = jest.fn();\r\nconst mockPost = jest.fn();\r\n\r\njest.mock(\"axios\", () => ({\r\n __esModule: true,\r\n default: {\r\n create: (...args: unknown[]) => mockCreate(...args),\r\n post: (...args: unknown[]) => mockPost(...args),\r\n },\r\n}));\r\n\r\ndescribe(\"api client\", () => {\r\n beforeEach(() => {\r\n jest.resetModules();\r\n mockRequest.mockReset();\r\n mockCreate.mockReset();\r\n mockPost.mockReset();\r\n\r\n mockCreate.mockReturnValue({\r\n request: mockRequest,\r\n interceptors: {\r\n response: {\r\n use: jest.fn(),\r\n },\r\n },\r\n });\r\n });\r\n\r\n it(\"unwraps backend envelopes\", async () => {\r\n mockRequest.mockResolvedValue({\r\n data: {\r\n success: true,\r\n data: { role: \"mentee\", accountStatus: \"approved\" },\r\n },\r\n });\r\n\r\n const { api } = await import(\"./api\");\r\n\r\n await expect(api.get(\"/v1/app/context\")).resolves.toEqual({\r\n role: \"mentee\",\r\n accountStatus: \"approved\",\r\n });\r\n });\r\n\r\n it(\"returns direct payloads without modification\", async () => {\r\n mockRequest.mockResolvedValue({\r\n data: { status: \"ok\" },\r\n });\r\n\r\n const { api } = await import(\"./api\");\r\n\r\n await expect(api.get(\"/health\")).resolves.toEqual({ status: \"ok\" });\r\n });\r\n});\r\n"],"version":3} \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/f3/api_f3e486684b0343eb630d8d673420e918 b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/f3/api_f3e486684b0343eb630d8d673420e918 new file mode 100644 index 0000000..7a340ac --- /dev/null +++ b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/f3/api_f3e486684b0343eb630d8d673420e918 @@ -0,0 +1,141 @@ +7a22efb736a7206e89d92da6c5d04d4d +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || (function () { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function (o) { + var ar = []; + for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + __setModuleDefault(result, mod); + return result; + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +exports.api = exports.APIError = void 0; +exports.requestRaw = requestRaw; +exports.request = request; +exports.checkAPIHealth = checkAPIHealth; +let axiosInstance = null; +function isRecord(value) { + return typeof value === "object" && value !== null; +} +function hasDataEnvelope(value) { + return isRecord(value) && "data" in value; +} +function extractMessage(value, fallback) { + if (isRecord(value)) { + const message = value.message; + if (typeof message === "string" && message.trim()) { + return message; + } + const error = value.error; + if (isRecord(error) && typeof error.message === "string" && error.message.trim()) { + return error.message; + } + } + return fallback; +} +async function getAxiosInstance() { + var _a; + if (typeof window === "undefined") { + throw new Error("API client can only be used in the browser."); + } + if (axiosInstance) { + return axiosInstance; + } + const axios = await Promise.resolve().then(() => __importStar(require("axios"))).then((module) => module.default); + const baseURL = (_a = process.env.NEXT_PUBLIC_API_URL) !== null && _a !== void 0 ? _a : "http://localhost:8080/api"; + axiosInstance = axios.create({ + baseURL, + timeout: 15000, + withCredentials: true, + headers: { + "Content-Type": "application/json", + "X-Requested-With": "XMLHttpRequest", + }, + }); + axiosInstance.interceptors.response.use((response) => response, async (error) => { + var _a, _b, _c; + const request = error.config; + const isRefreshRequest = (_a = request === null || request === void 0 ? void 0 : request.url) === null || _a === void 0 ? void 0 : _a.includes("/v1/auth/refresh"); + if (((_b = error.response) === null || _b === void 0 ? void 0 : _b.status) === 401 && request && !isRefreshRequest) { + try { + const axios = await Promise.resolve().then(() => __importStar(require("axios"))).then((module) => module.default); + const base = (_c = process.env.NEXT_PUBLIC_API_URL) !== null && _c !== void 0 ? _c : "http://localhost:8080/api"; + await axios.post(`${base}/v1/auth/refresh`, {}, { withCredentials: true }); + return axiosInstance(request); + } + catch (_d) { + if (typeof window !== "undefined") { + window.location.href = "/"; + } + } + } + return Promise.reject(new APIError(error)); + }); + return axiosInstance; +} +class APIError extends Error { + constructor(error) { + var _a, _b, _c, _d; + super(extractMessage((_a = error.response) === null || _a === void 0 ? void 0 : _a.data, error.message)); + this.name = "APIError"; + this.status = (_c = (_b = error.response) === null || _b === void 0 ? void 0 : _b.status) !== null && _c !== void 0 ? _c : 500; + this.data = (_d = error.response) === null || _d === void 0 ? void 0 : _d.data; + } +} +exports.APIError = APIError; +async function requestRaw(config) { + const client = await getAxiosInstance(); + const response = await client.request(config); + return response.data; +} +async function request(config) { + const response = await requestRaw(config); + if (hasDataEnvelope(response)) { + return response.data; + } + return response; +} +exports.api = { + get: (url, config) => request(Object.assign(Object.assign({}, config), { method: "GET", url })), + post: (url, data, config) => request(Object.assign(Object.assign({}, config), { method: "POST", url, data })), + put: (url, data, config) => request(Object.assign(Object.assign({}, config), { method: "PUT", url, data })), + patch: (url, data, config) => request(Object.assign(Object.assign({}, config), { method: "PATCH", url, data })), + delete: (url, config) => request(Object.assign(Object.assign({}, config), { method: "DELETE", url })), + rawPost: (url, data, config) => requestRaw(Object.assign(Object.assign({}, config), { method: "POST", url, data })), + rawGet: (url, config) => requestRaw(Object.assign(Object.assign({}, config), { method: "GET", url })), +}; +async function checkAPIHealth() { + try { + const response = await exports.api.get("/health"); + return response.status === "ok"; + } + catch (_a) { + return false; + } +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJmaWxlIjoiQzpcXFVzZXJzXFxIUFxcRGVza3RvcFxcY29kZXJ6LnNwYWNlXFxhcHBzXFx3ZWJcXHNlcnZpY2VzXFxhcGkudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUdBLGdDQUlDO0FBRUQsMEJBTUM7QUFtQkQsd0NBT0M7QUE1SEQsSUFBSSxhQUFhLEdBQXlCLElBQUksQ0FBQztBQUUvQyxTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzlCLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUM7QUFDckQsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFJLEtBQWM7SUFDeEMsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQztBQUM1QyxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsS0FBYyxFQUFFLFFBQWdCO0lBQ3RELElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDcEIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM5QixJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNsRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLEtBQUssQ0FBQyxPQUFPLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNqRixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsS0FBSyxVQUFVLGdCQUFnQjs7SUFDN0IsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUNsQyxNQUFN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RUFBRSxDQUErQixHQUFXLEVBQUUsSUFBUSxFQUFFLE1BQTJCLEVBQUUsRUFBRSxDQUM1RixVQUFVLGlDQUFTLE1BQU0sS0FBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUc7SUFDekQsTUFBTSxFQUFFLENBQUksR0FBVyxFQUFFLE1BQTJCLEVBQUUsRUFBRSxDQUN0RCxVQUFVLGlDQUFTLE1BQU0sS0FBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBRztDQUNuRCxDQUFDO0FBRUssS0FBSyxVQUFVLGNBQWM7SUFDbEMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxXQUFHLENBQUMsR0FBRyxDQUFzQixTQUFTLENBQUMsQ0FBQztRQUMvRCxPQUFPLFFBQVEsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDO0lBQ2xDLENBQUM7SUFBQyxXQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIkM6XFxVc2Vyc1xcSFBcXERlc2t0b3BcXGNvZGVyei5zcGFjZVxcYXBwc1xcd2ViXFxzZXJ2aWNlc1xcYXBpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQXhpb3NFcnJvciwgQXhpb3NJbnN0YW5jZSwgQXhpb3NSZXF1ZXN0Q29uZmlnIH0gZnJvbSBcImF4aW9zXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFwaUVudmVsb3BlPFQ+IHtcclxuICBzdWNjZXNzPzogYm9vbGVhbjtcclxuICBzdGF0dXM/OiBzdHJpbmc7XHJcbiAgbWVzc2FnZT86IHN0cmluZztcclxuICBkYXRhPzogVDtcclxuICBlcnJvcj86IHtcclxuICAgIGNvZGU/OiBudW1iZXI7XHJcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xyXG4gIH07XHJcbn1cclxuXHJcbmxldCBheGlvc0luc3RhbmNlOiBBeGlvc0luc3RhbmNlIHwgbnVsbCA9IG51bGw7XHJcblxyXG5mdW5jdGlvbiBpc1JlY29yZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcclxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoYXNEYXRhRW52ZWxvcGU8VD4odmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBBcGlFbnZlbG9wZTxUPiB7XHJcbiAgcmV0dXJuIGlzUmVjb3JkKHZhbHVlKSAmJiBcImRhdGFcIiBpbiB2YWx1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gZXh0cmFjdE1lc3NhZ2UodmFsdWU6IHVua25vd24sIGZhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIGlmIChpc1JlY29yZCh2YWx1ZSkpIHtcclxuICAgIGNvbnN0IG1lc3NhZ2UgPSB2YWx1ZS5tZXNzYWdlO1xyXG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiICYmIG1lc3NhZ2UudHJpbSgpKSB7XHJcbiAgICAgIHJldHVybiBtZXNzYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVycm9yID0gdmFsdWUuZXJyb3I7XHJcbiAgICBpZiAoaXNSZWNvcmQoZXJyb3IpICYmIHR5cGVvZiBlcnJvci5tZXNzYWdlID09PSBcInN0cmluZ1wiICYmIGVycm9yLm1lc3NhZ2UudHJpbSgpKSB7XHJcbiAgICAgIHJldHVybiBlcnJvci5tZXNzYWdlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZhbGxiYWNrO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBnZXRBeGlvc0luc3RhbmNlKCk6IFByb21pc2U8QXhpb3NJbnN0YW5jZT4ge1xyXG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBUEkgY2xpZW50IGNhbiBvbmx5IGJlIHVzZWQgaW4gdGhlIGJyb3dzZXIuXCIpO1xyXG4gIH1cclxuXHJcbiAgaWYgKGF4aW9zSW5zdGFuY2UpIHtcclxuICAgIHJldHVybiBheGlvc0luc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgYXhpb3MgPSBhd2FpdCBpbXBvcnQoXCJheGlvc1wiKS50aGVuKChtb2R1bGUpID0+IG1vZHVsZS5kZWZhdWx0KTtcclxuICBjb25zdCBiYXNlVVJMID0gcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfQVBJX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9hcGlcIjtcclxuXHJcbiAgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSh7XHJcbiAgICBiYXNlVVJMLFxyXG4gICAgdGltZW91dDogMTUwMDAsXHJcbiAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICBcIlgtUmVxdWVzdGVkLVdpdGhcIjogXCJYTUxIdHRwUmVxdWVzdFwiLFxyXG4gICAgfSxcclxuICB9KTtcclxuXHJcbiAgYXhpb3NJbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKFxyXG4gICAgKHJlc3BvbnNlKSA9PiByZXNwb25zZSxcclxuICAgIGFzeW5jIChlcnJvcjogQXhpb3NFcnJvcikgPT4ge1xyXG4gICAgICBjb25zdCByZXF1ZXN0ID0gZXJyb3IuY29uZmlnO1xyXG4gICAgICBjb25zdCBpc1JlZnJlc2hSZXF1ZXN0ID0gcmVxdWVzdD8udXJsPy5pbmNsdWRlcyhcIi92MS9hdXRoL3JlZnJlc2hcIik7XHJcblxyXG4gICAgICBpZiAoZXJyb3IucmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAxICYmIHJlcXVlc3QgJiYgIWlzUmVmcmVzaFJlcXVlc3QpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgYXhpb3MgPSBhd2FpdCBpbXBvcnQoXCJheGlvc1wiKS50aGVuKChtb2R1bGUpID0+IG1vZHVsZS5kZWZhdWx0KTtcclxuICAgICAgICAgIGNvbnN0IGJhc2UgPSBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19BUElfVVJMID8/IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2FwaVwiO1xyXG4gICAgICAgICAgYXdhaXQgYXhpb3MucG9zdChgJHtiYXNlfS92MS9hdXRoL3JlZnJlc2hgLCB7fSwgeyB3aXRoQ3JlZGVudGlhbHM6IHRydWUgfSk7XHJcbiAgICAgICAgICByZXR1cm4gYXhpb3NJbnN0YW5jZSEocmVxdWVzdCk7XHJcbiAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwiL1wiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBBUElFcnJvcihlcnJvcikpO1xyXG4gICAgfVxyXG4gICk7XHJcblxyXG4gIHJldHVybiBheGlvc0luc3RhbmNlO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQVBJRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1czogbnVtYmVyO1xyXG4gIHB1YmxpYyByZWFkb25seSBkYXRhPzogdW5rbm93bjtcclxuXHJcbiAgY29uc3RydWN0b3IoZXJyb3I6IEF4aW9zRXJyb3IpIHtcclxuICAgIHN1cGVyKGV4dHJhY3RNZXNzYWdlKGVycm9yLnJlc3BvbnNlPy5kYXRhLCBlcnJvci5tZXNzYWdlKSk7XHJcbiAgICB0aGlzLm5hbWUgPSBcIkFQSUVycm9yXCI7XHJcbiAgICB0aGlzLnN0YXR1cyA9IGVycm9yLnJlc3BvbnNlPy5zdGF0dXMgPz8gNTAwO1xyXG4gICAgdGhpcy5kYXRhID0gZXJyb3IucmVzcG9uc2U/LmRhdGE7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdFJhdzxUPihjb25maWc6IEF4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8VD4ge1xyXG4gIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEF4aW9zSW5zdGFuY2UoKTtcclxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0PFQ+KGNvbmZpZyk7XHJcbiAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXF1ZXN0PFQ+KGNvbmZpZzogQXhpb3NSZXF1ZXN0Q29uZmlnKTogUHJvbWlzZTxUPiB7XHJcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0UmF3PFQgfCBBcGlFbnZlbG9wZTxUPj4oY29uZmlnKTtcclxuICBpZiAoaGFzRGF0YUVudmVsb3BlPFQ+KHJlc3BvbnNlKSkge1xyXG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEgYXMgVDtcclxuICB9XHJcbiAgcmV0dXJuIHJlc3BvbnNlIGFzIFQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBhcGkgPSB7XHJcbiAgZ2V0OiA8VD4odXJsOiBzdHJpbmcsIGNvbmZpZz86IEF4aW9zUmVxdWVzdENvbmZpZykgPT5cclxuICAgIHJlcXVlc3Q8VD4oeyAuLi5jb25maWcsIG1ldGhvZDogXCJHRVRcIiwgdXJsIH0pLFxyXG4gIHBvc3Q6IDxULCBCIGV4dGVuZHMgb2JqZWN0ID0gb2JqZWN0Pih1cmw6IHN0cmluZywgZGF0YT86IEIsIGNvbmZpZz86IEF4aW9zUmVxdWVzdENvbmZpZykgPT5cbiAgICByZXF1ZXN0PFQ+KHsgLi4uY29uZmlnLCBtZXRob2Q6IFwiUE9TVFwiLCB1cmwsIGRhdGEgfSksXG4gIHB1dDogPFQsIEIgZXh0ZW5kcyBvYmplY3QgPSBvYmplY3Q+KHVybDogc3RyaW5nLCBkYXRhPzogQiwgY29uZmlnPzogQXhpb3NSZXF1ZXN0Q29uZmlnKSA9PlxuICAgIHJlcXVlc3Q8VD4oeyAuLi5jb25maWcsIG1ldGhvZDogXCJQVVRcIiwgdXJsLCBkYXRhIH0pLFxuICBwYXRjaDogPFQsIEIgZXh0ZW5kcyBvYmplY3QgPSBvYmplY3Q+KHVybDogc3RyaW5nLCBkYXRhPzogQiwgY29uZmlnPzogQXhpb3NSZXF1ZXN0Q29uZmlnKSA9PlxuICAgIHJlcXVlc3Q8VD4oeyAuLi5jb25maWcsIG1ldGhvZDogXCJQQVRDSFwiLCB1cmwsIGRhdGEgfSksXG4gIGRlbGV0ZTogPFQ+KHVybDogc3RyaW5nLCBjb25maWc/OiBBeGlvc1JlcXVlc3RDb25maWcpID0+XHJcbiAgICByZXF1ZXN0PFQ+KHsgLi4uY29uZmlnLCBtZXRob2Q6IFwiREVMRVRFXCIsIHVybCB9KSxcclxuICByYXdQb3N0OiA8VCwgQiBleHRlbmRzIG9iamVjdCA9IG9iamVjdD4odXJsOiBzdHJpbmcsIGRhdGE/OiBCLCBjb25maWc/OiBBeGlvc1JlcXVlc3RDb25maWcpID0+XG4gICAgcmVxdWVzdFJhdzxUPih7IC4uLmNvbmZpZywgbWV0aG9kOiBcIlBPU1RcIiwgdXJsLCBkYXRhIH0pLFxuICByYXdHZXQ6IDxUPih1cmw6IHN0cmluZywgY29uZmlnPzogQXhpb3NSZXF1ZXN0Q29uZmlnKSA9PlxyXG4gICAgcmVxdWVzdFJhdzxUPih7IC4uLmNvbmZpZywgbWV0aG9kOiBcIkdFVFwiLCB1cmwgfSksXHJcbn07XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tBUElIZWFsdGgoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpLmdldDx7IHN0YXR1cz86IHN0cmluZyB9PihcIi9oZWFsdGhcIik7XHJcbiAgICByZXR1cm4gcmVzcG9uc2Uuc3RhdHVzID09PSBcIm9rXCI7XHJcbiAgfSBjYXRjaCB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiJdLCJ2ZXJzaW9uIjozfQ== \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/f3/api_f3e486684b0343eb630d8d673420e918.map b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/f3/api_f3e486684b0343eb630d8d673420e918.map new file mode 100644 index 0000000..57e7c38 --- /dev/null +++ b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/f3/api_f3e486684b0343eb630d8d673420e918.map @@ -0,0 +1 @@ +{"file":"C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\services\\api.ts","mappings":"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","names":[],"sources":["C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\services\\api.ts"],"sourcesContent":["import type { AxiosError, AxiosInstance, AxiosRequestConfig } from \"axios\";\r\n\r\nexport interface ApiEnvelope {\r\n success?: boolean;\r\n status?: string;\r\n message?: string;\r\n data?: T;\r\n error?: {\r\n code?: number;\r\n message?: string;\r\n };\r\n}\r\n\r\nlet axiosInstance: AxiosInstance | null = null;\r\n\r\nfunction isRecord(value: unknown): value is Record {\r\n return typeof value === \"object\" && value !== null;\r\n}\r\n\r\nfunction hasDataEnvelope(value: unknown): value is ApiEnvelope {\r\n return isRecord(value) && \"data\" in value;\r\n}\r\n\r\nfunction extractMessage(value: unknown, fallback: string): string {\r\n if (isRecord(value)) {\r\n const message = value.message;\r\n if (typeof message === \"string\" && message.trim()) {\r\n return message;\r\n }\r\n\r\n const error = value.error;\r\n if (isRecord(error) && typeof error.message === \"string\" && error.message.trim()) {\r\n return error.message;\r\n }\r\n }\r\n\r\n return fallback;\r\n}\r\n\r\nasync function getAxiosInstance(): Promise {\r\n if (typeof window === \"undefined\") {\r\n throw new Error(\"API client can only be used in the browser.\");\r\n }\r\n\r\n if (axiosInstance) {\r\n return axiosInstance;\r\n }\r\n\r\n const axios = await import(\"axios\").then((module) => module.default);\r\n const baseURL = process.env.NEXT_PUBLIC_API_URL ?? \"http://localhost:8080/api\";\r\n\r\n axiosInstance = axios.create({\r\n baseURL,\r\n timeout: 15000,\r\n withCredentials: true,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"X-Requested-With\": \"XMLHttpRequest\",\r\n },\r\n });\r\n\r\n axiosInstance.interceptors.response.use(\r\n (response) => response,\r\n async (error: AxiosError) => {\r\n const request = error.config;\r\n const isRefreshRequest = request?.url?.includes(\"/v1/auth/refresh\");\r\n\r\n if (error.response?.status === 401 && request && !isRefreshRequest) {\r\n try {\r\n const axios = await import(\"axios\").then((module) => module.default);\r\n const base = process.env.NEXT_PUBLIC_API_URL ?? \"http://localhost:8080/api\";\r\n await axios.post(`${base}/v1/auth/refresh`, {}, { withCredentials: true });\r\n return axiosInstance!(request);\r\n } catch {\r\n if (typeof window !== \"undefined\") {\r\n window.location.href = \"/\";\r\n }\r\n }\r\n }\r\n\r\n return Promise.reject(new APIError(error));\r\n }\r\n );\r\n\r\n return axiosInstance;\r\n}\r\n\r\nexport class APIError extends Error {\r\n public readonly status: number;\r\n public readonly data?: unknown;\r\n\r\n constructor(error: AxiosError) {\r\n super(extractMessage(error.response?.data, error.message));\r\n this.name = \"APIError\";\r\n this.status = error.response?.status ?? 500;\r\n this.data = error.response?.data;\r\n }\r\n}\r\n\r\nexport async function requestRaw(config: AxiosRequestConfig): Promise {\r\n const client = await getAxiosInstance();\r\n const response = await client.request(config);\r\n return response.data;\r\n}\r\n\r\nexport async function request(config: AxiosRequestConfig): Promise {\r\n const response = await requestRaw>(config);\r\n if (hasDataEnvelope(response)) {\r\n return response.data as T;\r\n }\r\n return response as T;\r\n}\r\n\r\nexport const api = {\r\n get: (url: string, config?: AxiosRequestConfig) =>\r\n request({ ...config, method: \"GET\", url }),\r\n post: (url: string, data?: B, config?: AxiosRequestConfig) =>\n request({ ...config, method: \"POST\", url, data }),\n put: (url: string, data?: B, config?: AxiosRequestConfig) =>\n request({ ...config, method: \"PUT\", url, data }),\n patch: (url: string, data?: B, config?: AxiosRequestConfig) =>\n request({ ...config, method: \"PATCH\", url, data }),\n delete: (url: string, config?: AxiosRequestConfig) =>\r\n request({ ...config, method: \"DELETE\", url }),\r\n rawPost: (url: string, data?: B, config?: AxiosRequestConfig) =>\n requestRaw({ ...config, method: \"POST\", url, data }),\n rawGet: (url: string, config?: AxiosRequestConfig) =>\r\n requestRaw({ ...config, method: \"GET\", url }),\r\n};\r\n\r\nexport async function checkAPIHealth(): Promise {\r\n try {\r\n const response = await api.get<{ status?: string }>(\"/health\");\r\n return response.status === \"ok\";\r\n } catch {\r\n return false;\r\n }\r\n}\r\n"],"version":3} \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/ff/MenteeLoginCardtest_ffc687240b1ce7e203e11c29e4587777 b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/ff/MenteeLoginCardtest_ffc687240b1ce7e203e11c29e4587777 new file mode 100644 index 0000000..098bebf --- /dev/null +++ b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/ff/MenteeLoginCardtest_ffc687240b1ce7e203e11c29e4587777 @@ -0,0 +1,62 @@ +0df0aeca997bc96bf26263d38e969d98 +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const jsx_runtime_1 = require("react/jsx-runtime"); +jest.mock("next/navigation", () => ({ + useRouter: () => ({ + push, + }), +})); +jest.mock("@/services/auth", () => ({ + loginMenteeByEmail: jest.fn(), +})); +const react_1 = require("@testing-library/react"); +const user_event_1 = __importDefault(require("@testing-library/user-event")); +const MenteeLoginCard_1 = __importDefault(require("./MenteeLoginCard")); +const auth_1 = require("@/services/auth"); +const push = jest.fn(); +describe("MenteeLoginCard", () => { + beforeEach(() => { + push.mockReset(); + auth_1.loginMenteeByEmail.mockReset(); + }); + it("routes approved mentees to their dashboard", async () => { + auth_1.loginMenteeByEmail.mockResolvedValue({ + auth: { + accessToken: "access", + refreshToken: "refresh", + user: { + id: "1", + name: "Alice", + email: "alice@example.com", + emailVerified: true, + }, + }, + context: { + role: "mentee", + accountStatus: "approved", + user: { + id: "1", + name: "Alice Example", + firstName: "Alice", + lastName: "Example", + username: "alice", + email: "alice@example.com", + }, + }, + }); + const user = user_event_1.default.setup(); + (0, react_1.render)((0, jsx_runtime_1.jsx)(MenteeLoginCard_1.default, { role: "mentee", onClose: jest.fn(), onSignUp: jest.fn() })); + await user.type(react_1.screen.getByPlaceholderText("Email address"), "alice@example.com"); + await user.type(react_1.screen.getByPlaceholderText("Password"), "password123"); + await user.click(react_1.screen.getByRole("button", { name: "Log In" })); + await (0, react_1.waitFor)(() => { + expect(auth_1.loginMenteeByEmail).toHaveBeenCalledWith("alice@example.com", "password123"); + expect(push).toHaveBeenCalledWith("/mentee-dashboard/alice"); + }); + }); +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJmaWxlIjoiQzpcXFVzZXJzXFxIUFxcRGVza3RvcFxcY29kZXJ6LnNwYWNlXFxhcHBzXFx3ZWJcXGNvbXBvbmVudHNcXE1lbnRlZUxvZ2luQ2FyZC50ZXN0LnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFPQSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDbEMsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDaEIsSUFBSTtLQUNMLENBQUM7Q0FDSCxDQUFDLENBQUMsQ0FBQztBQUVKLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNsQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO0NBQzlCLENBQUMsQ0FBQyxDQUFDO0FBZkosa0RBQWlFO0FBQ2pFLDZFQUFvRDtBQUNwRCx3RUFBZ0Q7QUFDaEQsMENBQXFEO0FBRXJELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQVl2QixRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO0lBQy9CLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDaEIseUJBQWdDLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNENBQTRDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDekQseUJBQWdDLENBQUMsaUJBQWlCLENBQUM7WUFDbEQsSUFBSSxFQUFFO2dCQUNKLFdBQVcsRUFBRSxRQUFRO2dCQUNyQixZQUFZLEVBQUUsU0FBUztnQkFDdkIsSUFBSSxFQUFFO29CQUNKLEVBQUUsRUFBRSxHQUFHO29CQUNQLElBQUksRUFBRSxPQUFPO29CQUNiLEtBQUssRUFBRSxtQkFBbUI7b0JBQzFCLGFBQWEsRUFBRSxJQUFJO2lCQUNwQjthQUNGO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxRQUFRO2dCQUNkLGFBQWEsRUFBRSxVQUFVO2dCQUN6QixJQUFJLEVBQUU7b0JBQ0osRUFBRSxFQUFFLEdBQUc7b0JBQ1AsSUFBSSxFQUFFLGVBQWU7b0JBQ3JCLFNBQVMsRUFBRSxPQUFPO29CQUNsQixRQUFRLEVBQUUsU0FBUztvQkFDbkIsUUFBUSxFQUFFLE9BQU87b0JBQ2pCLEtBQUssRUFBRSxtQkFBbUI7aUJBQzNCO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxNQUFNLElBQUksR0FBRyxvQkFBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLElBQUEsY0FBTSxFQUFDLHVCQUFDLHlCQUFlLElBQUMsSUFBSSxFQUFDLFFBQVEsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUksQ0FBQyxDQUFDO1FBRW5GLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFNLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUNuRixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBTSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFakUsTUFBTSxJQUFBLGVBQU8sRUFBQyxHQUFHLEVBQUU7WUFDakIsTUFBTSxDQUFDLHlCQUFrQixDQUFDLENBQUMsb0JBQW9CLENBQUMsbUJBQW1CLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDcEYsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLG9CQUFvQixDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIkM6XFxVc2Vyc1xcSFBcXERlc2t0b3BcXGNvZGVyei5zcGFjZVxcYXBwc1xcd2ViXFxjb21wb25lbnRzXFxNZW50ZWVMb2dpbkNhcmQudGVzdC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVuZGVyLCBzY3JlZW4sIHdhaXRGb3IgfSBmcm9tIFwiQHRlc3RpbmctbGlicmFyeS9yZWFjdFwiO1xyXG5pbXBvcnQgdXNlckV2ZW50IGZyb20gXCJAdGVzdGluZy1saWJyYXJ5L3VzZXItZXZlbnRcIjtcclxuaW1wb3J0IE1lbnRlZUxvZ2luQ2FyZCBmcm9tIFwiLi9NZW50ZWVMb2dpbkNhcmRcIjtcclxuaW1wb3J0IHsgbG9naW5NZW50ZWVCeUVtYWlsIH0gZnJvbSBcIkAvc2VydmljZXMvYXV0aFwiO1xyXG5cclxuY29uc3QgcHVzaCA9IGplc3QuZm4oKTtcclxuXHJcbmplc3QubW9jayhcIm5leHQvbmF2aWdhdGlvblwiLCAoKSA9PiAoe1xyXG4gIHVzZVJvdXRlcjogKCkgPT4gKHtcclxuICAgIHB1c2gsXHJcbiAgfSksXHJcbn0pKTtcclxuXHJcbmplc3QubW9jayhcIkAvc2VydmljZXMvYXV0aFwiLCAoKSA9PiAoe1xyXG4gIGxvZ2luTWVudGVlQnlFbWFpbDogamVzdC5mbigpLFxyXG59KSk7XHJcblxyXG5kZXNjcmliZShcIk1lbnRlZUxvZ2luQ2FyZFwiLCAoKSA9PiB7XHJcbiAgYmVmb3JlRWFjaCgoKSA9PiB7XHJcbiAgICBwdXNoLm1vY2tSZXNldCgpO1xyXG4gICAgKGxvZ2luTWVudGVlQnlFbWFpbCBhcyBqZXN0Lk1vY2spLm1vY2tSZXNldCgpO1xyXG4gIH0pO1xyXG5cclxuICBpdChcInJvdXRlcyBhcHByb3ZlZCBtZW50ZWVzIHRvIHRoZWlyIGRhc2hib2FyZFwiLCBhc3luYyAoKSA9PiB7XHJcbiAgICAobG9naW5NZW50ZWVCeUVtYWlsIGFzIGplc3QuTW9jaykubW9ja1Jlc29sdmVkVmFsdWUoe1xyXG4gICAgICBhdXRoOiB7XHJcbiAgICAgICAgYWNjZXNzVG9rZW46IFwiYWNjZXNzXCIsXHJcbiAgICAgICAgcmVmcmVzaFRva2VuOiBcInJlZnJlc2hcIixcclxuICAgICAgICB1c2VyOiB7XHJcbiAgICAgICAgICBpZDogXCIxXCIsXHJcbiAgICAgICAgICBuYW1lOiBcIkFsaWNlXCIsXHJcbiAgICAgICAgICBlbWFpbDogXCJhbGljZUBleGFtcGxlLmNvbVwiLFxyXG4gICAgICAgICAgZW1haWxWZXJpZmllZDogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgcm9sZTogXCJtZW50ZWVcIixcclxuICAgICAgICBhY2NvdW50U3RhdHVzOiBcImFwcHJvdmVkXCIsXHJcbiAgICAgICAgdXNlcjoge1xyXG4gICAgICAgICAgaWQ6IFwiMVwiLFxyXG4gICAgICAgICAgbmFtZTogXCJBbGljZSBFeGFtcGxlXCIsXHJcbiAgICAgICAgICBmaXJzdE5hbWU6IFwiQWxpY2VcIixcclxuICAgICAgICAgIGxhc3ROYW1lOiBcIkV4YW1wbGVcIixcclxuICAgICAgICAgIHVzZXJuYW1lOiBcImFsaWNlXCIsXHJcbiAgICAgICAgICBlbWFpbDogXCJhbGljZUBleGFtcGxlLmNvbVwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB1c2VyID0gdXNlckV2ZW50LnNldHVwKCk7XHJcbiAgICByZW5kZXIoPE1lbnRlZUxvZ2luQ2FyZCByb2xlPVwibWVudGVlXCIgb25DbG9zZT17amVzdC5mbigpfSBvblNpZ25VcD17amVzdC5mbigpfSAvPik7XHJcblxyXG4gICAgYXdhaXQgdXNlci50eXBlKHNjcmVlbi5nZXRCeVBsYWNlaG9sZGVyVGV4dChcIkVtYWlsIGFkZHJlc3NcIiksIFwiYWxpY2VAZXhhbXBsZS5jb21cIik7XHJcbiAgICBhd2FpdCB1c2VyLnR5cGUoc2NyZWVuLmdldEJ5UGxhY2Vob2xkZXJUZXh0KFwiUGFzc3dvcmRcIiksIFwicGFzc3dvcmQxMjNcIik7XHJcbiAgICBhd2FpdCB1c2VyLmNsaWNrKHNjcmVlbi5nZXRCeVJvbGUoXCJidXR0b25cIiwgeyBuYW1lOiBcIkxvZyBJblwiIH0pKTtcclxuXHJcbiAgICBhd2FpdCB3YWl0Rm9yKCgpID0+IHtcclxuICAgICAgZXhwZWN0KGxvZ2luTWVudGVlQnlFbWFpbCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoXCJhbGljZUBleGFtcGxlLmNvbVwiLCBcInBhc3N3b3JkMTIzXCIpO1xyXG4gICAgICBleHBlY3QocHVzaCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoXCIvbWVudGVlLWRhc2hib2FyZC9hbGljZVwiKTtcclxuICAgIH0pO1xyXG4gIH0pO1xyXG59KTtcclxuIl0sInZlcnNpb24iOjN9 \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/ff/MenteeLoginCardtest_ffc687240b1ce7e203e11c29e4587777.map b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/ff/MenteeLoginCardtest_ffc687240b1ce7e203e11c29e4587777.map new file mode 100644 index 0000000..6c94393 --- /dev/null +++ b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/ff/MenteeLoginCardtest_ffc687240b1ce7e203e11c29e4587777.map @@ -0,0 +1 @@ +{"file":"C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\components\\MenteeLoginCard.test.tsx","mappings":";;;;;;AAOA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QAChB,IAAI;KACL,CAAC;CACH,CAAC,CAAC,CAAC;AAEJ,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,kBAAkB,EAAE,IAAI,CAAC,EAAE,EAAE;CAC9B,CAAC,CAAC,CAAC;AAfJ,kDAAiE;AACjE,6EAAoD;AACpD,wEAAgD;AAChD,0CAAqD;AAErD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AAYvB,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,SAAS,EAAE,CAAC;QAChB,yBAAgC,CAAC,SAAS,EAAE,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QACzD,yBAAgC,CAAC,iBAAiB,CAAC;YAClD,IAAI,EAAE;gBACJ,WAAW,EAAE,QAAQ;gBACrB,YAAY,EAAE,SAAS;gBACvB,IAAI,EAAE;oBACJ,EAAE,EAAE,GAAG;oBACP,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,mBAAmB;oBAC1B,aAAa,EAAE,IAAI;iBACpB;aACF;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,aAAa,EAAE,UAAU;gBACzB,IAAI,EAAE;oBACJ,EAAE,EAAE,GAAG;oBACP,IAAI,EAAE,eAAe;oBACrB,SAAS,EAAE,OAAO;oBAClB,QAAQ,EAAE,SAAS;oBACnB,QAAQ,EAAE,OAAO;oBACjB,KAAK,EAAE,mBAAmB;iBAC3B;aACF;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,oBAAS,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAA,cAAM,EAAC,uBAAC,yBAAe,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,GAAI,CAAC,CAAC;QAEnF,MAAM,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC,oBAAoB,CAAC,eAAe,CAAC,EAAE,mBAAmB,CAAC,CAAC;QACnF,MAAM,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,CAAC;QACxE,MAAM,IAAI,CAAC,KAAK,CAAC,cAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAEjE,MAAM,IAAA,eAAO,EAAC,GAAG,EAAE;YACjB,MAAM,CAAC,yBAAkB,CAAC,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC;YACpF,MAAM,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,yBAAyB,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","names":[],"sources":["C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\components\\MenteeLoginCard.test.tsx"],"sourcesContent":["import { render, screen, waitFor } from \"@testing-library/react\";\r\nimport userEvent from \"@testing-library/user-event\";\r\nimport MenteeLoginCard from \"./MenteeLoginCard\";\r\nimport { loginMenteeByEmail } from \"@/services/auth\";\r\n\r\nconst push = jest.fn();\r\n\r\njest.mock(\"next/navigation\", () => ({\r\n useRouter: () => ({\r\n push,\r\n }),\r\n}));\r\n\r\njest.mock(\"@/services/auth\", () => ({\r\n loginMenteeByEmail: jest.fn(),\r\n}));\r\n\r\ndescribe(\"MenteeLoginCard\", () => {\r\n beforeEach(() => {\r\n push.mockReset();\r\n (loginMenteeByEmail as jest.Mock).mockReset();\r\n });\r\n\r\n it(\"routes approved mentees to their dashboard\", async () => {\r\n (loginMenteeByEmail as jest.Mock).mockResolvedValue({\r\n auth: {\r\n accessToken: \"access\",\r\n refreshToken: \"refresh\",\r\n user: {\r\n id: \"1\",\r\n name: \"Alice\",\r\n email: \"alice@example.com\",\r\n emailVerified: true,\r\n },\r\n },\r\n context: {\r\n role: \"mentee\",\r\n accountStatus: \"approved\",\r\n user: {\r\n id: \"1\",\r\n name: \"Alice Example\",\r\n firstName: \"Alice\",\r\n lastName: \"Example\",\r\n username: \"alice\",\r\n email: \"alice@example.com\",\r\n },\r\n },\r\n });\r\n\r\n const user = userEvent.setup();\r\n render();\r\n\r\n await user.type(screen.getByPlaceholderText(\"Email address\"), \"alice@example.com\");\r\n await user.type(screen.getByPlaceholderText(\"Password\"), \"password123\");\r\n await user.click(screen.getByRole(\"button\", { name: \"Log In\" }));\r\n\r\n await waitFor(() => {\r\n expect(loginMenteeByEmail).toHaveBeenCalledWith(\"alice@example.com\", \"password123\");\r\n expect(push).toHaveBeenCalledWith(\"/mentee-dashboard/alice\");\r\n });\r\n });\r\n});\r\n"],"version":3} \ No newline at end of file diff --git a/apps/web/.jest-cache/perf-cache-0e73593c623698a6feedabd9be3f11fc-da39a3ee5e6b4b0d3255bfef95601890 b/apps/web/.jest-cache/perf-cache-0e73593c623698a6feedabd9be3f11fc-da39a3ee5e6b4b0d3255bfef95601890 new file mode 100644 index 0000000..0a62140 --- /dev/null +++ b/apps/web/.jest-cache/perf-cache-0e73593c623698a6feedabd9be3f11fc-da39a3ee5e6b4b0d3255bfef95601890 @@ -0,0 +1 @@ +{"C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\components\\MenteeSignUpCard.test.tsx":[1,5103],"C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\components\\MenteeLoginCard.test.tsx":[1,1816],"C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\services\\api.test.ts":[1,708],"C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\__tests__\\example.test.tsx":[1,303]} \ No newline at end of file diff --git a/apps/web/__tests__/example.test.tsx b/apps/web/__tests__/example.test.tsx index 730f292..7f5d0f3 100644 --- a/apps/web/__tests__/example.test.tsx +++ b/apps/web/__tests__/example.test.tsx @@ -1,6 +1,3 @@ -import React from 'react'; -import { render, screen } from '@testing-library/react'; - describe('Example test', () => { it('should pass', () => { expect(1 + 1).toBe(2); diff --git a/apps/web/app/layout.tsx b/apps/web/app/layout.tsx index e4b8221..ea57fea 100644 --- a/apps/web/app/layout.tsx +++ b/apps/web/app/layout.tsx @@ -1,4 +1,5 @@ import type { Metadata } from "next"; +import Script from "next/script"; import "./globals.css"; import ThemeToggle from "@/components/ThemeToggle"; @@ -15,13 +16,10 @@ export default function RootLayout({ }>) { return ( - - {/* Blocking script: sets dark class before first paint to avoid flash */} - - + {children} diff --git a/apps/web/components/HeroSection.tsx b/apps/web/components/HeroSection.tsx index 2b53727..83ff067 100644 --- a/apps/web/components/HeroSection.tsx +++ b/apps/web/components/HeroSection.tsx @@ -2,19 +2,41 @@ import { HeroSectionProps } from "@/types"; export default function HeroSection({ onGetStarted }: HeroSectionProps) { return ( -
-

- Welcome to Algo Buddy -

-

- A collaborative platform where developers master DSA and tech stacks through peer learning, problem-solving, and real progress tracking. -

- +
+
+
+
+

+ Peer learning for serious DSA practice +

+

+ Welcome to Algo Buddy +

+

+ A collaborative platform where developers master DSA and tech stacks through peer learning, problem-solving, and real progress tracking. +

+ +
+ +
+ {[ + ["01", "Choose your role", "Mentor and mentee paths stay focused from the first click."], + ["02", "Practice with structure", "Assignments and sheets keep daily progress visible."], + ["03", "Track real growth", "Profiles and leaderboards make outcomes easy to scan."], + ].map(([step, title, text]) => ( +
+

{step}

+

{title}

+

{text}

+
+ ))} +
+
); } diff --git a/apps/web/components/LandingPage.tsx b/apps/web/components/LandingPage.tsx index 26d3321..7fa787e 100644 --- a/apps/web/components/LandingPage.tsx +++ b/apps/web/components/LandingPage.tsx @@ -1,6 +1,6 @@ "use client"; -import { useState } from "react"; +import { useCallback, useState } from "react"; import type { Role } from "@/types"; import HeroSection from "@/components/HeroSection"; import RoleCard from "@/components/RoleCard"; @@ -14,33 +14,38 @@ export default function LandingPage() { const [view, setView] = useState("none"); const [activeRole, setActiveRole] = useState(null); - const handleSelectRole = async (role: Role) => { + const closeDialog = useCallback(() => setView("none"), []); + const showRoleSelect = useCallback(() => setView("roleSelect"), []); + const showSignUp = useCallback(() => setView("signUp"), []); + const showLogin = useCallback(() => setView("login"), []); + + const handleSelectRole = useCallback(async (role: Role) => { await selectRole(role); setActiveRole(role); setView("login"); - }; + }, []); return ( -
- setView("roleSelect")} /> +
+ {view === "roleSelect" && ( - setView("none")} /> + )} {view === "login" && activeRole && ( setView("none")} - onSignUp={() => setView("signUp")} + onClose={closeDialog} + onSignUp={showSignUp} /> )} {view === "signUp" && activeRole && ( setView("none")} - onBackToLogin={() => setView("login")} + onClose={closeDialog} + onBackToLogin={showLogin} /> )}
diff --git a/apps/web/components/MenteeLoginCard.tsx b/apps/web/components/MenteeLoginCard.tsx index 0d8fcbe..d507300 100644 --- a/apps/web/components/MenteeLoginCard.tsx +++ b/apps/web/components/MenteeLoginCard.tsx @@ -1,8 +1,9 @@ "use client"; -import { useState } from "react"; +import { useState, type FormEvent } from "react"; import { useRouter } from "next/navigation"; import { loginMenteeByEmail } from "@/services/auth"; +import Modal from "@/components/Modal"; interface MenteeLoginCardProps { role: "mentor" | "mentee"; @@ -25,7 +26,7 @@ function EyeIcon({ visible }: { visible: boolean }) { } const inputClass = - "w-full rounded-lg border border-purple-300 bg-white px-4 py-2 text-gray-900 focus:outline-none focus:ring-2 focus:ring-purple-500 dark:border-purple-700 dark:bg-gray-800 dark:text-gray-100"; + "w-full rounded-lg border border-purple-200 bg-white px-4 py-2 text-gray-900 transition focus:outline-none focus:ring-2 focus:ring-purple-500 dark:border-purple-800 dark:bg-gray-800 dark:text-gray-100"; export default function MenteeLoginCard({ role, onClose, onSignUp }: MenteeLoginCardProps) { const [email, setEmail] = useState(""); @@ -35,7 +36,8 @@ export default function MenteeLoginCard({ role, onClose, onSignUp }: MenteeLogin const [loading, setLoading] = useState(false); const router = useRouter(); - const handleLogin = async () => { + const handleLogin = async (event?: FormEvent) => { + event?.preventDefault(); setError(""); if (!email.trim() || !password) { setError("Please fill in all fields."); @@ -69,10 +71,10 @@ export default function MenteeLoginCard({ role, onClose, onSignUp }: MenteeLogin }; return ( -
-
event.stopPropagation()} + +

{role === "mentor" ? "Mentor Login" : "Mentee Login"} @@ -84,6 +86,7 @@ export default function MenteeLoginCard({ role, onClose, onSignUp }: MenteeLogin value={email} onChange={(event) => setEmail(event.target.value)} className={inputClass} + autoComplete="email" />
@@ -93,6 +96,7 @@ export default function MenteeLoginCard({ role, onClose, onSignUp }: MenteeLogin value={password} onChange={(event) => setPassword(event.target.value)} className={`${inputClass} pr-10`} + autoComplete="current-password" />
- {error ?

{error}

: null} - -

+ {role === "mentee" ? ( ) : null} -
+ ); } diff --git a/apps/web/components/MenteeSignUpCard.tsx b/apps/web/components/MenteeSignUpCard.tsx index cf1d370..8c873f7 100644 --- a/apps/web/components/MenteeSignUpCard.tsx +++ b/apps/web/components/MenteeSignUpCard.tsx @@ -1,7 +1,8 @@ "use client"; -import { useState } from "react"; +import { useState, type FormEvent } from "react"; import { registerMentee } from "@/services/auth"; +import Modal from "@/components/Modal"; interface MenteeSignUpCardProps { role: "mentor" | "mentee"; @@ -24,7 +25,7 @@ function EyeIcon({ visible }: { visible: boolean }) { } const inputClass = - "w-full rounded-lg border border-purple-300 bg-white px-4 py-2 text-gray-900 focus:outline-none focus:ring-2 focus:ring-purple-500 dark:border-purple-700 dark:bg-gray-800 dark:text-gray-100"; + "w-full rounded-lg border border-purple-200 bg-white px-4 py-2 text-gray-900 transition focus:outline-none focus:ring-2 focus:ring-purple-500 dark:border-purple-800 dark:bg-gray-800 dark:text-gray-100"; export default function MenteeSignUpCard({ role, onClose, onBackToLogin }: MenteeSignUpCardProps) { const [firstName, setFirstName] = useState(""); @@ -39,7 +40,8 @@ export default function MenteeSignUpCard({ role, onClose, onBackToLogin }: Mente const [error, setError] = useState(""); const [loading, setLoading] = useState(false); - const handleSignUp = async () => { + const handleSignUp = async (event?: FormEvent) => { + event?.preventDefault(); setError(""); if (role !== "mentee") { setError("Mentor accounts are provisioned separately."); @@ -77,27 +79,29 @@ export default function MenteeSignUpCard({ role, onClose, onBackToLogin }: Mente }; return ( -
-
event.stopPropagation()} + +

Mentee Sign Up

-
+
setFirstName(event.target.value)} - className="w-1/2 rounded-lg border border-purple-300 bg-white px-4 py-2 text-gray-900 focus:outline-none focus:ring-2 focus:ring-purple-500 dark:border-purple-700 dark:bg-gray-800 dark:text-gray-100" + className={inputClass} + autoComplete="given-name" /> setLastName(event.target.value)} - className="w-1/2 rounded-lg border border-purple-300 bg-white px-4 py-2 text-gray-900 focus:outline-none focus:ring-2 focus:ring-purple-500 dark:border-purple-700 dark:bg-gray-800 dark:text-gray-100" + className={inputClass} + autoComplete="family-name" />
@@ -107,6 +111,7 @@ export default function MenteeSignUpCard({ role, onClose, onBackToLogin }: Mente value={username} onChange={(event) => setUsername(event.target.value)} className={inputClass} + autoComplete="username" /> setEmail(event.target.value)} className={inputClass} + autoComplete="email" />
@@ -124,6 +130,7 @@ export default function MenteeSignUpCard({ role, onClose, onBackToLogin }: Mente value={password} onChange={(event) => setPassword(event.target.value)} className={`${inputClass} pr-10`} + autoComplete="new-password" /> - -
-
+
+
); } diff --git a/apps/web/components/Modal.tsx b/apps/web/components/Modal.tsx index 35e3f34..7f8e8a7 100644 --- a/apps/web/components/Modal.tsx +++ b/apps/web/components/Modal.tsx @@ -21,7 +21,9 @@ export default function Modal({ onClose, children, className = "" }: ModalProps) return (
{ if (innerRef.current && !innerRef.current.contains(e.target as Node)) { onClose(); diff --git a/apps/web/components/RoleCard.tsx b/apps/web/components/RoleCard.tsx index 25bacfb..85d864c 100644 --- a/apps/web/components/RoleCard.tsx +++ b/apps/web/components/RoleCard.tsx @@ -1,31 +1,24 @@ import { RoleCardProps } from "@/types"; +import Modal from "@/components/Modal"; export default function RoleCard({ onSelectRole, onClose }: RoleCardProps) { return ( -
-
e.stopPropagation()} + +

+ Log in as +

+ - -
-
+ Mentor + + + ); } diff --git a/apps/web/components/ThemeToggle.tsx b/apps/web/components/ThemeToggle.tsx index ee977cb..edbc0fc 100644 --- a/apps/web/components/ThemeToggle.tsx +++ b/apps/web/components/ThemeToggle.tsx @@ -29,9 +29,10 @@ export default function ThemeToggle() { return ( \r\n
\r\n\r\n
\r\n setConfirmPassword(event.target.value)}\n className={`${inputClass} pr-10`}\n autoComplete=\"new-password\"\n />\n setShowConfirm((value) => !value)}\r\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-gray-500 hover:text-purple-600 dark:text-gray-400\"\r\n aria-label={showConfirm ? \"Hide confirm password\" : \"Show confirm password\"}\r\n >\r\n \r\n \r\n
\r\n\r\n {error ?

{error}

: null}\r\n {submitted ? (\r\n

\r\n Sign-up request submitted. A mentor will approve your account before you can log in.\r\n

\r\n ) : null}\r\n\r\n \n {loading ? \"Signing up...\" : \"Sign Up\"}\n \n\n \n \n \n );\n}\n"],"version":3} \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/1d/exampletest_1d61cb64abc64c39e39a99b8cfb419e2 b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/1d/exampletest_1d61cb64abc64c39e39a99b8cfb419e2 deleted file mode 100644 index 92fc03b..0000000 --- a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/1d/exampletest_1d61cb64abc64c39e39a99b8cfb419e2 +++ /dev/null @@ -1,8 +0,0 @@ -66de64206eac242e33e814353d0e2be6 -"use strict"; -describe('Example test', () => { - it('should pass', () => { - expect(1 + 1).toBe(2); - }); -}); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJmaWxlIjoiQzpcXFVzZXJzXFxIUFxcRGVza3RvcFxcY29kZXJ6LnNwYWNlXFxhcHBzXFx3ZWJcXF9fdGVzdHNfX1xcZXhhbXBsZS50ZXN0LnRzeCIsIm1hcHBpbmdzIjoiO0FBQUEsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7SUFDNUIsRUFBRSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7UUFDckIsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyJDOlxcVXNlcnNcXEhQXFxEZXNrdG9wXFxjb2Rlcnouc3BhY2VcXGFwcHNcXHdlYlxcX190ZXN0c19fXFxleGFtcGxlLnRlc3QudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImRlc2NyaWJlKCdFeGFtcGxlIHRlc3QnLCAoKSA9PiB7XG4gIGl0KCdzaG91bGQgcGFzcycsICgpID0+IHtcbiAgICBleHBlY3QoMSArIDEpLnRvQmUoMik7XG4gIH0pO1xyXG59KTtcclxuIl0sInZlcnNpb24iOjN9 \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/1d/exampletest_1d61cb64abc64c39e39a99b8cfb419e2.map b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/1d/exampletest_1d61cb64abc64c39e39a99b8cfb419e2.map deleted file mode 100644 index fae33d2..0000000 --- a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/1d/exampletest_1d61cb64abc64c39e39a99b8cfb419e2.map +++ /dev/null @@ -1 +0,0 @@ -{"file":"C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\__tests__\\example.test.tsx","mappings":";AAAA,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;QACrB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","names":[],"sources":["C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\__tests__\\example.test.tsx"],"sourcesContent":["describe('Example test', () => {\n it('should pass', () => {\n expect(1 + 1).toBe(2);\n });\r\n});\r\n"],"version":3} \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/2a/MenteeSignUpCardtest_2ad92192295b373e1a37119360895eb4 b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/2a/MenteeSignUpCardtest_2ad92192295b373e1a37119360895eb4 deleted file mode 100644 index 86b2551..0000000 --- a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/2a/MenteeSignUpCardtest_2ad92192295b373e1a37119360895eb4 +++ /dev/null @@ -1,50 +0,0 @@ -3fa57ddf52ada09d934dfe71c5bdcf30 -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const jsx_runtime_1 = require("react/jsx-runtime"); -jest.mock("@/services/auth", () => ({ - registerMentee: jest.fn(), -})); -const react_1 = require("@testing-library/react"); -const user_event_1 = __importDefault(require("@testing-library/user-event")); -const MenteeSignUpCard_1 = __importDefault(require("./MenteeSignUpCard")); -const auth_1 = require("@/services/auth"); -describe("MenteeSignUpCard", () => { - beforeEach(() => { - auth_1.registerMentee.mockReset(); - }); - it("shows the pending approval message after signup", async () => { - auth_1.registerMentee.mockResolvedValue({ - id: "request-1", - firstName: "Alice", - lastName: "Example", - username: "alice", - email: "alice@example.com", - signedUpAt: new Date().toISOString(), - status: "pending", - }); - const user = user_event_1.default.setup(); - (0, react_1.render)((0, jsx_runtime_1.jsx)(MenteeSignUpCard_1.default, { role: "mentee", onClose: jest.fn(), onBackToLogin: jest.fn() })); - await user.type(react_1.screen.getByPlaceholderText("First Name"), "Alice"); - await user.type(react_1.screen.getByPlaceholderText("Last Name"), "Example"); - await user.type(react_1.screen.getByPlaceholderText("Username"), "alice"); - await user.type(react_1.screen.getByPlaceholderText("Email"), "alice@example.com"); - await user.type(react_1.screen.getByPlaceholderText("Set Password (min 8 chars)"), "password123"); - await user.type(react_1.screen.getByPlaceholderText("Confirm Password"), "password123"); - await user.click(react_1.screen.getByRole("button", { name: "Sign Up" })); - await (0, react_1.waitFor)(() => { - expect(auth_1.registerMentee).toHaveBeenCalledWith({ - firstName: "Alice", - lastName: "Example", - username: "alice", - email: "alice@example.com", - password: "password123", - }); - }); - expect(react_1.screen.getByText("Sign-up request submitted. A mentor will approve your account before you can log in.")).toBeInTheDocument(); - }); -}); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJmaWxlIjoiQzpcXFVzZXJzXFxIUFxcRGVza3RvcFxcY29kZXJ6LnNwYWNlXFxhcHBzXFx3ZWJcXGNvbXBvbmVudHNcXE1lbnRlZVNpZ25VcENhcmQudGVzdC50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBS0EsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLGNBQWMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO0NBQzFCLENBQUMsQ0FBQyxDQUFDO0FBUEosa0RBQWlFO0FBQ2pFLDZFQUFvRDtBQUNwRCwwRUFBa0Q7QUFDbEQsMENBQWlEO0FBTWpELFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUU7SUFDaEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNiLHFCQUE0QixDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzVDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGlEQUFpRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzlELHFCQUE0QixDQUFDLGlCQUFpQixDQUFDO1lBQzlDLEVBQUUsRUFBRSxXQUFXO1lBQ2YsU0FBUyxFQUFFLE9BQU87WUFDbEIsUUFBUSxFQUFFLFNBQVM7WUFDbkIsUUFBUSxFQUFFLE9BQU87WUFDakIsS0FBSyxFQUFFLG1CQUFtQjtZQUMxQixVQUFVLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDcEMsTUFBTSxFQUFFLFNBQVM7U0FDbEIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxJQUFJLEdBQUcsb0JBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixJQUFBLGNBQU0sRUFBQyx1QkFBQywwQkFBZ0IsSUFBQyxJQUFJLEVBQUMsUUFBUSxFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBSSxDQUFDLENBQUM7UUFFekYsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQU0sQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwRSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBTSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFNLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEUsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQU0sQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFNLENBQUMsb0JBQW9CLENBQUMsNEJBQTRCLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMxRixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBTSxDQUFDLG9CQUFvQixDQUFDLGtCQUFrQixDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDaEYsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVsRSxNQUFNLElBQUEsZUFBTyxFQUFDLEdBQUcsRUFBRTtZQUNqQixNQUFNLENBQUMscUJBQWMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDO2dCQUMxQyxTQUFTLEVBQUUsT0FBTztnQkFDbEIsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixLQUFLLEVBQUUsbUJBQW1CO2dCQUMxQixRQUFRLEVBQUUsYUFBYTthQUN4QixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FDSixjQUFNLENBQUMsU0FBUyxDQUFDLHNGQUFzRixDQUFDLENBQ3pHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUN4QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIkM6XFxVc2Vyc1xcSFBcXERlc2t0b3BcXGNvZGVyei5zcGFjZVxcYXBwc1xcd2ViXFxjb21wb25lbnRzXFxNZW50ZWVTaWduVXBDYXJkLnRlc3QudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciwgc2NyZWVuLCB3YWl0Rm9yIH0gZnJvbSBcIkB0ZXN0aW5nLWxpYnJhcnkvcmVhY3RcIjtcclxuaW1wb3J0IHVzZXJFdmVudCBmcm9tIFwiQHRlc3RpbmctbGlicmFyeS91c2VyLWV2ZW50XCI7XHJcbmltcG9ydCBNZW50ZWVTaWduVXBDYXJkIGZyb20gXCIuL01lbnRlZVNpZ25VcENhcmRcIjtcclxuaW1wb3J0IHsgcmVnaXN0ZXJNZW50ZWUgfSBmcm9tIFwiQC9zZXJ2aWNlcy9hdXRoXCI7XHJcblxyXG5qZXN0Lm1vY2soXCJAL3NlcnZpY2VzL2F1dGhcIiwgKCkgPT4gKHtcclxuICByZWdpc3Rlck1lbnRlZTogamVzdC5mbigpLFxyXG59KSk7XHJcblxyXG5kZXNjcmliZShcIk1lbnRlZVNpZ25VcENhcmRcIiwgKCkgPT4ge1xyXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xyXG4gICAgKHJlZ2lzdGVyTWVudGVlIGFzIGplc3QuTW9jaykubW9ja1Jlc2V0KCk7XHJcbiAgfSk7XHJcblxyXG4gIGl0KFwic2hvd3MgdGhlIHBlbmRpbmcgYXBwcm92YWwgbWVzc2FnZSBhZnRlciBzaWdudXBcIiwgYXN5bmMgKCkgPT4ge1xyXG4gICAgKHJlZ2lzdGVyTWVudGVlIGFzIGplc3QuTW9jaykubW9ja1Jlc29sdmVkVmFsdWUoe1xyXG4gICAgICBpZDogXCJyZXF1ZXN0LTFcIixcclxuICAgICAgZmlyc3ROYW1lOiBcIkFsaWNlXCIsXHJcbiAgICAgIGxhc3ROYW1lOiBcIkV4YW1wbGVcIixcclxuICAgICAgdXNlcm5hbWU6IFwiYWxpY2VcIixcclxuICAgICAgZW1haWw6IFwiYWxpY2VAZXhhbXBsZS5jb21cIixcclxuICAgICAgc2lnbmVkVXBBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxyXG4gICAgICBzdGF0dXM6IFwicGVuZGluZ1wiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xyXG4gICAgcmVuZGVyKDxNZW50ZWVTaWduVXBDYXJkIHJvbGU9XCJtZW50ZWVcIiBvbkNsb3NlPXtqZXN0LmZuKCl9IG9uQmFja1RvTG9naW49e2plc3QuZm4oKX0gLz4pO1xyXG5cclxuICAgIGF3YWl0IHVzZXIudHlwZShzY3JlZW4uZ2V0QnlQbGFjZWhvbGRlclRleHQoXCJGaXJzdCBOYW1lXCIpLCBcIkFsaWNlXCIpO1xyXG4gICAgYXdhaXQgdXNlci50eXBlKHNjcmVlbi5nZXRCeVBsYWNlaG9sZGVyVGV4dChcIkxhc3QgTmFtZVwiKSwgXCJFeGFtcGxlXCIpO1xyXG4gICAgYXdhaXQgdXNlci50eXBlKHNjcmVlbi5nZXRCeVBsYWNlaG9sZGVyVGV4dChcIlVzZXJuYW1lXCIpLCBcImFsaWNlXCIpO1xyXG4gICAgYXdhaXQgdXNlci50eXBlKHNjcmVlbi5nZXRCeVBsYWNlaG9sZGVyVGV4dChcIkVtYWlsXCIpLCBcImFsaWNlQGV4YW1wbGUuY29tXCIpO1xyXG4gICAgYXdhaXQgdXNlci50eXBlKHNjcmVlbi5nZXRCeVBsYWNlaG9sZGVyVGV4dChcIlNldCBQYXNzd29yZCAobWluIDggY2hhcnMpXCIpLCBcInBhc3N3b3JkMTIzXCIpO1xyXG4gICAgYXdhaXQgdXNlci50eXBlKHNjcmVlbi5nZXRCeVBsYWNlaG9sZGVyVGV4dChcIkNvbmZpcm0gUGFzc3dvcmRcIiksIFwicGFzc3dvcmQxMjNcIik7XHJcbiAgICBhd2FpdCB1c2VyLmNsaWNrKHNjcmVlbi5nZXRCeVJvbGUoXCJidXR0b25cIiwgeyBuYW1lOiBcIlNpZ24gVXBcIiB9KSk7XHJcblxyXG4gICAgYXdhaXQgd2FpdEZvcigoKSA9PiB7XHJcbiAgICAgIGV4cGVjdChyZWdpc3Rlck1lbnRlZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xyXG4gICAgICAgIGZpcnN0TmFtZTogXCJBbGljZVwiLFxyXG4gICAgICAgIGxhc3ROYW1lOiBcIkV4YW1wbGVcIixcclxuICAgICAgICB1c2VybmFtZTogXCJhbGljZVwiLFxyXG4gICAgICAgIGVtYWlsOiBcImFsaWNlQGV4YW1wbGUuY29tXCIsXHJcbiAgICAgICAgcGFzc3dvcmQ6IFwicGFzc3dvcmQxMjNcIixcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBleHBlY3QoXHJcbiAgICAgIHNjcmVlbi5nZXRCeVRleHQoXCJTaWduLXVwIHJlcXVlc3Qgc3VibWl0dGVkLiBBIG1lbnRvciB3aWxsIGFwcHJvdmUgeW91ciBhY2NvdW50IGJlZm9yZSB5b3UgY2FuIGxvZyBpbi5cIilcclxuICAgICkudG9CZUluVGhlRG9jdW1lbnQoKTtcclxuICB9KTtcclxufSk7XHJcbiJdLCJ2ZXJzaW9uIjozfQ== \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/2a/MenteeSignUpCardtest_2ad92192295b373e1a37119360895eb4.map b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/2a/MenteeSignUpCardtest_2ad92192295b373e1a37119360895eb4.map deleted file mode 100644 index c6af195..0000000 --- a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/2a/MenteeSignUpCardtest_2ad92192295b373e1a37119360895eb4.map +++ /dev/null @@ -1 +0,0 @@ -{"file":"C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\components\\MenteeSignUpCard.test.tsx","mappings":";;;;;;AAKA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;CAC1B,CAAC,CAAC,CAAC;AAPJ,kDAAiE;AACjE,6EAAoD;AACpD,0EAAkD;AAClD,0CAAiD;AAMjD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,UAAU,CAAC,GAAG,EAAE;QACb,qBAA4B,CAAC,SAAS,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC9D,qBAA4B,CAAC,iBAAiB,CAAC;YAC9C,EAAE,EAAE,WAAW;YACf,SAAS,EAAE,OAAO;YAClB,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,mBAAmB;YAC1B,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,oBAAS,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAA,cAAM,EAAC,uBAAC,0BAAgB,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE,GAAI,CAAC,CAAC;QAEzF,MAAM,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC,oBAAoB,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;QACpE,MAAM,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,CAAC;QACrE,MAAM,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;QAClE,MAAM,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC;QAC3E,MAAM,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC,oBAAoB,CAAC,4BAA4B,CAAC,EAAE,aAAa,CAAC,CAAC;QAC1F,MAAM,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,EAAE,aAAa,CAAC,CAAC;QAChF,MAAM,IAAI,CAAC,KAAK,CAAC,cAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAElE,MAAM,IAAA,eAAO,EAAC,GAAG,EAAE;YACjB,MAAM,CAAC,qBAAc,CAAC,CAAC,oBAAoB,CAAC;gBAC1C,SAAS,EAAE,OAAO;gBAClB,QAAQ,EAAE,SAAS;gBACnB,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,mBAAmB;gBAC1B,QAAQ,EAAE,aAAa;aACxB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,CACJ,cAAM,CAAC,SAAS,CAAC,sFAAsF,CAAC,CACzG,CAAC,iBAAiB,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","names":[],"sources":["C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\components\\MenteeSignUpCard.test.tsx"],"sourcesContent":["import { render, screen, waitFor } from \"@testing-library/react\";\r\nimport userEvent from \"@testing-library/user-event\";\r\nimport MenteeSignUpCard from \"./MenteeSignUpCard\";\r\nimport { registerMentee } from \"@/services/auth\";\r\n\r\njest.mock(\"@/services/auth\", () => ({\r\n registerMentee: jest.fn(),\r\n}));\r\n\r\ndescribe(\"MenteeSignUpCard\", () => {\r\n beforeEach(() => {\r\n (registerMentee as jest.Mock).mockReset();\r\n });\r\n\r\n it(\"shows the pending approval message after signup\", async () => {\r\n (registerMentee as jest.Mock).mockResolvedValue({\r\n id: \"request-1\",\r\n firstName: \"Alice\",\r\n lastName: \"Example\",\r\n username: \"alice\",\r\n email: \"alice@example.com\",\r\n signedUpAt: new Date().toISOString(),\r\n status: \"pending\",\r\n });\r\n\r\n const user = userEvent.setup();\r\n render();\r\n\r\n await user.type(screen.getByPlaceholderText(\"First Name\"), \"Alice\");\r\n await user.type(screen.getByPlaceholderText(\"Last Name\"), \"Example\");\r\n await user.type(screen.getByPlaceholderText(\"Username\"), \"alice\");\r\n await user.type(screen.getByPlaceholderText(\"Email\"), \"alice@example.com\");\r\n await user.type(screen.getByPlaceholderText(\"Set Password (min 8 chars)\"), \"password123\");\r\n await user.type(screen.getByPlaceholderText(\"Confirm Password\"), \"password123\");\r\n await user.click(screen.getByRole(\"button\", { name: \"Sign Up\" }));\r\n\r\n await waitFor(() => {\r\n expect(registerMentee).toHaveBeenCalledWith({\r\n firstName: \"Alice\",\r\n lastName: \"Example\",\r\n username: \"alice\",\r\n email: \"alice@example.com\",\r\n password: \"password123\",\r\n });\r\n });\r\n\r\n expect(\r\n screen.getByText(\"Sign-up request submitted. A mentor will approve your account before you can log in.\")\r\n ).toBeInTheDocument();\r\n });\r\n});\r\n"],"version":3} \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/44/Modal_446b9275c025c980fb20ed2337941038 b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/44/Modal_446b9275c025c980fb20ed2337941038 deleted file mode 100644 index 79d7d15..0000000 --- a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/44/Modal_446b9275c025c980fb20ed2337941038 +++ /dev/null @@ -1,24 +0,0 @@ -4758f36b70b62ece33a55708e0fb5512 -"use strict"; -"use client"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.default = Modal; -const jsx_runtime_1 = require("react/jsx-runtime"); -const react_1 = require("react"); -function Modal({ onClose, children, className = "" }) { - const innerRef = (0, react_1.useRef)(null); - (0, react_1.useEffect)(() => { - function handleKey(e) { - if (e.key === "Escape") - onClose(); - } - document.addEventListener("keydown", handleKey); - return () => document.removeEventListener("keydown", handleKey); - }, [onClose]); - return ((0, jsx_runtime_1.jsx)("div", { role: "dialog", "aria-modal": "true", className: "fixed inset-0 z-50 flex items-center justify-center bg-black/60 p-4 backdrop-blur-sm", onMouseDown: (e) => { - if (innerRef.current && !innerRef.current.contains(e.target)) { - onClose(); - } - }, children: (0, jsx_runtime_1.jsx)("div", { ref: innerRef, className: className, children: children }) })); -} -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJmaWxlIjoiQzpcXFVzZXJzXFxIUFxcRGVza3RvcFxcY29kZXJ6LnNwYWNlXFxhcHBzXFx3ZWJcXGNvbXBvbmVudHNcXE1vZGFsLnRzeCIsIm1hcHBpbmdzIjoiO0FBQUEsWUFBWSxDQUFDOztBQVViLHdCQTJCQzs7QUFuQ0QsaUNBQTBEO0FBUTFELFNBQXdCLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxHQUFHLEVBQUUsRUFBYztJQUM3RSxNQUFNLFFBQVEsR0FBRyxJQUFBLGNBQU0sRUFBaUIsSUFBSSxDQUFDLENBQUM7SUFFOUMsSUFBQSxpQkFBUyxFQUFDLEdBQUcsRUFBRTtRQUNiLFNBQVMsU0FBUyxDQUFDLENBQWdCO1lBQ2pDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxRQUFRO2dCQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3BDLENBQUM7UUFDRCxRQUFRLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNsRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBRWQsT0FBTyxDQUNMLGdDQUNFLElBQUksRUFBQyxRQUFRLGdCQUNGLE1BQU0sRUFDakIsU0FBUyxFQUFDLHNGQUFzRixFQUNoRyxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNqQixJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBYyxDQUFDLEVBQUUsQ0FBQztnQkFDckUsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1FBQ0gsQ0FBQyxZQUVELGdDQUFLLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsWUFDckMsUUFBUSxHQUNMLEdBQ0YsQ0FDUCxDQUFDO0FBQ0osQ0FBQyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyJDOlxcVXNlcnNcXEhQXFxEZXNrdG9wXFxjb2Rlcnouc3BhY2VcXGFwcHNcXHdlYlxcY29tcG9uZW50c1xcTW9kYWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xyXG5cclxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHR5cGUgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XHJcblxyXG5pbnRlcmZhY2UgTW9kYWxQcm9wcyB7XHJcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcclxuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xyXG4gIGNsYXNzTmFtZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW9kYWwoeyBvbkNsb3NlLCBjaGlsZHJlbiwgY2xhc3NOYW1lID0gXCJcIiB9OiBNb2RhbFByb3BzKSB7XHJcbiAgY29uc3QgaW5uZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xyXG5cclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgZnVuY3Rpb24gaGFuZGxlS2V5KGU6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgaWYgKGUua2V5ID09PSBcIkVzY2FwZVwiKSBvbkNsb3NlKCk7XHJcbiAgICB9XHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBoYW5kbGVLZXkpO1xyXG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZUtleSk7XHJcbiAgfSwgW29uQ2xvc2VdKTtcclxuXHJcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByb2xlPVwiZGlhbG9nXCJcbiAgICAgIGFyaWEtbW9kYWw9XCJ0cnVlXCJcbiAgICAgIGNsYXNzTmFtZT1cImZpeGVkIGluc2V0LTAgei01MCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy1ibGFjay82MCBwLTQgYmFja2Ryb3AtYmx1ci1zbVwiXG4gICAgICBvbk1vdXNlRG93bj17KGUpID0+IHtcbiAgICAgICAgaWYgKGlubmVyUmVmLmN1cnJlbnQgJiYgIWlubmVyUmVmLmN1cnJlbnQuY29udGFpbnMoZS50YXJnZXQgYXMgTm9kZSkpIHtcbiAgICAgICAgICBvbkNsb3NlKCk7XG4gICAgICAgIH1cclxuICAgICAgfX1cclxuICAgID5cclxuICAgICAgPGRpdiByZWY9e2lubmVyUmVmfSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XHJcbiAgICAgICAge2NoaWxkcmVufVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn1cclxuIl0sInZlcnNpb24iOjN9 \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/44/Modal_446b9275c025c980fb20ed2337941038.map b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/44/Modal_446b9275c025c980fb20ed2337941038.map deleted file mode 100644 index 15b3698..0000000 --- a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/44/Modal_446b9275c025c980fb20ed2337941038.map +++ /dev/null @@ -1 +0,0 @@ -{"file":"C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\components\\Modal.tsx","mappings":";AAAA,YAAY,CAAC;;AAUb,wBA2BC;;AAnCD,iCAA0D;AAQ1D,SAAwB,KAAK,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,GAAG,EAAE,EAAc;IAC7E,MAAM,QAAQ,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IAE9C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,SAAS,SAAS,CAAC,CAAgB;YACjC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;gBAAE,OAAO,EAAE,CAAC;QACpC,CAAC;QACD,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAChD,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO,CACL,gCACE,IAAI,EAAC,QAAQ,gBACF,MAAM,EACjB,SAAS,EAAC,sFAAsF,EAChG,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;YACjB,IAAI,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAc,CAAC,EAAE,CAAC;gBACrE,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,YAED,gCAAK,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,YACrC,QAAQ,GACL,GACF,CACP,CAAC;AACJ,CAAC","names":[],"sources":["C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\components\\Modal.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { useEffect, useRef, type ReactNode } from \"react\";\r\n\r\ninterface ModalProps {\r\n onClose: () => void;\r\n children: ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport default function Modal({ onClose, children, className = \"\" }: ModalProps) {\r\n const innerRef = useRef(null);\r\n\r\n useEffect(() => {\r\n function handleKey(e: KeyboardEvent) {\r\n if (e.key === \"Escape\") onClose();\r\n }\r\n document.addEventListener(\"keydown\", handleKey);\r\n return () => document.removeEventListener(\"keydown\", handleKey);\r\n }, [onClose]);\r\n\r\n return (\n {\n if (innerRef.current && !innerRef.current.contains(e.target as Node)) {\n onClose();\n }\r\n }}\r\n >\r\n
\r\n {children}\r\n
\r\n
\r\n );\r\n}\r\n"],"version":3} \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/5a/MenteeLoginCard_5a178c31e870e181d8ee5070337966ce b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/5a/MenteeLoginCard_5a178c31e870e181d8ee5070337966ce deleted file mode 100644 index e3b1518..0000000 --- a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/5a/MenteeLoginCard_5a178c31e870e181d8ee5070337966ce +++ /dev/null @@ -1,61 +0,0 @@ -7bf6bf33ead7955786c250d305725ed9 -"use strict"; -"use client"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.default = MenteeLoginCard; -const jsx_runtime_1 = require("react/jsx-runtime"); -const react_1 = require("react"); -const navigation_1 = require("next/navigation"); -const auth_1 = require("@/services/auth"); -const Modal_1 = __importDefault(require("@/components/Modal")); -function EyeIcon({ visible }) { - return visible ? ((0, jsx_runtime_1.jsxs)("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-5 w-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: [(0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M13.875 18.825A10.05 10.05 0 0112 19c-5 0-9-4-9-7s4-7 9-7a9.956 9.956 0 016.21 2.16M15 12a3 3 0 11-6 0 3 3 0 016 0zm6 0c0 3-4 7-9 7" }), (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 3l18 18" })] })) : ((0, jsx_runtime_1.jsxs)("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-5 w-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: [(0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z" }), (0, jsx_runtime_1.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M2.458 12C3.732 7.943 7.523 5 12 5c4.477 0 8.268 2.943 9.542 7-1.274 4.057-5.065 7-9.542 7-4.477 0-8.268-2.943-9.542-7z" })] })); -} -const inputClass = "w-full rounded-lg border border-purple-200 bg-white px-4 py-2 text-gray-900 transition focus:outline-none focus:ring-2 focus:ring-purple-500 dark:border-purple-800 dark:bg-gray-800 dark:text-gray-100"; -function MenteeLoginCard({ role, onClose, onSignUp }) { - const [email, setEmail] = (0, react_1.useState)(""); - const [password, setPassword] = (0, react_1.useState)(""); - const [showPassword, setShowPassword] = (0, react_1.useState)(false); - const [error, setError] = (0, react_1.useState)(""); - const [loading, setLoading] = (0, react_1.useState)(false); - const router = (0, navigation_1.useRouter)(); - const handleLogin = async (event) => { - event === null || event === void 0 ? void 0 : event.preventDefault(); - setError(""); - if (!email.trim() || !password) { - setError("Please fill in all fields."); - return; - } - setLoading(true); - try { - const result = await (0, auth_1.loginMenteeByEmail)(email.trim(), password); - if (result.context.accountStatus !== "approved") { - setError("Your account is still pending mentor approval."); - return; - } - if (result.context.role === "mentor") { - router.push("/mentor-dashboard"); - return; - } - if (result.context.role === "mentee") { - router.push(`/mentee-dashboard/${result.context.user.username}`); - return; - } - setError("Your account is not linked to an active Algo Buddy role."); - } - catch (error) { - setError(error instanceof Error ? error.message : "Invalid credentials."); - } - finally { - setLoading(false); - } - }; - return ((0, jsx_runtime_1.jsxs)(Modal_1.default, { onClose: onClose, className: "mx-4 w-full max-w-sm", children: [(0, jsx_runtime_1.jsxs)("form", { onSubmit: handleLogin, className: "flex w-full flex-col gap-4 rounded-lg border border-purple-200 bg-white p-8 shadow-xl dark:border-purple-800 dark:bg-gray-900", children: [(0, jsx_runtime_1.jsx)("h2", { className: "text-center text-xl font-semibold text-purple-700 dark:text-purple-400", children: role === "mentor" ? "Mentor Login" : "Mentee Login" }), (0, jsx_runtime_1.jsx)("input", { type: "email", placeholder: "Email address", value: email, onChange: (event) => setEmail(event.target.value), className: inputClass, autoComplete: "email" }), (0, jsx_runtime_1.jsxs)("div", { className: "relative", children: [(0, jsx_runtime_1.jsx)("input", { type: showPassword ? "text" : "password", placeholder: "Password", value: password, onChange: (event) => setPassword(event.target.value), className: `${inputClass} pr-10`, autoComplete: "current-password" }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => setShowPassword((value) => !value), className: "absolute right-3 top-1/2 -translate-y-1/2 text-gray-500 hover:text-purple-600 dark:text-gray-400", "aria-label": showPassword ? "Hide password" : "Show password", children: (0, jsx_runtime_1.jsx)(EyeIcon, { visible: showPassword }) })] }), (0, jsx_runtime_1.jsx)("button", { type: "button", className: "self-end text-right text-sm text-purple-600 hover:underline dark:text-purple-400", children: "Forgot Password?" }), error ? (0, jsx_runtime_1.jsx)("p", { className: "text-center text-sm text-red-500", children: error }) : null, (0, jsx_runtime_1.jsx)("button", { type: "submit", disabled: loading, className: "w-full rounded-lg bg-purple-600 py-2 font-semibold text-white transition hover:bg-purple-700 focus:outline-none focus:ring-2 focus:ring-purple-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:focus:ring-offset-gray-900", children: loading ? "Logging in..." : "Log In" }), (0, jsx_runtime_1.jsxs)("button", { type: "button", className: "flex w-full items-center justify-center gap-2 rounded-lg border border-purple-200 py-2 text-gray-700 transition hover:bg-purple-50 focus:outline-none focus:ring-2 focus:ring-purple-500 focus:ring-offset-2 dark:border-purple-800 dark:text-gray-200 dark:hover:bg-gray-800 dark:focus:ring-offset-gray-900", children: [(0, jsx_runtime_1.jsxs)("svg", { className: "h-5 w-5", viewBox: "0 0 24 24", "aria-hidden": "true", children: [(0, jsx_runtime_1.jsx)("path", { fill: "#4285F4", d: "M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z" }), (0, jsx_runtime_1.jsx)("path", { fill: "#34A853", d: "M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z" }), (0, jsx_runtime_1.jsx)("path", { fill: "#FBBC05", d: "M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l3.66-2.84z" }), (0, jsx_runtime_1.jsx)("path", { fill: "#EA4335", d: "M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z" })] }), "Login with Google"] })] }), role === "mentee" ? ((0, jsx_runtime_1.jsx)("button", { type: "button", onClick: (event) => { - event.stopPropagation(); - onSignUp(); - }, className: "mt-4 block w-full text-center text-sm text-purple-100 hover:underline", children: "New user? Sign Up" })) : null] })); -} -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJmaWxlIjoiQzpcXFVzZXJzXFxIUFxcRGVza3RvcFxcY29kZXJ6LnNwYWNlXFxhcHBzXFx3ZWJcXGNvbXBvbmVudHNcXE1lbnRlZUxvZ2luQ2FyZC50c3giLCJtYXBwaW5ncyI6IjtBQUFBLFlBQVksQ0FBQzs7Ozs7QUE4QmIsa0NBdUhDOztBQW5KRCxpQ0FBaUQ7QUFDakQsZ0RBQTRDO0FBQzVDLDBDQUFxRDtBQUNyRCwrREFBdUM7QUFRdkMsU0FBUyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQXdCO0lBQ2hELE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUNmLGlDQUFLLEtBQUssRUFBQyw0QkFBNEIsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsY0FBYyxhQUMvRyxpQ0FBTSxhQUFhLEVBQUMsT0FBTyxFQUFDLGNBQWMsRUFBQyxPQUFPLEVBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMscUlBQXFJLEdBQUcsRUFDN00saUNBQU0sYUFBYSxFQUFDLE9BQU8sRUFBQyxjQUFjLEVBQUMsT0FBTyxFQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDLFlBQVksR0FBRyxJQUNoRixDQUNQLENBQUMsQ0FBQyxDQUFDLENBQ0YsaUNBQUssS0FBSyxFQUFDLDRCQUE0QixFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sRUFBQyxjQUFjLGFBQy9HLGlDQUFNLGFBQWEsRUFBQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE9BQU8sRUFBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBQyxrQ0FBa0MsR0FBRyxFQUMxRyxpQ0FBTSxhQUFhLEVBQUMsT0FBTyxFQUFDLGNBQWMsRUFBQyxPQUFPLEVBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMseUhBQXlILEdBQUcsSUFDN0wsQ0FDUCxDQUFDO0FBQ0osQ0FBQztB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QUFRLEVBQUMsU0FBUyxFQUFDLCtTQUErUyxhQUM3VSxpQ0FBSyxTQUFTLEVBQUMsU0FBUyxFQUFDLE9BQU8sRUFBQyxXQUFXLGlCQUFhLE1BQU0sYUFDN0QsaUNBQU0sSUFBSSxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMseUhBQXlILEdBQUcsRUFDbkosaUNBQU0sSUFBSSxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsdUlBQXVJLEdBQUcsRUFDakssaUNBQU0sSUFBSSxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsd0hBQXdILEdBQUcsRUFDbEosaUNBQU0sSUFBSSxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMscUlBQXFJLEdBQUcsSUFDM0oseUJBRUMsSUFDSixFQUVOLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQ25CLG1DQUNFLElBQUksRUFBQyxRQUFRLEVBQ2IsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQ2pCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDeEIsUUFBUSxFQUFFLENBQUM7Z0JBQ2IsQ0FBQyxFQUNELFNBQVMsRUFBQyx1RUFBdUUsa0NBRzFFLENBQ1YsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUNGLENBQ1QsQ0FBQztBQUNKLENBQUMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiQzpcXFVzZXJzXFxIUFxcRGVza3RvcFxcY29kZXJ6LnNwYWNlXFxhcHBzXFx3ZWJcXGNvbXBvbmVudHNcXE1lbnRlZUxvZ2luQ2FyZC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XHJcblxyXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdHlwZSBGb3JtRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVJvdXRlciB9IGZyb20gXCJuZXh0L25hdmlnYXRpb25cIjtcbmltcG9ydCB7IGxvZ2luTWVudGVlQnlFbWFpbCB9IGZyb20gXCJAL3NlcnZpY2VzL2F1dGhcIjtcbmltcG9ydCBNb2RhbCBmcm9tIFwiQC9jb21wb25lbnRzL01vZGFsXCI7XG5cclxuaW50ZXJmYWNlIE1lbnRlZUxvZ2luQ2FyZFByb3BzIHtcclxuICByb2xlOiBcIm1lbnRvclwiIHwgXCJtZW50ZWVcIjtcclxuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xyXG4gIG9uU2lnblVwOiAoKSA9PiB2b2lkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBFeWVJY29uKHsgdmlzaWJsZSB9OiB7IHZpc2libGU6IGJvb2xlYW4gfSkge1xyXG4gIHJldHVybiB2aXNpYmxlID8gKFxyXG4gICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3NOYW1lPVwiaC01IHctNVwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiPlxyXG4gICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMTMuODc1IDE4LjgyNUExMC4wNSAxMC4wNSAwIDAxMTIgMTljLTUgMC05LTQtOS03czQtNyA5LTdhOS45NTYgOS45NTYgMCAwMTYuMjEgMi4xNk0xNSAxMmEzIDMgMCAxMS02IDAgMyAzIDAgMDE2IDB6bTYgMGMwIDMtNCA3LTkgN1wiIC8+XHJcbiAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk0zIDNsMTggMThcIiAvPlxyXG4gICAgPC9zdmc+XHJcbiAgKSA6IChcclxuICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzTmFtZT1cImgtNSB3LTVcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIj5cclxuICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTE1IDEyYTMgMyAwIDExLTYgMCAzIDMgMCAwMTYgMHpcIiAvPlxyXG4gICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNMi40NTggMTJDMy43MzIgNy45NDMgNy41MjMgNSAxMiA1YzQuNDc3IDAgOC4yNjggMi45NDMgOS41NDIgNy0xLjI3NCA0LjA1Ny01LjA2NSA3LTkuNTQyIDctNC40NzcgMC04LjI2OC0yLjk0My05LjU0Mi03elwiIC8+XHJcbiAgICA8L3N2Zz5cclxuICApO1xyXG59XHJcblxyXG5jb25zdCBpbnB1dENsYXNzID1cbiAgXCJ3LWZ1bGwgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXB1cnBsZS0yMDAgYmctd2hpdGUgcHgtNCBweS0yIHRleHQtZ3JheS05MDAgdHJhbnNpdGlvbiBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctcHVycGxlLTUwMCBkYXJrOmJvcmRlci1wdXJwbGUtODAwIGRhcms6YmctZ3JheS04MDAgZGFyazp0ZXh0LWdyYXktMTAwXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1lbnRlZUxvZ2luQ2FyZCh7IHJvbGUsIG9uQ2xvc2UsIG9uU2lnblVwIH06IE1lbnRlZUxvZ2luQ2FyZFByb3BzKSB7XG4gIGNvbnN0IFtlbWFpbCwgc2V0RW1haWxdID0gdXNlU3RhdGUoXCJcIik7XHJcbiAgY29uc3QgW3Bhc3N3b3JkLCBzZXRQYXNzd29yZF0gPSB1c2VTdGF0ZShcIlwiKTtcclxuICBjb25zdCBbc2hvd1Bhc3N3b3JkLCBzZXRTaG93UGFzc3dvcmRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGUoXCJcIik7XHJcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xyXG5cclxuICBjb25zdCBoYW5kbGVMb2dpbiA9IGFzeW5jIChldmVudD86IEZvcm1FdmVudDxIVE1MRm9ybUVsZW1lbnQ+KSA9PiB7XG4gICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgc2V0RXJyb3IoXCJcIik7XG4gICAgaWYgKCFlbWFpbC50cmltKCkgfHwgIXBhc3N3b3JkKSB7XG4gICAgICBzZXRFcnJvcihcIlBsZWFzZSBmaWxsIGluIGFsbCBmaWVsZHMuXCIpO1xuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHNldExvYWRpbmcodHJ1ZSk7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBsb2dpbk1lbnRlZUJ5RW1haWwoZW1haWwudHJpbSgpLCBwYXNzd29yZCk7XHJcbiAgICAgIGlmIChyZXN1bHQuY29udGV4dC5hY2NvdW50U3RhdHVzICE9PSBcImFwcHJvdmVkXCIpIHtcclxuICAgICAgICBzZXRFcnJvcihcIllvdXIgYWNjb3VudCBpcyBzdGlsbCBwZW5kaW5nIG1lbnRvciBhcHByb3ZhbC5cIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocmVzdWx0LmNvbnRleHQucm9sZSA9PT0gXCJtZW50b3JcIikge1xyXG4gICAgICAgIHJvdXRlci5wdXNoKFwiL21lbnRvci1kYXNoYm9hcmRcIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocmVzdWx0LmNvbnRleHQucm9sZSA9PT0gXCJtZW50ZWVcIikge1xyXG4gICAgICAgIHJvdXRlci5wdXNoKGAvbWVudGVlLWRhc2hib2FyZC8ke3Jlc3VsdC5jb250ZXh0LnVzZXIudXNlcm5hbWV9YCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzZXRFcnJvcihcIllvdXIgYWNjb3VudCBpcyBub3QgbGlua2VkIHRvIGFuIGFjdGl2ZSBBbGdvIEJ1ZGR5IHJvbGUuXCIpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgc2V0RXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIkludmFsaWQgY3JlZGVudGlhbHMuXCIpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXG4gIHJldHVybiAoXG4gICAgPE1vZGFsIG9uQ2xvc2U9e29uQ2xvc2V9IGNsYXNzTmFtZT1cIm14LTQgdy1mdWxsIG1heC13LXNtXCI+XG4gICAgICA8Zm9ybVxuICAgICAgICBvblN1Ym1pdD17aGFuZGxlTG9naW59XG4gICAgICAgIGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGZsZXgtY29sIGdhcC00IHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1wdXJwbGUtMjAwIGJnLXdoaXRlIHAtOCBzaGFkb3cteGwgZGFyazpib3JkZXItcHVycGxlLTgwMCBkYXJrOmJnLWdyYXktOTAwXCJcbiAgICAgID5cbiAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQtY2VudGVyIHRleHQteGwgZm9udC1zZW1pYm9sZCB0ZXh0LXB1cnBsZS03MDAgZGFyazp0ZXh0LXB1cnBsZS00MDBcIj5cbiAgICAgICAgICB7cm9sZSA9PT0gXCJtZW50b3JcIiA/IFwiTWVudG9yIExvZ2luXCIgOiBcIk1lbnRlZSBMb2dpblwifVxuICAgICAgICA8L2gyPlxuXHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICB0eXBlPVwiZW1haWxcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbWFpbCBhZGRyZXNzXCJcbiAgICAgICAgICB2YWx1ZT17ZW1haWx9XG4gICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT4gc2V0RW1haWwoZXZlbnQudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICBjbGFzc05hbWU9e2lucHV0Q2xhc3N9XG4gICAgICAgICAgYXV0b0NvbXBsZXRlPVwiZW1haWxcIlxuICAgICAgICAvPlxuXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgIHR5cGU9e3Nob3dQYXNzd29yZCA/IFwidGV4dFwiIDogXCJwYXNzd29yZFwifVxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBhc3N3b3JkXCJcclxuICAgICAgICAgICAgdmFsdWU9e3Bhc3N3b3JkfVxuICAgICAgICAgICAgb25DaGFuZ2U9eyhldmVudCkgPT4gc2V0UGFzc3dvcmQoZXZlbnQudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7aW5wdXRDbGFzc30gcHItMTBgfVxuICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwiY3VycmVudC1wYXNzd29yZFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dQYXNzd29yZCgodmFsdWUpID0+ICF2YWx1ZSl9XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTMgdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIHRleHQtZ3JheS01MDAgaG92ZXI6dGV4dC1wdXJwbGUtNjAwIGRhcms6dGV4dC1ncmF5LTQwMFwiXHJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3Nob3dQYXNzd29yZCA/IFwiSGlkZSBwYXNzd29yZFwiIDogXCJTaG93IHBhc3N3b3JkXCJ9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxFeWVJY29uIHZpc2libGU9e3Nob3dQYXNzd29yZH0gLz5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cInNlbGYtZW5kIHRleHQtcmlnaHQgdGV4dC1zbSB0ZXh0LXB1cnBsZS02MDAgaG92ZXI6dW5kZXJsaW5lIGRhcms6dGV4dC1wdXJwbGUtNDAwXCI+XG4gICAgICAgICAgRm9yZ290IFBhc3N3b3JkP1xuICAgICAgICA8L2J1dHRvbj5cblxyXG4gICAgICAgIHtlcnJvciA/IDxwIGNsYXNzTmFtZT1cInRleHQtY2VudGVyIHRleHQtc20gdGV4dC1yZWQtNTAwXCI+e2Vycm9yfTwvcD4gOiBudWxsfVxyXG5cclxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgZGlzYWJsZWQ9e2xvYWRpbmd9XG4gICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHJvdW5kZWQtbGcgYmctcHVycGxlLTYwMCBweS0yIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZSB0cmFuc2l0aW9uIGhvdmVyOmJnLXB1cnBsZS03MDAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLXB1cnBsZS01MDAgZm9jdXM6cmluZy1vZmZzZXQtMiBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCBkYXJrOmZvY3VzOnJpbmctb2Zmc2V0LWdyYXktOTAwXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtsb2FkaW5nID8gXCJMb2dnaW5nIGluLi4uXCIgOiBcIkxvZyBJblwifVxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLXB1cnBsZS0yMDAgcHktMiB0ZXh0LWdyYXktNzAwIHRyYW5zaXRpb24gaG92ZXI6YmctcHVycGxlLTUwIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1wdXJwbGUtNTAwIGZvY3VzOnJpbmctb2Zmc2V0LTIgZGFyazpib3JkZXItcHVycGxlLTgwMCBkYXJrOnRleHQtZ3JheS0yMDAgZGFyazpob3ZlcjpiZy1ncmF5LTgwMCBkYXJrOmZvY3VzOnJpbmctb2Zmc2V0LWdyYXktOTAwXCI+XG4gICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJoLTUgdy01XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPHBhdGggZmlsbD1cIiM0Mjg1RjRcIiBkPVwiTTIyLjU2IDEyLjI1YzAtLjc4LS4wNy0xLjUzLS4yLTIuMjVIMTJ2NC4yNmg1LjkyYy0uMjYgMS4zNy0xLjA0IDIuNTMtMi4yMSAzLjMxdjIuNzdoMy41N2MyLjA4LTEuOTIgMy4yOC00Ljc0IDMuMjgtOC4wOXpcIiAvPlxyXG4gICAgICAgICAgICA8cGF0aCBmaWxsPVwiIzM0QTg1M1wiIGQ9XCJNMTIgMjNjMi45NyAwIDUuNDYtLjk4IDcuMjgtMi42NmwtMy41Ny0yLjc3Yy0uOTguNjYtMi4yMyAxLjA2LTMuNzEgMS4wNi0yLjg2IDAtNS4yOS0xLjkzLTYuMTYtNC41M0gyLjE4djIuODRDMy45OSAyMC41MyA3LjcgMjMgMTIgMjN6XCIgLz5cclxuICAgICAgICAgICAgPHBhdGggZmlsbD1cIiNGQkJDMDVcIiBkPVwiTTUuODQgMTQuMDljLS4yMi0uNjYtLjM1LTEuMzYtLjM1LTIuMDlzLjEzLTEuNDMuMzUtMi4wOVY3LjA3SDIuMThDMS40MyA4LjU1IDEgMTAuMjIgMSAxMnMuNDMgMy40NSAxLjE4IDQuOTNsMy42Ni0yLjg0elwiIC8+XHJcbiAgICAgICAgICAgIDxwYXRoIGZpbGw9XCIjRUE0MzM1XCIgZD1cIk0xMiA1LjM4YzEuNjIgMCAzLjA2LjU2IDQuMjEgMS42NGwzLjE1LTMuMTVDMTcuNDUgMi4wOSAxNC45NyAxIDEyIDEgNy43IDEgMy45OSAzLjQ3IDIuMTggNy4wN2wzLjY2IDIuODRjLjg3LTIuNiAzLjMtNC41MyA2LjE2LTQuNTN6XCIgLz5cclxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIExvZ2luIHdpdGggR29vZ2xlXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9mb3JtPlxuXG4gICAgICB7cm9sZSA9PT0gXCJtZW50ZWVcIiA/IChcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIG9uQ2xpY2s9eyhldmVudCkgPT4ge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBvblNpZ25VcCgpO1xuICAgICAgICAgIH19XG4gICAgICAgICAgY2xhc3NOYW1lPVwibXQtNCBibG9jayB3LWZ1bGwgdGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LXB1cnBsZS0xMDAgaG92ZXI6dW5kZXJsaW5lXCJcbiAgICAgICAgPlxuICAgICAgICAgIE5ldyB1c2VyPyBTaWduIFVwXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgKSA6IG51bGx9XG4gICAgPC9Nb2RhbD5cbiAgKTtcbn1cbiJdLCJ2ZXJzaW9uIjozfQ== \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/5a/MenteeLoginCard_5a178c31e870e181d8ee5070337966ce.map b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/5a/MenteeLoginCard_5a178c31e870e181d8ee5070337966ce.map deleted file mode 100644 index f92076e..0000000 --- a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/5a/MenteeLoginCard_5a178c31e870e181d8ee5070337966ce.map +++ /dev/null @@ -1 +0,0 @@ -{"file":"C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\components\\MenteeLoginCard.tsx","mappings":"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","names":[],"sources":["C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\components\\MenteeLoginCard.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { useState, type FormEvent } from \"react\";\nimport { useRouter } from \"next/navigation\";\nimport { loginMenteeByEmail } from \"@/services/auth\";\nimport Modal from \"@/components/Modal\";\n\r\ninterface MenteeLoginCardProps {\r\n role: \"mentor\" | \"mentee\";\r\n onClose: () => void;\r\n onSignUp: () => void;\r\n}\r\n\r\nfunction EyeIcon({ visible }: { visible: boolean }) {\r\n return visible ? (\r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst inputClass =\n \"w-full rounded-lg border border-purple-200 bg-white px-4 py-2 text-gray-900 transition focus:outline-none focus:ring-2 focus:ring-purple-500 dark:border-purple-800 dark:bg-gray-800 dark:text-gray-100\";\n\nexport default function MenteeLoginCard({ role, onClose, onSignUp }: MenteeLoginCardProps) {\n const [email, setEmail] = useState(\"\");\r\n const [password, setPassword] = useState(\"\");\r\n const [showPassword, setShowPassword] = useState(false);\r\n const [error, setError] = useState(\"\");\r\n const [loading, setLoading] = useState(false);\r\n const router = useRouter();\r\n\r\n const handleLogin = async (event?: FormEvent) => {\n event?.preventDefault();\n setError(\"\");\n if (!email.trim() || !password) {\n setError(\"Please fill in all fields.\");\n return;\r\n }\r\n\r\n setLoading(true);\r\n try {\r\n const result = await loginMenteeByEmail(email.trim(), password);\r\n if (result.context.accountStatus !== \"approved\") {\r\n setError(\"Your account is still pending mentor approval.\");\r\n return;\r\n }\r\n\r\n if (result.context.role === \"mentor\") {\r\n router.push(\"/mentor-dashboard\");\r\n return;\r\n }\r\n\r\n if (result.context.role === \"mentee\") {\r\n router.push(`/mentee-dashboard/${result.context.user.username}`);\r\n return;\r\n }\r\n\r\n setError(\"Your account is not linked to an active Algo Buddy role.\");\r\n } catch (error) {\r\n setError(error instanceof Error ? error.message : \"Invalid credentials.\");\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\n return (\n \n \n

\n {role === \"mentor\" ? \"Mentor Login\" : \"Mentee Login\"}\n

\n\r\n setEmail(event.target.value)}\n className={inputClass}\n autoComplete=\"email\"\n />\n\r\n
\r\n setPassword(event.target.value)}\n className={`${inputClass} pr-10`}\n autoComplete=\"current-password\"\n />\n setShowPassword((value) => !value)}\r\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-gray-500 hover:text-purple-600 dark:text-gray-400\"\r\n aria-label={showPassword ? \"Hide password\" : \"Show password\"}\r\n >\r\n \r\n \r\n
\n\n \n\r\n {error ?

{error}

: null}\r\n\r\n \n {loading ? \"Logging in...\" : \"Log In\"}\n \n\n \n \n\n {role === \"mentee\" ? (\n {\n event.stopPropagation();\n onSignUp();\n }}\n className=\"mt-4 block w-full text-center text-sm text-purple-100 hover:underline\"\n >\n New user? Sign Up\n \n ) : null}\n
\n );\n}\n"],"version":3} \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/d1/apitest_d1d2fc1b55e2496c2e64752d47e1ee08 b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/d1/apitest_d1d2fc1b55e2496c2e64752d47e1ee08 deleted file mode 100644 index 4a293f1..0000000 --- a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/d1/apitest_d1d2fc1b55e2496c2e64752d47e1ee08 +++ /dev/null @@ -1,82 +0,0 @@ -ed9871923d5f990bfd5201872d4de57e -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || (function () { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; -})(); -jest.mock("axios", () => ({ - __esModule: true, - default: { - create: (...args) => mockCreate(...args), - post: (...args) => mockPost(...args), - }, -})); -const mockRequest = jest.fn(); -const mockCreate = jest.fn(); -const mockPost = jest.fn(); -describe("api client", () => { - beforeEach(() => { - jest.resetModules(); - mockRequest.mockReset(); - mockCreate.mockReset(); - mockPost.mockReset(); - mockCreate.mockReturnValue({ - request: mockRequest, - interceptors: { - response: { - use: jest.fn(), - }, - }, - }); - }); - it("unwraps backend envelopes", async () => { - mockRequest.mockResolvedValue({ - data: { - success: true, - data: { role: "mentee", accountStatus: "approved" }, - }, - }); - const { api } = await Promise.resolve().then(() => __importStar(require("./api"))); - await expect(api.get("/v1/app/context")).resolves.toEqual({ - role: "mentee", - accountStatus: "approved", - }); - }); - it("returns direct payloads without modification", async () => { - mockRequest.mockResolvedValue({ - data: { status: "ok" }, - }); - const { api } = await Promise.resolve().then(() => __importStar(require("./api"))); - await expect(api.get("/health")).resolves.toEqual({ status: "ok" }); - }); -}); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJmaWxlIjoiQzpcXFVzZXJzXFxIUFxcRGVza3RvcFxcY29kZXJ6LnNwYWNlXFxhcHBzXFx3ZWJcXHNlcnZpY2VzXFxhcGkudGVzdC50cyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSUEsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN4QixVQUFVLEVBQUUsSUFBSTtJQUNoQixPQUFPLEVBQUU7UUFDUCxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQWUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ25ELElBQUksRUFBRSxDQUFDLEdBQUcsSUFBZSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7S0FDaEQ7Q0FDRixDQUFDLENBQUMsQ0FBQztBQVZKLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM5QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDN0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBVTNCLFFBQVEsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFO0lBQzFCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN2QixRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFckIsVUFBVSxDQUFDLGVBQWUsQ0FBQztZQUN6QixPQUFPLEVBQUUsV0FBVztZQUNwQixZQUFZLEVBQUU7Z0JBQ1osUUFBUSxFQUFFO29CQUNSLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO2lCQUNmO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywyQkFBMkIsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN6QyxXQUFXLENBQUMsaUJBQWlCLENBQUM7WUFDNUIsSUFBSSxFQUFFO2dCQUNKLE9BQU8sRUFBRSxJQUFJO2dCQUNiLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRTthQUNwRDtTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyx3REFBYSxPQUFPLEdBQUMsQ0FBQztRQUV0QyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQ3hELElBQUksRUFBRSxRQUFRO1lBQ2QsYUFBYSxFQUFFLFVBQVU7U0FDMUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsOENBQThDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDNUQsV0FBVyxDQUFDLGlCQUFpQixDQUFDO1lBQzVCLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7U0FDdkIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLHdEQUFhLE9BQU8sR0FBQyxDQUFDO1FBRXRDLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyJDOlxcVXNlcnNcXEhQXFxEZXNrdG9wXFxjb2Rlcnouc3BhY2VcXGFwcHNcXHdlYlxcc2VydmljZXNcXGFwaS50ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IG1vY2tSZXF1ZXN0ID0gamVzdC5mbigpO1xyXG5jb25zdCBtb2NrQ3JlYXRlID0gamVzdC5mbigpO1xyXG5jb25zdCBtb2NrUG9zdCA9IGplc3QuZm4oKTtcclxuXHJcbmplc3QubW9jayhcImF4aW9zXCIsICgpID0+ICh7XHJcbiAgX19lc01vZHVsZTogdHJ1ZSxcclxuICBkZWZhdWx0OiB7XHJcbiAgICBjcmVhdGU6ICguLi5hcmdzOiB1bmtub3duW10pID0+IG1vY2tDcmVhdGUoLi4uYXJncyksXHJcbiAgICBwb3N0OiAoLi4uYXJnczogdW5rbm93bltdKSA9PiBtb2NrUG9zdCguLi5hcmdzKSxcclxuICB9LFxyXG59KSk7XHJcblxyXG5kZXNjcmliZShcImFwaSBjbGllbnRcIiwgKCkgPT4ge1xyXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xyXG4gICAgamVzdC5yZXNldE1vZHVsZXMoKTtcclxuICAgIG1vY2tSZXF1ZXN0Lm1vY2tSZXNldCgpO1xyXG4gICAgbW9ja0NyZWF0ZS5tb2NrUmVzZXQoKTtcclxuICAgIG1vY2tQb3N0Lm1vY2tSZXNldCgpO1xyXG5cclxuICAgIG1vY2tDcmVhdGUubW9ja1JldHVyblZhbHVlKHtcclxuICAgICAgcmVxdWVzdDogbW9ja1JlcXVlc3QsXHJcbiAgICAgIGludGVyY2VwdG9yczoge1xyXG4gICAgICAgIHJlc3BvbnNlOiB7XHJcbiAgICAgICAgICB1c2U6IGplc3QuZm4oKSxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfSk7XHJcblxyXG4gIGl0KFwidW53cmFwcyBiYWNrZW5kIGVudmVsb3Blc1wiLCBhc3luYyAoKSA9PiB7XHJcbiAgICBtb2NrUmVxdWVzdC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgIGRhdGE6IHsgcm9sZTogXCJtZW50ZWVcIiwgYWNjb3VudFN0YXR1czogXCJhcHByb3ZlZFwiIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB7IGFwaSB9ID0gYXdhaXQgaW1wb3J0KFwiLi9hcGlcIik7XHJcblxyXG4gICAgYXdhaXQgZXhwZWN0KGFwaS5nZXQoXCIvdjEvYXBwL2NvbnRleHRcIikpLnJlc29sdmVzLnRvRXF1YWwoe1xyXG4gICAgICByb2xlOiBcIm1lbnRlZVwiLFxyXG4gICAgICBhY2NvdW50U3RhdHVzOiBcImFwcHJvdmVkXCIsXHJcbiAgICB9KTtcclxuICB9KTtcclxuXHJcbiAgaXQoXCJyZXR1cm5zIGRpcmVjdCBwYXlsb2FkcyB3aXRob3V0IG1vZGlmaWNhdGlvblwiLCBhc3luYyAoKSA9PiB7XHJcbiAgICBtb2NrUmVxdWVzdC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XHJcbiAgICAgIGRhdGE6IHsgc3RhdHVzOiBcIm9rXCIgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHsgYXBpIH0gPSBhd2FpdCBpbXBvcnQoXCIuL2FwaVwiKTtcclxuXHJcbiAgICBhd2FpdCBleHBlY3QoYXBpLmdldChcIi9oZWFsdGhcIikpLnJlc29sdmVzLnRvRXF1YWwoeyBzdGF0dXM6IFwib2tcIiB9KTtcclxuICB9KTtcclxufSk7XHJcbiJdLCJ2ZXJzaW9uIjozfQ== \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/d1/apitest_d1d2fc1b55e2496c2e64752d47e1ee08.map b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/d1/apitest_d1d2fc1b55e2496c2e64752d47e1ee08.map deleted file mode 100644 index e8e33c8..0000000 --- a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/d1/apitest_d1d2fc1b55e2496c2e64752d47e1ee08.map +++ /dev/null @@ -1 +0,0 @@ -{"file":"C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\services\\api.test.ts","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IACxB,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE;QACP,MAAM,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;QACnD,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;KAChD;CACF,CAAC,CAAC,CAAC;AAVJ,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AAU3B,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,WAAW,CAAC,SAAS,EAAE,CAAC;QACxB,UAAU,CAAC,SAAS,EAAE,CAAC;QACvB,QAAQ,CAAC,SAAS,EAAE,CAAC;QAErB,UAAU,CAAC,eAAe,CAAC;YACzB,OAAO,EAAE,WAAW;YACpB,YAAY,EAAE;gBACZ,QAAQ,EAAE;oBACR,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE;iBACf;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,WAAW,CAAC,iBAAiB,CAAC;YAC5B,IAAI,EAAE;gBACJ,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE;aACpD;SACF,CAAC,CAAC;QAEH,MAAM,EAAE,GAAG,EAAE,GAAG,wDAAa,OAAO,GAAC,CAAC;QAEtC,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YACxD,IAAI,EAAE,QAAQ;YACd,aAAa,EAAE,UAAU;SAC1B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,WAAW,CAAC,iBAAiB,CAAC;YAC5B,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;SACvB,CAAC,CAAC;QAEH,MAAM,EAAE,GAAG,EAAE,GAAG,wDAAa,OAAO,GAAC,CAAC;QAEtC,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","names":[],"sources":["C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\services\\api.test.ts"],"sourcesContent":["const mockRequest = jest.fn();\r\nconst mockCreate = jest.fn();\r\nconst mockPost = jest.fn();\r\n\r\njest.mock(\"axios\", () => ({\r\n __esModule: true,\r\n default: {\r\n create: (...args: unknown[]) => mockCreate(...args),\r\n post: (...args: unknown[]) => mockPost(...args),\r\n },\r\n}));\r\n\r\ndescribe(\"api client\", () => {\r\n beforeEach(() => {\r\n jest.resetModules();\r\n mockRequest.mockReset();\r\n mockCreate.mockReset();\r\n mockPost.mockReset();\r\n\r\n mockCreate.mockReturnValue({\r\n request: mockRequest,\r\n interceptors: {\r\n response: {\r\n use: jest.fn(),\r\n },\r\n },\r\n });\r\n });\r\n\r\n it(\"unwraps backend envelopes\", async () => {\r\n mockRequest.mockResolvedValue({\r\n data: {\r\n success: true,\r\n data: { role: \"mentee\", accountStatus: \"approved\" },\r\n },\r\n });\r\n\r\n const { api } = await import(\"./api\");\r\n\r\n await expect(api.get(\"/v1/app/context\")).resolves.toEqual({\r\n role: \"mentee\",\r\n accountStatus: \"approved\",\r\n });\r\n });\r\n\r\n it(\"returns direct payloads without modification\", async () => {\r\n mockRequest.mockResolvedValue({\r\n data: { status: \"ok\" },\r\n });\r\n\r\n const { api } = await import(\"./api\");\r\n\r\n await expect(api.get(\"/health\")).resolves.toEqual({ status: \"ok\" });\r\n });\r\n});\r\n"],"version":3} \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/f3/api_f3e486684b0343eb630d8d673420e918 b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/f3/api_f3e486684b0343eb630d8d673420e918 deleted file mode 100644 index 7a340ac..0000000 --- a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/f3/api_f3e486684b0343eb630d8d673420e918 +++ /dev/null @@ -1,141 +0,0 @@ -7a22efb736a7206e89d92da6c5d04d4d -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || (function () { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.api = exports.APIError = void 0; -exports.requestRaw = requestRaw; -exports.request = request; -exports.checkAPIHealth = checkAPIHealth; -let axiosInstance = null; -function isRecord(value) { - return typeof value === "object" && value !== null; -} -function hasDataEnvelope(value) { - return isRecord(value) && "data" in value; -} -function extractMessage(value, fallback) { - if (isRecord(value)) { - const message = value.message; - if (typeof message === "string" && message.trim()) { - return message; - } - const error = value.error; - if (isRecord(error) && typeof error.message === "string" && error.message.trim()) { - return error.message; - } - } - return fallback; -} -async function getAxiosInstance() { - var _a; - if (typeof window === "undefined") { - throw new Error("API client can only be used in the browser."); - } - if (axiosInstance) { - return axiosInstance; - } - const axios = await Promise.resolve().then(() => __importStar(require("axios"))).then((module) => module.default); - const baseURL = (_a = process.env.NEXT_PUBLIC_API_URL) !== null && _a !== void 0 ? _a : "http://localhost:8080/api"; - axiosInstance = axios.create({ - baseURL, - timeout: 15000, - withCredentials: true, - headers: { - "Content-Type": "application/json", - "X-Requested-With": "XMLHttpRequest", - }, - }); - axiosInstance.interceptors.response.use((response) => response, async (error) => { - var _a, _b, _c; - const request = error.config; - const isRefreshRequest = (_a = request === null || request === void 0 ? void 0 : request.url) === null || _a === void 0 ? void 0 : _a.includes("/v1/auth/refresh"); - if (((_b = error.response) === null || _b === void 0 ? void 0 : _b.status) === 401 && request && !isRefreshRequest) { - try { - const axios = await Promise.resolve().then(() => __importStar(require("axios"))).then((module) => module.default); - const base = (_c = process.env.NEXT_PUBLIC_API_URL) !== null && _c !== void 0 ? _c : "http://localhost:8080/api"; - await axios.post(`${base}/v1/auth/refresh`, {}, { withCredentials: true }); - return axiosInstance(request); - } - catch (_d) { - if (typeof window !== "undefined") { - window.location.href = "/"; - } - } - } - return Promise.reject(new APIError(error)); - }); - return axiosInstance; -} -class APIError extends Error { - constructor(error) { - var _a, _b, _c, _d; - super(extractMessage((_a = error.response) === null || _a === void 0 ? void 0 : _a.data, error.message)); - this.name = "APIError"; - this.status = (_c = (_b = error.response) === null || _b === void 0 ? void 0 : _b.status) !== null && _c !== void 0 ? _c : 500; - this.data = (_d = error.response) === null || _d === void 0 ? void 0 : _d.data; - } -} -exports.APIError = APIError; -async function requestRaw(config) { - const client = await getAxiosInstance(); - const response = await client.request(config); - return response.data; -} -async function request(config) { - const response = await requestRaw(config); - if (hasDataEnvelope(response)) { - return response.data; - } - return response; -} -exports.api = { - get: (url, config) => request(Object.assign(Object.assign({}, config), { method: "GET", url })), - post: (url, data, config) => request(Object.assign(Object.assign({}, config), { method: "POST", url, data })), - put: (url, data, config) => request(Object.assign(Object.assign({}, config), { method: "PUT", url, data })), - patch: (url, data, config) => request(Object.assign(Object.assign({}, config), { method: "PATCH", url, data })), - delete: (url, config) => request(Object.assign(Object.assign({}, config), { method: "DELETE", url })), - rawPost: (url, data, config) => requestRaw(Object.assign(Object.assign({}, config), { method: "POST", url, data })), - rawGet: (url, config) => requestRaw(Object.assign(Object.assign({}, config), { method: "GET", url })), -}; -async function checkAPIHealth() { - try { - const response = await exports.api.get("/health"); - return response.status === "ok"; - } - catch (_a) { - return false; - } -} -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJmaWxlIjoiQzpcXFVzZXJzXFxIUFxcRGVza3RvcFxcY29kZXJ6LnNwYWNlXFxhcHBzXFx3ZWJcXHNlcnZpY2VzXFxhcGkudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUdBLGdDQUlDO0FBRUQsMEJBTUM7QUFtQkQsd0NBT0M7QUE1SEQsSUFBSSxhQUFhLEdBQXlCLElBQUksQ0FBQztBQUUvQyxTQUFTLFFBQVEsQ0FBQyxLQUFjO0lBQzlCLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUM7QUFDckQsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFJLEtBQWM7SUFDeEMsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQztBQUM1QyxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsS0FBYyxFQUFFLFFBQWdCO0lBQ3RELElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDcEIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM5QixJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNsRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLEtBQUssQ0FBQyxPQUFPLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNqRixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsS0FBSyxVQUFVLGdCQUFnQjs7SUFDN0IsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUNsQyxNQUFN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RUFBRSxDQUErQixHQUFXLEVBQUUsSUFBUSxFQUFFLE1BQTJCLEVBQUUsRUFBRSxDQUM1RixVQUFVLGlDQUFTLE1BQU0sS0FBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUc7SUFDekQsTUFBTSxFQUFFLENBQUksR0FBVyxFQUFFLE1BQTJCLEVBQUUsRUFBRSxDQUN0RCxVQUFVLGlDQUFTLE1BQU0sS0FBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBRztDQUNuRCxDQUFDO0FBRUssS0FBSyxVQUFVLGNBQWM7SUFDbEMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxXQUFHLENBQUMsR0FBRyxDQUFzQixTQUFTLENBQUMsQ0FBQztRQUMvRCxPQUFPLFFBQVEsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDO0lBQ2xDLENBQUM7SUFBQyxXQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIkM6XFxVc2Vyc1xcSFBcXERlc2t0b3BcXGNvZGVyei5zcGFjZVxcYXBwc1xcd2ViXFxzZXJ2aWNlc1xcYXBpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQXhpb3NFcnJvciwgQXhpb3NJbnN0YW5jZSwgQXhpb3NSZXF1ZXN0Q29uZmlnIH0gZnJvbSBcImF4aW9zXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFwaUVudmVsb3BlPFQ+IHtcclxuICBzdWNjZXNzPzogYm9vbGVhbjtcclxuICBzdGF0dXM/OiBzdHJpbmc7XHJcbiAgbWVzc2FnZT86IHN0cmluZztcclxuICBkYXRhPzogVDtcclxuICBlcnJvcj86IHtcclxuICAgIGNvZGU/OiBudW1iZXI7XHJcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xyXG4gIH07XHJcbn1cclxuXHJcbmxldCBheGlvc0luc3RhbmNlOiBBeGlvc0luc3RhbmNlIHwgbnVsbCA9IG51bGw7XHJcblxyXG5mdW5jdGlvbiBpc1JlY29yZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcclxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoYXNEYXRhRW52ZWxvcGU8VD4odmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBBcGlFbnZlbG9wZTxUPiB7XHJcbiAgcmV0dXJuIGlzUmVjb3JkKHZhbHVlKSAmJiBcImRhdGFcIiBpbiB2YWx1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gZXh0cmFjdE1lc3NhZ2UodmFsdWU6IHVua25vd24sIGZhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIGlmIChpc1JlY29yZCh2YWx1ZSkpIHtcclxuICAgIGNvbnN0IG1lc3NhZ2UgPSB2YWx1ZS5tZXNzYWdlO1xyXG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiICYmIG1lc3NhZ2UudHJpbSgpKSB7XHJcbiAgICAgIHJldHVybiBtZXNzYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVycm9yID0gdmFsdWUuZXJyb3I7XHJcbiAgICBpZiAoaXNSZWNvcmQoZXJyb3IpICYmIHR5cGVvZiBlcnJvci5tZXNzYWdlID09PSBcInN0cmluZ1wiICYmIGVycm9yLm1lc3NhZ2UudHJpbSgpKSB7XHJcbiAgICAgIHJldHVybiBlcnJvci5tZXNzYWdlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZhbGxiYWNrO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBnZXRBeGlvc0luc3RhbmNlKCk6IFByb21pc2U8QXhpb3NJbnN0YW5jZT4ge1xyXG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBUEkgY2xpZW50IGNhbiBvbmx5IGJlIHVzZWQgaW4gdGhlIGJyb3dzZXIuXCIpO1xyXG4gIH1cclxuXHJcbiAgaWYgKGF4aW9zSW5zdGFuY2UpIHtcclxuICAgIHJldHVybiBheGlvc0luc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgYXhpb3MgPSBhd2FpdCBpbXBvcnQoXCJheGlvc1wiKS50aGVuKChtb2R1bGUpID0+IG1vZHVsZS5kZWZhdWx0KTtcclxuICBjb25zdCBiYXNlVVJMID0gcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfQVBJX1VSTCA/PyBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9hcGlcIjtcclxuXHJcbiAgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSh7XHJcbiAgICBiYXNlVVJMLFxyXG4gICAgdGltZW91dDogMTUwMDAsXHJcbiAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICBcIlgtUmVxdWVzdGVkLVdpdGhcIjogXCJYTUxIdHRwUmVxdWVzdFwiLFxyXG4gICAgfSxcclxuICB9KTtcclxuXHJcbiAgYXhpb3NJbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKFxyXG4gICAgKHJlc3BvbnNlKSA9PiByZXNwb25zZSxcclxuICAgIGFzeW5jIChlcnJvcjogQXhpb3NFcnJvcikgPT4ge1xyXG4gICAgICBjb25zdCByZXF1ZXN0ID0gZXJyb3IuY29uZmlnO1xyXG4gICAgICBjb25zdCBpc1JlZnJlc2hSZXF1ZXN0ID0gcmVxdWVzdD8udXJsPy5pbmNsdWRlcyhcIi92MS9hdXRoL3JlZnJlc2hcIik7XHJcblxyXG4gICAgICBpZiAoZXJyb3IucmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAxICYmIHJlcXVlc3QgJiYgIWlzUmVmcmVzaFJlcXVlc3QpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgYXhpb3MgPSBhd2FpdCBpbXBvcnQoXCJheGlvc1wiKS50aGVuKChtb2R1bGUpID0+IG1vZHVsZS5kZWZhdWx0KTtcclxuICAgICAgICAgIGNvbnN0IGJhc2UgPSBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19BUElfVVJMID8/IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2FwaVwiO1xyXG4gICAgICAgICAgYXdhaXQgYXhpb3MucG9zdChgJHtiYXNlfS92MS9hdXRoL3JlZnJlc2hgLCB7fSwgeyB3aXRoQ3JlZGVudGlhbHM6IHRydWUgfSk7XHJcbiAgICAgICAgICByZXR1cm4gYXhpb3NJbnN0YW5jZSEocmVxdWVzdCk7XHJcbiAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwiL1wiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBBUElFcnJvcihlcnJvcikpO1xyXG4gICAgfVxyXG4gICk7XHJcblxyXG4gIHJldHVybiBheGlvc0luc3RhbmNlO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQVBJRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1czogbnVtYmVyO1xyXG4gIHB1YmxpYyByZWFkb25seSBkYXRhPzogdW5rbm93bjtcclxuXHJcbiAgY29uc3RydWN0b3IoZXJyb3I6IEF4aW9zRXJyb3IpIHtcclxuICAgIHN1cGVyKGV4dHJhY3RNZXNzYWdlKGVycm9yLnJlc3BvbnNlPy5kYXRhLCBlcnJvci5tZXNzYWdlKSk7XHJcbiAgICB0aGlzLm5hbWUgPSBcIkFQSUVycm9yXCI7XHJcbiAgICB0aGlzLnN0YXR1cyA9IGVycm9yLnJlc3BvbnNlPy5zdGF0dXMgPz8gNTAwO1xyXG4gICAgdGhpcy5kYXRhID0gZXJyb3IucmVzcG9uc2U/LmRhdGE7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdFJhdzxUPihjb25maWc6IEF4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8VD4ge1xyXG4gIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldEF4aW9zSW5zdGFuY2UoKTtcclxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5yZXF1ZXN0PFQ+KGNvbmZpZyk7XHJcbiAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXF1ZXN0PFQ+KGNvbmZpZzogQXhpb3NSZXF1ZXN0Q29uZmlnKTogUHJvbWlzZTxUPiB7XHJcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0UmF3PFQgfCBBcGlFbnZlbG9wZTxUPj4oY29uZmlnKTtcclxuICBpZiAoaGFzRGF0YUVudmVsb3BlPFQ+KHJlc3BvbnNlKSkge1xyXG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEgYXMgVDtcclxuICB9XHJcbiAgcmV0dXJuIHJlc3BvbnNlIGFzIFQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBhcGkgPSB7XHJcbiAgZ2V0OiA8VD4odXJsOiBzdHJpbmcsIGNvbmZpZz86IEF4aW9zUmVxdWVzdENvbmZpZykgPT5cclxuICAgIHJlcXVlc3Q8VD4oeyAuLi5jb25maWcsIG1ldGhvZDogXCJHRVRcIiwgdXJsIH0pLFxyXG4gIHBvc3Q6IDxULCBCIGV4dGVuZHMgb2JqZWN0ID0gb2JqZWN0Pih1cmw6IHN0cmluZywgZGF0YT86IEIsIGNvbmZpZz86IEF4aW9zUmVxdWVzdENvbmZpZykgPT5cbiAgICByZXF1ZXN0PFQ+KHsgLi4uY29uZmlnLCBtZXRob2Q6IFwiUE9TVFwiLCB1cmwsIGRhdGEgfSksXG4gIHB1dDogPFQsIEIgZXh0ZW5kcyBvYmplY3QgPSBvYmplY3Q+KHVybDogc3RyaW5nLCBkYXRhPzogQiwgY29uZmlnPzogQXhpb3NSZXF1ZXN0Q29uZmlnKSA9PlxuICAgIHJlcXVlc3Q8VD4oeyAuLi5jb25maWcsIG1ldGhvZDogXCJQVVRcIiwgdXJsLCBkYXRhIH0pLFxuICBwYXRjaDogPFQsIEIgZXh0ZW5kcyBvYmplY3QgPSBvYmplY3Q+KHVybDogc3RyaW5nLCBkYXRhPzogQiwgY29uZmlnPzogQXhpb3NSZXF1ZXN0Q29uZmlnKSA9PlxuICAgIHJlcXVlc3Q8VD4oeyAuLi5jb25maWcsIG1ldGhvZDogXCJQQVRDSFwiLCB1cmwsIGRhdGEgfSksXG4gIGRlbGV0ZTogPFQ+KHVybDogc3RyaW5nLCBjb25maWc/OiBBeGlvc1JlcXVlc3RDb25maWcpID0+XHJcbiAgICByZXF1ZXN0PFQ+KHsgLi4uY29uZmlnLCBtZXRob2Q6IFwiREVMRVRFXCIsIHVybCB9KSxcclxuICByYXdQb3N0OiA8VCwgQiBleHRlbmRzIG9iamVjdCA9IG9iamVjdD4odXJsOiBzdHJpbmcsIGRhdGE/OiBCLCBjb25maWc/OiBBeGlvc1JlcXVlc3RDb25maWcpID0+XG4gICAgcmVxdWVzdFJhdzxUPih7IC4uLmNvbmZpZywgbWV0aG9kOiBcIlBPU1RcIiwgdXJsLCBkYXRhIH0pLFxuICByYXdHZXQ6IDxUPih1cmw6IHN0cmluZywgY29uZmlnPzogQXhpb3NSZXF1ZXN0Q29uZmlnKSA9PlxyXG4gICAgcmVxdWVzdFJhdzxUPih7IC4uLmNvbmZpZywgbWV0aG9kOiBcIkdFVFwiLCB1cmwgfSksXHJcbn07XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tBUElIZWFsdGgoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpLmdldDx7IHN0YXR1cz86IHN0cmluZyB9PihcIi9oZWFsdGhcIik7XHJcbiAgICByZXR1cm4gcmVzcG9uc2Uuc3RhdHVzID09PSBcIm9rXCI7XHJcbiAgfSBjYXRjaCB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiJdLCJ2ZXJzaW9uIjozfQ== \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/f3/api_f3e486684b0343eb630d8d673420e918.map b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/f3/api_f3e486684b0343eb630d8d673420e918.map deleted file mode 100644 index 57e7c38..0000000 --- a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/f3/api_f3e486684b0343eb630d8d673420e918.map +++ /dev/null @@ -1 +0,0 @@ -{"file":"C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\services\\api.ts","mappings":"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","names":[],"sources":["C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\services\\api.ts"],"sourcesContent":["import type { AxiosError, AxiosInstance, AxiosRequestConfig } from \"axios\";\r\n\r\nexport interface ApiEnvelope {\r\n success?: boolean;\r\n status?: string;\r\n message?: string;\r\n data?: T;\r\n error?: {\r\n code?: number;\r\n message?: string;\r\n };\r\n}\r\n\r\nlet axiosInstance: AxiosInstance | null = null;\r\n\r\nfunction isRecord(value: unknown): value is Record {\r\n return typeof value === \"object\" && value !== null;\r\n}\r\n\r\nfunction hasDataEnvelope(value: unknown): value is ApiEnvelope {\r\n return isRecord(value) && \"data\" in value;\r\n}\r\n\r\nfunction extractMessage(value: unknown, fallback: string): string {\r\n if (isRecord(value)) {\r\n const message = value.message;\r\n if (typeof message === \"string\" && message.trim()) {\r\n return message;\r\n }\r\n\r\n const error = value.error;\r\n if (isRecord(error) && typeof error.message === \"string\" && error.message.trim()) {\r\n return error.message;\r\n }\r\n }\r\n\r\n return fallback;\r\n}\r\n\r\nasync function getAxiosInstance(): Promise {\r\n if (typeof window === \"undefined\") {\r\n throw new Error(\"API client can only be used in the browser.\");\r\n }\r\n\r\n if (axiosInstance) {\r\n return axiosInstance;\r\n }\r\n\r\n const axios = await import(\"axios\").then((module) => module.default);\r\n const baseURL = process.env.NEXT_PUBLIC_API_URL ?? \"http://localhost:8080/api\";\r\n\r\n axiosInstance = axios.create({\r\n baseURL,\r\n timeout: 15000,\r\n withCredentials: true,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"X-Requested-With\": \"XMLHttpRequest\",\r\n },\r\n });\r\n\r\n axiosInstance.interceptors.response.use(\r\n (response) => response,\r\n async (error: AxiosError) => {\r\n const request = error.config;\r\n const isRefreshRequest = request?.url?.includes(\"/v1/auth/refresh\");\r\n\r\n if (error.response?.status === 401 && request && !isRefreshRequest) {\r\n try {\r\n const axios = await import(\"axios\").then((module) => module.default);\r\n const base = process.env.NEXT_PUBLIC_API_URL ?? \"http://localhost:8080/api\";\r\n await axios.post(`${base}/v1/auth/refresh`, {}, { withCredentials: true });\r\n return axiosInstance!(request);\r\n } catch {\r\n if (typeof window !== \"undefined\") {\r\n window.location.href = \"/\";\r\n }\r\n }\r\n }\r\n\r\n return Promise.reject(new APIError(error));\r\n }\r\n );\r\n\r\n return axiosInstance;\r\n}\r\n\r\nexport class APIError extends Error {\r\n public readonly status: number;\r\n public readonly data?: unknown;\r\n\r\n constructor(error: AxiosError) {\r\n super(extractMessage(error.response?.data, error.message));\r\n this.name = \"APIError\";\r\n this.status = error.response?.status ?? 500;\r\n this.data = error.response?.data;\r\n }\r\n}\r\n\r\nexport async function requestRaw(config: AxiosRequestConfig): Promise {\r\n const client = await getAxiosInstance();\r\n const response = await client.request(config);\r\n return response.data;\r\n}\r\n\r\nexport async function request(config: AxiosRequestConfig): Promise {\r\n const response = await requestRaw>(config);\r\n if (hasDataEnvelope(response)) {\r\n return response.data as T;\r\n }\r\n return response as T;\r\n}\r\n\r\nexport const api = {\r\n get: (url: string, config?: AxiosRequestConfig) =>\r\n request({ ...config, method: \"GET\", url }),\r\n post: (url: string, data?: B, config?: AxiosRequestConfig) =>\n request({ ...config, method: \"POST\", url, data }),\n put: (url: string, data?: B, config?: AxiosRequestConfig) =>\n request({ ...config, method: \"PUT\", url, data }),\n patch: (url: string, data?: B, config?: AxiosRequestConfig) =>\n request({ ...config, method: \"PATCH\", url, data }),\n delete: (url: string, config?: AxiosRequestConfig) =>\r\n request({ ...config, method: \"DELETE\", url }),\r\n rawPost: (url: string, data?: B, config?: AxiosRequestConfig) =>\n requestRaw({ ...config, method: \"POST\", url, data }),\n rawGet: (url: string, config?: AxiosRequestConfig) =>\r\n requestRaw({ ...config, method: \"GET\", url }),\r\n};\r\n\r\nexport async function checkAPIHealth(): Promise {\r\n try {\r\n const response = await api.get<{ status?: string }>(\"/health\");\r\n return response.status === \"ok\";\r\n } catch {\r\n return false;\r\n }\r\n}\r\n"],"version":3} \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/ff/MenteeLoginCardtest_ffc687240b1ce7e203e11c29e4587777 b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/ff/MenteeLoginCardtest_ffc687240b1ce7e203e11c29e4587777 deleted file mode 100644 index 098bebf..0000000 --- a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/ff/MenteeLoginCardtest_ffc687240b1ce7e203e11c29e4587777 +++ /dev/null @@ -1,62 +0,0 @@ -0df0aeca997bc96bf26263d38e969d98 -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const jsx_runtime_1 = require("react/jsx-runtime"); -jest.mock("next/navigation", () => ({ - useRouter: () => ({ - push, - }), -})); -jest.mock("@/services/auth", () => ({ - loginMenteeByEmail: jest.fn(), -})); -const react_1 = require("@testing-library/react"); -const user_event_1 = __importDefault(require("@testing-library/user-event")); -const MenteeLoginCard_1 = __importDefault(require("./MenteeLoginCard")); -const auth_1 = require("@/services/auth"); -const push = jest.fn(); -describe("MenteeLoginCard", () => { - beforeEach(() => { - push.mockReset(); - auth_1.loginMenteeByEmail.mockReset(); - }); - it("routes approved mentees to their dashboard", async () => { - auth_1.loginMenteeByEmail.mockResolvedValue({ - auth: { - accessToken: "access", - refreshToken: "refresh", - user: { - id: "1", - name: "Alice", - email: "alice@example.com", - emailVerified: true, - }, - }, - context: { - role: "mentee", - accountStatus: "approved", - user: { - id: "1", - name: "Alice Example", - firstName: "Alice", - lastName: "Example", - username: "alice", - email: "alice@example.com", - }, - }, - }); - const user = user_event_1.default.setup(); - (0, react_1.render)((0, jsx_runtime_1.jsx)(MenteeLoginCard_1.default, { role: "mentee", onClose: jest.fn(), onSignUp: jest.fn() })); - await user.type(react_1.screen.getByPlaceholderText("Email address"), "alice@example.com"); - await user.type(react_1.screen.getByPlaceholderText("Password"), "password123"); - await user.click(react_1.screen.getByRole("button", { name: "Log In" })); - await (0, react_1.waitFor)(() => { - expect(auth_1.loginMenteeByEmail).toHaveBeenCalledWith("alice@example.com", "password123"); - expect(push).toHaveBeenCalledWith("/mentee-dashboard/alice"); - }); - }); -}); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJmaWxlIjoiQzpcXFVzZXJzXFxIUFxcRGVza3RvcFxcY29kZXJ6LnNwYWNlXFxhcHBzXFx3ZWJcXGNvbXBvbmVudHNcXE1lbnRlZUxvZ2luQ2FyZC50ZXN0LnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFPQSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDbEMsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDaEIsSUFBSTtLQUNMLENBQUM7Q0FDSCxDQUFDLENBQUMsQ0FBQztBQUVKLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNsQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO0NBQzlCLENBQUMsQ0FBQyxDQUFDO0FBZkosa0RBQWlFO0FBQ2pFLDZFQUFvRDtBQUNwRCx3RUFBZ0Q7QUFDaEQsMENBQXFEO0FBRXJELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQVl2QixRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO0lBQy9CLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDaEIseUJBQWdDLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNENBQTRDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDekQseUJBQWdDLENBQUMsaUJBQWlCLENBQUM7WUFDbEQsSUFBSSxFQUFFO2dCQUNKLFdBQVcsRUFBRSxRQUFRO2dCQUNyQixZQUFZLEVBQUUsU0FBUztnQkFDdkIsSUFBSSxFQUFFO29CQUNKLEVBQUUsRUFBRSxHQUFHO29CQUNQLElBQUksRUFBRSxPQUFPO29CQUNiLEtBQUssRUFBRSxtQkFBbUI7b0JBQzFCLGFBQWEsRUFBRSxJQUFJO2lCQUNwQjthQUNGO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxRQUFRO2dCQUNkLGFBQWEsRUFBRSxVQUFVO2dCQUN6QixJQUFJLEVBQUU7b0JBQ0osRUFBRSxFQUFFLEdBQUc7b0JBQ1AsSUFBSSxFQUFFLGVBQWU7b0JBQ3JCLFNBQVMsRUFBRSxPQUFPO29CQUNsQixRQUFRLEVBQUUsU0FBUztvQkFDbkIsUUFBUSxFQUFFLE9BQU87b0JBQ2pCLEtBQUssRUFBRSxtQkFBbUI7aUJBQzNCO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxNQUFNLElBQUksR0FBRyxvQkFBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLElBQUEsY0FBTSxFQUFDLHVCQUFDLHlCQUFlLElBQUMsSUFBSSxFQUFDLFFBQVEsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUksQ0FBQyxDQUFDO1FBRW5GLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFNLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUNuRixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBTSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFakUsTUFBTSxJQUFBLGVBQU8sRUFBQyxHQUFHLEVBQUU7WUFDakIsTUFBTSxDQUFDLHlCQUFrQixDQUFDLENBQUMsb0JBQW9CLENBQUMsbUJBQW1CLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDcEYsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLG9CQUFvQixDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIkM6XFxVc2Vyc1xcSFBcXERlc2t0b3BcXGNvZGVyei5zcGFjZVxcYXBwc1xcd2ViXFxjb21wb25lbnRzXFxNZW50ZWVMb2dpbkNhcmQudGVzdC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVuZGVyLCBzY3JlZW4sIHdhaXRGb3IgfSBmcm9tIFwiQHRlc3RpbmctbGlicmFyeS9yZWFjdFwiO1xyXG5pbXBvcnQgdXNlckV2ZW50IGZyb20gXCJAdGVzdGluZy1saWJyYXJ5L3VzZXItZXZlbnRcIjtcclxuaW1wb3J0IE1lbnRlZUxvZ2luQ2FyZCBmcm9tIFwiLi9NZW50ZWVMb2dpbkNhcmRcIjtcclxuaW1wb3J0IHsgbG9naW5NZW50ZWVCeUVtYWlsIH0gZnJvbSBcIkAvc2VydmljZXMvYXV0aFwiO1xyXG5cclxuY29uc3QgcHVzaCA9IGplc3QuZm4oKTtcclxuXHJcbmplc3QubW9jayhcIm5leHQvbmF2aWdhdGlvblwiLCAoKSA9PiAoe1xyXG4gIHVzZVJvdXRlcjogKCkgPT4gKHtcclxuICAgIHB1c2gsXHJcbiAgfSksXHJcbn0pKTtcclxuXHJcbmplc3QubW9jayhcIkAvc2VydmljZXMvYXV0aFwiLCAoKSA9PiAoe1xyXG4gIGxvZ2luTWVudGVlQnlFbWFpbDogamVzdC5mbigpLFxyXG59KSk7XHJcblxyXG5kZXNjcmliZShcIk1lbnRlZUxvZ2luQ2FyZFwiLCAoKSA9PiB7XHJcbiAgYmVmb3JlRWFjaCgoKSA9PiB7XHJcbiAgICBwdXNoLm1vY2tSZXNldCgpO1xyXG4gICAgKGxvZ2luTWVudGVlQnlFbWFpbCBhcyBqZXN0Lk1vY2spLm1vY2tSZXNldCgpO1xyXG4gIH0pO1xyXG5cclxuICBpdChcInJvdXRlcyBhcHByb3ZlZCBtZW50ZWVzIHRvIHRoZWlyIGRhc2hib2FyZFwiLCBhc3luYyAoKSA9PiB7XHJcbiAgICAobG9naW5NZW50ZWVCeUVtYWlsIGFzIGplc3QuTW9jaykubW9ja1Jlc29sdmVkVmFsdWUoe1xyXG4gICAgICBhdXRoOiB7XHJcbiAgICAgICAgYWNjZXNzVG9rZW46IFwiYWNjZXNzXCIsXHJcbiAgICAgICAgcmVmcmVzaFRva2VuOiBcInJlZnJlc2hcIixcclxuICAgICAgICB1c2VyOiB7XHJcbiAgICAgICAgICBpZDogXCIxXCIsXHJcbiAgICAgICAgICBuYW1lOiBcIkFsaWNlXCIsXHJcbiAgICAgICAgICBlbWFpbDogXCJhbGljZUBleGFtcGxlLmNvbVwiLFxyXG4gICAgICAgICAgZW1haWxWZXJpZmllZDogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgcm9sZTogXCJtZW50ZWVcIixcclxuICAgICAgICBhY2NvdW50U3RhdHVzOiBcImFwcHJvdmVkXCIsXHJcbiAgICAgICAgdXNlcjoge1xyXG4gICAgICAgICAgaWQ6IFwiMVwiLFxyXG4gICAgICAgICAgbmFtZTogXCJBbGljZSBFeGFtcGxlXCIsXHJcbiAgICAgICAgICBmaXJzdE5hbWU6IFwiQWxpY2VcIixcclxuICAgICAgICAgIGxhc3ROYW1lOiBcIkV4YW1wbGVcIixcclxuICAgICAgICAgIHVzZXJuYW1lOiBcImFsaWNlXCIsXHJcbiAgICAgICAgICBlbWFpbDogXCJhbGljZUBleGFtcGxlLmNvbVwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB1c2VyID0gdXNlckV2ZW50LnNldHVwKCk7XHJcbiAgICByZW5kZXIoPE1lbnRlZUxvZ2luQ2FyZCByb2xlPVwibWVudGVlXCIgb25DbG9zZT17amVzdC5mbigpfSBvblNpZ25VcD17amVzdC5mbigpfSAvPik7XHJcblxyXG4gICAgYXdhaXQgdXNlci50eXBlKHNjcmVlbi5nZXRCeVBsYWNlaG9sZGVyVGV4dChcIkVtYWlsIGFkZHJlc3NcIiksIFwiYWxpY2VAZXhhbXBsZS5jb21cIik7XHJcbiAgICBhd2FpdCB1c2VyLnR5cGUoc2NyZWVuLmdldEJ5UGxhY2Vob2xkZXJUZXh0KFwiUGFzc3dvcmRcIiksIFwicGFzc3dvcmQxMjNcIik7XHJcbiAgICBhd2FpdCB1c2VyLmNsaWNrKHNjcmVlbi5nZXRCeVJvbGUoXCJidXR0b25cIiwgeyBuYW1lOiBcIkxvZyBJblwiIH0pKTtcclxuXHJcbiAgICBhd2FpdCB3YWl0Rm9yKCgpID0+IHtcclxuICAgICAgZXhwZWN0KGxvZ2luTWVudGVlQnlFbWFpbCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoXCJhbGljZUBleGFtcGxlLmNvbVwiLCBcInBhc3N3b3JkMTIzXCIpO1xyXG4gICAgICBleHBlY3QocHVzaCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoXCIvbWVudGVlLWRhc2hib2FyZC9hbGljZVwiKTtcclxuICAgIH0pO1xyXG4gIH0pO1xyXG59KTtcclxuIl0sInZlcnNpb24iOjN9 \ No newline at end of file diff --git a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/ff/MenteeLoginCardtest_ffc687240b1ce7e203e11c29e4587777.map b/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/ff/MenteeLoginCardtest_ffc687240b1ce7e203e11c29e4587777.map deleted file mode 100644 index 6c94393..0000000 --- a/apps/web/.jest-cache/jest-transform-cache-0e73593c623698a6feedabd9be3f11fc-1324230084614362f519ae4cb2580aab/ff/MenteeLoginCardtest_ffc687240b1ce7e203e11c29e4587777.map +++ /dev/null @@ -1 +0,0 @@ -{"file":"C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\components\\MenteeLoginCard.test.tsx","mappings":";;;;;;AAOA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QAChB,IAAI;KACL,CAAC;CACH,CAAC,CAAC,CAAC;AAEJ,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,kBAAkB,EAAE,IAAI,CAAC,EAAE,EAAE;CAC9B,CAAC,CAAC,CAAC;AAfJ,kDAAiE;AACjE,6EAAoD;AACpD,wEAAgD;AAChD,0CAAqD;AAErD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AAYvB,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,SAAS,EAAE,CAAC;QAChB,yBAAgC,CAAC,SAAS,EAAE,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QACzD,yBAAgC,CAAC,iBAAiB,CAAC;YAClD,IAAI,EAAE;gBACJ,WAAW,EAAE,QAAQ;gBACrB,YAAY,EAAE,SAAS;gBACvB,IAAI,EAAE;oBACJ,EAAE,EAAE,GAAG;oBACP,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,mBAAmB;oBAC1B,aAAa,EAAE,IAAI;iBACpB;aACF;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,aAAa,EAAE,UAAU;gBACzB,IAAI,EAAE;oBACJ,EAAE,EAAE,GAAG;oBACP,IAAI,EAAE,eAAe;oBACrB,SAAS,EAAE,OAAO;oBAClB,QAAQ,EAAE,SAAS;oBACnB,QAAQ,EAAE,OAAO;oBACjB,KAAK,EAAE,mBAAmB;iBAC3B;aACF;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,oBAAS,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAA,cAAM,EAAC,uBAAC,yBAAe,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,GAAI,CAAC,CAAC;QAEnF,MAAM,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC,oBAAoB,CAAC,eAAe,CAAC,EAAE,mBAAmB,CAAC,CAAC;QACnF,MAAM,IAAI,CAAC,IAAI,CAAC,cAAM,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,CAAC;QACxE,MAAM,IAAI,CAAC,KAAK,CAAC,cAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAEjE,MAAM,IAAA,eAAO,EAAC,GAAG,EAAE;YACjB,MAAM,CAAC,yBAAkB,CAAC,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC;YACpF,MAAM,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,yBAAyB,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","names":[],"sources":["C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\components\\MenteeLoginCard.test.tsx"],"sourcesContent":["import { render, screen, waitFor } from \"@testing-library/react\";\r\nimport userEvent from \"@testing-library/user-event\";\r\nimport MenteeLoginCard from \"./MenteeLoginCard\";\r\nimport { loginMenteeByEmail } from \"@/services/auth\";\r\n\r\nconst push = jest.fn();\r\n\r\njest.mock(\"next/navigation\", () => ({\r\n useRouter: () => ({\r\n push,\r\n }),\r\n}));\r\n\r\njest.mock(\"@/services/auth\", () => ({\r\n loginMenteeByEmail: jest.fn(),\r\n}));\r\n\r\ndescribe(\"MenteeLoginCard\", () => {\r\n beforeEach(() => {\r\n push.mockReset();\r\n (loginMenteeByEmail as jest.Mock).mockReset();\r\n });\r\n\r\n it(\"routes approved mentees to their dashboard\", async () => {\r\n (loginMenteeByEmail as jest.Mock).mockResolvedValue({\r\n auth: {\r\n accessToken: \"access\",\r\n refreshToken: \"refresh\",\r\n user: {\r\n id: \"1\",\r\n name: \"Alice\",\r\n email: \"alice@example.com\",\r\n emailVerified: true,\r\n },\r\n },\r\n context: {\r\n role: \"mentee\",\r\n accountStatus: \"approved\",\r\n user: {\r\n id: \"1\",\r\n name: \"Alice Example\",\r\n firstName: \"Alice\",\r\n lastName: \"Example\",\r\n username: \"alice\",\r\n email: \"alice@example.com\",\r\n },\r\n },\r\n });\r\n\r\n const user = userEvent.setup();\r\n render();\r\n\r\n await user.type(screen.getByPlaceholderText(\"Email address\"), \"alice@example.com\");\r\n await user.type(screen.getByPlaceholderText(\"Password\"), \"password123\");\r\n await user.click(screen.getByRole(\"button\", { name: \"Log In\" }));\r\n\r\n await waitFor(() => {\r\n expect(loginMenteeByEmail).toHaveBeenCalledWith(\"alice@example.com\", \"password123\");\r\n expect(push).toHaveBeenCalledWith(\"/mentee-dashboard/alice\");\r\n });\r\n });\r\n});\r\n"],"version":3} \ No newline at end of file diff --git a/apps/web/.jest-cache/perf-cache-0e73593c623698a6feedabd9be3f11fc-da39a3ee5e6b4b0d3255bfef95601890 b/apps/web/.jest-cache/perf-cache-0e73593c623698a6feedabd9be3f11fc-da39a3ee5e6b4b0d3255bfef95601890 deleted file mode 100644 index 0a62140..0000000 --- a/apps/web/.jest-cache/perf-cache-0e73593c623698a6feedabd9be3f11fc-da39a3ee5e6b4b0d3255bfef95601890 +++ /dev/null @@ -1 +0,0 @@ -{"C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\components\\MenteeSignUpCard.test.tsx":[1,5103],"C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\components\\MenteeLoginCard.test.tsx":[1,1816],"C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\services\\api.test.ts":[1,708],"C:\\Users\\HP\\Desktop\\coderz.space\\apps\\web\\__tests__\\example.test.tsx":[1,303]} \ No newline at end of file