Discover canonical triggers and manage push or polling subscriptions.

TriggersClient

Canonical trigger discovery from the local open-core catalog.

list

Resolves trigger definitions from the packaged catalog without network I/O.

ts
list(options?: GetTriggersOptions): Promise<readonly TriggerDefinition[]>
ParameterTypeRequiredDescription
optionsGetTriggersOptionsNoToolkit, capability, and delivery-mode filters.

Returns: Promise<readonly TriggerDefinition[]>

Throws

  • EyeballError with invalid_input when a toolkit filter is empty.

SubscriptionsClient

User-scoped push and polling trigger subscriptions.

create

Creates a user-scoped push or polling trigger subscription.

ts
create(options: CreateSubscriptionOptions): Promise<CreatedTriggerSubscription>
ParameterTypeRequiredDescription
optionsCreateSubscriptionOptionsYesCanonical trigger, destination webhooks, user, connection, and optional polling controls.

Returns: Promise<CreatedTriggerSubscription>

Throws

  • EyeballError when validation, authentication, or executor admission fails.

Example

ts
import { Eyeball } from "@eyeball/sdk";

const eyeball = new Eyeball({
  apiKey: process.env.EYEBALL_API_KEY!,
  baseUrl: process.env.EYEBALL_EXECUTOR_URL!,
});

const subscription = await eyeball.subscriptions.create({
  trigger: "slack.message_received",
  userId: "user_42",
  connectionId: "conn_slack",
  webhookEndpointIds: ["whe_events"],
});

delete

Permanently removes one trigger subscription.

ts
delete(value: string): Promise<void>
ParameterTypeRequiredDescription
valuestringYesValid trgsub_* subscription identifier.

Returns: Promise<void>

Throws

  • EyeballError when the identifier is invalid, unavailable, or the request fails.

get

Retrieves one trigger subscription.

ts
get(value: string): Promise<TriggerSubscription>
ParameterTypeRequiredDescription
valuestringYesValid trgsub_* subscription identifier.

Returns: Promise<TriggerSubscription>

Throws

  • EyeballError when the identifier is invalid, unavailable, or the request fails.

list

Lists trigger subscriptions with optional user and cursor filters.

ts
list(options?: ListSubscriptionsOptions): Promise<TriggerSubscriptionPage>
ParameterTypeRequiredDescription
optionsListSubscriptionsOptionsNoUser scope and pagination controls.

Returns: Promise<TriggerSubscriptionPage>

Throws

  • EyeballError when a filter is invalid or the executor request fails.

rotateSecret

Invalidates a push subscription's current ingest URL and returns its replacement once.

ts
rotateSecret(value: string): Promise<RotatedTriggerIngestSecret>
ParameterTypeRequiredDescription
valuestringYesValid trgsub_* subscription identifier.

Returns: Promise<RotatedTriggerIngestSecret>

Throws

  • EyeballError for polling subscriptions or unavailable identifiers.

Types

GetTriggersOptions

Local catalog filters for canonical trigger discovery.

ts
export interface GetTriggersOptions {
  toolkits?: readonly string[];
  capability?: CapabilitySlug;
  deliveryMode?: TriggerDefinition["annotations"]["deliveryMode"];
}
PropertyTypeRequiredReadonlyDescription
capability"email" | "calendar_scheduling" | "messaging_chat" | "voice_telephony" | "sms" | "crm" | "erp_accounting" | "social_media_data" | "social_media_publishing" | "file_storage_docs" | "spreadsheets_databases" | "project_management_dev_tools" | "payments_billing" | "ecommerce" | "customer_support" | "web_search_scraping" | "hr_recruiting" | "marketing_ads" | "sign_forms" | "ai_media_utilities"NoNo—
deliveryMode"polling" | "push"NoNo—
toolkitsreadonly string[]NoNo—

CreateSubscriptionOptions

Fields accepted when creating a push or polling trigger subscription.

ts
export interface CreateSubscriptionOptions {
  trigger: string;
  /** Uses the client-level userId when omitted. */
  userId?: string;
  connectionId?: ConnectionId;
  webhookEndpointIds: readonly string[];
  filters?: Readonly<Record<string, JsonValue>>;
  /** Polling triggers only; the catalog default is used when omitted. */
  pollIntervalSeconds?: number;
}
PropertyTypeRequiredReadonlyDescription
connectionIdconn_$&#123;string&#125;NoNo—
filtersReadonly<Record<string, JsonValue>>NoNo—
pollIntervalSecondsnumberNoNoPolling triggers only; the catalog default is used when omitted.
triggerstringYesNo—
userIdstringNoNoUses the client-level userId when omitted.
webhookEndpointIdsreadonly string[]YesNo—

ListSubscriptionsOptions

User and cursor filters for trigger subscription listing.

ts
export interface ListSubscriptionsOptions {
  /** Uses the client-level userId when omitted; omit both to list the project. */
  userId?: string;
  cursor?: string;
  limit?: number;
}
PropertyTypeRequiredReadonlyDescription
cursorstringNoNo—
limitnumberNoNo—
userIdstringNoNoUses the client-level userId when omitted; omit both to list the project.

CreatedTriggerSubscription

Push subscriptions reveal their unguessable ingest URL only in the create response.

