@checkstack/automation-backend 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/CHANGELOG.md +453 -0
  2. package/drizzle/0000_acoustic_diamondback.sql +80 -0
  3. package/drizzle/0001_mute_vindicator.sql +12 -0
  4. package/drizzle/0002_silky_omega_red.sql +12 -0
  5. package/drizzle/meta/0000_snapshot.json +688 -0
  6. package/drizzle/meta/0001_snapshot.json +785 -0
  7. package/drizzle/meta/0002_snapshot.json +861 -0
  8. package/drizzle/meta/_journal.json +27 -0
  9. package/drizzle.config.ts +12 -0
  10. package/package.json +41 -0
  11. package/src/action-registry.ts +83 -0
  12. package/src/action-types.ts +324 -0
  13. package/src/artifact-store.ts +140 -0
  14. package/src/artifact-type-registry.ts +64 -0
  15. package/src/automation-store.ts +227 -0
  16. package/src/builtin-actions.test.ts +185 -0
  17. package/src/builtin-actions.ts +132 -0
  18. package/src/builtin-triggers.test.ts +264 -0
  19. package/src/builtin-triggers.ts +365 -0
  20. package/src/dispatch/action-kind.ts +44 -0
  21. package/src/dispatch/condition.ts +61 -0
  22. package/src/dispatch/delay-queue.ts +91 -0
  23. package/src/dispatch/engine.test.ts +1198 -0
  24. package/src/dispatch/engine.ts +1672 -0
  25. package/src/dispatch/path-nav.ts +65 -0
  26. package/src/dispatch/render.test.ts +75 -0
  27. package/src/dispatch/render.ts +136 -0
  28. package/src/dispatch/run-state-store.ts +143 -0
  29. package/src/dispatch/run-state.ts +298 -0
  30. package/src/dispatch/scope.test.ts +40 -0
  31. package/src/dispatch/scope.ts +125 -0
  32. package/src/dispatch/stalled-sweeper.ts +164 -0
  33. package/src/dispatch/test-fixtures.ts +558 -0
  34. package/src/dispatch/trigger-subscriber.ts +397 -0
  35. package/src/dispatch/types.ts +259 -0
  36. package/src/extension-points.ts +88 -0
  37. package/src/index.ts +379 -0
  38. package/src/migration/from-webhook-subscriptions.test.ts +237 -0
  39. package/src/migration/from-webhook-subscriptions.ts +398 -0
  40. package/src/registries.test.ts +357 -0
  41. package/src/router.test.ts +724 -0
  42. package/src/router.ts +556 -0
  43. package/src/schema.ts +310 -0
  44. package/src/trigger-registry.ts +99 -0
  45. package/src/validate-definition.test.ts +306 -0
  46. package/src/validate-definition.ts +304 -0
  47. package/tsconfig.json +41 -0
