The whole calendar was being sent, not just events with your contacts.
The script read every event on your calendar, a year back and six months ahead, and sent all of them to the server: titles, times and everyone invited. The server used the few that involved your contacts and threw the rest away, but the rest had already left your account. The website said, in two places, that the server receives events with your contacts.
Events are now filtered inside your sheet, before anything leaves. This was the finding that made the audit page exist.