Commit 2e3f804d by Arjun Jhukal

minor changes

parent b0a9a158
{
"permissions": {
"additionalDirectories": [
"d:\\Makura\\getFirekirin\\src\\app\\api\\dfl-proxy"
]
}
}
import { NextRequest, NextResponse } from "next/server";
export async function GET(
request: NextRequest,
{ params }: { params: { path: string[] } }
) {
const path = params.path.join("/");
const search = request.nextUrl.search;
const targetUrl = `https://dfl.acuitytec.com/${path}${search}`;
const res = await fetch(targetUrl);
const content = await res.text();
const contentType = res.headers.get("Content-Type") ?? "application/javascript";
return new NextResponse(content, {
status: res.status,
headers: { "Content-Type": contentType },
});
}
import { NextResponse } from "next/server";
export async function GET() {
const res = await fetch("https://service6.acuitytec.com/api/js/profiling.min.js");
const script = await res.text();
const rewritten = script.replace(/https:\/\/dfl\.acuitytec\.com/g, "/api/dfl-proxy");
const patched = `${rewritten}\nwindow.Profiling = Profiling;`;
return new NextResponse(patched, {
headers: { "Content-Type": "application/javascript" },
});
}
import AuthHydrator from "@/components/Hydrators/AuthHydrator";
import FingerprintLogger from "@/components/FingerprintLogger";
import { pageSEO } from "@/serverApi/game";
import type { Metadata } from "next";
import { Inter } from "next/font/google";
......@@ -7,7 +9,6 @@ import "./globals.css";
import ProviderWrapper from "./ProviderWrapper";
import { SeonProvider } from "./SeonProvider";
import TopLoader from "./TopLoader";
import AuthHydrator from "@/components/Hydrators/AuthHydrator";
const metadata: Metadata = {
title: "Sweepstake",
description: "Sweepstake - Online Gaming Platform",
......@@ -92,6 +93,7 @@ export default function RootLayout({
<SeonProvider>
<ProviderWrapper>
<AuthHydrator />
<FingerprintLogger />
<React.Suspense fallback={<div />}>
<TopLoader />
......
"use client";
import { setGlobalDeviceFingerprint } from "@/services/baseQuery";
import Script from "next/script";
import { useEffect } from "react";
const STORAGE_KEY = "acuity_device_fp";
declare global {
interface Window {
Profiling: {
fingerprint: () => Promise<{ request_id_provider_1: string | null; description?: string }>;
};
}
}
function handleLoad() {
if (!window.Profiling) {
console.warn("Profiling still undefined after proxy load");
return;
}
window.Profiling.fingerprint()
.then((response) => {
const fp = response.request_id_provider_1 || undefined;
console.log("Fingerprint request_id_provider_1:", fp);
if (fp) {
localStorage.setItem(STORAGE_KEY, fp);
setGlobalDeviceFingerprint(fp);
}
})
.catch((response) => {
console.info("Fingerprint error:", response?.request_id_provider_1 ?? response?.description ?? response);
});
}
export default function FingerprintLogger() {
useEffect(() => {
const cached = localStorage.getItem(STORAGE_KEY);
if (cached) {
setGlobalDeviceFingerprint(cached);
}
}, []);
return (
<Script
src="/api/profiling-proxy"
strategy="afterInteractive"
onLoad={handleLoad}
/>
);
}
......@@ -244,6 +244,21 @@ export default function AddPlayerForm({ formik, id, data, loading, buttonLabel }
</div>
<div className="input__field">
<InputLabel htmlFor="ssn">SSN<span className="text-red-500"> (last 4 Digit) *</span></InputLabel>
<OutlinedInput
fullWidth
id="ssn"
name="ssn"
placeholder="Enter Last 4 Digit of SSN"
value={formik.values.ssn}
onChange={formik.handleChange}
onBlur={formik.handleBlur}
/>
<span className="error">
{formik.touched.ssn && formik.errors.ssn ? formik.errors.ssn : ""}
</span>
</div>
<div className="input__field">
<InputLabel htmlFor="gender">Gender <span className="text-red-500">*</span></InputLabel>
<Select
fullWidth
......
......@@ -22,6 +22,7 @@ export const PlayerValidationSchema = (isEdit: boolean) => Yup.object().shape({
city: Yup.string().required("City is required"),
postal_code: Yup.string().required("Zip code is required"),
state: Yup.string().required("State is required"),
ssn: Yup.string().required("SSN is required"),
gender: Yup.string().required("Gender is required"),
phone: Yup.string()
.matches(/^\+?\d{7,15}$/, "Invalid phone number")
......@@ -74,6 +75,7 @@ export default function AddPlayerPage({ id }: { id?: string }) {
state: data?.data.state || "",
gender: data?.data.gender || "",
address_line_two: data?.data.address_line_two || "",
ssn: data?.data.ssn || "",
} : initialPlayerValues,
validationSchema: PlayerValidationSchema(!!id),
enableReinitialize: true,
......@@ -93,6 +95,7 @@ export default function AddPlayerPage({ id }: { id?: string }) {
if (values.postal_code) formData.append("postal_code", values.postal_code);
if (values.state) formData.append("state", values.state);
if (values.gender) formData.append("gender", values.gender);
if (values.ssn) formData.append("ssn", values.ssn);
if (values.address_line_two) formData.append("address_line_two", values.address_line_two);
if (values.profile_image) {
if (Array.isArray(values.profile_image)) {
......
......@@ -34,6 +34,7 @@ export default function EditUserProfile({ id, buttonLabel }: { id: string, butto
gender: user.gender || "",
state: user.state || "",
address_line_two: user.address_line_two || "",
ssn: user.ssn || "",
} : initialPlayerValues,
validationSchema: PlayerValidationSchema(user?.id ? true : false),
enableReinitialize: true,
......@@ -50,6 +51,7 @@ export default function EditUserProfile({ id, buttonLabel }: { id: string, butto
if (values.wallet_address) formData.append("wallet_address", values.wallet_address);
if (values.address) formData.append("address", values.address);
if (values.city) formData.append("city", values.city);
if (values.ssn) formData.append("ssn", values.ssn);
if (values.phone) formData.append("phone", values.phone);
if (values.dob) formData.append("dob", formattedDob);
if (values.postal_code) formData.append("postal_code", values.postal_code);
......@@ -120,6 +122,7 @@ export default function EditUserProfile({ id, buttonLabel }: { id: string, butto
gender: user?.gender || "",
address_line_two: user?.address_line_two || "",
state: user?.state || "",
ssn: user?.ssn || "",
} as PlayerItem,
}
: undefined;
......
......@@ -5,41 +5,40 @@ import { fetchBaseQuery } from "@reduxjs/toolkit/query/react";
let globalDeviceId: string | undefined = undefined;
let globalDeviceFingerprint: string | undefined = undefined;
let resolveFingerprint: (() => void) | undefined;
const fingerprintReady = new Promise<void>((resolve) => {
resolveFingerprint = resolve;
});
// Safety timeout — never block forever
const fingerprintTimeout = setTimeout(() => resolveFingerprint?.(), 4000);
export const setGlobalDeviceId = (id?: string) => {
globalDeviceId = id;
};
export const setGlobalDeviceFingerprint = (fingerprint?: string) => {
globalDeviceFingerprint = fingerprint;
clearTimeout(fingerprintTimeout);
resolveFingerprint?.();
};
const base = fetchBaseQuery({
baseUrl: (process.env.NEXT_PUBLIC_FRONTEND_URL || "") + "/api/backend",
export const baseQuery = fetchBaseQuery({
baseUrl:
(process.env.NEXT_PUBLIC_FRONTEND_URL || "") + "/api/backend",
credentials: "include",
prepareHeaders: (headers, { getState }) => {
const token = (getState() as RootState).auth.access_token;
headers.set("Accept", "application/json");
if (globalDeviceId) headers.set("X-Device-Id", globalDeviceId);
if (globalDeviceFingerprint) headers.set("X-Device-Fingerprint", globalDeviceFingerprint);
if (token) headers.set("Authorization", `Bearer ${token}`);
if (globalDeviceId) {
headers.set("X-Device-Id", globalDeviceId);
}
if (globalDeviceFingerprint) {
headers.set("X-Device-Fingerprint", globalDeviceFingerprint);
}
console.log("📡 Preparing headers with device info:", {
"X-Device-Id": globalDeviceId,
"X-Device-Fingerprint": globalDeviceFingerprint
});
if (token) {
headers.set("Authorization", `Bearer ${token}`);
}
return headers;
},
});
export const baseQuery: ReturnType<typeof fetchBaseQuery> = async (queryArg, api, extraOptions) => {
await fingerprintReady;
return base(queryArg, api, extraOptions);
};
\ No newline at end of file
......@@ -20,6 +20,7 @@ export interface CommonPlayerProps {
is_acuity_verified?: boolean
gender: string;
address_line_two?: string;
ssn: string;
}
export interface PlayerProps extends CommonPlayerProps {
id?: string;
......@@ -47,6 +48,7 @@ export const initialPlayerValues: PlayerProps = {
postal_code: "",
gender: "",
address_line_two: "",
ssn: "",
};
type GameInformation = {
......
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