3 Commits

Author SHA1 Message Date
syoul ac168c3689 Merge branch 'dev'
ci/woodpecker/push/woodpecker Pipeline was successful
2026-03-28 11:52:27 +01:00
syoul 8f9a11c4e8 chore: bump version to 1.4.1
ci/woodpecker/push/woodpecker Pipeline was successful
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-28 11:50:31 +01:00
syoul 63f50d5762 feat: géolocaliser les comptes non-membres via Cesium+
ci/woodpecker/push/woodpecker Pipeline was successful
Pour les fromId/toId absents du keyMap WoT, applique ss58ToDuniterKey
directement pour tenter un lookup Cesium+. Les non-membres ayant un
profil géolocalisé (ex: comptes portefeuille avec ville renseignée)
apparaissent désormais dans le flux animé.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-28 11:38:31 +01:00
2 changed files with 11 additions and 6 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "g1flux", "name": "g1flux",
"private": true, "private": true,
"version": "1.4.0", "version": "1.4.1",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
+10 -5
View File
@@ -12,7 +12,7 @@
* Pour activer : définir VITE_USE_LIVE_API=true dans .env.local * Pour activer : définir VITE_USE_LIVE_API=true dans .env.local
*/ */
import { fetchTransfers, buildIdentityKeyMap, fetchCurrentUD } from './adapters/SubsquidAdapter'; import { fetchTransfers, buildIdentityKeyMap, fetchCurrentUD, ss58ToDuniterKey } from './adapters/SubsquidAdapter';
import { resolveGeoByKeys, cleanCityName } from './adapters/CesiumAdapter'; import { resolveGeoByKeys, cleanCityName } from './adapters/CesiumAdapter';
import { import {
getTransactionsForPeriod, getTransactionsForPeriod,
@@ -69,9 +69,14 @@ async function fetchLiveTransactions(periodDays: number): Promise<{
} }
// Clés Duniter uniques des émetteurs ET destinataires (un seul appel Cesium+) // Clés Duniter uniques des émetteurs ET destinataires (un seul appel Cesium+)
// Pour les membres WoT : via keyMap (genesis key = _id Cesium+)
// Pour les non-membres : conversion directe SS58 → Duniter key
const resolveKey = (ss58: string): string =>
keyMap.get(ss58) ?? ss58ToDuniterKey(ss58);
const allDuniterKeys = [...new Set([ const allDuniterKeys = [...new Set([
...rawTransfers.map((t) => keyMap.get(t.fromId)), ...rawTransfers.map((t) => t.fromId ? resolveKey(t.fromId) : undefined),
...rawTransfers.map((t) => keyMap.get(t.toId)), ...rawTransfers.map((t) => t.toId ? resolveKey(t.toId) : undefined),
].filter(Boolean) as string[])]; ].filter(Boolean) as string[])];
// Résolution géo par clé Duniter (_id Cesium+) // Résolution géo par clé Duniter (_id Cesium+)
@@ -89,7 +94,7 @@ async function fetchLiveTransactions(periodDays: number): Promise<{
const arcs: TransactionArc[] = []; const arcs: TransactionArc[] = [];
for (const t of rawTransfers) { for (const t of rawTransfers) {
const fromDuniterKey = keyMap.get(t.fromId); const fromDuniterKey = t.fromId ? resolveKey(t.fromId) : undefined;
if (!fromDuniterKey) continue; if (!fromDuniterKey) continue;
const fromGeo = geoMap.get(fromDuniterKey); const fromGeo = geoMap.get(fromDuniterKey);
if (!fromGeo) continue; if (!fromGeo) continue;
@@ -110,7 +115,7 @@ async function fetchLiveTransactions(periodDays: number): Promise<{
}); });
// Arc : les deux extrémités géolocalisées + villes différentes // Arc : les deux extrémités géolocalisées + villes différentes
const toDuniterKey = keyMap.get(t.toId); const toDuniterKey = t.toId ? resolveKey(t.toId) : undefined;
if (!toDuniterKey) continue; if (!toDuniterKey) continue;
const toGeo = geoMap.get(toDuniterKey); const toGeo = geoMap.get(toDuniterKey);
if (!toGeo) continue; if (!toGeo) continue;