Skip to content

[meetup] Support event hosts, online venues and UTC event dates - #1

Merged
duxi90 merged 1 commit into
mainfrom
feat/meetup-hosts-online-timezone
Aug 18, 2026
Merged

duxi90 merged 1 commit into
mainfrom
feat/meetup-hosts-online-timezone

Conversation

@duxi90

@duxi90 duxi90 commented Aug 18, 2026

Copy link
Copy Markdown
Member
  • Send eventHosts: config gains hosts (name -> member ID) and defaultHosts, and
    both create commands take --host "Name,Other". Unknown names fail at config load or
    resolve time; when nothing resolves, the key is omitted, and Meetup's default applies.
  • VenueMap values are now number | "online". Meetup has no venue record for an
    online event, so list-venues never returns one and the sentinel is the only way to
    express it.
  • New timezone config key picks how event.date is read: set, it is a true instant
    converted to wall time in that zone; omitted, the existing UTC-clock reading stands.
  • README gains a config key table and sections on online venues, timezones and hosts.

The timezone default is deliberately the old behavior, cppserbia stores local wall
time with a nominal Z, and its payloads are unchanged byte for byte.

Three gaps blocked an adopter whose sessions are online, hosted by a
named organizer, and dated in true UTC (GlobalCpp).

eventHosts. CreateEventInput.eventHosts is [Int!] -- Meetup member IDs --
and was never sent, so a draft always fell back to the creating organizer.
Config gains `hosts` (name -> member ID) and `defaultHosts`, and both
create commands take `--host "Name,Other"`. Unknown names fail at config
load or resolve time rather than silently producing a hostless event. When
nothing resolves, the key is omitted entirely and Meetup's own default
applies, so existing adopters see no change.

Online venues. Meetup has no venue record for an online event, so
list-venues never returns one and there was no way to express it: the
venue map was Record<string, number> and resolveVenueId rejected
non-numeric values. venueId is a String on the API, so the map now accepts
the literal "online" alongside numeric IDs.

Timezones. Meetup reads startDateTime as wall time in the group's own
timezone and accepts no offset, but the builder passed
date.toISOString().slice(0,19) -- the UTC clock reading. That is correct
only if the source stores local time with a nominal Z, which is what
cppserbia does. An adopter storing real instants got every event shifted
by the zone's offset: 2026-08-22T16:00:00Z became a 16:00 Chicago event
instead of 11:00.

Rather than change the reading for everyone, the interpretation is now
explicit. With `timezone` set, the date is a true instant converted to
wall time in that zone (DST resolved per date, via Intl). Without it, the
previous behaviour stands, so cppserbia is unaffected -- its tests still
produce the same payload byte for byte.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@duxi90
duxi90 merged commit 42c2fcf into main Aug 18, 2026
2 checks passed
@duxi90
duxi90 deleted the feat/meetup-hosts-online-timezone branch August 18, 2026 08:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant