headers->get("authorization") ?: ""); $user = User::fetchWithAccessToken($accessToken); if (empty($user)) { throw new UnauthorizedError(); } $filter = $request->query->get("filter", ""); $syncFullState = $request->query->get("full_state", false); $setPresence = PresenceState::tryFrom($request->query->get("set_presence") ?? "") ?? PresenceState::ONLINE; $since = $request->query->get("since", ""); $timeout = $request->query->get("timeout", 0); $rooms = Database::getInstance()->query(<<fetchAll(); $joinedRooms = new \stdClass(); if (! empty($rooms)) { $joinedRooms = []; foreach ($rooms as $room) { $joinedRooms[$room["id"]] = [ "account_data" => [ "events" => [], ], "ephemeral" => [ "events" => [], ], "state" => [ "events" => [], ], "summary" => [ "m.heroes" => [], "m.invited_member_count" => 0, "m.joined_member_count" => 1, ], "timeline" => [ "events" => [], "limited" => false, "prev_batch" => "", ], "unread_notifications" => [ "highlight_count" => 1, "notification_count" => 2, ], "unread_thread_notifications" => new \stdClass(), ]; } } return new JsonResponse([ "account_data" => [ "events" => [ ], ], "device_lists" => [ "changed" => [], "left" => [], ], "device_one_time_keys_count" => [ "signed_curve25519" => 10, ], "next_batch" => "next_batch_id", "presence" => [ "events" => [ (new PresenceEvent(sender: $user->getId()))->toJsonEncodeable(), ], ], "rooms" => [ "invite" => new \stdClass(), "join" => $joinedRooms, "knock" => new \stdClass(), "leave" => new \stdClass(), ], "to_device" => [ "events" => [], ], ]); } }