Commit 2cd4c5c2 by Arjun Jhukal

updated the device id at login

parent 39855230
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
"@mui/x-date-pickers": "^8.15.0", "@mui/x-date-pickers": "^8.15.0",
"@mui/x-date-pickers-pro": "^8.15.0", "@mui/x-date-pickers-pro": "^8.15.0",
"@reduxjs/toolkit": "^2.9.0", "@reduxjs/toolkit": "^2.9.0",
"@seontechnologies/seon-javascript-sdk": "^6.10.1",
"@tanstack/react-table": "^8.21.3", "@tanstack/react-table": "^8.21.3",
"@wandersonalwes/iconsax-react": "0.0.10", "@wandersonalwes/iconsax-react": "0.0.10",
"apexcharts": "^5.3.5", "apexcharts": "^5.3.5",
...@@ -15121,6 +15122,12 @@ ...@@ -15121,6 +15122,12 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@seontechnologies/seon-javascript-sdk": {
"version": "6.10.1",
"resolved": "https://registry.npmjs.org/@seontechnologies/seon-javascript-sdk/-/seon-javascript-sdk-6.10.1.tgz",
"integrity": "sha512-pQDiclf+5FAjsVQzTHdbXAo41oraFjy1Z7J+nQvEEYnF+guKe6k5Got9FsNENV9auRm4Jxd9p76nAlK5W8gajQ==",
"license": "SEE LICENSE IN LICENSE"
},
"node_modules/@standard-schema/spec": { "node_modules/@standard-schema/spec": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz",
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
"@mui/x-date-pickers": "^8.15.0", "@mui/x-date-pickers": "^8.15.0",
"@mui/x-date-pickers-pro": "^8.15.0", "@mui/x-date-pickers-pro": "^8.15.0",
"@reduxjs/toolkit": "^2.9.0", "@reduxjs/toolkit": "^2.9.0",
"@seontechnologies/seon-javascript-sdk": "^6.10.1",
"@tanstack/react-table": "^8.21.3", "@tanstack/react-table": "^8.21.3",
"@wandersonalwes/iconsax-react": "0.0.10", "@wandersonalwes/iconsax-react": "0.0.10",
"apexcharts": "^5.3.5", "apexcharts": "^5.3.5",
......
...@@ -4,6 +4,7 @@ import { ClientProvider } from '@/hooks/ReduxProvider' ...@@ -4,6 +4,7 @@ import { ClientProvider } from '@/hooks/ReduxProvider'
import ThemeCustomization from '@/theme' import ThemeCustomization from '@/theme'
import React from 'react' import React from 'react'
import { AgeChecker } from './AgeChecker' import { AgeChecker } from './AgeChecker'
import { SeonProvider } from './SeonProvider'
export default function ProviderWrapper({ children }: { children: React.ReactNode }) { export default function ProviderWrapper({ children }: { children: React.ReactNode }) {
return ( return (
......
"use client";
import React, { createContext, useContext, useEffect, useState } from "react";
import seon from "@seontechnologies/seon-javascript-sdk";
type SeonContextType = {
deviceId?: string;
loading: boolean;
};
const SeonContext = createContext<SeonContextType>({ deviceId: undefined, loading: true });
export const useSeon = () => useContext(SeonContext);
export const SeonProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
const [deviceId, setDeviceId] = useState<string>();
const [loading, setLoading] = useState(true);
useEffect(() => {
seon.init({
behavioralDataCollection: {
targets: 'input[type="text"], .behavior',
formFilloutDurationTargetId: "myForm",
},
});
// Collect fingerprint
seon.getSession()
.then((session: any) => {
setDeviceId(session);
setLoading(false);
})
.catch((err: any) => {
console.error("SEON init error:", err);
setLoading(false);
});
// Cleanup behavioral tracking if needed
return () => {
seon.init({
behavioralDataCollection: { targets: "" },
});
};
}, []);
return (
<SeonContext.Provider value={{ deviceId, loading }}>
{children}
</SeonContext.Provider>
);
};
\ No newline at end of file
...@@ -6,6 +6,7 @@ import { AgeChecker } from "./AgeChecker"; ...@@ -6,6 +6,7 @@ import { AgeChecker } from "./AgeChecker";
import TopLoader from "./TopLoader"; import TopLoader from "./TopLoader";
import React from "react"; import React from "react";
import { pageSEO } from "@/serverApi/game"; import { pageSEO } from "@/serverApi/game";
import { SeonProvider } from "./SeonProvider";
const metadata: Metadata = { const metadata: Metadata = {
title: "Sweepstake", title: "Sweepstake",
...@@ -50,12 +51,14 @@ export default function RootLayout({ ...@@ -50,12 +51,14 @@ export default function RootLayout({
<html lang="en"> <html lang="en">
{/* className="dark" */} {/* className="dark" */}
<body className={`${inter.className} scroll-smooth`} cz-shortcut-listen="true"> <body className={`${inter.className} scroll-smooth`} cz-shortcut-listen="true">
<ProviderWrapper> <SeonProvider>
<React.Suspense fallback={<div />}> <ProviderWrapper>
<TopLoader /> <React.Suspense fallback={<div />}>
</React.Suspense> <TopLoader />
{children} </React.Suspense>
</ProviderWrapper> {children}
</ProviderWrapper>
</SeonProvider>
</body> </body>
</html> </html>
); );
......
...@@ -14,6 +14,7 @@ import { showToast, ToastVariant } from '@/slice/toastSlice'; ...@@ -14,6 +14,7 @@ import { showToast, ToastVariant } from '@/slice/toastSlice';
import { clearTokens, setTokens } from '@/slice/authSlice'; import { clearTokens, setTokens } from '@/slice/authSlice';
import PasswordField from '@/components/molecules/PasswordField'; import PasswordField from '@/components/molecules/PasswordField';
import { ArrowLeft } from '@wandersonalwes/iconsax-react'; import { ArrowLeft } from '@wandersonalwes/iconsax-react';
import { useSeon } from '@/app/SeonProvider';
const validationSchema = Yup.object().shape({ const validationSchema = Yup.object().shape({
emailAddress: Yup.string() emailAddress: Yup.string()
...@@ -38,7 +39,7 @@ export default function LoginPage() { ...@@ -38,7 +39,7 @@ export default function LoginPage() {
const router = useRouter(); const router = useRouter();
const dispatch = useAppDispatch(); const dispatch = useAppDispatch();
const [loginUser, { isLoading }] = useLoginMutation(); const [loginUser, { isLoading }] = useLoginMutation();
const { deviceId, loading } = useSeon();
const { handleSubmit, handleBlur, handleChange, errors, dirty, values, touched } = useFormik( const { handleSubmit, handleBlur, handleChange, errors, dirty, values, touched } = useFormik(
{ {
initialValues, initialValues,
...@@ -47,7 +48,8 @@ export default function LoginPage() { ...@@ -47,7 +48,8 @@ export default function LoginPage() {
try { try {
const response = await loginUser({ const response = await loginUser({
email: values.emailAddress, email: values.emailAddress,
password: values.password password: values.password,
device_id:deviceId
}).unwrap(); }).unwrap();
dispatch( dispatch(
......
...@@ -24,10 +24,10 @@ export const authApi = createApi({ ...@@ -24,10 +24,10 @@ export const authApi = createApi({
}), }),
login: builder.mutation<LoginResponse, LoginProps>({ login: builder.mutation<LoginResponse, LoginProps>({
query: ({ email, password }) => ({ query: ({ email, password, device_id }) => ({
url: `/api/auth/login`, url: `/api/auth/login`,
method: "POST", method: "POST",
body: { email, password }, body: { email, password, device_id },
}) })
}), }),
sendVerificationLinkAgain: builder.mutation<LoginResponse, { email: string }>({ sendVerificationLinkAgain: builder.mutation<LoginResponse, { email: string }>({
......
...@@ -3,6 +3,7 @@ export type RoleProps = "SUPER_ADMIN" | "ADMIN" | "USER" ...@@ -3,6 +3,7 @@ export type RoleProps = "SUPER_ADMIN" | "ADMIN" | "USER"
export type LoginProps = { export type LoginProps = {
email: string; email: string;
password: string; password: string;
device_id?: string;
} }
export interface User { export interface User {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment