diff --git a/pascals-ledger/src/app/verify/[hashId]/page.tsx b/pascals-ledger/src/app/verify/[hashId]/page.tsx index 9050929..a8ff063 100644 --- a/pascals-ledger/src/app/verify/[hashId]/page.tsx +++ b/pascals-ledger/src/app/verify/[hashId]/page.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useState, useEffect } from 'react'; +import { use, useState, useEffect } from 'react'; import Link from 'next/link'; import Image from 'next/image'; @@ -16,18 +16,19 @@ interface VerificationData { verified: boolean; } -export default function VerifyPage({ params }: { params: { hashId: string } }) { +export default function VerifyPage({ params }: { params: Promise<{ hashId: string }> }) { + const { hashId } = use(params); const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(''); useEffect(() => { fetchVerificationData(); - }, [params.hashId]); + }, [hashId]); const fetchVerificationData = async () => { try { - const response = await fetch(`/api/verify/${params.hashId}`); + const response = await fetch(`/api/verify/${hashId}`); const result = await response.json(); if (result.success) { @@ -154,17 +155,30 @@ export default function VerifyPage({ params }: { params: { hashId: string } }) {

Environmental Entropy

-
- {data?.entropyMetadata?.weather && ( +
+ {data?.entropyMetadata?.weather ? (

Weather: {data.entropyMetadata.weather.temperature}°C,{' '} {data.entropyMetadata.weather.conditions}

- )} - {data?.entropyMetadata?.location && ( -

- Location: {data.entropyMetadata.location.city},{' '} - {data.entropyMetadata.location.country} + ) : null} + {data?.entropyMetadata?.location ? ( + <> +

+ Location: {data.entropyMetadata.location.city} + {data.entropyMetadata.location.country && `, ${data.entropyMetadata.location.country}`} +

+ {data.entropyMetadata.location.coordinates && ( +

+ Approx. coordinates: {Math.floor(data.entropyMetadata.location.coordinates.lat)}°, {Math.floor(data.entropyMetadata.location.coordinates.lon)}° + (truncated for privacy - precise coordinates used in hash) +

+ )} + + ) : null} + {!data?.entropyMetadata?.weather && !data?.entropyMetadata?.location && ( +

+ No environmental data collected for this hash

)}
diff --git a/pascals-ledger/src/lib/entropy.ts b/pascals-ledger/src/lib/entropy.ts index ea2fa35..c3a3799 100644 --- a/pascals-ledger/src/lib/entropy.ts +++ b/pascals-ledger/src/lib/entropy.ts @@ -106,6 +106,20 @@ export async function generateEntropyMetadata( location = { city: options.city, }; + } else { + // Fallback to IP-based geolocation + const ipLocation = await getIPLocation(); + if (ipLocation) { + weather = await fetchWeatherData(ipLocation.lat, ipLocation.lon); + location = { + city: ipLocation.city, + country: ipLocation.country, + coordinates: { + lat: ipLocation.lat, + lon: ipLocation.lon, + }, + }; + } } const metadata: EntropyMetadata = {