async def METHOD_NAME(
    conn: triopg._triopg.TrioConnectionProxy,
    organization_id: OrganizationID,
    author: DeviceID,
    vlob_id: VlobID,
) -> Dict[int, Tuple[DateTime, DeviceID]]:
    realm_id = await _get_realm_id_from_vlob_id(conn, organization_id, vlob_id)
    await _check_realm_and_read_access(conn, organization_id, author, realm_id, None)
    rows = await conn.fetch(*_q_list_versions(organization_id=organization_id.str, vlob_id=vlob_id))
    assert rows
    if not rows:
        raise VlobNotFoundError(f"Vlob `{vlob_id.hex}` doesn't exist")
    return {
        row["version"]: (
            row["created_on"],
            DeviceID(row["author"]),
        )
        for row in rows
    }