diff --git a/platforms/eReputation-api/src/controllers/GroupController.ts b/platforms/eReputation-api/src/controllers/GroupController.ts index 28416e09..b219dfe2 100644 --- a/platforms/eReputation-api/src/controllers/GroupController.ts +++ b/platforms/eReputation-api/src/controllers/GroupController.ts @@ -29,6 +29,7 @@ export class GroupController { res.json(groups.map(group => ({ id: group.id, name: group.name, + ename: group.ename, description: group.description, charter: group.charter, createdAt: group.createdAt, diff --git a/platforms/eReputation-api/src/services/CalculationService.ts b/platforms/eReputation-api/src/services/CalculationService.ts index 94ef1a9a..54e7e2ce 100644 --- a/platforms/eReputation-api/src/services/CalculationService.ts +++ b/platforms/eReputation-api/src/services/CalculationService.ts @@ -155,7 +155,7 @@ export class CalculationService { private buildPrompt(userValues: string, references: any[], targetName: string): string { return ` -You are analyzing the reputation of "${targetName}" based on the following user values and references. +You are analyzing the reputation of "${targetName}" based on the following user values and references. Remember that the user may also supply a wishlist, only focus on the part of the wishlist and values which mentions what the user values in a person, group, or platform, depending on what type of profile it is that you are evaluating, do not care about anything else in the wishlist. USER VALUES (what the evaluator cares about): ${userValues} diff --git a/platforms/eReputation-api/src/services/ReferenceSigningSessionService.ts b/platforms/eReputation-api/src/services/ReferenceSigningSessionService.ts index 5dc29ddf..275ff215 100644 --- a/platforms/eReputation-api/src/services/ReferenceSigningSessionService.ts +++ b/platforms/eReputation-api/src/services/ReferenceSigningSessionService.ts @@ -38,8 +38,10 @@ export interface ReferenceSigningResult { type: "signed" | "security_violation"; } +// Module-level singleton session storage - shared across all service instances +const sessionStorage: Map = new Map(); + export class ReferenceSigningSessionService { - private sessions: Map = new Map(); private signatureService = new ReferenceSignatureService(); async createSession(referenceId: string, referenceData: any, userId: string): Promise { @@ -55,7 +57,7 @@ export class ReferenceSigningSessionService { }); const base64Data = Buffer.from(messageData).toString('base64'); - const apiBaseUrl = process.env.PUBLIC_EREPUTATION_BASE_URL || "http://localhost:8765"; + const apiBaseUrl = process.env.VITE_EREPUTATION_BASE_URL; const redirectUri = `${apiBaseUrl}/api/references/signing/callback`; const qrData = `w3ds://sign?session=${sessionId}&data=${base64Data}&redirect_uri=${encodeURIComponent(redirectUri)}`; @@ -71,15 +73,15 @@ export class ReferenceSigningSessionService { status: "pending" }; - this.sessions.set(sessionId, session); - console.log(`Created reference signing session ${sessionId}, total sessions: ${this.sessions.size}`); + sessionStorage.set(sessionId, session); + console.log(`Created reference signing session ${sessionId}, total sessions: ${sessionStorage.size}`); // Set up expiration cleanup setTimeout(() => { - const session = this.sessions.get(sessionId); + const session = sessionStorage.get(sessionId); if (session && session.status === "pending") { session.status = "expired"; - this.sessions.set(sessionId, session); + sessionStorage.set(sessionId, session); } }, 15 * 60 * 1000); @@ -87,7 +89,7 @@ export class ReferenceSigningSessionService { } async getSession(sessionId: string): Promise { - const session = this.sessions.get(sessionId); + const session = sessionStorage.get(sessionId); if (!session) { return null; @@ -96,7 +98,7 @@ export class ReferenceSigningSessionService { // Check if session has expired if (session.status === "pending" && new Date() > session.expiresAt) { session.status = "expired"; - this.sessions.set(sessionId, session); + sessionStorage.set(sessionId, session); } return session; @@ -104,10 +106,13 @@ export class ReferenceSigningSessionService { async processSignedPayload(sessionId: string, signature: string, publicKey: string, message: string): Promise { console.log(`Processing signed payload for reference session: ${sessionId}`); + console.log(`Current session storage size: ${sessionStorage.size}`); + console.log(`Session IDs in storage:`, Array.from(sessionStorage.keys())); const session = await this.getSession(sessionId); if (!session) { + console.error(`Session ${sessionId} not found in storage. Available sessions:`, Array.from(sessionStorage.keys())); throw new Error("Session not found"); } @@ -145,7 +150,7 @@ export class ReferenceSigningSessionService { // Update session status to indicate security violation session.status = "security_violation"; - this.sessions.set(sessionId, session); + sessionStorage.set(sessionId, session); // Return error result instead of throwing return { @@ -184,7 +189,7 @@ export class ReferenceSigningSessionService { // Update session status session.status = "completed"; - this.sessions.set(sessionId, session); + sessionStorage.set(sessionId, session); const result: ReferenceSigningResult = { success: true, diff --git a/platforms/eReputation/client/src/components/modals/other-calculation-modal.tsx b/platforms/eReputation/client/src/components/modals/other-calculation-modal.tsx index 73dbed58..0a7d2794 100644 --- a/platforms/eReputation/client/src/components/modals/other-calculation-modal.tsx +++ b/platforms/eReputation/client/src/components/modals/other-calculation-modal.tsx @@ -474,9 +474,15 @@ export default function OtherCalculationModal({ open, onOpenChange }: OtherCalcu )} -
-
{result.name || result.ename || result.handle || 'Unknown'}
-
{result.type || result.category || targetType}
+
+
{result.name || result.ename || result.handle || 'Unknown'}
+
+ {targetType === 'user' ? ( + result.ename ? (result.ename.startsWith('@') ? result.ename : `@${result.ename}`) : 'no ename' + ) : ( + {result.type || result.category || targetType} + )} +
diff --git a/platforms/eReputation/client/src/components/modals/reference-modal.tsx b/platforms/eReputation/client/src/components/modals/reference-modal.tsx index 0aad32a1..532a97e2 100644 --- a/platforms/eReputation/client/src/components/modals/reference-modal.tsx +++ b/platforms/eReputation/client/src/components/modals/reference-modal.tsx @@ -516,9 +516,17 @@ export default function ReferenceModal({ open, onOpenChange }: ReferenceModalPro )} -
-
{result.name || result.ename || result.handle || 'Unknown'}
-
{result.type || result.category || targetType}
+
+
+ {result.name || result.ename || result.handle || 'Unknown'} +
+
+ {targetType === 'user' ? ( + result.ename ? (result.ename.startsWith('@') ? result.ename : `@${result.ename}`) : 'no ename' + ) : ( + {result.type || result.category || targetType} + )} +
@@ -536,11 +544,13 @@ export default function ReferenceModal({ open, onOpenChange }: ReferenceModalPro {selectedTarget && (
-
- +
+ - {selectedTarget.name || selectedTarget.ename || selectedTarget.handle || 'Unknown'} + + {selectedTarget.name || selectedTarget.ename || selectedTarget.handle || 'Unknown'} +