Webhooks
See Webhooks for what a webhook is. Use eventStore.webhooks to register webhook observers for event streams.
Register a webhook programmatically
Section titled “Register a webhook programmatically”import { ChronicleClient, ChronicleOptions, eventType } from '@cratis/chronicle';
@eventType()class EmployeeHired { constructor(readonly firstName: string, readonly lastName: string) {}}
const client = new ChronicleClient(ChronicleOptions.development());const eventStore = await client.getEventStore('MyStore');
await eventStore.webhooks.register( 'employee-audit', 'https://example.internal/webhooks/employee-audit', builder => { builder .withEventType(EmployeeHired) .withHeader('x-source', 'chronicle') .withBearerToken('token-value'); });
client.dispose();Define discoverable webhooks with decorators
Section titled “Define discoverable webhooks with decorators”The @webhook(...) decorator registers a webhook class for discovery:
@webhook(targetUrl)@webhook(id, targetUrl)@webhook(id, targetUrl, eventSequenceId)
import 'reflect-metadata';import { IWebhook, IWebhookDefinitionBuilder, webhook } from '@cratis/chronicle';
@webhook('employee-webhook', 'https://example.internal/webhooks/employees')class EmployeeWebhook implements IWebhook { define(builder: IWebhookDefinitionBuilder): void { builder .notReplayable() .withHeader('x-client', 'chronicle-ts'); }}When the event store registers artifacts, webhooks are discovered and registered automatically.
eventStore.webhooks exposes:
discover()registerDiscovered()register(webhookId, targetUrl, configure)getWebhooks()remove(webhookId)