Commit 2cd4c5c2 by Arjun Jhukal

updated the device id at login

parent 39855230
......@@ -18,6 +18,7 @@
"@mui/x-date-pickers": "^8.15.0",
"@mui/x-date-pickers-pro": "^8.15.0",
"@reduxjs/toolkit": "^2.9.0",
"@seontechnologies/seon-javascript-sdk": "^6.10.1",
"@tanstack/react-table": "^8.21.3",
"@wandersonalwes/iconsax-react": "0.0.10",
"apexcharts": "^5.3.5",
......@@ -15121,6 +15122,12 @@
"dev": true,
"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": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz",
......@@ -19,6 +19,7 @@
"@mui/x-date-pickers": "^8.15.0",
"@mui/x-date-pickers-pro": "^8.15.0",
"@reduxjs/toolkit": "^2.9.0",
"@seontechnologies/seon-javascript-sdk": "^6.10.1",
"@tanstack/react-table": "^8.21.3",
"@wandersonalwes/iconsax-react": "0.0.10",
"apexcharts": "^5.3.5",
......
......@@ -4,6 +4,7 @@ import { ClientProvider } from '@/hooks/ReduxProvider'
import ThemeCustomization from '@/theme'
import React from 'react'
import { AgeChecker } from './AgeChecker'
import { SeonProvider } from './SeonProvider'
export default function ProviderWrapper({ children }: { children: React.ReactNode }) {
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";
import TopLoader from "./TopLoader";
import React from "react";
import { pageSEO } from "@/serverApi/game";
import { SeonProvider } from "./SeonProvider";
const metadata: Metadata = {
title: "Sweepstake",
......@@ -50,12 +51,14 @@ export default function RootLayout({
<html lang="en">
{/* className="dark" */}
<body className={`${inter.className} scroll-smooth`} cz-shortcut-listen="true">
<ProviderWrapper>
<React.Suspense fallback={<div />}>
<TopLoader />
</React.Suspense>
{children}
</ProviderWrapper>
<SeonProvider>
<ProviderWrapper>
<React.Suspense fallback={<div />}>
<TopLoader />
</React.Suspense>
{children}
</ProviderWrapper>
</SeonProvider>
</body>
</html>
);
......
......@@ -14,6 +14,7 @@ import { showToast, ToastVariant } from '@/slice/toastSlice';
import { clearTokens, setTokens } from '@/slice/authSlice';
import PasswordField from '@/components/molecules/PasswordField';
import { ArrowLeft } from '@wandersonalwes/iconsax-react';
import { useSeon } from '@/app/SeonProvider';
const validationSchema = Yup.object().shape({
emailAddress: Yup.string()
......@@ -38,7 +39,7 @@ export default function LoginPage() {
const router = useRouter();
const dispatch = useAppDispatch();
const [loginUser, { isLoading }] = useLoginMutation();
const { deviceId, loading } = useSeon();
const { handleSubmit, handleBlur, handleChange, errors, dirty, values, touched } = useFormik(
{
initialValues,
......@@ -47,7 +48,8 @@ export default function LoginPage() {
try {
const response = await loginUser({
email: values.emailAddress,
password: values.password
password: values.password,
device_id:deviceId
}).unwrap();
dispatch(
......
......@@ -24,10 +24,10 @@ export const authApi = createApi({
}),
login: builder.mutation<LoginResponse, LoginProps>({
query: ({ email, password }) => ({
query: ({ email, password, device_id }) => ({
url: `/api/auth/login`,
method: "POST",
body: { email, password },
body: { email, password, device_id },
})
}),
sendVerificationLinkAgain: builder.mutation<LoginResponse, { email: string }>({
......
......@@ -3,6 +3,7 @@ export type RoleProps = "SUPER_ADMIN" | "ADMIN" | "USER"
export type LoginProps = {
email: string;
password: string;
device_id?: string;
}
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