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