@@ -0,0 +1,785 @@
1
+ {
2
+ "id": "06ae96ff-21b7-4e92-9c8d-22e3b8e3b71e",
3
+ "prevId": "af7c1867-eb13-4cc1-9eca-9898055ec012",
4
+ "version": "7",
5
+ "dialect": "postgresql",
6
+ "tables": {
7
+ "public.automation_artifacts": {
8
+ "name": "automation_artifacts",
9
+ "schema": "",
10
+ "columns": {
11
+ "id": {
12
+ "name": "id",
13
+ "type": "text",
14
+ "primaryKey": true,
15
+ "notNull": true
16
+ },
17
+ "automation_id": {
18
+ "name": "automation_id",
19
+ "type": "text",
20
+ "primaryKey": false,
21
+ "notNull": true
22
+ },
23
+ "run_id": {
24
+ "name": "run_id",
25
+ "type": "text",
26
+ "primaryKey": false,
27
+ "notNull": true
28
+ },
29
+ "step_id": {
30
+ "name": "step_id",
31
+ "type": "text",
32
+ "primaryKey": false,
33
+ "notNull": true
34
+ },
35
+ "action_id": {
36
+ "name": "action_id",
37
+ "type": "text",
38
+ "primaryKey": false,
39
+ "notNull": false
40
+ },
41
+ "artifact_type": {
42
+ "name": "artifact_type",
43
+ "type": "text",
44
+ "primaryKey": false,
45
+ "notNull": true
46
+ },
47
+ "data": {
48
+ "name": "data",
49
+ "type": "jsonb",
50
+ "primaryKey": false,
51
+ "notNull": true
52
+ },
53
+ "context_key": {
54
+ "name": "context_key",
55
+ "type": "text",
56
+ "primaryKey": false,
57
+ "notNull": false
58
+ },
59
+ "closed_at": {
60
+ "name": "closed_at",
61
+ "type": "timestamp",
62
+ "primaryKey": false,
63
+ "notNull": false
64
+ },
65
+ "created_at": {
66
+ "name": "created_at",
67
+ "type": "timestamp",
68
+ "primaryKey": false,
69
+ "notNull": true,
70
+ "default": "now()"
71
+ }
72
+ },
73
+ "indexes": {
74
+ "automation_artifacts_context_lookup_idx": {
75
+ "name": "automation_artifacts_context_lookup_idx",
76
+ "columns": [
77
+ {
78
+ "expression": "automation_id",
79
+ "isExpression": false,
80
+ "asc": true,
81
+ "nulls": "last"
82
+ },
83
+ {
84
+ "expression": "context_key",
85
+ "isExpression": false,
86
+ "asc": true,
87
+ "nulls": "last"
88
+ },
89
+ {
90
+ "expression": "artifact_type",
91
+ "isExpression": false,
92
+ "asc": true,
93
+ "nulls": "last"
94
+ },
95
+ {
96
+ "expression": "created_at",
97
+ "isExpression": false,
98
+ "asc": true,
99
+ "nulls": "last"
100
+ }
101
+ ],
102
+ "isUnique": false,
103
+ "concurrently": false,
104
+ "method": "btree",
105
+ "with": {}
106
+ },
107
+ "automation_artifacts_action_lookup_idx": {
108
+ "name": "automation_artifacts_action_lookup_idx",
109
+ "columns": [
110
+ {
111
+ "expression": "automation_id",
112
+ "isExpression": false,
113
+ "asc": true,
114
+ "nulls": "last"
115
+ },
116
+ {
117
+ "expression": "action_id",
118
+ "isExpression": false,
119
+ "asc": true,
120
+ "nulls": "last"
121
+ },
122
+ {
123
+ "expression": "created_at",
124
+ "isExpression": false,
125
+ "asc": true,
126
+ "nulls": "last"
127
+ }
128
+ ],
129
+ "isUnique": false,
130
+ "concurrently": false,
131
+ "method": "btree",
132
+ "with": {}
133
+ },
134
+ "automation_artifacts_open_idx": {
135
+ "name": "automation_artifacts_open_idx",
136
+ "columns": [
137
+ {
138
+ "expression": "automation_id",
139
+ "isExpression": false,
140
+ "asc": true,
141
+ "nulls": "last"
142
+ },
143
+ {
144
+ "expression": "closed_at",
145
+ "isExpression": false,
146
+ "asc": true,
147
+ "nulls": "last"
148
+ }
149
+ ],
150
+ "isUnique": false,
151
+ "concurrently": false,
152
+ "method": "btree",
153
+ "with": {}
154
+ }
155
+ },
156
+ "foreignKeys": {
157
+ "automation_artifacts_automation_id_automations_id_fk": {
158
+ "name": "automation_artifacts_automation_id_automations_id_fk",
159
+ "tableFrom": "automation_artifacts",
160
+ "tableTo": "automations",
161
+ "columnsFrom": [
162
+ "automation_id"
163
+ ],
164
+ "columnsTo": [
165
+ "id"
166
+ ],
167
+ "onDelete": "cascade",
168
+ "onUpdate": "no action"
169
+ },
170
+ "automation_artifacts_run_id_automation_runs_id_fk": {
171
+ "name": "automation_artifacts_run_id_automation_runs_id_fk",
172
+ "tableFrom": "automation_artifacts",
173
+ "tableTo": "automation_runs",
174
+ "columnsFrom": [
175
+ "run_id"
176
+ ],
177
+ "columnsTo": [
178
+ "id"
179
+ ],
180
+ "onDelete": "cascade",
181
+ "onUpdate": "no action"
182
+ },
183
+ "automation_artifacts_step_id_automation_run_steps_id_fk": {
184
+ "name": "automation_artifacts_step_id_automation_run_steps_id_fk",
185
+ "tableFrom": "automation_artifacts",
186
+ "tableTo": "automation_run_steps",
187
+ "columnsFrom": [
188
+ "step_id"
189
+ ],
190
+ "columnsTo": [
191
+ "id"
192
+ ],
193
+ "onDelete": "cascade",
194
+ "onUpdate": "no action"
195
+ }
196
+ },
197
+ "compositePrimaryKeys": {},
198
+ "uniqueConstraints": {},
199
+ "policies": {},
200
+ "checkConstraints": {},
201
+ "isRLSEnabled": false
202
+ },
203
+ "public.automation_run_state": {
204
+ "name": "automation_run_state",
205
+ "schema": "",
206
+ "columns": {
207
+ "run_id": {
208
+ "name": "run_id",
209
+ "type": "text",
210
+ "primaryKey": true,
211
+ "notNull": true
212
+ },
213
+ "scope_snapshot": {
214
+ "name": "scope_snapshot",
215
+ "type": "jsonb",
216
+ "primaryKey": false,
217
+ "notNull": true
218
+ },
219
+ "last_action_path": {
220
+ "name": "last_action_path",
221
+ "type": "text",
222
+ "primaryKey": false,
223
+ "notNull": false
224
+ },
225
+ "last_heartbeat_at": {
226
+ "name": "last_heartbeat_at",
227
+ "type": "timestamp",
228
+ "primaryKey": false,
229
+ "notNull": true,
230
+ "default": "now()"
231
+ },
232
+ "updated_at": {
233
+ "name": "updated_at",
234
+ "type": "timestamp",
235
+ "primaryKey": false,
236
+ "notNull": true,
237
+ "default": "now()"
238
+ }
239
+ },
240
+ "indexes": {
241
+ "automation_run_state_heartbeat_idx": {
242
+ "name": "automation_run_state_heartbeat_idx",
243
+ "columns": [
244
+ {
245
+ "expression": "last_heartbeat_at",
246
+ "isExpression": false,
247
+ "asc": true,
248
+ "nulls": "last"
249
+ }
250
+ ],
251
+ "isUnique": false,
252
+ "concurrently": false,
253
+ "method": "btree",
254
+ "with": {}
255
+ }
256
+ },
257
+ "foreignKeys": {
258
+ "automation_run_state_run_id_automation_runs_id_fk": {
259
+ "name": "automation_run_state_run_id_automation_runs_id_fk",
260
+ "tableFrom": "automation_run_state",
261
+ "tableTo": "automation_runs",
262
+ "columnsFrom": [
263
+ "run_id"
264
+ ],
265
+ "columnsTo": [
266
+ "id"
267
+ ],
268
+ "onDelete": "cascade",
269
+ "onUpdate": "no action"
270
+ }
271
+ },
272
+ "compositePrimaryKeys": {},
273
+ "uniqueConstraints": {},
274
+ "policies": {},
275
+ "checkConstraints": {},
276
+ "isRLSEnabled": false
277
+ },
278
+ "public.automation_run_steps": {
279
+ "name": "automation_run_steps",
280
+ "schema": "",
281
+ "columns": {
282
+ "id": {
283
+ "name": "id",
284
+ "type": "text",
285
+ "primaryKey": true,
286
+ "notNull": true
287
+ },
288
+ "run_id": {
289
+ "name": "run_id",
290
+ "type": "text",
291
+ "primaryKey": false,
292
+ "notNull": true
293
+ },
294
+ "action_path": {
295
+ "name": "action_path",
296
+ "type": "text",
297
+ "primaryKey": false,
298
+ "notNull": true
299
+ },
300
+ "action_id": {
301
+ "name": "action_id",
302
+ "type": "text",
303
+ "primaryKey": false,
304
+ "notNull": false
305
+ },
306
+ "action_kind": {
307
+ "name": "action_kind",
308
+ "type": "text",
309
+ "primaryKey": false,
310
+ "notNull": true
311
+ },
312
+ "provider_action_id": {
313
+ "name": "provider_action_id",
314
+ "type": "text",
315
+ "primaryKey": false,
316
+ "notNull": false
317
+ },
318
+ "status": {
319
+ "name": "status",
320
+ "type": "text",
321
+ "primaryKey": false,
322
+ "notNull": true,
323
+ "default": "'pending'"
324
+ },
325
+ "attempts": {
326
+ "name": "attempts",
327
+ "type": "integer",
328
+ "primaryKey": false,
329
+ "notNull": true,
330
+ "default": 0
331
+ },
332
+ "error_message": {
333
+ "name": "error_message",
334
+ "type": "text",
335
+ "primaryKey": false,
336
+ "notNull": false
337
+ },
338
+ "result_payload": {
339
+ "name": "result_payload",
340
+ "type": "jsonb",
341
+ "primaryKey": false,
342
+ "notNull": false
343
+ },
344
+ "started_at": {
345
+ "name": "started_at",
346
+ "type": "timestamp",
347
+ "primaryKey": false,
348
+ "notNull": true,
349
+ "default": "now()"
350
+ },
351
+ "finished_at": {
352
+ "name": "finished_at",
353
+ "type": "timestamp",
354
+ "primaryKey": false,
355
+ "notNull": false
356
+ }
357
+ },
358
+ "indexes": {
359
+ "automation_run_steps_run_idx": {
360
+ "name": "automation_run_steps_run_idx",
361
+ "columns": [
362
+ {
363
+ "expression": "run_id",
364
+ "isExpression": false,
365
+ "asc": true,
366
+ "nulls": "last"
367
+ }
368
+ ],
369
+ "isUnique": false,
370
+ "concurrently": false,
371
+ "method": "btree",
372
+ "with": {}
373
+ }
374
+ },
375
+ "foreignKeys": {
376
+ "automation_run_steps_run_id_automation_runs_id_fk": {
377
+ "name": "automation_run_steps_run_id_automation_runs_id_fk",
378
+ "tableFrom": "automation_run_steps",
379
+ "tableTo": "automation_runs",
380
+ "columnsFrom": [
381
+ "run_id"
382
+ ],
383
+ "columnsTo": [
384
+ "id"
385
+ ],
386
+ "onDelete": "cascade",
387
+ "onUpdate": "no action"
388
+ }
389
+ },
390
+ "compositePrimaryKeys": {},
391
+ "uniqueConstraints": {},
392
+ "policies": {},
393
+ "checkConstraints": {},
394
+ "isRLSEnabled": false
395
+ },
396
+ "public.automation_runs": {
397
+ "name": "automation_runs",
398
+ "schema": "",
399
+ "columns": {
400
+ "id": {
401
+ "name": "id",
402
+ "type": "text",
403
+ "primaryKey": true,
404
+ "notNull": true
405
+ },
406
+ "automation_id": {
407
+ "name": "automation_id",
408
+ "type": "text",
409
+ "primaryKey": false,
410
+ "notNull": true
411
+ },
412
+ "trigger_id": {
413
+ "name": "trigger_id",
414
+ "type": "text",
415
+ "primaryKey": false,
416
+ "notNull": true
417
+ },
418
+ "trigger_event_id": {
419
+ "name": "trigger_event_id",
420
+ "type": "text",
421
+ "primaryKey": false,
422
+ "notNull": true
423
+ },
424
+ "trigger_payload": {
425
+ "name": "trigger_payload",
426
+ "type": "jsonb",
427
+ "primaryKey": false,
428
+ "notNull": true
429
+ },
430
+ "context_key": {
431
+ "name": "context_key",
432
+ "type": "text",
433
+ "primaryKey": false,
434
+ "notNull": false
435
+ },
436
+ "status": {
437
+ "name": "status",
438
+ "type": "text",
439
+ "primaryKey": false,
440
+ "notNull": true,
441
+ "default": "'pending'"
442
+ },
443
+ "error_message": {
444
+ "name": "error_message",
445
+ "type": "text",
446
+ "primaryKey": false,
447
+ "notNull": false
448
+ },
449
+ "started_at": {
450
+ "name": "started_at",
451
+ "type": "timestamp",
452
+ "primaryKey": false,
453
+ "notNull": true,
454
+ "default": "now()"
455
+ },
456
+ "finished_at": {
457
+ "name": "finished_at",
458
+ "type": "timestamp",
459
+ "primaryKey": false,
460
+ "notNull": false
461
+ }
462
+ },
463
+ "indexes": {
464
+ "automation_runs_automation_idx": {
465
+ "name": "automation_runs_automation_idx",
466
+ "columns": [
467
+ {
468
+ "expression": "automation_id",
469
+ "isExpression": false,
470
+ "asc": true,
471
+ "nulls": "last"
472
+ },
473
+ {
474
+ "expression": "started_at",
475
+ "isExpression": false,
476
+ "asc": true,
477
+ "nulls": "last"
478
+ }
479
+ ],
480
+ "isUnique": false,
481
+ "concurrently": false,
482
+ "method": "btree",
483
+ "with": {}
484
+ },
485
+ "automation_runs_status_idx": {
486
+ "name": "automation_runs_status_idx",
487
+ "columns": [
488
+ {
489
+ "expression": "status",
490
+ "isExpression": false,
491
+ "asc": true,
492
+ "nulls": "last"
493
+ }
494
+ ],
495
+ "isUnique": false,
496
+ "concurrently": false,
497
+ "method": "btree",
498
+ "with": {}
499
+ },
500
+ "automation_runs_context_key_idx": {
501
+ "name": "automation_runs_context_key_idx",
502
+ "columns": [
503
+ {
504
+ "expression": "automation_id",
505
+ "isExpression": false,
506
+ "asc": true,
507
+ "nulls": "last"
508
+ },
509
+ {
510
+ "expression": "context_key",
511
+ "isExpression": false,
512
+ "asc": true,
513
+ "nulls": "last"
514
+ }
515
+ ],
516
+ "isUnique": false,
517
+ "concurrently": false,
518
+ "method": "btree",
519
+ "with": {}
520
+ }
521
+ },
522
+ "foreignKeys": {
523
+ "automation_runs_automation_id_automations_id_fk": {
524
+ "name": "automation_runs_automation_id_automations_id_fk",
525
+ "tableFrom": "automation_runs",
526
+ "tableTo": "automations",
527
+ "columnsFrom": [
528
+ "automation_id"
529
+ ],
530
+ "columnsTo": [
531
+ "id"
532
+ ],
533
+ "onDelete": "cascade",
534
+ "onUpdate": "no action"
535
+ }
536
+ },
537
+ "compositePrimaryKeys": {},
538
+ "uniqueConstraints": {},
539
+ "policies": {},
540
+ "checkConstraints": {},
541
+ "isRLSEnabled": false
542
+ },
543
+ "public.automation_wait_locks": {
544
+ "name": "automation_wait_locks",
545
+ "schema": "",
546
+ "columns": {
547
+ "id": {
548
+ "name": "id",
549
+ "type": "text",
550
+ "primaryKey": true,
551
+ "notNull": true
552
+ },
553
+ "run_id": {
554
+ "name": "run_id",
555
+ "type": "text",
556
+ "primaryKey": false,
557
+ "notNull": true
558
+ },
559
+ "action_path": {
560
+ "name": "action_path",
561
+ "type": "text",
562
+ "primaryKey": false,
563
+ "notNull": true
564
+ },
565
+ "kind": {
566
+ "name": "kind",
567
+ "type": "text",
568
+ "primaryKey": false,
569
+ "notNull": true,
570
+ "default": "'trigger'"
571
+ },
572
+ "event_id": {
573
+ "name": "event_id",
574
+ "type": "text",
575
+ "primaryKey": false,
576
+ "notNull": true
577
+ },
578
+ "context_key": {
579
+ "name": "context_key",
580
+ "type": "text",
581
+ "primaryKey": false,
582
+ "notNull": false
583
+ },
584
+ "filter_template": {
585
+ "name": "filter_template",
586
+ "type": "text",
587
+ "primaryKey": false,
588
+ "notNull": false
589
+ },
590
+ "timeout_at": {
591
+ "name": "timeout_at",
592
+ "type": "timestamp",
593
+ "primaryKey": false,
594
+ "notNull": false
595
+ },
596
+ "created_at": {
597
+ "name": "created_at",
598
+ "type": "timestamp",
599
+ "primaryKey": false,
600
+ "notNull": true,
601
+ "default": "now()"
602
+ }
603
+ },
604
+ "indexes": {
605
+ "automation_wait_locks_event_lookup_idx": {
606
+ "name": "automation_wait_locks_event_lookup_idx",
607
+ "columns": [
608
+ {
609
+ "expression": "event_id",
610
+ "isExpression": false,
611
+ "asc": true,
612
+ "nulls": "last"
613
+ },
614
+ {
615
+ "expression": "context_key",
616
+ "isExpression": false,
617
+ "asc": true,
618
+ "nulls": "last"
619
+ }
620
+ ],
621
+ "isUnique": false,
622
+ "concurrently": false,
623
+ "method": "btree",
624
+ "with": {}
625
+ },
626
+ "automation_wait_locks_timeout_idx": {
627
+ "name": "automation_wait_locks_timeout_idx",
628
+ "columns": [
629
+ {
630
+ "expression": "timeout_at",
631
+ "isExpression": false,
632
+ "asc": true,
633
+ "nulls": "last"
634
+ }
635
+ ],
636
+ "isUnique": false,
637
+ "concurrently": false,
638
+ "method": "btree",
639
+ "with": {}
640
+ },
641
+ "automation_wait_locks_run_idx": {
642
+ "name": "automation_wait_locks_run_idx",
643
+ "columns": [
644
+ {
645
+ "expression": "run_id",
646
+ "isExpression": false,
647
+ "asc": true,
648
+ "nulls": "last"
649
+ }
650
+ ],
651
+ "isUnique": false,
652
+ "concurrently": false,
653
+ "method": "btree",
654
+ "with": {}
655
+ }
656
+ },
657
+ "foreignKeys": {
658
+ "automation_wait_locks_run_id_automation_runs_id_fk": {
659
+ "name": "automation_wait_locks_run_id_automation_runs_id_fk",
660
+ "tableFrom": "automation_wait_locks",
661
+ "tableTo": "automation_runs",
662
+ "columnsFrom": [
663
+ "run_id"
664
+ ],
665
+ "columnsTo": [
666
+ "id"
667
+ ],
668
+ "onDelete": "cascade",
669
+ "onUpdate": "no action"
670
+ }
671
+ },
672
+ "compositePrimaryKeys": {},
673
+ "uniqueConstraints": {},
674
+ "policies": {},
675
+ "checkConstraints": {},
676
+ "isRLSEnabled": false
677
+ },
678
+ "public.automations": {
679
+ "name": "automations",
680
+ "schema": "",
681
+ "columns": {
682
+ "id": {
683
+ "name": "id",
684
+ "type": "text",
685
+ "primaryKey": true,
686
+ "notNull": true
687
+ },
688
+ "name": {
689
+ "name": "name",
690
+ "type": "text",
691
+ "primaryKey": false,
692
+ "notNull": true
693
+ },
694
+ "description": {
695
+ "name": "description",
696
+ "type": "text",
697
+ "primaryKey": false,
698
+ "notNull": false
699
+ },
700
+ "status": {
701
+ "name": "status",
702
+ "type": "text",
703
+ "primaryKey": false,
704
+ "notNull": true,
705
+ "default": "'enabled'"
706
+ },
707
+ "definition": {
708
+ "name": "definition",
709
+ "type": "jsonb",
710
+ "primaryKey": false,
711
+ "notNull": true
712
+ },
713
+ "managed_by": {
714
+ "name": "managed_by",
715
+ "type": "text",
716
+ "primaryKey": false,
717
+ "notNull": false
718
+ },
719
+ "created_at": {
720
+ "name": "created_at",
721
+ "type": "timestamp",
722
+ "primaryKey": false,
723
+ "notNull": true,
724
+ "default": "now()"
725
+ },
726
+ "updated_at": {
727
+ "name": "updated_at",
728
+ "type": "timestamp",
729
+ "primaryKey": false,
730
+ "notNull": true,
731
+ "default": "now()"
732
+ }
733
+ },
734
+ "indexes": {
735
+ "automations_status_idx": {
736
+ "name": "automations_status_idx",
737
+ "columns": [
738
+ {
739
+ "expression": "status",
740
+ "isExpression": false,
741
+ "asc": true,
742
+ "nulls": "last"
743
+ }
744
+ ],
745
+ "isUnique": false,
746
+ "concurrently": false,
747
+ "method": "btree",
748
+ "with": {}
749
+ },
750
+ "automations_managed_by_idx": {
751
+ "name": "automations_managed_by_idx",
752
+ "columns": [
753
+ {
754
+ "expression": "managed_by",
755
+ "isExpression": false,
756
+ "asc": true,
757
+ "nulls": "last"
758
+ }
759
+ ],
760
+ "isUnique": false,
761
+ "concurrently": false,
762
+ "method": "btree",
763
+ "with": {}
764
+ }
765
+ },
766
+ "foreignKeys": {},
767
+ "compositePrimaryKeys": {},
768
+ "uniqueConstraints": {},
769
+ "policies": {},
770
+ "checkConstraints": {},
771
+ "isRLSEnabled": false
772
+ }
773
+ },
774
+ "enums": {},
775
+ "schemas": {},
776
+ "sequences": {},
777
+ "roles": {},
778
+ "policies": {},
779
+ "views": {},
780
+ "_meta": {
781
+ "columns": {},
782
+ "schemas": {},
783
+ "tables": {}
784
+ }
785
+ }