11/**
2- * Pinpoint Module: Identity Trace
2+ * Pinpoint Module: Identity Trace (Enhanced)
33 * Level 3: Critical Intelligence
4+ *
5+ * Detects active social platform sessions using cross‑origin resource
6+ * probes. Enhanced with a larger platform list, robust error handling,
7+ * a live visual panel, and all data kept strictly local.
48 */
9+
510export default {
6- id : 'social' ,
11+ id : 'identity_trace' , // Must match the manifest entry
712 title : 'Identity_Trace' ,
813 level : 3 ,
9- info : "Detects active social platform logins for profile identification." ,
10- steps : [ "Detect sessions via XS-Leaks." , "Map social ecosystem." ] ,
14+ info : 'Detects active social platform logins via heuristic image probes.' ,
15+ steps : [
16+ 'Probe protected login‑walled resources.' ,
17+ 'Analyse load success/failure patterns.' ,
18+ ] ,
1119 run : async ( ) => {
20+ // Expanded list of platforms with detection URLs
1221 const platforms = [
13- { name : 'Facebook' , url : 'https://www.facebook.com/favicon.ico' } ,
1422 { name : 'Google' , url : 'https://accounts.google.com/favicon.ico' } ,
15- { name : 'Twitter' , url : 'https://twitter.com/favicon.ico' }
23+ { name : 'Facebook' , url : 'https://www.facebook.com/favicon.ico' } ,
24+ { name : 'Twitter' , url : 'https://twitter.com/favicon.ico' } ,
25+ { name : 'Instagram' , url : 'https://www.instagram.com/favicon.ico' } ,
26+ { name : 'LinkedIn' , url : 'https://www.linkedin.com/favicon.ico' } ,
27+ { name : 'GitHub' , url : 'https://github.com/favicon.ico' } ,
28+ { name : 'Reddit' , url : 'https://www.reddit.com/favicon.ico' } ,
29+ { name : 'TikTok' , url : 'https://www.tiktok.com/favicon.ico' } ,
30+ { name : 'Snapchat' , url : 'https://www.snapchat.com/favicon.ico' } ,
1631 ] ;
17- return new Promise ( ( resolve ) => {
18- const results = { } ;
19- let checked = 0 ;
20- platforms . forEach ( p => {
32+
33+ // Create a floating panel for live feedback
34+ const panel = document . createElement ( 'div' ) ;
35+ panel . id = '__identity_trace_panel' ;
36+ panel . style . cssText =
37+ 'position:fixed;top:10px;right:10px;z-index:2147483645;background:rgba(0,0,0,0.85);color:#0f0;' +
38+ 'font-family:monospace;font-size:12px;padding:12px;border-radius:6px;max-width:350px;max-height:300px;' +
39+ 'overflow-y:auto;white-space:pre-wrap;word-break:break-all;' ;
40+ panel . innerHTML = '<button onclick="this.parentNode.remove()" style="position:absolute;top:4px;right:6px;background:none;border:none;color:#0f0;font-size:16px;cursor:pointer;">×</button><strong>[SEARCH] Probing social logins...</strong><br>' ;
41+ document . body . appendChild ( panel ) ;
42+
43+ const probePlatform = ( name , url ) => {
44+ return new Promise ( ( resolve ) => {
2145 const img = new Image ( ) ;
22- img . onload = ( ) => { results [ p . name ] = "LOGGED_IN" ; if ( ++ checked === platforms . length ) resolve ( results ) ; } ;
23- img . onerror = ( ) => { results [ p . name ] = "NOT_LOGGED_IN" ; if ( ++ checked === platforms . length ) resolve ( results ) ; } ;
24- img . src = p . url ;
46+ const timeout = setTimeout ( ( ) => {
47+ // If the image hasn't loaded or errored within 3s, treat as error
48+ img . src = '' ; // abort
49+ panel . innerHTML += `[TIMEOUT] ${ name } : TIMEOUT (likely blocked)<br>` ;
50+ console . log ( `[identity_trace] ${ name } : TIMEOUT` ) ;
51+ resolve ( { [ name ] : 'BLOCKED' } ) ;
52+ } , 3000 ) ;
53+
54+ img . onload = ( ) => {
55+ clearTimeout ( timeout ) ;
56+ panel . innerHTML += `[+] ${ name } : LOGGED_IN<br>` ;
57+ console . log ( `[identity_trace] ${ name } : LOGGED_IN` ) ;
58+ resolve ( { [ name ] : 'LOGGED_IN' } ) ;
59+ } ;
60+ img . onerror = ( ) => {
61+ clearTimeout ( timeout ) ;
62+ panel . innerHTML += `[-] ${ name } : NOT_LOGGED_IN<br>` ;
63+ console . log ( `[identity_trace] ${ name } : NOT_LOGGED_IN` ) ;
64+ resolve ( { [ name ] : 'NOT_LOGGED_IN' } ) ;
65+ } ;
66+ // Append random query to avoid caching
67+ img . src = `${ url } ?${ Date . now ( ) } _${ Math . random ( ) . toString ( 36 ) . substr ( 2 ) } ` ;
2568 } ) ;
26- setTimeout ( ( ) => resolve ( results ) , 2500 ) ;
27- } ) ;
28- }
29- } ;
69+ } ;
70+
71+ // Probe all platforms concurrently
72+ const probes = platforms . map ( p => probePlatform ( p . name , p . url ) ) ;
73+ const resultsArray = await Promise . all ( probes ) ;
74+
75+ // Merge into a single object
76+ const results = Object . assign ( { } , ...resultsArray ) ;
77+
78+ // Final panel update
79+ const summary = `[DONE] Probing complete. ${ Object . values ( results ) . filter ( v => v === 'LOGGED_IN' ) . length } sessions found.` ;
80+ panel . innerHTML += `<br>${ summary } ` ;
81+ console . log ( '[identity_trace] Final results:' , results ) ;
82+ setTimeout ( ( ) => panel . remove ( ) , 10000 ) ;
83+
84+ return results ;
85+ } ,
86+ } ;
0 commit comments