"fail", "message" => "Method not allowed."])); } $sessionCookie = $_COOKIE['sessionid'] ?? ''; if (empty($sessionCookie) || strpos($sessionCookie, 'nostolga_sess_') !== 0) { http_response_code(401); die(json_encode(["status" => "fail", "message" => "Unauthorized session context."])); } $userId = (int)str_replace('nostolga_sess_', '', $sessionCookie); // Grab target thread identifier sent through from our htaccess URL variables $rawThreadId = $_GET['thread_id'] ?? '0'; $targetRecipientId = (int)str_replace('thread_', '', $rawThreadId); $db = getDB(); $items = []; try { if ($targetRecipientId === 999) { // Provide mock history details for system welcome thread $items[] = [ "item_id" => "mock_msg_001", "user_id" => 999, "timestamp" => (time() - 60) * 1000000, "item_type" => "text", "text" => "Welcome to Direct Messages! Your chat nodes are active. Broadcast a message to test." ]; } else { // Query database for logs between these two specific identities $stmt = $db->prepare("SELECT * FROM direct_messages WHERE (sender_id = ? AND recipient_id = ?) OR (sender_id = ? AND recipient_id = ?) ORDER BY id DESC LIMIT 50"); $stmt->execute([$userId, $targetRecipientId, $targetRecipientId, $userId]); $messages = $stmt->fetchAll(); foreach ($messages as $msg) { $items[] = [ "item_id" => (string)$msg['id'], "user_id" => (int)$msg['sender_id'], "timestamp" => (int)$msg['created_at'] * 1000000, "item_type" => "text", "text" => $msg['message_text'] ]; } } // Build the container object structure for version 6.20.2 parsing mechanics http_response_code(200); echo json_encode([ "thread" => [ "thread_id" => "thread_" . $targetRecipientId, "items" => $items, "more_available" => false, "status" => "ok" ], "status" => "ok" ]); exit; } catch (PDOException $e) { http_response_code(500); die(json_encode(["status" => "fail", "message" => "Thread ledger lookup failure."])); }