Files
iios/packages/iios-contracts/src/events.ts
T
maaz519 21772e7611 feat(p8): calendar/meeting schema + enums + events + migration
Task 8.1: 12 Calendar/Meeting tables (meeting_request, meeting, participant,
transcript, segment, summary, generic action_item + meeting link, provider
account, calendar_event, availability_window, sync_cursor) + 13 enums; migration
calendar-init. Adds calendar.meeting.requested/scheduled/reminder.queued/
summarized events. resetDb truncates the new tables. Kernel already had the
MEETING_REQUEST / MEETING_FOLLOWUP / callback.meetingRef stubs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 17:51:35 +05:30

58 lines
2.4 KiB
TypeScript

/**
* CloudEvents envelope + the IIOS event catalog (Data Model §05, Ref Arch §09).
*
* Every durable state change writes the business row AND an outbox event in the
* same transaction. The `insignia` block carries correlation/causation/scope and
* the idempotency key; payloads reference content rather than embedding raw PII.
*/
export type DataClass = 'internal' | 'restricted' | 'confidential' | 'regulated';
export interface CloudEvent<T = unknown> {
specversion: '1.0';
id: string;
type: string;
source: string;
subject?: string;
time: string;
datacontenttype?: 'application/json';
traceparent?: string;
insignia: {
correlationId?: string;
causationId?: string;
scopeSnapshotId?: string;
policyDecisionId?: string;
consentReceiptRef?: string;
contextBundleId?: string;
idempotencyKey: string;
dataClass?: DataClass;
};
data: T;
}
/** Canonical event names (the subset relevant up to P4; others added per phase). */
export const IIOS_EVENTS = {
rawReceived: 'com.insignia.iios.raw.received.v1',
interactionNormalized: 'com.insignia.iios.interaction.normalized.v1',
messageSent: 'com.insignia.iios.message.sent.v1',
messageRead: 'com.insignia.iios.message.read.v1',
messagePersisted: 'com.insignia.iios.message.persisted.v1',
inboxItemCreated: 'com.insignia.iios.inbox.item.created.v1',
ticketCreated: 'com.insignia.iios.support.ticket.created.v1',
ticketStateChanged: 'com.insignia.iios.support.ticket.state.changed.v1',
callbackRequested: 'com.insignia.iios.support.callback.requested.v1',
routeDecisionPreviewed: 'com.insignia.iios.route.decision.previewed.v1',
routeApproved: 'com.insignia.iios.route.approved.v1',
aiJobCreated: 'com.insignia.iios.ai.job.created.v1',
aiArtifactProposed: 'com.insignia.iios.ai.artifact.proposed.v1',
aiArtifactAccepted: 'com.insignia.iios.ai.artifact.accepted.v1',
meetingRequested: 'com.insignia.iios.calendar.meeting.requested.v1',
meetingScheduled: 'com.insignia.iios.calendar.meeting.scheduled.v1',
meetingReminderQueued: 'com.insignia.iios.calendar.reminder.queued.v1',
meetingSummarized: 'com.insignia.iios.calendar.meeting.summarized.v1',
notificationQueued: 'com.insignia.iios.notification.queued.v1',
deliveryAttempted: 'com.insignia.iios.delivery.attempted.v1',
} as const;
export type IiosEventType = (typeof IIOS_EVENTS)[keyof typeof IIOS_EVENTS];