Skip to content

Commit 33dfb4b

Browse files
committed
feat(automation): widen public API to full CRUD across flows, triggers, keywords, ai-agents, reflinks, ai-triggers
Finishes the data-access chain (action -> service -> repository -> DB) for flows, sequences, broadcasts, saved-replies, reflinks, bot-fields, and greenfield ai-triggers, then widens the `automation` token scope from read-only to full CRUD so MCP/agent clients can build, publish, and inspect automations end to end.
1 parent ff30a75 commit 33dfb4b

65 files changed

Lines changed: 4292 additions & 1135 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

apps/builder/__tests__/__snapshots__/public-spec-operations.test.ts.snap

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,61 @@
22

33
exports[`public API spec — operation naming guard > operation list (operationId, method, path) matches the committed snapshot 1`] = `
44
[
5+
{
6+
"method": "POST",
7+
"operationId": "aiAgents.create",
8+
"path": "/v1/ai-agents",
9+
},
10+
{
11+
"method": "DELETE",
12+
"operationId": "aiAgents.delete",
13+
"path": "/v1/ai-agents/{id}",
14+
},
15+
{
16+
"method": "GET",
17+
"operationId": "aiAgents.get",
18+
"path": "/v1/ai-agents/{id}",
19+
},
520
{
621
"method": "GET",
722
"operationId": "aiAgents.list",
823
"path": "/v1/ai-agents",
924
},
25+
{
26+
"method": "PUT",
27+
"operationId": "aiAgents.update",
28+
"path": "/v1/ai-agents/{id}",
29+
},
30+
{
31+
"method": "POST",
32+
"operationId": "aiTriggers.create",
33+
"path": "/v1/ai-triggers",
34+
},
35+
{
36+
"method": "DELETE",
37+
"operationId": "aiTriggers.delete",
38+
"path": "/v1/ai-triggers/{id}",
39+
},
40+
{
41+
"method": "POST",
42+
"operationId": "aiTriggers.duplicate",
43+
"path": "/v1/ai-triggers/{id}/duplicate",
44+
},
45+
{
46+
"method": "GET",
47+
"operationId": "aiTriggers.get",
48+
"path": "/v1/ai-triggers/{id}",
49+
},
50+
{
51+
"method": "GET",
52+
"operationId": "aiTriggers.list",
53+
"path": "/v1/ai-triggers",
54+
},
55+
{
56+
"method": "PUT",
57+
"operationId": "aiTriggers.update",
58+
"path": "/v1/ai-triggers/{id}",
59+
},
1060
{
1161
"method": "PUT",
1262
"operationId": "botFields.bulkUpdate",
@@ -357,11 +407,56 @@ exports[`public API spec — operation naming guard > operation list (operationI
357407
"operationId": "externalWebhooks.list",
358408
"path": "/v1/external-webhooks",
359409
},
410+
{
411+
"method": "POST",
412+
"operationId": "flows.create",
413+
"path": "/v1/flows",
414+
},
415+
{
416+
"method": "DELETE",
417+
"operationId": "flows.delete",
418+
"path": "/v1/flows/{id}",
419+
},
420+
{
421+
"method": "POST",
422+
"operationId": "flows.duplicate",
423+
"path": "/v1/flows/{id}/duplicate",
424+
},
425+
{
426+
"method": "GET",
427+
"operationId": "flows.get",
428+
"path": "/v1/flows/{id}",
429+
},
430+
{
431+
"method": "POST",
432+
"operationId": "flows.import",
433+
"path": "/v1/flows/import",
434+
},
360435
{
361436
"method": "GET",
362437
"operationId": "flows.list",
363438
"path": "/v1/flows",
364439
},
440+
{
441+
"method": "POST",
442+
"operationId": "flows.publish",
443+
"path": "/v1/flows/{id}/publish",
444+
},
445+
{
446+
"method": "PATCH",
447+
"operationId": "flows.update",
448+
"path": "/v1/flows/{id}",
449+
},
450+
{
451+
"method": "PUT",
452+
"operationId": "flows.updateDraft",
453+
"path": "/v1/flows/{id}/draft",
454+
},
455+
{
456+
"method": "GET",
457+
"operationId": "flows.versions",
458+
"path": "/v1/flows/{id}/versions",
459+
},
365460
{
366461
"method": "POST",
367462
"operationId": "folders.create",
@@ -402,16 +497,61 @@ exports[`public API spec — operation naming guard > operation list (operationI
402497
"operationId": "integrations.list",
403498
"path": "/v1/integrations",
404499
},
500+
{
501+
"method": "POST",
502+
"operationId": "keywords.create",
503+
"path": "/v1/keywords",
504+
},
505+
{
506+
"method": "DELETE",
507+
"operationId": "keywords.delete",
508+
"path": "/v1/keywords/{id}",
509+
},
510+
{
511+
"method": "GET",
512+
"operationId": "keywords.get",
513+
"path": "/v1/keywords/{id}",
514+
},
405515
{
406516
"method": "GET",
407517
"operationId": "keywords.list",
408518
"path": "/v1/keywords",
409519
},
520+
{
521+
"method": "PUT",
522+
"operationId": "keywords.update",
523+
"path": "/v1/keywords/{id}",
524+
},
525+
{
526+
"method": "PATCH",
527+
"operationId": "keywords.updateStatus",
528+
"path": "/v1/keywords/{id}/status",
529+
},
530+
{
531+
"method": "POST",
532+
"operationId": "reflinks.create",
533+
"path": "/v1/ref-links",
534+
},
535+
{
536+
"method": "DELETE",
537+
"operationId": "reflinks.delete",
538+
"path": "/v1/ref-links/{id}",
539+
},
410540
{
411541
"method": "GET",
412542
"operationId": "reflinks.get",
413543
"path": "/v1/ref-links/{id}",
414544
},
545+
{
546+
"method": "GET",
547+
"operationId": "reflinks.list",
548+
"path": "/v1/ref-links",
549+
},
550+
{
551+
"method": "PUT",
552+
"operationId": "reflinks.update",
553+
"path": "/v1/ref-links/{id}",
554+
},
415555
{
416556
"method": "GET",
417557
"operationId": "savedReplies.list",
@@ -457,11 +597,36 @@ exports[`public API spec — operation naming guard > operation list (operationI
457597
"operationId": "templateMessages.list",
458598
"path": "/v1/template-messages",
459599
},
600+
{
601+
"method": "POST",
602+
"operationId": "triggers.create",
603+
"path": "/v1/triggers",
604+
},
605+
{
606+
"method": "DELETE",
607+
"operationId": "triggers.delete",
608+
"path": "/v1/triggers/{id}",
609+
},
610+
{
611+
"method": "GET",
612+
"operationId": "triggers.get",
613+
"path": "/v1/triggers/{id}",
614+
},
460615
{
461616
"method": "GET",
462617
"operationId": "triggers.list",
463618
"path": "/v1/triggers",
464619
},
620+
{
621+
"method": "PUT",
622+
"operationId": "triggers.update",
623+
"path": "/v1/triggers/{id}",
624+
},
625+
{
626+
"method": "PATCH",
627+
"operationId": "triggers.updateSettings",
628+
"path": "/v1/triggers/{id}/settings",
629+
},
465630
{
466631
"method": "POST",
467632
"operationId": "webhooks.create",

0 commit comments

Comments
 (0)