import type { IntegrationAccountRequirement, TriggerDefinition } from "../types" const GMAIL_ACCOUNT = { connectionOptions: [ { requiredScopes: [ { requirements: [ "https://mail.google.com/", "https://www.googleapis.com/auth/gmail.modify", "https://www.googleapis.com/auth/gmail.readonly", ], type: "or", }, ], }, ], serviceId: "google", } as const satisfies IntegrationAccountRequirement const GMAIL_DELETION_ACCOUNT = { connectionOptions: [ { requiredScopes: [ { requirements: [ "https://mail.google.com/", "https://www.googleapis.com/auth/gmail.modify", "https://www.googleapis.com/auth/gmail.readonly", "https://www.googleapis.com/auth/gmail.metadata", ], type: "or", }, ], }, ], serviceId: "google", } as const satisfies IntegrationAccountRequirement const GOOGLE_CALENDAR_ACCOUNT = { connectionOptions: [ { requiredScopes: [ { requirements: [ "https://www.googleapis.com/auth/calendar", "https://www.googleapis.com/auth/calendar.app.created", "https://www.googleapis.com/auth/calendar.readonly", "https://www.googleapis.com/auth/calendar.events", "https://www.googleapis.com/auth/calendar.events.freebusy", "https://www.googleapis.com/auth/calendar.events.owned", "https://www.googleapis.com/auth/calendar.events.owned.readonly", "https://www.googleapis.com/auth/calendar.events.public.readonly", "https://www.googleapis.com/auth/calendar.events.readonly", ], type: "or", }, ], }, ], serviceId: "google", } as const satisfies IntegrationAccountRequirement const GOOGLE_FORMS_ACCOUNT = { connectionOptions: [ { requiredScopes: [ { requirements: [ "https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.readonly", "https://www.googleapis.com/auth/forms.body", "https://www.googleapis.com/auth/forms.body.readonly", ], type: "or", }, ], }, ], serviceId: "google", } as const satisfies IntegrationAccountRequirement const GOOGLE_FORM_RESPONSES_ACCOUNT = { connectionOptions: [ { requiredScopes: [ { requirements: [ { requirements: [ "https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/forms.responses.readonly", ], type: "or", }, { requirements: [ "https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.readonly", "https://www.googleapis.com/auth/forms.body", "https://www.googleapis.com/auth/forms.body.readonly", ], type: "or", }, ], type: "and", }, ], }, ], serviceId: "google", } as const satisfies IntegrationAccountRequirement const GOOGLE_MEET_ACCOUNT = { connectionOptions: [ { requiredScopes: [ "https://www.googleapis.com/auth/meetings.space.readonly", ], }, ], serviceId: "google", } as const satisfies IntegrationAccountRequirement const GOOGLE_DRIVE_FILE_EVENT_ACCOUNT = { connectionOptions: [ { requiredScopes: [ { requirements: [ "https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.readonly", "https://www.googleapis.com/auth/drive.metadata", ], type: "or", }, ], }, ], serviceId: "google", } as const satisfies IntegrationAccountRequirement const GOOGLE_DRIVE_METADATA_EVENT_ACCOUNT = { connectionOptions: [ { requiredScopes: [ { requirements: [ "https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.readonly", "https://www.googleapis.com/auth/drive.metadata", "https://www.googleapis.com/auth/drive.metadata.readonly", ], type: "or", }, ], }, ], serviceId: "google", } as const satisfies IntegrationAccountRequirement const GOOGLE_SHEETS_ACCOUNT = { connectionOptions: [ { requiredScopes: [ { requirements: [ "https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive.readonly", ], type: "or", }, ], }, ], serviceId: "google", } as const satisfies IntegrationAccountRequirement export const googleTriggerDefinitions = { gmailLabelAdded: { account: GMAIL_ACCOUNT, icon: "gmail", type: "gmail.label.added", }, gmailLabelRemoved: { account: GMAIL_ACCOUNT, icon: "gmail", type: "gmail.label.removed", }, gmailMailboxChanged: { account: GMAIL_ACCOUNT, icon: "gmail", name: "Gmail mailbox changed", type: "gmail.mailbox.changed", }, gmailMessageAdded: { account: GMAIL_ACCOUNT, icon: "gmail", name: "Gmail message added", type: "gmail.message.added", }, gmailMessageDeleted: { account: GMAIL_DELETION_ACCOUNT, icon: "gmail", name: "Gmail message deleted", type: "gmail.message.deleted", }, gmailMessageReceived: { account: GMAIL_ACCOUNT, icon: "gmail", name: "Gmail email received", type: "gmail.message.received", }, gmailMessageSent: { account: GMAIL_ACCOUNT, icon: "gmail", name: "Gmail email sent", type: "gmail.message.sent", }, googleCalendarEventCreated: { account: GOOGLE_CALENDAR_ACCOUNT, icon: "google-calendar", name: "Google Calendar event created", type: "googleCalendar.event.created", }, googleCalendarEventChanged: { account: GOOGLE_CALENDAR_ACCOUNT, icon: "google-calendar", name: "Google Calendar event changed", type: "googleCalendar.event.changed", }, googleCalendarEventDeleted: { account: GOOGLE_CALENDAR_ACCOUNT, icon: "google-calendar", name: "Google Calendar event deleted", type: "googleCalendar.event.deleted", }, googleCalendarEventUpdated: { account: GOOGLE_CALENDAR_ACCOUNT, icon: "google-calendar", name: "Google Calendar event updated", type: "googleCalendar.event.updated", }, googleFormsFormChanged: { account: GOOGLE_FORMS_ACCOUNT, icon: "google-forms", name: "Google Form changed", type: "googleForms.form.changed", }, googleFormsResponseSubmitted: { account: GOOGLE_FORM_RESPONSES_ACCOUNT, icon: "google-forms", name: "Google Form response submitted", type: "googleForms.response.submitted", }, googleDriveEvent: { account: GOOGLE_DRIVE_FILE_EVENT_ACCOUNT, icon: "google-drive", name: "Google Drive event", type: "googleDrive.event", }, googleDriveAccessProposalCreated: driveTrigger( "Access proposal created", "googleDrive.accessProposal.created", ), googleDriveAccessProposalResolved: driveTrigger( "Access proposal resolved", "googleDrive.accessProposal.resolved", ), googleDriveApprovalCancelled: driveTrigger( "Approval cancelled", "googleDrive.approval.cancelled", ), googleDriveApprovalCompleted: driveTrigger( "Approval completed", "googleDrive.approval.completed", ), googleDriveApprovalCreated: driveTrigger( "Approval created", "googleDrive.approval.created", ), googleDriveApprovalReset: driveTrigger( "Approval reset", "googleDrive.approval.reset", ), googleDriveApprovalResponded: driveTrigger( "Approval reviewer responded", "googleDrive.approval.responded", ), googleDriveApprovalReviewersChanged: driveTrigger( "Approval reviewers changed", "googleDrive.approval.reviewersChanged", ), googleDriveCommentCreated: driveTrigger( "Comment created", "googleDrive.comment.created", ), googleDriveCommentDeleted: driveTrigger( "Comment deleted", "googleDrive.comment.deleted", ), googleDriveCommentEdited: driveTrigger( "Comment edited", "googleDrive.comment.edited", ), googleDriveCommentReopened: driveTrigger( "Comment reopened", "googleDrive.comment.reopened", ), googleDriveCommentResolved: driveTrigger( "Comment resolved", "googleDrive.comment.resolved", ), googleDriveFileContentChanged: driveTrigger( "File content changed", "googleDrive.file.contentChanged", ), googleDriveFileCreated: driveTrigger( "File created", "googleDrive.file.created", ), googleDriveFileDeleted: driveTrigger( "File deleted", "googleDrive.file.deleted", ), googleDriveFileMoved: driveTrigger("File moved", "googleDrive.file.moved"), googleDriveFileRenamed: driveTrigger( "File renamed", "googleDrive.file.renamed", ), googleDriveFileTrashed: driveTrigger( "File trashed", "googleDrive.file.trashed", ), googleDriveFileUntrashed: driveTrigger( "File untrashed", "googleDrive.file.untrashed", ), googleDrivePermissionCreated: driveTrigger( "Permission created", "googleDrive.permission.created", ), googleDrivePermissionDeleted: driveTrigger( "Permission deleted", "googleDrive.permission.deleted", ), googleDrivePermissionEdited: driveTrigger( "Permission edited", "googleDrive.permission.edited", ), googleDriveReplyCreated: driveTrigger( "Reply created", "googleDrive.reply.created", ), googleDriveReplyDeleted: driveTrigger( "Reply deleted", "googleDrive.reply.deleted", ), googleDriveReplyEdited: driveTrigger( "Reply edited", "googleDrive.reply.edited", ), googleMeetConferenceEnded: { account: GOOGLE_MEET_ACCOUNT, icon: "google-meet", name: "Google Meet conference ended", type: "googleMeet.conference.ended", }, googleMeetConferenceStarted: { account: GOOGLE_MEET_ACCOUNT, icon: "google-meet", name: "Google Meet conference started", type: "googleMeet.conference.started", }, googleMeetParticipantJoined: { account: GOOGLE_MEET_ACCOUNT, icon: "google-meet", name: "Google Meet participant joined", type: "googleMeet.participant.joined", }, googleMeetParticipantLeft: { account: GOOGLE_MEET_ACCOUNT, icon: "google-meet", name: "Google Meet participant left", type: "googleMeet.participant.left", }, googleMeetRecordingEnded: { account: GOOGLE_MEET_ACCOUNT, icon: "google-meet", name: "Google Meet recording ended", type: "googleMeet.recording.ended", }, googleMeetRecordingFileGenerated: { account: GOOGLE_MEET_ACCOUNT, icon: "google-meet", name: "Google Meet recording generated", type: "googleMeet.recording.fileGenerated", }, googleMeetRecordingStarted: { account: GOOGLE_MEET_ACCOUNT, icon: "google-meet", name: "Google Meet recording started", type: "googleMeet.recording.started", }, googleMeetSmartNoteEnded: { account: GOOGLE_MEET_ACCOUNT, icon: "google-meet", name: "Google Meet smart note ended", type: "googleMeet.smartNote.ended", }, googleMeetSmartNoteFileGenerated: { account: GOOGLE_MEET_ACCOUNT, icon: "google-meet", name: "Google Meet smart note generated", type: "googleMeet.smartNote.fileGenerated", }, googleMeetSmartNoteStarted: { account: GOOGLE_MEET_ACCOUNT, icon: "google-meet", name: "Google Meet smart note started", type: "googleMeet.smartNote.started", }, googleMeetTranscriptEnded: { account: GOOGLE_MEET_ACCOUNT, icon: "google-meet", name: "Google Meet transcript ended", type: "googleMeet.transcript.ended", }, googleMeetTranscriptFileGenerated: { account: GOOGLE_MEET_ACCOUNT, icon: "google-meet", name: "Google Meet transcript generated", type: "googleMeet.transcript.fileGenerated", }, googleMeetTranscriptStarted: { account: GOOGLE_MEET_ACCOUNT, icon: "google-meet", name: "Google Meet transcript started", type: "googleMeet.transcript.started", }, googleSheetsCellsChanged: { account: GOOGLE_SHEETS_ACCOUNT, icon: "google-sheets", name: "Google Sheets cells changed", type: "googleSheets.cells.changed", }, } as const satisfies Record /** * Defines one Google Drive trigger with its exact stable event type. * * @param name - Customer-facing event name without the provider prefix. * @param type - Stable internal event type. */ function driveTrigger(name: string, type: TType) { return { account: type.startsWith("googleDrive.file.") ? GOOGLE_DRIVE_FILE_EVENT_ACCOUNT : GOOGLE_DRIVE_METADATA_EVENT_ACCOUNT, icon: "google-drive", name: `Google Drive ${name.toLowerCase()}`, type, } }