Records events, and each one's children linked to it, in one INSERT,
on tx when given so the rows commit with the caller's write. A child
shares its parent's actor, visibility and metadata. An unknown actor fails
the whole insert: an audit row that can't name its actor is not worth
writing. Returns the top-level rows' ids, in input order.
An event with onceKey gets an id made from that key, and the INSERT skips
a row whose id is already there. A caller that can run twice for one write,
such as a retry of an idempotent request, passes the same key each time and
gets one row. Such an event has no children.
Optionalinput: {Optionalchildren?: {Also match a child's rows, which key on the child's own id: rows of
types whose data[parentKey] is one of parentIds. ORed with objectIds.
OptionalcreatedAt?: DbTimestampCriteriaOptionalids?: string[]OptionalobjectIds?: string[]e.g. tok_… / bow_…
Optionalpage?: numberOptionalpageSize?: numberOptionalparentIds?: string[]Only the children of these rows: a feed page's parents' items.
OptionaltopLevelOnly?: booleanOnly rows not shown under a parent, so a feed pages and counts one row
per action: no parent, or a parent types / objectIds leave out.
Optionaltypes?: (OptionaluserIds?: string[]The acting users.
Optionalvisibilities?: ("ALL" | "INTERNAL")[]
The admin dashboard's audit feed,
admin.dashboard_user_activity.Not cached: audit reads are cold and the underlying data changes on every config write, so any cache would be busy churning for no hit-rate gain.