@shipfox/api-triggers 13.1.0 → 14.0.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 (129) hide show
  1. package/.turbo/turbo-build.log +4 -4
  2. package/CHANGELOG.md +27 -0
  3. package/README.md +14 -10
  4. package/dist/core/entities/decision.d.ts +3 -2
  5. package/dist/core/entities/decision.d.ts.map +1 -1
  6. package/dist/core/entities/decision.js.map +1 -1
  7. package/dist/core/entities/job-listener-subscription.d.ts +2 -1
  8. package/dist/core/entities/job-listener-subscription.d.ts.map +1 -1
  9. package/dist/core/entities/job-listener-subscription.js.map +1 -1
  10. package/dist/core/entities/received-event.d.ts +14 -1
  11. package/dist/core/entities/received-event.d.ts.map +1 -1
  12. package/dist/core/entities/received-event.js +2 -1
  13. package/dist/core/entities/received-event.js.map +1 -1
  14. package/dist/core/entities/subscription.d.ts +2 -1
  15. package/dist/core/entities/subscription.d.ts.map +1 -1
  16. package/dist/core/entities/subscription.js.map +1 -1
  17. package/dist/core/fire-cron.d.ts.map +1 -1
  18. package/dist/core/fire-cron.js +3 -1
  19. package/dist/core/fire-cron.js.map +1 -1
  20. package/dist/core/fire-manual.d.ts.map +1 -1
  21. package/dist/core/fire-manual.js +3 -1
  22. package/dist/core/fire-manual.js.map +1 -1
  23. package/dist/core/record-trigger-history.d.ts +2 -0
  24. package/dist/core/record-trigger-history.d.ts.map +1 -1
  25. package/dist/core/record-trigger-history.js +13 -1
  26. package/dist/core/record-trigger-history.js.map +1 -1
  27. package/dist/core/route-event-to-job-listeners.js +2 -0
  28. package/dist/core/route-event-to-job-listeners.js.map +1 -1
  29. package/dist/db/db.d.ts +48 -14
  30. package/dist/db/db.d.ts.map +1 -1
  31. package/dist/db/event-history.d.ts +17 -0
  32. package/dist/db/event-history.d.ts.map +1 -1
  33. package/dist/db/event-history.js +45 -1
  34. package/dist/db/event-history.js.map +1 -1
  35. package/dist/db/event-queries.d.ts +5 -1
  36. package/dist/db/event-queries.d.ts.map +1 -1
  37. package/dist/db/event-queries.js +30 -4
  38. package/dist/db/event-queries.js.map +1 -1
  39. package/dist/db/index.d.ts +1 -1
  40. package/dist/db/index.d.ts.map +1 -1
  41. package/dist/db/index.js +1 -1
  42. package/dist/db/index.js.map +1 -1
  43. package/dist/db/job-listener-subscriptions.d.ts +1 -1
  44. package/dist/db/job-listener-subscriptions.d.ts.map +1 -1
  45. package/dist/db/job-listener-subscriptions.js +10 -3
  46. package/dist/db/job-listener-subscriptions.js.map +1 -1
  47. package/dist/db/schema/decisions.d.ts +3 -3
  48. package/dist/db/schema/decisions.d.ts.map +1 -1
  49. package/dist/db/schema/decisions.js +8 -3
  50. package/dist/db/schema/decisions.js.map +1 -1
  51. package/dist/db/schema/job-listener-subscriptions.d.ts +1 -1
  52. package/dist/db/schema/job-listener-subscriptions.d.ts.map +1 -1
  53. package/dist/db/schema/job-listener-subscriptions.js +2 -1
  54. package/dist/db/schema/job-listener-subscriptions.js.map +1 -1
  55. package/dist/db/schema/received-events.d.ts +38 -4
  56. package/dist/db/schema/received-events.d.ts.map +1 -1
  57. package/dist/db/schema/received-events.js +11 -2
  58. package/dist/db/schema/received-events.js.map +1 -1
  59. package/dist/db/schema/subscriptions.d.ts +1 -1
  60. package/dist/db/schema/subscriptions.d.ts.map +1 -1
  61. package/dist/db/schema/subscriptions.js +2 -1
  62. package/dist/db/schema/subscriptions.js.map +1 -1
  63. package/dist/db/subscription-event.d.ts +7 -0
  64. package/dist/db/subscription-event.d.ts.map +1 -0
  65. package/dist/db/subscription-event.js +19 -0
  66. package/dist/db/subscription-event.js.map +1 -0
  67. package/dist/db/subscriptions.d.ts +5 -1
  68. package/dist/db/subscriptions.d.ts.map +1 -1
  69. package/dist/db/subscriptions.js +10 -3
  70. package/dist/db/subscriptions.js.map +1 -1
  71. package/dist/presentation/dto/trigger-events.d.ts +3 -2
  72. package/dist/presentation/dto/trigger-events.d.ts.map +1 -1
  73. package/dist/presentation/dto/trigger-events.js +9 -0
  74. package/dist/presentation/dto/trigger-events.js.map +1 -1
  75. package/dist/presentation/routes/get-trigger-event.d.ts.map +1 -1
  76. package/dist/presentation/routes/get-trigger-event.js +8 -4
  77. package/dist/presentation/routes/get-trigger-event.js.map +1 -1
  78. package/dist/presentation/routes/list-trigger-event-facets.js +1 -1
  79. package/dist/presentation/routes/list-trigger-event-facets.js.map +1 -1
  80. package/dist/presentation/routes/list-trigger-events.d.ts.map +1 -1
  81. package/dist/presentation/routes/list-trigger-events.js +3 -1
  82. package/dist/presentation/routes/list-trigger-events.js.map +1 -1
  83. package/dist/tsconfig.test.tsbuildinfo +1 -1
  84. package/drizzle/0001_nullable_subscription_events.sql +2 -0
  85. package/drizzle/0002_dev_trigger_journal.sql +7 -0
  86. package/drizzle/0003_add_origin_facet_index.sql +1 -0
  87. package/drizzle/meta/0001_snapshot.json +905 -0
  88. package/drizzle/meta/0002_snapshot.json +947 -0
  89. package/drizzle/meta/0003_snapshot.json +968 -0
  90. package/drizzle/meta/_journal.json +21 -0
  91. package/package.json +7 -7
  92. package/src/core/dispatch-integration-event.test.ts +88 -0
  93. package/src/core/entities/decision.ts +3 -2
  94. package/src/core/entities/job-listener-subscription.ts +2 -1
  95. package/src/core/entities/received-event.ts +15 -1
  96. package/src/core/entities/subscription.ts +2 -1
  97. package/src/core/fire-cron.test.ts +20 -0
  98. package/src/core/fire-cron.ts +3 -1
  99. package/src/core/fire-manual.test.ts +25 -0
  100. package/src/core/fire-manual.ts +3 -1
  101. package/src/core/record-trigger-history.test.ts +78 -0
  102. package/src/core/record-trigger-history.ts +19 -0
  103. package/src/core/route-event-to-job-listeners.test.ts +47 -0
  104. package/src/core/route-event-to-job-listeners.ts +2 -0
  105. package/src/db/event-history.test.ts +123 -0
  106. package/src/db/event-history.ts +84 -1
  107. package/src/db/event-queries.ts +56 -3
  108. package/src/db/index.ts +1 -0
  109. package/src/db/job-listener-subscriptions.test.ts +133 -1
  110. package/src/db/job-listener-subscriptions.ts +5 -4
  111. package/src/db/schema/decisions.test.ts +93 -4
  112. package/src/db/schema/decisions.ts +12 -3
  113. package/src/db/schema/job-listener-subscriptions.ts +2 -1
  114. package/src/db/schema/received-events.test.ts +45 -0
  115. package/src/db/schema/received-events.ts +12 -1
  116. package/src/db/schema/subscriptions.ts +2 -1
  117. package/src/db/subscription-event.ts +24 -0
  118. package/src/db/subscriptions.test.ts +137 -0
  119. package/src/db/subscriptions.ts +9 -4
  120. package/src/presentation/dto/trigger-events.test.ts +193 -0
  121. package/src/presentation/dto/trigger-events.ts +12 -0
  122. package/src/presentation/routes/get-trigger-event.test.ts +179 -0
  123. package/src/presentation/routes/get-trigger-event.ts +15 -3
  124. package/src/presentation/routes/list-trigger-event-facets.test.ts +39 -2
  125. package/src/presentation/routes/list-trigger-event-facets.ts +1 -1
  126. package/src/presentation/routes/list-trigger-events.test.ts +99 -0
  127. package/src/presentation/routes/list-trigger-events.ts +4 -0
  128. package/test/factories/received-event.ts +2 -0
  129. package/tsconfig.build.tsbuildinfo +1 -1