ts
export interface CreatedTriggerSubscription extends TriggerSubscription {
  ingestUrl?: string;
}
PropertyTypeRequiredReadonlyDescription
connectionIdconn_$&#123;string&#125;NoNo—
createdAtstringYesNo—
filtersReadonly<Record<string, JsonValue>>NoNo—
ingestUrlstringNoNo—
pollIntervalSecondsnumberNoNoPolling triggers only; omitted for push subscriptions.
projectIdstringYesNo—
statusTriggerSubscriptionStatusYesNo—
subscriptionIdtrgsub_$&#123;string&#125;YesNo—
trigger$&#123;string&#125;.$&#123;string&#125;YesNo—
updatedAtstringYesNo—
userIdstringYesNo—
webhookEndpointIdsreadonly string[]YesNo—

QualifiedTriggerName

ts
export type QualifiedTriggerName = `${string}.${string}`;

TriggerDefinition

ts
export interface TriggerDefinition {
  /** Exactly `<toolkit>.<canonical-trigger>`. */
  name: QualifiedTriggerName;
  toolkit: ToolkitSlug;
  capability: CapabilitySlug;
  description: string;
  payloadSchema: ObjectSchema202012;
  annotations: TriggerAnnotations;
  version: SemVer;
}
PropertyTypeRequiredReadonlyDescription
annotationsTriggerAnnotationsYesNo—
capability"email" | "calendar_scheduling" | "messaging_chat" | "voice_telephony" | "sms" | "crm" | "erp_accounting" | "social_media_data" | "social_media_publishing" | "file_storage_docs" | "spreadsheets_databases" | "project_management_dev_tools" | "payments_billing" | "ecommerce" | "customer_support" | "web_search_scraping" | "hr_recruiting" | "marketing_ads" | "sign_forms" | "ai_media_utilities"YesNo—
descriptionstringYesNo—
name$&#123;string&#125;.$&#123;string&#125;YesNoExactly <toolkit>.<canonical-trigger>.
payloadSchemaObjectSchema202012YesNo—
toolkitstringYesNo—
version$&#123;number&#125;.$&#123;number&#125;.$&#123;number&#125;YesNo—

TriggerEventData

Payload-bearing canonical event data nested inside the signed webhook envelope. Queryable history uses TriggerEventRecord, which intentionally cannot expose provider payload bodies, provider event IDs, credentials, or signing material.

ts
export interface TriggerEventData {
  subscriptionId: TriggerSubscriptionId;
  trigger: QualifiedTriggerName;
  userId: string;
  connectionId?: ConnectionId;
  providerEventId: string;
  occurredAt: string;
  payload: Readonly<Record<string, JsonValue>>;
}
PropertyTypeRequiredReadonlyDescription
connectionIdconn_$&#123;string&#125;NoNo—
occurredAtstringYesNo—
payloadReadonly<Record<string, JsonValue>>YesNo—
providerEventIdstringYesNo—
subscriptionIdtrgsub_$&#123;string&#125;YesNo—
trigger$&#123;string&#125;.$&#123;string&#125;YesNo—
userIdstringYesNo—

TriggerSubscription

Public, credential-free subscription record. Provider cursors and secrets stay internal.

ts
export interface TriggerSubscription {
  subscriptionId: TriggerSubscriptionId;
  projectId: string;
  userId: string;
  trigger: QualifiedTriggerName;
  connectionId?: ConnectionId;
  webhookEndpointIds: readonly string[];
  filters?: Readonly<Record<string, JsonValue>>;
  /** Polling triggers only; omitted for push subscriptions. */
  pollIntervalSeconds?: number;
  status: TriggerSubscriptionStatus;
  createdAt: string;
  updatedAt: string;
}
PropertyTypeRequiredReadonlyDescription
connectionIdconn_$&#123;string&#125;NoNo—
createdAtstringYesNo—
filtersReadonly<Record<string, JsonValue>>NoNo—
pollIntervalSecondsnumberNoNoPolling triggers only; omitted for push subscriptions.
projectIdstringYesNo—
statusTriggerSubscriptionStatusYesNo—
subscriptionIdtrgsub_$&#123;string&#125;YesNo—
trigger$&#123;string&#125;.$&#123;string&#125;YesNo—
updatedAtstringYesNo—
userIdstringYesNo—
webhookEndpointIdsreadonly string[]YesNo—

TriggerSubscriptionId

ts
export type TriggerSubscriptionId = `trgsub_${string}`;

TriggerSubscriptionPage

ts
export interface TriggerSubscriptionPage {
  subscriptions: readonly TriggerSubscription[];
  nextCursor?: string;
}
PropertyTypeRequiredReadonlyDescription
nextCursorstringNoNo—
subscriptionsreadonly TriggerSubscription[]YesNo—

TriggerWebhookEvent

ts
export interface TriggerWebhookEvent {
  id: string;
  type: TriggerWebhookEventType;
  createdAt: string;
  projectId: string;
  data: TriggerEventData;
}
PropertyTypeRequiredReadonlyDescription
createdAtstringYesNo—
dataTriggerEventDataYesNo—
idstringYesNo—
projectIdstringYesNo—
typetrigger.$&#123;string&#125;.$&#123;string&#125;YesNo—