```typescript
/**
 * An append-only log of timestamped events.
 */
export class EventLog {
  #events = [];

  /**
   * Append one event.
   *
   * @param event - The event to record.
   * @throws {Error} If the event is invalid (null or undefined).
   */
  record(event: Event): void {
    if (!event) {
      throw new Error('Invalid event');
    }
    this.#events.push(event);
  }

  /**
   * Every event at or after the given timestamp, in insertion order.
   *
   * @param timestamp The minimum timestamp to filter by.
   * @returns The events that have a timestamp greater than or equal to `timestamp`.
   */
  since(timestamp: number): Event[] {
    return this.#events.filter((event) => event.timestamp >= timestamp);
  }
}

/**
 * A timestamped event with a name and a timestamp.
 *
 * @param name - The name of the event.
 */
export interface Event { 
    name: string; 
    timestamp: number; 
}