package/dist/db/db.d.ts CHANGED
@@ -273,7 +273,7 @@ export declare const schema: {
273
273
  columnType: "PgText";
274
274
  data: string;
275
275
  driverParam: string;
276
- notNull: true;
276
+ notNull: false;
277
277
  hasDefault: false;
278
278
  isPrimaryKey: false;
279
279
  isAutoincrement: false;
@@ -435,7 +435,7 @@ export declare const schema: {
435
435
  columnType: "PgText";
436
436
  data: string;
437
437
  driverParam: string;
438
- notNull: true;
438
+ notNull: false;
439
439
  hasDefault: false;
440
440
  isPrimaryKey: false;
441
441
  isAutoincrement: false;
@@ -736,14 +736,14 @@ export declare const schema: {
736
736
  tableName: "received_events";
737
737
  dataType: "string";
738
738
  columnType: "PgText";
739
- data: "cron" | "integration" | "manual";
739
+ data: "cron" | "dev" | "integration" | "manual";
740
740
  driverParam: string;
741
741
  notNull: true;
742
742
  hasDefault: false;
743
743
  isPrimaryKey: false;
744
744
  isAutoincrement: false;
745
745
  hasRuntimeDefault: false;
746
- enumValues: ["integration", "manual", "cron"];
746
+ enumValues: ["integration", "manual", "cron", "dev"];
747
747
  baseColumn: never;
748
748
  identity: undefined;
749
749
  generated: undefined;
@@ -816,6 +816,23 @@ export declare const schema: {
816
816
  identity: undefined;
817
817
  generated: undefined;
818
818
  }, {}, {}>;
819
+ replayOfEventId: import("drizzle-orm/pg-core").PgColumn<{
820
+ name: "replay_of_event_id";
821
+ tableName: "received_events";
822
+ dataType: "string";
823
+ columnType: "PgUUID";
824
+ data: string;
825
+ driverParam: string;
826
+ notNull: false;
827
+ hasDefault: false;
828
+ isPrimaryKey: false;
829
+ isAutoincrement: false;
830
+ hasRuntimeDefault: false;
831
+ enumValues: undefined;
832
+ baseColumn: never;
833
+ identity: undefined;
834
+ generated: undefined;
835
+ }, {}, {}>;
819
836
  deliveryId: import("drizzle-orm/pg-core").PgColumn<{
820
837
  name: "delivery_id";
821
838
  tableName: "received_events";
@@ -1017,14 +1034,14 @@ export declare const schema: {
1017
1034
  tableName: "decisions";
1018
1035
  dataType: "string";
1019
1036
  columnType: "PgText";
1020
- data: "listener" | "trigger";
1037
+ data: "dev" | "listener" | "trigger";
1021
1038
  driverParam: string;
1022
1039
  notNull: true;
1023
1040
  hasDefault: false;
1024
1041
  isPrimaryKey: false;
1025
1042
  isAutoincrement: false;
1026
1043
  hasRuntimeDefault: false;
1027
- enumValues: ["trigger", "listener"];
1044
+ enumValues: ["trigger", "listener", "dev"];
1028
1045
  baseColumn: never;
1029
1046
  identity: undefined;
1030
1047
  generated: undefined;
@@ -1036,7 +1053,7 @@ export declare const schema: {
1036
1053
  columnType: "PgUUID";
1037
1054
  data: string;
1038
1055
  driverParam: string;
1039
- notNull: true;
1056
+ notNull: false;
1040
1057
  hasDefault: false;
1041
1058
  isPrimaryKey: false;
1042
1059
  isAutoincrement: false;
@@ -1528,7 +1545,7 @@ export declare function db(): NodePgDatabase<{
1528
1545
  columnType: "PgText";
1529
1546
  data: string;
1530
1547
  driverParam: string;
1531
- notNull: true;
1548
+ notNull: false;
1532
1549
  hasDefault: false;
1533
1550
  isPrimaryKey: false;
1534
1551
  isAutoincrement: false;
@@ -1690,7 +1707,7 @@ export declare function db(): NodePgDatabase<{
1690
1707
  columnType: "PgText";
1691
1708
  data: string;
1692
1709
  driverParam: string;
1693
- notNull: true;
1710
+ notNull: false;
1694
1711
  hasDefault: false;
1695
1712
  isPrimaryKey: false;
1696
1713
  isAutoincrement: false;
@@ -1991,14 +2008,14 @@ export declare function db(): NodePgDatabase<{
1991
2008
  tableName: "received_events";
1992
2009
  dataType: "string";
1993
2010
  columnType: "PgText";
1994
- data: "cron" | "integration" | "manual";
2011
+ data: "cron" | "dev" | "integration" | "manual";
1995
2012
  driverParam: string;
1996
2013
  notNull: true;
1997
2014
  hasDefault: false;
1998
2015
  isPrimaryKey: false;
1999
2016
  isAutoincrement: false;
2000
2017
  hasRuntimeDefault: false;
2001
- enumValues: ["integration", "manual", "cron"];
2018
+ enumValues: ["integration", "manual", "cron", "dev"];
2002
2019
  baseColumn: never;
2003
2020
  identity: undefined;
2004
2021
  generated: undefined;
@@ -2071,6 +2088,23 @@ export declare function db(): NodePgDatabase<{
2071
2088
  identity: undefined;
2072
2089
  generated: undefined;
2073
2090
  }, {}, {}>;
2091
+ replayOfEventId: import("drizzle-orm/pg-core").PgColumn<{
2092
+ name: "replay_of_event_id";
2093
+ tableName: "received_events";
2094
+ dataType: "string";
2095
+ columnType: "PgUUID";
2096
+ data: string;
2097
+ driverParam: string;
2098
+ notNull: false;
2099
+ hasDefault: false;
2100
+ isPrimaryKey: false;
2101
+ isAutoincrement: false;
2102
+ hasRuntimeDefault: false;
2103
+ enumValues: undefined;
2104
+ baseColumn: never;
2105
+ identity: undefined;
2106
+ generated: undefined;
2107
+ }, {}, {}>;
2074
2108
  deliveryId: import("drizzle-orm/pg-core").PgColumn<{
2075
2109
  name: "delivery_id";
2076
2110
  tableName: "received_events";
@@ -2272,14 +2306,14 @@ export declare function db(): NodePgDatabase<{
2272
2306
  tableName: "decisions";
2273
2307
  dataType: "string";
2274
2308
  columnType: "PgText";
2275
- data: "listener" | "trigger";
2309
+ data: "dev" | "listener" | "trigger";
2276
2310
  driverParam: string;
2277
2311
  notNull: true;
2278
2312
  hasDefault: false;
2279
2313
  isPrimaryKey: false;
2280
2314
  isAutoincrement: false;
2281
2315
  hasRuntimeDefault: false;
2282
- enumValues: ["trigger", "listener"];
2316
+ enumValues: ["trigger", "listener", "dev"];
2283
2317
  baseColumn: never;
2284
2318
  identity: undefined;
2285
2319
  generated: undefined;
@@ -2291,7 +2325,7 @@ export declare function db(): NodePgDatabase<{
2291
2325
  columnType: "PgUUID";
2292
2326
  data: string;
2293
2327
  driverParam: string;
2294
- notNull: true;
2328
+ notNull: false;
2295
2329
  hasDefault: false;
2296
2330
  isPrimaryKey: false;
2297
2331
  isAutoincrement: false;
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/db/db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/db/db.ts"],"names":[],"mappings":"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"}
@@ -47,4 +47,21 @@ export interface UpsertListenerFailedDecisionParams {
47
47
  }
48
48
  export declare function upsertListenerFilterErrorDecision(params: UpsertListenerFailedDecisionParams): Promise<void>;
49
49
  export declare function upsertListenerDispatchErrorDecision(params: UpsertListenerFailedDecisionParams): Promise<void>;
50
+ export interface UpsertDevTriggeredDecisionParams {
51
+ receivedEventId: string;
52
+ triggerKey: string;
53
+ workflowDefinitionId: string;
54
+ run: {
55
+ id: string;
56
+ name: string;
57
+ };
58
+ }
59
+ export declare function upsertDevTriggeredDecision(params: UpsertDevTriggeredDecisionParams): Promise<void>;
60
+ export interface UpsertDevFilterErrorDecisionParams {
61
+ receivedEventId: string;
62
+ triggerKey: string;
63
+ workflowDefinitionId: string;
64
+ reason: string;
65
+ }
66
+ export declare function upsertDevFilterErrorDecision(params: UpsertDevFilterErrorDecisionParams): Promise<void>;
50
67
  //# sourceMappingURL=event-history.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-history.d.ts","sourceRoot":"","sources":["../../src/db/event-history.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,6CAA6C,CAAC;AACzF,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,gCAAgC,CAAC;AAKxE,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxC,UAAU,EAAE,IAAI,CAAC;CAClB;AAID,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4B5F;AAED,wBAAsB,0BAA0B,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU1E;AAED,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK7F;AAID,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU7F;AAOD,wBAAsB,wBAAwB,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB9F;AAED,MAAM,WAAW,6BAA6B;IAC5C,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,mBAAmB,CAAC;IAClC,GAAG,EAAE;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,CAAC;CACjC;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,6BAA6B,GACpC,OAAO,CAAC,IAAI,CAAC,CAuBf;AAED,MAAM,WAAW,0BAA0B;IACzC,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,mBAAmB,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,yBAAyB,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjG;AAGD,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC,IAAI,CAAC,CAEf;AA6BD,MAAM,WAAW,qCAAqC;IACpD,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,uBAAuB,CAAC;CACvC;AAED,wBAAsB,+BAA+B,CACnD,MAAM,EAAE,qCAAqC,GAC5C,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,MAAM,WAAW,kCAAkC;IACjD,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,uBAAuB,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,iCAAiC,CACrD,MAAM,EAAE,kCAAkC,GACzC,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,mCAAmC,CACvD,MAAM,EAAE,kCAAkC,GACzC,OAAO,CAAC,IAAI,CAAC,CAEf"}
1
+ {"version":3,"file":"event-history.d.ts","sourceRoot":"","sources":["../../src/db/event-history.ts"],"names":[],"mappings":"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"}
@@ -201,7 +201,51 @@ function listenerDecisionIdentity(params) {
201
201
  };
202
202
  }
203
203
  function listenerSubscriptionName(subscription) {
204
- return `listener ${subscription.kind}[${subscription.matcherOrdinal}] ${subscription.source}/${subscription.event}`;
204
+ // A NULL event is a source subscription; `*` keeps the audit name unambiguous.
205
+ return `listener ${subscription.kind}[${subscription.matcherOrdinal}] ${subscription.source}/${subscription.event ?? '*'}`;
206
+ }
207
+ // A dev journal entry has exactly one decision. Its partial unique index uses
208
+ // received_event_id because NULL subscription ids do not conflict in the
209
+ // regular subscription identity index.
210
+ export async function upsertDevTriggeredDecision(params) {
211
+ await upsertDevDecision(params, {
212
+ decision: 'triggered',
213
+ runId: params.run.id,
214
+ runName: params.run.name,
215
+ reason: null
216
+ });
217
+ }
218
+ // Refusals before run creation (filter false or evaluation error on replay).
219
+ export async function upsertDevFilterErrorDecision(params) {
220
+ await upsertDevDecision(params, {
221
+ decision: 'filter-error',
222
+ runId: null,
223
+ runName: null,
224
+ reason: params.reason
225
+ }, {
226
+ preserveTriggered: true
227
+ });
228
+ }
229
+ async function upsertDevDecision(params, values, options = {}) {
230
+ await db().insert(triggersDecisions).values({
231
+ receivedEventId: params.receivedEventId,
232
+ subscriptionKind: 'dev',
233
+ subscriptionId: null,
234
+ subscriptionName: params.triggerKey,
235
+ workflowDefinitionId: params.workflowDefinitionId,
236
+ projectId: null,
237
+ decision: values.decision,
238
+ runId: values.runId,
239
+ runName: values.runName,
240
+ reason: values.reason
241
+ }).onConflictDoUpdate({
242
+ target: triggersDecisions.receivedEventId,
243
+ targetWhere: sql`"subscription_kind" = 'dev'`,
244
+ set: values,
245
+ ...options.preserveTriggered ? {
246
+ setWhere: ne(triggersDecisions.decision, 'triggered')
247
+ } : {}
248
+ });
205
249
  }
206
250
 
207
251
  //# sourceMappingURL=event-history.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/db/event-history.ts"],"sourcesContent":["import {and, eq, ne, notInArray, sql} from 'drizzle-orm';\nimport type {JobListenerSubscription} from '#core/entities/job-listener-subscription.js';\nimport type {TriggerEventOrigin} from '#core/entities/received-event.js';\nimport type {TriggerSubscription} from '#core/entities/subscription.js';\nimport {db} from './db.js';\nimport {triggersDecisions} from './schema/decisions.js';\nimport {triggersReceivedEvents} from './schema/received-events.js';\n\nexport interface InsertReceivedEventParams {\n eventRef: string;\n origin: TriggerEventOrigin;\n workspaceId: string;\n provider: string | null;\n source: string;\n event: string;\n deliveryId: string | null;\n connectionId: string | null;\n connectionName: string | null;\n payload: Record<string, unknown> | null;\n receivedAt: Date;\n}\n\n// `event_ref` is unique and delivery is at-least-once, so the same event can\n// arrive twice; either path returns the row id used to attach decisions.\nexport async function insertReceivedEvent(params: InsertReceivedEventParams): Promise<string> {\n const [inserted] = await db()\n .insert(triggersReceivedEvents)\n .values({\n eventRef: params.eventRef,\n origin: params.origin,\n workspaceId: params.workspaceId,\n provider: params.provider,\n source: params.source,\n event: params.event,\n deliveryId: params.deliveryId,\n connectionId: params.connectionId,\n connectionName: params.connectionName,\n payload: params.payload,\n receivedAt: params.receivedAt,\n })\n .onConflictDoNothing({target: triggersReceivedEvents.eventRef})\n .returning({id: triggersReceivedEvents.id});\n if (inserted) return inserted.id;\n\n const [existing] = await db()\n .select({id: triggersReceivedEvents.id})\n .from(triggersReceivedEvents)\n .where(eq(triggersReceivedEvents.eventRef, params.eventRef));\n if (!existing) {\n throw new Error(`received_events row missing after conflict for event_ref ${params.eventRef}`);\n }\n return existing.id;\n}\n\nexport async function markReceivedEventDiscarded(id: string): Promise<void> {\n await db()\n .update(triggersReceivedEvents)\n .set({outcome: 'discarded', matchedCount: 0, processedAt: new Date()})\n .where(\n and(\n eq(triggersReceivedEvents.id, id),\n notInArray(triggersReceivedEvents.outcome, ['routed', 'errored']),\n ),\n );\n}\n\nexport async function markReceivedEventRouted(id: string, matchedCount: number): Promise<void> {\n await db()\n .update(triggersReceivedEvents)\n .set({outcome: 'routed', matchedCount, processedAt: new Date()})\n .where(eq(triggersReceivedEvents.id, id));\n}\n\n// No processedAt: `failed` is transient. Under at-least-once dispatch, a late\n// failure must not clobber a sibling invocation's terminal outcome.\nexport async function markReceivedEventFailed(id: string, matchedCount: number): Promise<void> {\n await db()\n .update(triggersReceivedEvents)\n .set({outcome: 'failed', matchedCount})\n .where(\n and(\n eq(triggersReceivedEvents.id, id),\n notInArray(triggersReceivedEvents.outcome, ['routed', 'discarded', 'errored']),\n ),\n );\n}\n\n// Terminal outcome for a fan-out that produced no new run this pass. The CASE is a\n// cross-attempt safety net: under at-least-once delivery a prior attempt may already have\n// created a run (its decision row is `triggered`, which is never downgraded), so promote the\n// event to `routed` rather than falsely record `errored`. Guarded so it never downgrades a\n// terminal success.\nexport async function markReceivedEventErrored(id: string, matchedCount: number): Promise<void> {\n await db()\n .update(triggersReceivedEvents)\n .set({\n outcome: sql`CASE WHEN EXISTS (\n SELECT 1\n FROM ${triggersDecisions}\n WHERE ${triggersDecisions.receivedEventId} = ${triggersReceivedEvents.id}\n AND ${triggersDecisions.decision} = 'triggered'\n ) THEN 'routed' ELSE 'errored' END`,\n matchedCount,\n processedAt: new Date(),\n })\n .where(\n and(\n eq(triggersReceivedEvents.id, id),\n notInArray(triggersReceivedEvents.outcome, ['routed', 'discarded']),\n ),\n );\n}\n\nexport interface UpsertTriggeredDecisionParams {\n receivedEventId: string;\n subscription: TriggerSubscription;\n run: {id: string; name: string};\n}\n\nexport async function upsertTriggeredDecision(\n params: UpsertTriggeredDecisionParams,\n): Promise<void> {\n await db()\n .insert(triggersDecisions)\n .values({\n receivedEventId: params.receivedEventId,\n subscriptionKind: 'trigger',\n subscriptionId: params.subscription.id,\n subscriptionName: params.subscription.name,\n workflowDefinitionId: params.subscription.workflowDefinitionId,\n projectId: params.subscription.projectId,\n decision: 'triggered',\n runId: params.run.id,\n runName: params.run.name,\n reason: null,\n })\n .onConflictDoUpdate({\n target: [\n triggersDecisions.receivedEventId,\n triggersDecisions.subscriptionKind,\n triggersDecisions.subscriptionId,\n ],\n set: {decision: 'triggered', runId: params.run.id, runName: params.run.name, reason: null},\n });\n}\n\nexport interface UpsertFailedDecisionParams {\n receivedEventId: string;\n subscription: TriggerSubscription;\n reason: string;\n}\n\nexport async function upsertFilterErrorDecision(params: UpsertFailedDecisionParams): Promise<void> {\n await upsertFailedDecision(params, 'filter-error');\n}\n\n// A created run is ground truth. A later retry failure must not erase it.\nexport async function upsertDispatchErrorDecision(\n params: UpsertFailedDecisionParams,\n): Promise<void> {\n await upsertFailedDecision(params, 'dispatch-error');\n}\n\nasync function upsertFailedDecision(\n params: UpsertFailedDecisionParams,\n decision: 'filter-error' | 'dispatch-error',\n): Promise<void> {\n await db()\n .insert(triggersDecisions)\n .values({\n receivedEventId: params.receivedEventId,\n subscriptionKind: 'trigger',\n subscriptionId: params.subscription.id,\n subscriptionName: params.subscription.name,\n workflowDefinitionId: params.subscription.workflowDefinitionId,\n projectId: params.subscription.projectId,\n decision,\n reason: params.reason,\n })\n .onConflictDoUpdate({\n target: [\n triggersDecisions.receivedEventId,\n triggersDecisions.subscriptionKind,\n triggersDecisions.subscriptionId,\n ],\n set: {decision, reason: params.reason, runId: null, runName: null},\n setWhere: ne(triggersDecisions.decision, 'triggered'),\n });\n}\n\nexport interface UpsertListenerTriggeredDecisionParams {\n receivedEventId: string;\n subscription: JobListenerSubscription;\n}\n\nexport async function upsertListenerTriggeredDecision(\n params: UpsertListenerTriggeredDecisionParams,\n): Promise<void> {\n await db()\n .insert(triggersDecisions)\n .values({\n ...listenerDecisionIdentity(params),\n decision: 'triggered',\n runId: null,\n runName: null,\n reason: null,\n })\n .onConflictDoUpdate({\n target: [\n triggersDecisions.receivedEventId,\n triggersDecisions.subscriptionKind,\n triggersDecisions.subscriptionId,\n ],\n set: {decision: 'triggered', runId: null, runName: null, reason: null},\n });\n}\n\nexport interface UpsertListenerFailedDecisionParams {\n receivedEventId: string;\n subscription: JobListenerSubscription;\n reason: string;\n}\n\nexport async function upsertListenerFilterErrorDecision(\n params: UpsertListenerFailedDecisionParams,\n): Promise<void> {\n await upsertListenerFailedDecision(params, 'filter-error');\n}\n\nexport async function upsertListenerDispatchErrorDecision(\n params: UpsertListenerFailedDecisionParams,\n): Promise<void> {\n await upsertListenerFailedDecision(params, 'dispatch-error');\n}\n\nasync function upsertListenerFailedDecision(\n params: UpsertListenerFailedDecisionParams,\n decision: 'filter-error' | 'dispatch-error',\n): Promise<void> {\n await db()\n .insert(triggersDecisions)\n .values({\n ...listenerDecisionIdentity(params),\n decision,\n reason: params.reason,\n })\n .onConflictDoUpdate({\n target: [\n triggersDecisions.receivedEventId,\n triggersDecisions.subscriptionKind,\n triggersDecisions.subscriptionId,\n ],\n set: {decision, reason: params.reason, runId: null, runName: null},\n setWhere: ne(triggersDecisions.decision, 'triggered'),\n });\n}\n\nfunction listenerDecisionIdentity(params: {\n receivedEventId: string;\n subscription: JobListenerSubscription;\n}) {\n const {subscription} = params;\n return {\n receivedEventId: params.receivedEventId,\n subscriptionKind: 'listener' as const,\n subscriptionId: subscription.id,\n subscriptionName: listenerSubscriptionName(subscription),\n workflowDefinitionId: null,\n projectId: null,\n workflowRunId: subscription.workflowRunId,\n jobId: subscription.jobId,\n matcherKind: subscription.kind,\n matcherOrdinal: subscription.matcherOrdinal,\n };\n}\n\nfunction listenerSubscriptionName(subscription: JobListenerSubscription): string {\n return `listener ${subscription.kind}[${subscription.matcherOrdinal}] ${subscription.source}/${subscription.event}`;\n}\n"],"names":["and","eq","ne","notInArray","sql","db","triggersDecisions","triggersReceivedEvents","insertReceivedEvent","params","inserted","insert","values","eventRef","origin","workspaceId","provider","source","event","deliveryId","connectionId","connectionName","payload","receivedAt","onConflictDoNothing","target","returning","id","existing","select","from","where","Error","markReceivedEventDiscarded","update","set","outcome","matchedCount","processedAt","Date","markReceivedEventRouted","markReceivedEventFailed","markReceivedEventErrored","receivedEventId","decision","upsertTriggeredDecision","subscriptionKind","subscriptionId","subscription","subscriptionName","name","workflowDefinitionId","projectId","runId","run","runName","reason","onConflictDoUpdate","upsertFilterErrorDecision","upsertFailedDecision","upsertDispatchErrorDecision","setWhere","upsertListenerTriggeredDecision","listenerDecisionIdentity","upsertListenerFilterErrorDecision","upsertListenerFailedDecision","upsertListenerDispatchErrorDecision","listenerSubscriptionName","workflowRunId","jobId","matcherKind","kind","matcherOrdinal"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/db/event-history.ts"],"sourcesContent":["import {and, eq, ne, notInArray, sql} from 'drizzle-orm';\nimport type {JobListenerSubscription} from '#core/entities/job-listener-subscription.js';\nimport type {TriggerEventOrigin} from '#core/entities/received-event.js';\nimport type {TriggerSubscription} from '#core/entities/subscription.js';\nimport {db} from './db.js';\nimport {triggersDecisions} from './schema/decisions.js';\nimport {triggersReceivedEvents} from './schema/received-events.js';\n\nexport interface InsertReceivedEventParams {\n eventRef: string;\n origin: TriggerEventOrigin;\n workspaceId: string;\n provider: string | null;\n source: string;\n event: string;\n deliveryId: string | null;\n connectionId: string | null;\n connectionName: string | null;\n payload: Record<string, unknown> | null;\n receivedAt: Date;\n}\n\n// `event_ref` is unique and delivery is at-least-once, so the same event can\n// arrive twice; either path returns the row id used to attach decisions.\nexport async function insertReceivedEvent(params: InsertReceivedEventParams): Promise<string> {\n const [inserted] = await db()\n .insert(triggersReceivedEvents)\n .values({\n eventRef: params.eventRef,\n origin: params.origin,\n workspaceId: params.workspaceId,\n provider: params.provider,\n source: params.source,\n event: params.event,\n deliveryId: params.deliveryId,\n connectionId: params.connectionId,\n connectionName: params.connectionName,\n payload: params.payload,\n receivedAt: params.receivedAt,\n })\n .onConflictDoNothing({target: triggersReceivedEvents.eventRef})\n .returning({id: triggersReceivedEvents.id});\n if (inserted) return inserted.id;\n\n const [existing] = await db()\n .select({id: triggersReceivedEvents.id})\n .from(triggersReceivedEvents)\n .where(eq(triggersReceivedEvents.eventRef, params.eventRef));\n if (!existing) {\n throw new Error(`received_events row missing after conflict for event_ref ${params.eventRef}`);\n }\n return existing.id;\n}\n\nexport async function markReceivedEventDiscarded(id: string): Promise<void> {\n await db()\n .update(triggersReceivedEvents)\n .set({outcome: 'discarded', matchedCount: 0, processedAt: new Date()})\n .where(\n and(\n eq(triggersReceivedEvents.id, id),\n notInArray(triggersReceivedEvents.outcome, ['routed', 'errored']),\n ),\n );\n}\n\nexport async function markReceivedEventRouted(id: string, matchedCount: number): Promise<void> {\n await db()\n .update(triggersReceivedEvents)\n .set({outcome: 'routed', matchedCount, processedAt: new Date()})\n .where(eq(triggersReceivedEvents.id, id));\n}\n\n// No processedAt: `failed` is transient. Under at-least-once dispatch, a late\n// failure must not clobber a sibling invocation's terminal outcome.\nexport async function markReceivedEventFailed(id: string, matchedCount: number): Promise<void> {\n await db()\n .update(triggersReceivedEvents)\n .set({outcome: 'failed', matchedCount})\n .where(\n and(\n eq(triggersReceivedEvents.id, id),\n notInArray(triggersReceivedEvents.outcome, ['routed', 'discarded', 'errored']),\n ),\n );\n}\n\n// Terminal outcome for a fan-out that produced no new run this pass. The CASE is a\n// cross-attempt safety net: under at-least-once delivery a prior attempt may already have\n// created a run (its decision row is `triggered`, which is never downgraded), so promote the\n// event to `routed` rather than falsely record `errored`. Guarded so it never downgrades a\n// terminal success.\nexport async function markReceivedEventErrored(id: string, matchedCount: number): Promise<void> {\n await db()\n .update(triggersReceivedEvents)\n .set({\n outcome: sql`CASE WHEN EXISTS (\n SELECT 1\n FROM ${triggersDecisions}\n WHERE ${triggersDecisions.receivedEventId} = ${triggersReceivedEvents.id}\n AND ${triggersDecisions.decision} = 'triggered'\n ) THEN 'routed' ELSE 'errored' END`,\n matchedCount,\n processedAt: new Date(),\n })\n .where(\n and(\n eq(triggersReceivedEvents.id, id),\n notInArray(triggersReceivedEvents.outcome, ['routed', 'discarded']),\n ),\n );\n}\n\nexport interface UpsertTriggeredDecisionParams {\n receivedEventId: string;\n subscription: TriggerSubscription;\n run: {id: string; name: string};\n}\n\nexport async function upsertTriggeredDecision(\n params: UpsertTriggeredDecisionParams,\n): Promise<void> {\n await db()\n .insert(triggersDecisions)\n .values({\n receivedEventId: params.receivedEventId,\n subscriptionKind: 'trigger',\n subscriptionId: params.subscription.id,\n subscriptionName: params.subscription.name,\n workflowDefinitionId: params.subscription.workflowDefinitionId,\n projectId: params.subscription.projectId,\n decision: 'triggered',\n runId: params.run.id,\n runName: params.run.name,\n reason: null,\n })\n .onConflictDoUpdate({\n target: [\n triggersDecisions.receivedEventId,\n triggersDecisions.subscriptionKind,\n triggersDecisions.subscriptionId,\n ],\n set: {decision: 'triggered', runId: params.run.id, runName: params.run.name, reason: null},\n });\n}\n\nexport interface UpsertFailedDecisionParams {\n receivedEventId: string;\n subscription: TriggerSubscription;\n reason: string;\n}\n\nexport async function upsertFilterErrorDecision(params: UpsertFailedDecisionParams): Promise<void> {\n await upsertFailedDecision(params, 'filter-error');\n}\n\n// A created run is ground truth. A later retry failure must not erase it.\nexport async function upsertDispatchErrorDecision(\n params: UpsertFailedDecisionParams,\n): Promise<void> {\n await upsertFailedDecision(params, 'dispatch-error');\n}\n\nasync function upsertFailedDecision(\n params: UpsertFailedDecisionParams,\n decision: 'filter-error' | 'dispatch-error',\n): Promise<void> {\n await db()\n .insert(triggersDecisions)\n .values({\n receivedEventId: params.receivedEventId,\n subscriptionKind: 'trigger',\n subscriptionId: params.subscription.id,\n subscriptionName: params.subscription.name,\n workflowDefinitionId: params.subscription.workflowDefinitionId,\n projectId: params.subscription.projectId,\n decision,\n reason: params.reason,\n })\n .onConflictDoUpdate({\n target: [\n triggersDecisions.receivedEventId,\n triggersDecisions.subscriptionKind,\n triggersDecisions.subscriptionId,\n ],\n set: {decision, reason: params.reason, runId: null, runName: null},\n setWhere: ne(triggersDecisions.decision, 'triggered'),\n });\n}\n\nexport interface UpsertListenerTriggeredDecisionParams {\n receivedEventId: string;\n subscription: JobListenerSubscription;\n}\n\nexport async function upsertListenerTriggeredDecision(\n params: UpsertListenerTriggeredDecisionParams,\n): Promise<void> {\n await db()\n .insert(triggersDecisions)\n .values({\n ...listenerDecisionIdentity(params),\n decision: 'triggered',\n runId: null,\n runName: null,\n reason: null,\n })\n .onConflictDoUpdate({\n target: [\n triggersDecisions.receivedEventId,\n triggersDecisions.subscriptionKind,\n triggersDecisions.subscriptionId,\n ],\n set: {decision: 'triggered', runId: null, runName: null, reason: null},\n });\n}\n\nexport interface UpsertListenerFailedDecisionParams {\n receivedEventId: string;\n subscription: JobListenerSubscription;\n reason: string;\n}\n\nexport async function upsertListenerFilterErrorDecision(\n params: UpsertListenerFailedDecisionParams,\n): Promise<void> {\n await upsertListenerFailedDecision(params, 'filter-error');\n}\n\nexport async function upsertListenerDispatchErrorDecision(\n params: UpsertListenerFailedDecisionParams,\n): Promise<void> {\n await upsertListenerFailedDecision(params, 'dispatch-error');\n}\n\nasync function upsertListenerFailedDecision(\n params: UpsertListenerFailedDecisionParams,\n decision: 'filter-error' | 'dispatch-error',\n): Promise<void> {\n await db()\n .insert(triggersDecisions)\n .values({\n ...listenerDecisionIdentity(params),\n decision,\n reason: params.reason,\n })\n .onConflictDoUpdate({\n target: [\n triggersDecisions.receivedEventId,\n triggersDecisions.subscriptionKind,\n triggersDecisions.subscriptionId,\n ],\n set: {decision, reason: params.reason, runId: null, runName: null},\n setWhere: ne(triggersDecisions.decision, 'triggered'),\n });\n}\n\nfunction listenerDecisionIdentity(params: {\n receivedEventId: string;\n subscription: JobListenerSubscription;\n}) {\n const {subscription} = params;\n return {\n receivedEventId: params.receivedEventId,\n subscriptionKind: 'listener' as const,\n subscriptionId: subscription.id,\n subscriptionName: listenerSubscriptionName(subscription),\n workflowDefinitionId: null,\n projectId: null,\n workflowRunId: subscription.workflowRunId,\n jobId: subscription.jobId,\n matcherKind: subscription.kind,\n matcherOrdinal: subscription.matcherOrdinal,\n };\n}\n\nfunction listenerSubscriptionName(subscription: JobListenerSubscription): string {\n // A NULL event is a source subscription; `*` keeps the audit name unambiguous.\n return `listener ${subscription.kind}[${subscription.matcherOrdinal}] ${subscription.source}/${subscription.event ?? '*'}`;\n}\n\nexport interface UpsertDevTriggeredDecisionParams {\n receivedEventId: string;\n triggerKey: string;\n workflowDefinitionId: string;\n run: {id: string; name: string};\n}\n\n// A dev journal entry has exactly one decision. Its partial unique index uses\n// received_event_id because NULL subscription ids do not conflict in the\n// regular subscription identity index.\nexport async function upsertDevTriggeredDecision(\n params: UpsertDevTriggeredDecisionParams,\n): Promise<void> {\n await upsertDevDecision(params, {\n decision: 'triggered',\n runId: params.run.id,\n runName: params.run.name,\n reason: null,\n });\n}\n\nexport interface UpsertDevFilterErrorDecisionParams {\n receivedEventId: string;\n triggerKey: string;\n workflowDefinitionId: string;\n reason: string;\n}\n\n// Refusals before run creation (filter false or evaluation error on replay).\nexport async function upsertDevFilterErrorDecision(\n params: UpsertDevFilterErrorDecisionParams,\n): Promise<void> {\n await upsertDevDecision(\n params,\n {\n decision: 'filter-error',\n runId: null,\n runName: null,\n reason: params.reason,\n },\n {preserveTriggered: true},\n );\n}\n\ntype DevDecisionValues = {\n decision: 'triggered' | 'filter-error';\n runId: string | null;\n runName: string | null;\n reason: string | null;\n};\n\nasync function upsertDevDecision(\n params: {\n receivedEventId: string;\n triggerKey: string;\n workflowDefinitionId: string;\n },\n values: DevDecisionValues,\n options: {preserveTriggered?: boolean} = {},\n): Promise<void> {\n await db()\n .insert(triggersDecisions)\n .values({\n receivedEventId: params.receivedEventId,\n subscriptionKind: 'dev',\n subscriptionId: null,\n subscriptionName: params.triggerKey,\n workflowDefinitionId: params.workflowDefinitionId,\n projectId: null,\n decision: values.decision,\n runId: values.runId,\n runName: values.runName,\n reason: values.reason,\n })\n .onConflictDoUpdate({\n target: triggersDecisions.receivedEventId,\n targetWhere: sql`\"subscription_kind\" = 'dev'`,\n set: values,\n ...(options.preserveTriggered ? {setWhere: ne(triggersDecisions.decision, 'triggered')} : {}),\n });\n}\n"],"names":["and","eq","ne","notInArray","sql","db","triggersDecisions","triggersReceivedEvents","insertReceivedEvent","params","inserted","insert","values","eventRef","origin","workspaceId","provider","source","event","deliveryId","connectionId","connectionName","payload","receivedAt","onConflictDoNothing","target","returning","id","existing","select","from","where","Error","markReceivedEventDiscarded","update","set","outcome","matchedCount","processedAt","Date","markReceivedEventRouted","markReceivedEventFailed","markReceivedEventErrored","receivedEventId","decision","upsertTriggeredDecision","subscriptionKind","subscriptionId","subscription","subscriptionName","name","workflowDefinitionId","projectId","runId","run","runName","reason","onConflictDoUpdate","upsertFilterErrorDecision","upsertFailedDecision","upsertDispatchErrorDecision","setWhere","upsertListenerTriggeredDecision","listenerDecisionIdentity","upsertListenerFilterErrorDecision","upsertListenerFailedDecision","upsertListenerDispatchErrorDecision","listenerSubscriptionName","workflowRunId","jobId","matcherKind","kind","matcherOrdinal","upsertDevTriggeredDecision","upsertDevDecision","upsertDevFilterErrorDecision","preserveTriggered","options","triggerKey","targetWhere"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { TriggerDecision } from '#core/entities/decision.js';
2
- import type { TriggerEventOutcome, TriggerReceivedEvent, TriggerReceivedEventSummary } from '#core/entities/received-event.js';
2
+ import type { TriggerEventOrigin, TriggerEventOutcome, TriggerEventReplay, TriggerReceivedEvent, TriggerReceivedEventSummary } from '#core/entities/received-event.js';
3
3
  export interface TriggerEventCursor {
4
4
  receivedAt: Date;
5
5
  id: string;
@@ -7,7 +7,9 @@ export interface TriggerEventCursor {
7
7
  export interface TriggerEventListFilters {
8
8
  source?: string[] | undefined;
9
9
  event?: string[] | undefined;
10
+ origins?: TriggerEventOrigin[] | undefined;
10
11
  outcomes?: TriggerEventOutcome[] | undefined;
12
+ replayable?: boolean | undefined;
11
13
  from?: Date | undefined;
12
14
  to?: Date | undefined;
13
15
  }
@@ -30,9 +32,11 @@ export interface TriggerEventFacet {
30
32
  export interface ListTriggerEventFacetsResult {
31
33
  sources: TriggerEventFacet[];
32
34
  events: TriggerEventFacet[];
35
+ origins: TriggerEventFacet[];
33
36
  }
34
37
  export declare function listTriggerEventFacets(params: {
35
38
  workspaceId: string;
36
39
  }): Promise<ListTriggerEventFacetsResult>;
40
+ export declare function listReplaysOfTriggerEvent(eventId: string, workspaceId: string): Promise<TriggerEventReplay[]>;
37
41
  export declare function listDecisionsByReceivedEventId(receivedEventId: string): Promise<TriggerDecision[]>;
38
42
  //# sourceMappingURL=event-queries.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-queries.d.ts","sourceRoot":"","sources":["../../src/db/event-queries.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,2BAA2B,EAC5B,MAAM,kCAAkC,CAAC;AAU1C,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,IAAI,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7B,QAAQ,CAAC,EAAE,mBAAmB,EAAE,GAAG,SAAS,CAAC;IAC7C,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACxB,EAAE,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACxC,OAAO,CAAC,EAAE,uBAAuB,GAAG,SAAS,CAAC;CAC/C;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,2BAA2B,EAAE,CAAC;IACtC,UAAU,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACvC;AAqBD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,uBAAuB,CAAC,CAgBlC;AAED,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAO/F;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAmBD,wBAAsB,sBAAsB,CAAC,MAAM,EAAE;IACnD,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAMxC;AAID,wBAAsB,8BAA8B,CAClD,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,eAAe,EAAE,CAAC,CAO5B"}
1
+ {"version":3,"file":"event-queries.d.ts","sourceRoot":"","sources":["../../src/db/event-queries.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,2BAA2B,EAC5B,MAAM,kCAAkC,CAAC;AAU1C,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,IAAI,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,kBAAkB,EAAE,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,EAAE,mBAAmB,EAAE,GAAG,SAAS,CAAC;IAC7C,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACxB,EAAE,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACxC,OAAO,CAAC,EAAE,uBAAuB,GAAG,SAAS,CAAC;CAC/C;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,2BAA2B,EAAE,CAAC;IACtC,UAAU,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACvC;AA6BD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,uBAAuB,CAAC,CAgBlC;AAED,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC,CAO/F;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,OAAO,EAAE,iBAAiB,EAAE,CAAC;CAC9B;AAmBD,wBAAsB,sBAAsB,CAAC,MAAM,EAAE;IACnD,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAOxC;AAKD,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA+B/B;AAID,wBAAsB,8BAA8B,CAClD,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,eAAe,EAAE,CAAC,CAO5B"}
@@ -1,5 +1,5 @@
1
1
  import { paginateTimestampIdRows, timestampIdCursorWhere } from '@shipfox/node-drizzle';
2
- import { and, asc, count, desc, eq, gte, inArray, lte } from 'drizzle-orm';
2
+ import { and, asc, count, desc, eq, gte, inArray, isNotNull, lte } from 'drizzle-orm';
3
3
  import { db } from './db.js';
4
4
  import { toTriggerDecision, triggersDecisions } from './schema/decisions.js';
5
5
  import { toTriggerReceivedEvent, toTriggerReceivedEventSummary, triggerReceivedEventSummaryColumns, triggersReceivedEvents } from './schema/received-events.js';
@@ -19,7 +19,14 @@ function listConditions(params) {
19
19
  if (cursorCondition) conditions.push(cursorCondition);
20
20
  if (filters?.source?.length) conditions.push(inArray(triggersReceivedEvents.source, filters.source));
21
21
  if (filters?.event?.length) conditions.push(inArray(triggersReceivedEvents.event, filters.event));
22
+ if (filters?.origins?.length) conditions.push(inArray(triggersReceivedEvents.origin, filters.origins));
22
23
  if (filters?.outcomes?.length) conditions.push(inArray(triggersReceivedEvents.outcome, filters.outcomes));
24
+ // `replayable` is the picker's convenience filter: integration events with a
25
+ // stored payload are the only ones a dev run can replay.
26
+ if (filters?.replayable) {
27
+ conditions.push(eq(triggersReceivedEvents.origin, 'integration'));
28
+ conditions.push(isNotNull(triggersReceivedEvents.payload));
29
+ }
23
30
  if (filters?.from) conditions.push(gte(triggersReceivedEvents.receivedAt, filters.from));
24
31
  if (filters?.to) conditions.push(lte(triggersReceivedEvents.receivedAt, filters.to));
25
32
  return conditions;
@@ -59,15 +66,34 @@ async function listFacet(workspaceId, column) {
59
66
  }));
60
67
  }
61
68
  export async function listTriggerEventFacets(params) {
62
- const [sources, events] = await Promise.all([
69
+ const [sources, events, origins] = await Promise.all([
63
70
  listFacet(params.workspaceId, triggersReceivedEvents.source),
64
- listFacet(params.workspaceId, triggersReceivedEvents.event)
71
+ listFacet(params.workspaceId, triggersReceivedEvents.event),
72
+ listFacet(params.workspaceId, triggersReceivedEvents.origin)
65
73
  ]);
66
74
  return {
67
75
  sources,
68
- events
76
+ events,
77
+ origins
69
78
  };
70
79
  }
80
+ // The workspace predicate mirrors the route's workspace gate: replay links are
81
+ // deliberately FK-less, so the back-direction lookup must not surface a replay
82
+ // row that another workspace's writer pointed at this event id.
83
+ export async function listReplaysOfTriggerEvent(eventId, workspaceId) {
84
+ const rows = await db().select({
85
+ id: triggersReceivedEvents.id,
86
+ receivedAt: triggersReceivedEvents.receivedAt,
87
+ outcome: triggersReceivedEvents.outcome,
88
+ runId: triggersDecisions.runId
89
+ }).from(triggersReceivedEvents).leftJoin(triggersDecisions, and(eq(triggersDecisions.receivedEventId, triggersReceivedEvents.id), eq(triggersDecisions.subscriptionKind, 'dev'))).where(and(eq(triggersReceivedEvents.replayOfEventId, eventId), eq(triggersReceivedEvents.workspaceId, workspaceId), eq(triggersReceivedEvents.origin, 'dev'))).orderBy(desc(triggersReceivedEvents.receivedAt), desc(triggersReceivedEvents.id));
90
+ return rows.map((row)=>({
91
+ id: row.id,
92
+ receivedAt: row.receivedAt,
93
+ outcome: row.outcome,
94
+ runId: row.runId
95
+ }));
96
+ }
71
97
  // `received_event_id` is a globally-unique uuid, so the parent-event lookup is the
72
98
  // workspace gate; the decision query needs no separate workspace predicate.
73
99
  export async function listDecisionsByReceivedEventId(receivedEventId) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/db/event-queries.ts"],"sourcesContent":["import {paginateTimestampIdRows, timestampIdCursorWhere} from '@shipfox/node-drizzle';\nimport {and, asc, count, desc, eq, gte, inArray, lte, type SQL} from 'drizzle-orm';\nimport type {PgColumn} from 'drizzle-orm/pg-core';\nimport type {TriggerDecision} from '#core/entities/decision.js';\nimport type {\n TriggerEventOutcome,\n TriggerReceivedEvent,\n TriggerReceivedEventSummary,\n} from '#core/entities/received-event.js';\nimport {db} from './db.js';\nimport {toTriggerDecision, triggersDecisions} from './schema/decisions.js';\nimport {\n toTriggerReceivedEvent,\n toTriggerReceivedEventSummary,\n triggerReceivedEventSummaryColumns,\n triggersReceivedEvents,\n} from './schema/received-events.js';\n\nexport interface TriggerEventCursor {\n receivedAt: Date;\n id: string;\n}\n\nexport interface TriggerEventListFilters {\n source?: string[] | undefined;\n event?: string[] | undefined;\n outcomes?: TriggerEventOutcome[] | undefined;\n from?: Date | undefined;\n to?: Date | undefined;\n}\n\nexport interface ListTriggerEventsParams {\n workspaceId: string;\n limit: number;\n cursor?: TriggerEventCursor | undefined;\n filters?: TriggerEventListFilters | undefined;\n}\n\nexport interface ListTriggerEventsResult {\n events: TriggerReceivedEventSummary[];\n nextCursor: TriggerEventCursor | null;\n}\n\nfunction listConditions(params: ListTriggerEventsParams): SQL[] {\n const {workspaceId, cursor, filters} = params;\n const conditions: SQL[] = [eq(triggersReceivedEvents.workspaceId, workspaceId)];\n const cursorCondition = timestampIdCursorWhere({\n timestampColumn: triggersReceivedEvents.receivedAt,\n idColumn: triggersReceivedEvents.id,\n cursor: cursor ? {createdAt: cursor.receivedAt, id: cursor.id} : undefined,\n });\n if (cursorCondition) conditions.push(cursorCondition);\n if (filters?.source?.length)\n conditions.push(inArray(triggersReceivedEvents.source, filters.source));\n if (filters?.event?.length) conditions.push(inArray(triggersReceivedEvents.event, filters.event));\n if (filters?.outcomes?.length)\n conditions.push(inArray(triggersReceivedEvents.outcome, filters.outcomes));\n if (filters?.from) conditions.push(gte(triggersReceivedEvents.receivedAt, filters.from));\n if (filters?.to) conditions.push(lte(triggersReceivedEvents.receivedAt, filters.to));\n return conditions;\n}\n\nexport async function listTriggerEvents(\n params: ListTriggerEventsParams,\n): Promise<ListTriggerEventsResult> {\n const rows = await db()\n .select(triggerReceivedEventSummaryColumns)\n .from(triggersReceivedEvents)\n .where(and(...listConditions(params)))\n .orderBy(desc(triggersReceivedEvents.receivedAt), desc(triggersReceivedEvents.id))\n .limit(params.limit + 1);\n\n const page = paginateTimestampIdRows({rows, limit: params.limit, timestampKey: 'receivedAt'});\n\n return {\n events: page.pageRows.map(toTriggerReceivedEventSummary),\n nextCursor: page.nextCursor\n ? {receivedAt: page.nextCursor.createdAt, id: page.nextCursor.id}\n : null,\n };\n}\n\nexport async function getTriggerEventById(id: string): Promise<TriggerReceivedEvent | undefined> {\n const [row] = await db()\n .select()\n .from(triggersReceivedEvents)\n .where(eq(triggersReceivedEvents.id, id))\n .limit(1);\n return row ? toTriggerReceivedEvent(row) : undefined;\n}\n\nexport interface TriggerEventFacet {\n value: string;\n count: number;\n}\n\nexport interface ListTriggerEventFacetsResult {\n sources: TriggerEventFacet[];\n events: TriggerEventFacet[];\n}\n\n// Distinct filter values for a workspace, capped so one noisy integration can't flood\n// the dropdown. Workspace-unfiltered by design: a stable option list, not one that\n// shifts as the other filters change. The (workspace_id, source) / (workspace_id, event)\n// indexes back the group-by. Ties break on the value so the order is deterministic.\nconst FACET_LIMIT = 50;\n\nasync function listFacet(workspaceId: string, column: PgColumn): Promise<TriggerEventFacet[]> {\n const rows = await db()\n .select({value: column, count: count()})\n .from(triggersReceivedEvents)\n .where(eq(triggersReceivedEvents.workspaceId, workspaceId))\n .groupBy(column)\n .orderBy(desc(count()), asc(column))\n .limit(FACET_LIMIT);\n return rows.map((row) => ({value: row.value as string, count: Number(row.count)}));\n}\n\nexport async function listTriggerEventFacets(params: {\n workspaceId: string;\n}): Promise<ListTriggerEventFacetsResult> {\n const [sources, events] = await Promise.all([\n listFacet(params.workspaceId, triggersReceivedEvents.source),\n listFacet(params.workspaceId, triggersReceivedEvents.event),\n ]);\n return {sources, events};\n}\n\n// `received_event_id` is a globally-unique uuid, so the parent-event lookup is the\n// workspace gate; the decision query needs no separate workspace predicate.\nexport async function listDecisionsByReceivedEventId(\n receivedEventId: string,\n): Promise<TriggerDecision[]> {\n const rows = await db()\n .select()\n .from(triggersDecisions)\n .where(eq(triggersDecisions.receivedEventId, receivedEventId))\n .orderBy(asc(triggersDecisions.createdAt), asc(triggersDecisions.id));\n return rows.map(toTriggerDecision);\n}\n"],"names":["paginateTimestampIdRows","timestampIdCursorWhere","and","asc","count","desc","eq","gte","inArray","lte","db","toTriggerDecision","triggersDecisions","toTriggerReceivedEvent","toTriggerReceivedEventSummary","triggerReceivedEventSummaryColumns","triggersReceivedEvents","listConditions","params","workspaceId","cursor","filters","conditions","cursorCondition","timestampColumn","receivedAt","idColumn","id","createdAt","undefined","push","source","length","event","outcomes","outcome","from","to","listTriggerEvents","rows","select","where","orderBy","limit","page","timestampKey","events","pageRows","map","nextCursor","getTriggerEventById","row","FACET_LIMIT","listFacet","column","value","groupBy","Number","listTriggerEventFacets","sources","Promise","all","listDecisionsByReceivedEventId","receivedEventId"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/db/event-queries.ts"],"sourcesContent":["import {paginateTimestampIdRows, timestampIdCursorWhere} from '@shipfox/node-drizzle';\nimport {and, asc, count, desc, eq, gte, inArray, isNotNull, lte, type SQL} from 'drizzle-orm';\nimport type {PgColumn} from 'drizzle-orm/pg-core';\nimport type {TriggerDecision} from '#core/entities/decision.js';\nimport type {\n TriggerEventOrigin,\n TriggerEventOutcome,\n TriggerEventReplay,\n TriggerReceivedEvent,\n TriggerReceivedEventSummary,\n} from '#core/entities/received-event.js';\nimport {db} from './db.js';\nimport {toTriggerDecision, triggersDecisions} from './schema/decisions.js';\nimport {\n toTriggerReceivedEvent,\n toTriggerReceivedEventSummary,\n triggerReceivedEventSummaryColumns,\n triggersReceivedEvents,\n} from './schema/received-events.js';\n\nexport interface TriggerEventCursor {\n receivedAt: Date;\n id: string;\n}\n\nexport interface TriggerEventListFilters {\n source?: string[] | undefined;\n event?: string[] | undefined;\n origins?: TriggerEventOrigin[] | undefined;\n outcomes?: TriggerEventOutcome[] | undefined;\n replayable?: boolean | undefined;\n from?: Date | undefined;\n to?: Date | undefined;\n}\n\nexport interface ListTriggerEventsParams {\n workspaceId: string;\n limit: number;\n cursor?: TriggerEventCursor | undefined;\n filters?: TriggerEventListFilters | undefined;\n}\n\nexport interface ListTriggerEventsResult {\n events: TriggerReceivedEventSummary[];\n nextCursor: TriggerEventCursor | null;\n}\n\nfunction listConditions(params: ListTriggerEventsParams): SQL[] {\n const {workspaceId, cursor, filters} = params;\n const conditions: SQL[] = [eq(triggersReceivedEvents.workspaceId, workspaceId)];\n const cursorCondition = timestampIdCursorWhere({\n timestampColumn: triggersReceivedEvents.receivedAt,\n idColumn: triggersReceivedEvents.id,\n cursor: cursor ? {createdAt: cursor.receivedAt, id: cursor.id} : undefined,\n });\n if (cursorCondition) conditions.push(cursorCondition);\n if (filters?.source?.length)\n conditions.push(inArray(triggersReceivedEvents.source, filters.source));\n if (filters?.event?.length) conditions.push(inArray(triggersReceivedEvents.event, filters.event));\n if (filters?.origins?.length)\n conditions.push(inArray(triggersReceivedEvents.origin, filters.origins));\n if (filters?.outcomes?.length)\n conditions.push(inArray(triggersReceivedEvents.outcome, filters.outcomes));\n // `replayable` is the picker's convenience filter: integration events with a\n // stored payload are the only ones a dev run can replay.\n if (filters?.replayable) {\n conditions.push(eq(triggersReceivedEvents.origin, 'integration'));\n conditions.push(isNotNull(triggersReceivedEvents.payload));\n }\n if (filters?.from) conditions.push(gte(triggersReceivedEvents.receivedAt, filters.from));\n if (filters?.to) conditions.push(lte(triggersReceivedEvents.receivedAt, filters.to));\n return conditions;\n}\n\nexport async function listTriggerEvents(\n params: ListTriggerEventsParams,\n): Promise<ListTriggerEventsResult> {\n const rows = await db()\n .select(triggerReceivedEventSummaryColumns)\n .from(triggersReceivedEvents)\n .where(and(...listConditions(params)))\n .orderBy(desc(triggersReceivedEvents.receivedAt), desc(triggersReceivedEvents.id))\n .limit(params.limit + 1);\n\n const page = paginateTimestampIdRows({rows, limit: params.limit, timestampKey: 'receivedAt'});\n\n return {\n events: page.pageRows.map(toTriggerReceivedEventSummary),\n nextCursor: page.nextCursor\n ? {receivedAt: page.nextCursor.createdAt, id: page.nextCursor.id}\n : null,\n };\n}\n\nexport async function getTriggerEventById(id: string): Promise<TriggerReceivedEvent | undefined> {\n const [row] = await db()\n .select()\n .from(triggersReceivedEvents)\n .where(eq(triggersReceivedEvents.id, id))\n .limit(1);\n return row ? toTriggerReceivedEvent(row) : undefined;\n}\n\nexport interface TriggerEventFacet {\n value: string;\n count: number;\n}\n\nexport interface ListTriggerEventFacetsResult {\n sources: TriggerEventFacet[];\n events: TriggerEventFacet[];\n origins: TriggerEventFacet[];\n}\n\n// Distinct filter values for a workspace, capped so one noisy integration can't flood\n// the dropdown. Workspace-unfiltered by design: a stable option list, not one that\n// shifts as the other filters change. The (workspace_id, source) / (workspace_id, event)\n// indexes back the group-by. Ties break on the value so the order is deterministic.\nconst FACET_LIMIT = 50;\n\nasync function listFacet(workspaceId: string, column: PgColumn): Promise<TriggerEventFacet[]> {\n const rows = await db()\n .select({value: column, count: count()})\n .from(triggersReceivedEvents)\n .where(eq(triggersReceivedEvents.workspaceId, workspaceId))\n .groupBy(column)\n .orderBy(desc(count()), asc(column))\n .limit(FACET_LIMIT);\n return rows.map((row) => ({value: row.value as string, count: Number(row.count)}));\n}\n\nexport async function listTriggerEventFacets(params: {\n workspaceId: string;\n}): Promise<ListTriggerEventFacetsResult> {\n const [sources, events, origins] = await Promise.all([\n listFacet(params.workspaceId, triggersReceivedEvents.source),\n listFacet(params.workspaceId, triggersReceivedEvents.event),\n listFacet(params.workspaceId, triggersReceivedEvents.origin),\n ]);\n return {sources, events, origins};\n}\n\n// The workspace predicate mirrors the route's workspace gate: replay links are\n// deliberately FK-less, so the back-direction lookup must not surface a replay\n// row that another workspace's writer pointed at this event id.\nexport async function listReplaysOfTriggerEvent(\n eventId: string,\n workspaceId: string,\n): Promise<TriggerEventReplay[]> {\n const rows = await db()\n .select({\n id: triggersReceivedEvents.id,\n receivedAt: triggersReceivedEvents.receivedAt,\n outcome: triggersReceivedEvents.outcome,\n runId: triggersDecisions.runId,\n })\n .from(triggersReceivedEvents)\n .leftJoin(\n triggersDecisions,\n and(\n eq(triggersDecisions.receivedEventId, triggersReceivedEvents.id),\n eq(triggersDecisions.subscriptionKind, 'dev'),\n ),\n )\n .where(\n and(\n eq(triggersReceivedEvents.replayOfEventId, eventId),\n eq(triggersReceivedEvents.workspaceId, workspaceId),\n eq(triggersReceivedEvents.origin, 'dev'),\n ),\n )\n .orderBy(desc(triggersReceivedEvents.receivedAt), desc(triggersReceivedEvents.id));\n\n return rows.map((row) => ({\n id: row.id,\n receivedAt: row.receivedAt,\n outcome: row.outcome,\n runId: row.runId,\n }));\n}\n\n// `received_event_id` is a globally-unique uuid, so the parent-event lookup is the\n// workspace gate; the decision query needs no separate workspace predicate.\nexport async function listDecisionsByReceivedEventId(\n receivedEventId: string,\n): Promise<TriggerDecision[]> {\n const rows = await db()\n .select()\n .from(triggersDecisions)\n .where(eq(triggersDecisions.receivedEventId, receivedEventId))\n .orderBy(asc(triggersDecisions.createdAt), asc(triggersDecisions.id));\n return rows.map(toTriggerDecision);\n}\n"],"names":["paginateTimestampIdRows","timestampIdCursorWhere","and","asc","count","desc","eq","gte","inArray","isNotNull","lte","db","toTriggerDecision","triggersDecisions","toTriggerReceivedEvent","toTriggerReceivedEventSummary","triggerReceivedEventSummaryColumns","triggersReceivedEvents","listConditions","params","workspaceId","cursor","filters","conditions","cursorCondition","timestampColumn","receivedAt","idColumn","id","createdAt","undefined","push","source","length","event","origins","origin","outcomes","outcome","replayable","payload","from","to","listTriggerEvents","rows","select","where","orderBy","limit","page","timestampKey","events","pageRows","map","nextCursor","getTriggerEventById","row","FACET_LIMIT","listFacet","column","value","groupBy","Number","listTriggerEventFacets","sources","Promise","all","listReplaysOfTriggerEvent","eventId","runId","leftJoin","receivedEventId","subscriptionKind","replayOfEventId","listDecisionsByReceivedEventId"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  export { advanceCronSchedule, claimDueCronSchedules, countDueCronSchedules, deleteCronScheduleForSubscription, getCronScheduleBySubscriptionId, syncCronSchedule, } from './cron-schedules.js';
2
2
  export { closeDb, db, type Executor, schema, type Tx } from './db.js';
3
- export { getTriggerEventById, type ListTriggerEventFacetsResult, type ListTriggerEventsParams, type ListTriggerEventsResult, listDecisionsByReceivedEventId, listTriggerEventFacets, listTriggerEvents, type TriggerEventCursor, type TriggerEventFacet, type TriggerEventListFilters, } from './event-queries.js';
3
+ export { getTriggerEventById, type ListTriggerEventFacetsResult, type ListTriggerEventsParams, type ListTriggerEventsResult, listDecisionsByReceivedEventId, listReplaysOfTriggerEvent, listTriggerEventFacets, listTriggerEvents, type TriggerEventCursor, type TriggerEventFacet, type TriggerEventListFilters, } from './event-queries.js';
4
4
  export { type FindMatchingJobListenerSubscriptionsParams, findMatchingJobListenerSubscriptions, type ListenerMatcher, type ProjectJobListenerSubscriptionsParams, projectJobListenerSubscriptions, removeJobListenerSubscriptionsForJob, } from './job-listener-subscriptions.js';
5
5
  export { type CronScheduleDb, type CronScheduleInsertDb, toCronSchedule, triggersCronSchedules, } from './schema/cron-schedules.js';
6
6
  export { jobListenerSubscriptions } from './schema/job-listener-subscriptions.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,iCAAiC,EACjC,+BAA+B,EAC/B,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAC,OAAO,EAAE,EAAE,EAAE,KAAK,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,EAAC,MAAM,SAAS,CAAC;AACpE,OAAO,EACL,mBAAmB,EACnB,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,8BAA8B,EAC9B,sBAAsB,EACtB,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,GAC7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,0CAA0C,EAC/C,oCAAoC,EACpC,KAAK,eAAe,EACpB,KAAK,qCAAqC,EAC1C,+BAA+B,EAC/B,oCAAoC,GACrC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,cAAc,EACd,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAC,wBAAwB,EAAC,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAC,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EACL,gCAAgC,EAChC,yBAAyB,EACzB,mCAAmC,EACnC,0BAA0B,EAC1B,wCAAwC,EACxC,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,cAAc,QAAoE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,iCAAiC,EACjC,+BAA+B,EAC/B,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAC,OAAO,EAAE,EAAE,EAAE,KAAK,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,EAAC,MAAM,SAAS,CAAC;AACpE,OAAO,EACL,mBAAmB,EACnB,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,8BAA8B,EAC9B,yBAAyB,EACzB,sBAAsB,EACtB,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,GAC7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,0CAA0C,EAC/C,oCAAoC,EACpC,KAAK,eAAe,EACpB,KAAK,qCAAqC,EAC1C,+BAA+B,EAC/B,oCAAoC,GACrC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,cAAc,EACd,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAC,wBAAwB,EAAC,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAC,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAC,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EACL,gCAAgC,EAChC,yBAAyB,EACzB,mCAAmC,EACnC,0BAA0B,EAC1B,wCAAwC,EACxC,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,cAAc,QAAoE,CAAC"}
package/dist/db/index.js CHANGED
@@ -2,7 +2,7 @@ import { dirname, resolve } from 'node:path';
2
2
  import { fileURLToPath } from 'node:url';
3
3
  export { advanceCronSchedule, claimDueCronSchedules, countDueCronSchedules, deleteCronScheduleForSubscription, getCronScheduleBySubscriptionId, syncCronSchedule } from './cron-schedules.js';
4
4
  export { closeDb, db, schema } from './db.js';
5
- export { getTriggerEventById, listDecisionsByReceivedEventId, listTriggerEventFacets, listTriggerEvents } from './event-queries.js';
5
+ export { getTriggerEventById, listDecisionsByReceivedEventId, listReplaysOfTriggerEvent, listTriggerEventFacets, listTriggerEvents } from './event-queries.js';
6
6
  export { findMatchingJobListenerSubscriptions, projectJobListenerSubscriptions, removeJobListenerSubscriptionsForJob } from './job-listener-subscriptions.js';
7
7
  export { toCronSchedule, triggersCronSchedules } from './schema/cron-schedules.js';
8
8
  export { jobListenerSubscriptions } from './schema/job-listener-subscriptions.js';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/db/index.ts"],"sourcesContent":["import {dirname, resolve} from 'node:path';\nimport {fileURLToPath} from 'node:url';\n\nexport {\n advanceCronSchedule,\n claimDueCronSchedules,\n countDueCronSchedules,\n deleteCronScheduleForSubscription,\n getCronScheduleBySubscriptionId,\n syncCronSchedule,\n} from './cron-schedules.js';\nexport {closeDb, db, type Executor, schema, type Tx} from './db.js';\nexport {\n getTriggerEventById,\n type ListTriggerEventFacetsResult,\n type ListTriggerEventsParams,\n type ListTriggerEventsResult,\n listDecisionsByReceivedEventId,\n listTriggerEventFacets,\n listTriggerEvents,\n type TriggerEventCursor,\n type TriggerEventFacet,\n type TriggerEventListFilters,\n} from './event-queries.js';\nexport {\n type FindMatchingJobListenerSubscriptionsParams,\n findMatchingJobListenerSubscriptions,\n type ListenerMatcher,\n type ProjectJobListenerSubscriptionsParams,\n projectJobListenerSubscriptions,\n removeJobListenerSubscriptionsForJob,\n} from './job-listener-subscriptions.js';\nexport {\n type CronScheduleDb,\n type CronScheduleInsertDb,\n toCronSchedule,\n triggersCronSchedules,\n} from './schema/cron-schedules.js';\nexport {jobListenerSubscriptions} from './schema/job-listener-subscriptions.js';\nexport {triggersOutbox} from './schema/outbox.js';\nexport {triggerSubscriptions} from './schema/subscriptions.js';\nexport {\n deleteSubscriptionsForDefinition,\n findMatchingSubscriptions,\n getManualSubscriptionByDefinitionId,\n getTriggerSubscriptionById,\n listSubscriptionsByWorkflowDefinitionIds,\n projectDefinitionTriggers,\n} from './subscriptions.js';\n\nexport const migrationsPath = resolve(dirname(fileURLToPath(import.meta.url)), '../../drizzle');\n"],"names":["dirname","resolve","fileURLToPath","advanceCronSchedule","claimDueCronSchedules","countDueCronSchedules","deleteCronScheduleForSubscription","getCronScheduleBySubscriptionId","syncCronSchedule","closeDb","db","schema","getTriggerEventById","listDecisionsByReceivedEventId","listTriggerEventFacets","listTriggerEvents","findMatchingJobListenerSubscriptions","projectJobListenerSubscriptions","removeJobListenerSubscriptionsForJob","toCronSchedule","triggersCronSchedules","jobListenerSubscriptions","triggersOutbox","triggerSubscriptions","deleteSubscriptionsForDefinition","findMatchingSubscriptions","getManualSubscriptionByDefinitionId","getTriggerSubscriptionById","listSubscriptionsByWorkflowDefinitionIds","projectDefinitionTriggers","migrationsPath","url"],"mappings":"AAAA,SAAQA,OAAO,EAAEC,OAAO,QAAO,YAAY;AAC3C,SAAQC,aAAa,QAAO,WAAW;AAEvC,SACEC,mBAAmB,EACnBC,qBAAqB,EACrBC,qBAAqB,EACrBC,iCAAiC,EACjCC,+BAA+B,EAC/BC,gBAAgB,QACX,sBAAsB;AAC7B,SAAQC,OAAO,EAAEC,EAAE,EAAiBC,MAAM,QAAgB,UAAU;AACpE,SACEC,mBAAmB,EAInBC,8BAA8B,EAC9BC,sBAAsB,EACtBC,iBAAiB,QAIZ,qBAAqB;AAC5B,SAEEC,oCAAoC,EAGpCC,+BAA+B,EAC/BC,oCAAoC,QAC/B,kCAAkC;AACzC,SAGEC,cAAc,EACdC,qBAAqB,QAChB,6BAA6B;AACpC,SAAQC,wBAAwB,QAAO,yCAAyC;AAChF,SAAQC,cAAc,QAAO,qBAAqB;AAClD,SAAQC,oBAAoB,QAAO,4BAA4B;AAC/D,SACEC,gCAAgC,EAChCC,yBAAyB,EACzBC,mCAAmC,EACnCC,0BAA0B,EAC1BC,wCAAwC,EACxCC,yBAAyB,QACpB,qBAAqB;AAE5B,OAAO,MAAMC,iBAAiB7B,QAAQD,QAAQE,cAAc,YAAY6B,GAAG,IAAI,iBAAiB"}
1
+ {"version":3,"sources":["../../src/db/index.ts"],"sourcesContent":["import {dirname, resolve} from 'node:path';\nimport {fileURLToPath} from 'node:url';\n\nexport {\n advanceCronSchedule,\n claimDueCronSchedules,\n countDueCronSchedules,\n deleteCronScheduleForSubscription,\n getCronScheduleBySubscriptionId,\n syncCronSchedule,\n} from './cron-schedules.js';\nexport {closeDb, db, type Executor, schema, type Tx} from './db.js';\nexport {\n getTriggerEventById,\n type ListTriggerEventFacetsResult,\n type ListTriggerEventsParams,\n type ListTriggerEventsResult,\n listDecisionsByReceivedEventId,\n listReplaysOfTriggerEvent,\n listTriggerEventFacets,\n listTriggerEvents,\n type TriggerEventCursor,\n type TriggerEventFacet,\n type TriggerEventListFilters,\n} from './event-queries.js';\nexport {\n type FindMatchingJobListenerSubscriptionsParams,\n findMatchingJobListenerSubscriptions,\n type ListenerMatcher,\n type ProjectJobListenerSubscriptionsParams,\n projectJobListenerSubscriptions,\n removeJobListenerSubscriptionsForJob,\n} from './job-listener-subscriptions.js';\nexport {\n type CronScheduleDb,\n type CronScheduleInsertDb,\n toCronSchedule,\n triggersCronSchedules,\n} from './schema/cron-schedules.js';\nexport {jobListenerSubscriptions} from './schema/job-listener-subscriptions.js';\nexport {triggersOutbox} from './schema/outbox.js';\nexport {triggerSubscriptions} from './schema/subscriptions.js';\nexport {\n deleteSubscriptionsForDefinition,\n findMatchingSubscriptions,\n getManualSubscriptionByDefinitionId,\n getTriggerSubscriptionById,\n listSubscriptionsByWorkflowDefinitionIds,\n projectDefinitionTriggers,\n} from './subscriptions.js';\n\nexport const migrationsPath = resolve(dirname(fileURLToPath(import.meta.url)), '../../drizzle');\n"],"names":["dirname","resolve","fileURLToPath","advanceCronSchedule","claimDueCronSchedules","countDueCronSchedules","deleteCronScheduleForSubscription","getCronScheduleBySubscriptionId","syncCronSchedule","closeDb","db","schema","getTriggerEventById","listDecisionsByReceivedEventId","listReplaysOfTriggerEvent","listTriggerEventFacets","listTriggerEvents","findMatchingJobListenerSubscriptions","projectJobListenerSubscriptions","removeJobListenerSubscriptionsForJob","toCronSchedule","triggersCronSchedules","jobListenerSubscriptions","triggersOutbox","triggerSubscriptions","deleteSubscriptionsForDefinition","findMatchingSubscriptions","getManualSubscriptionByDefinitionId","getTriggerSubscriptionById","listSubscriptionsByWorkflowDefinitionIds","projectDefinitionTriggers","migrationsPath","url"],"mappings":"AAAA,SAAQA,OAAO,EAAEC,OAAO,QAAO,YAAY;AAC3C,SAAQC,aAAa,QAAO,WAAW;AAEvC,SACEC,mBAAmB,EACnBC,qBAAqB,EACrBC,qBAAqB,EACrBC,iCAAiC,EACjCC,+BAA+B,EAC/BC,gBAAgB,QACX,sBAAsB;AAC7B,SAAQC,OAAO,EAAEC,EAAE,EAAiBC,MAAM,QAAgB,UAAU;AACpE,SACEC,mBAAmB,EAInBC,8BAA8B,EAC9BC,yBAAyB,EACzBC,sBAAsB,EACtBC,iBAAiB,QAIZ,qBAAqB;AAC5B,SAEEC,oCAAoC,EAGpCC,+BAA+B,EAC/BC,oCAAoC,QAC/B,kCAAkC;AACzC,SAGEC,cAAc,EACdC,qBAAqB,QAChB,6BAA6B;AACpC,SAAQC,wBAAwB,QAAO,yCAAyC;AAChF,SAAQC,cAAc,QAAO,qBAAqB;AAClD,SAAQC,oBAAoB,QAAO,4BAA4B;AAC/D,SACEC,gCAAgC,EAChCC,yBAAyB,EACzBC,mCAAmC,EACnCC,0BAA0B,EAC1BC,wCAAwC,EACxCC,yBAAyB,QACpB,qBAAqB;AAE5B,OAAO,MAAMC,iBAAiB9B,QAAQD,QAAQE,cAAc,YAAY8B,GAAG,IAAI,iBAAiB"}
@@ -1,7 +1,7 @@
1
1
  import type { JobListenerSubscription } from '#core/entities/job-listener-subscription.js';
2
2
  export interface ListenerMatcher {
3
3
  source: string;
4
- event: string;
4
+ event?: string | undefined;
5
5
  inputs?: Readonly<Record<string, unknown>> | undefined;
6
6
  filter?: string | undefined;
7
7
  filter_snapshot?: Readonly<Record<string, unknown>> | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"job-listener-subscriptions.d.ts","sourceRoot":"","sources":["../../src/db/job-listener-subscriptions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,uBAAuB,EACxB,MAAM,6CAA6C,CAAC;AASrD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IACvD,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAChE,mBAAmB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;CACrE;AAED,MAAM,WAAW,qCAAqC;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,SAAS,eAAe,EAAE,GAAG,IAAI,CAAC;IACtC,KAAK,EAAE,SAAS,eAAe,EAAE,GAAG,IAAI,CAAC;CAC1C;AAED,wBAAsB,+BAA+B,CACnD,MAAM,EAAE,qCAAqC,GAC5C,OAAO,CAAC,IAAI,CAAC,CA+Cf;AA6BD,wBAAsB,oCAAoC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMzF;AAED,MAAM,WAAW,0CAA0C;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,oCAAoC,CACxD,MAAM,EAAE,0CAA0C,GACjD,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAYpC;AAED,wBAAsB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOjF"}
1
+ {"version":3,"file":"job-listener-subscriptions.d.ts","sourceRoot":"","sources":["../../src/db/job-listener-subscriptions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,uBAAuB,EACxB,MAAM,6CAA6C,CAAC;AAUrD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IACvD,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAChE,mBAAmB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;CACrE;AAED,MAAM,WAAW,qCAAqC;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,SAAS,eAAe,EAAE,GAAG,IAAI,CAAC;IACtC,KAAK,EAAE,SAAS,eAAe,EAAE,GAAG,IAAI,CAAC;CAC1C;AAED,wBAAsB,+BAA+B,CACnD,MAAM,EAAE,qCAAqC,GAC5C,OAAO,CAAC,IAAI,CAAC,CA+Cf;AA6BD,wBAAsB,oCAAoC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMzF;AAED,MAAM,WAAW,0CAA0C;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,oCAAoC,CACxD,MAAM,EAAE,0CAA0C,GACjD,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAYpC;AAED,wBAAsB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOjF"}