import type { IntegrationAccountRequirement, TriggerDefinition, TriggerPresentationContext, } from "../types" const MILLIONVERIFIER_ACCOUNT = { connectionOptions: [{ requiredScopes: [] }], serviceId: "millionverifier", } as const satisfies IntegrationAccountRequirement const trigger = (type: TType, name: string) => ({ account: MILLIONVERIFIER_ACCOUNT, getDetails: millionVerifierTriggerDetails, name, type, }) export const millionVerifierTriggerDefinitions = { millionVerifierEvent: trigger( "millionverifier.event", "MillionVerifier event", ), millionVerifierNoCredit: trigger( "millionverifier.noCredit", "MillionVerifier out of credits", ), millionVerifierLowCredit: trigger( "millionverifier.lowCredit", "MillionVerifier credits low", ), millionVerifierFileReady: trigger( "millionverifier.fileReady", "MillionVerifier file ready", ), millionVerifierFileDeletionScheduled: trigger( "millionverifier.fileDeletionScheduled", "MillionVerifier file deletion scheduled", ), } as const satisfies Record /** * Returns the manual account-scoped provider callback for a deployed trigger. * * @param context - Resolved trigger presentation context. */ function millionVerifierTriggerDetails(context: TriggerPresentationContext) { const account = triggerAccount(context.config) if (!account) return [] return [ { copyable: true, label: "Webhook URL", value: new URL( `/api/v1/events/millionverifier/${encodeURIComponent(account)}`, context.appOrigin, ).toString(), }, ] } /** * Reads the resolved account binding from canonical trigger configuration. * * @param config - Resolved trigger configuration. */ function triggerAccount(config: unknown) { if (typeof config !== "object" || config === null || !("account" in config)) { return } return typeof config.account === "string" ? config.account : undefined }