···568568 unique (from_at, to_at)
569569 );
570570571571+ create table if not exists webhooks (
572572+ id integer primary key autoincrement,
573573+ repo_at text not null,
574574+ url text not null,
575575+ secret text,
576576+ active integer not null default 1,
577577+ events text not null, -- comma-separated list of events
578578+ created_at text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
579579+ updated_at text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
580580+581581+ foreign key (repo_at) references repos(at_uri) on delete cascade
582582+ );
583583+584584+ create table if not exists webhook_deliveries (
585585+ id integer primary key autoincrement,
586586+ webhook_id integer not null,
587587+ event text not null,
588588+ delivery_id text not null,
589589+ url text not null,
590590+ request_body text not null,
591591+ response_code integer,
592592+ response_body text,
593593+ success integer not null default 0,
594594+ created_at text not null default (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
595595+596596+ foreign key (webhook_id) references webhooks(id) on delete cascade
597597+ );
598598+571599 create table if not exists migrations (
572600 id integer primary key autoincrement,
573601 name text unique
···578606 create index if not exists idx_notifications_recipient_read on notifications(recipient_did, read);
579607 create index if not exists idx_references_from_at on reference_links(from_at);
580608 create index if not exists idx_references_to_at on reference_links(to_at);
609609+ create index if not exists idx_webhooks_repo_at on webhooks(repo_at);
610610+ create index if not exists idx_webhook_deliveries_webhook_id on webhook_deliveries(webhook_id);
581611 `)
582612 if err != nil {
583613 return nil, err