@automate.ax/api-contract 0.68.2 → 0.70.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.
package/dist/index.d.ts CHANGED
@@ -1167,6 +1167,7 @@ export declare const contract: {
1167
1167
  both: "both";
1168
1168
  }>;
1169
1169
  ttl: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber]>>;
1170
+ until: import("zod").ZodOptional<import("zod").ZodDate>;
1170
1171
  }, import("zod/v4/core").$strip>, import("zod").ZodUnion<readonly [import("zod").ZodObject<{
1171
1172
  actionDependencyIds: import("zod").ZodArray<import("zod").ZodString>;
1172
1173
  eventDependencyIds: import("zod").ZodArray<import("zod").ZodString>;
@@ -1541,6 +1542,7 @@ export declare const contract: {
1541
1542
  contextId: import("zod").ZodString;
1542
1543
  scopePath: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodNumber>>;
1543
1544
  slot: import("zod").ZodNumber;
1545
+ timestamp: import("zod").ZodDate;
1544
1546
  outcomeSeq: import("zod").ZodNumber;
1545
1547
  status: import("zod").ZodLiteral<"failed">;
1546
1548
  failure: import("zod").ZodObject<{
@@ -1553,6 +1555,7 @@ export declare const contract: {
1553
1555
  outcomeSeq: import("zod").ZodNumber;
1554
1556
  scopePath: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodNumber>>;
1555
1557
  slot: import("zod").ZodNumber;
1558
+ timestamp: import("zod").ZodDate;
1556
1559
  reason: import("zod").ZodLiteral<"closed-dependency">;
1557
1560
  status: import("zod").ZodLiteral<"skipped">;
1558
1561
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
@@ -1561,6 +1564,7 @@ export declare const contract: {
1561
1564
  outcomeSeq: import("zod").ZodNumber;
1562
1565
  scopePath: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodNumber>>;
1563
1566
  slot: import("zod").ZodNumber;
1567
+ timestamp: import("zod").ZodDate;
1564
1568
  failure: import("zod").ZodObject<{
1565
1569
  message: import("zod").ZodString;
1566
1570
  name: import("zod").ZodString;
@@ -1573,6 +1577,7 @@ export declare const contract: {
1573
1577
  outcomeSeq: import("zod").ZodNumber;
1574
1578
  scopePath: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodNumber>>;
1575
1579
  slot: import("zod").ZodNumber;
1580
+ timestamp: import("zod").ZodDate;
1576
1581
  output: import("zod").ZodOptional<import("zod").ZodCustom<import("@automate.ax/codec").Encodable, import("@automate.ax/codec").Encodable>>;
1577
1582
  status: import("zod").ZodLiteral<"succeeded">;
1578
1583
  }, import("zod/v4/core").$strip>]>>;
@@ -1599,6 +1604,7 @@ export declare const contract: {
1599
1604
  payload: import("zod").ZodOptional<import("zod").ZodCustom<import("@automate.ax/codec").Encodable, import("@automate.ax/codec").Encodable>>;
1600
1605
  scopePath: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodNumber>>;
1601
1606
  slot: import("zod").ZodNumber;
1607
+ timestamp: import("zod").ZodDate;
1602
1608
  }, import("zod/v4/core").$strip>>;
1603
1609
  signalOutputs: import("zod").ZodArray<import("zod").ZodUnion<readonly [import("zod").ZodObject<{
1604
1610
  contextId: import("zod").ZodString;
@@ -1606,6 +1612,7 @@ export declare const contract: {
1606
1612
  scopePath: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodNumber>>;
1607
1613
  signalInvocationId: import("zod").ZodString;
1608
1614
  slot: import("zod").ZodNumber;
1615
+ timestamp: import("zod").ZodDate;
1609
1616
  status: import("zod").ZodLiteral<"open">;
1610
1617
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
1611
1618
  contextId: import("zod").ZodString;
@@ -1613,6 +1620,7 @@ export declare const contract: {
1613
1620
  scopePath: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodNumber>>;
1614
1621
  signalInvocationId: import("zod").ZodString;
1615
1622
  slot: import("zod").ZodNumber;
1623
+ timestamp: import("zod").ZodDate;
1616
1624
  status: import("zod").ZodLiteral<"closed">;
1617
1625
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
1618
1626
  contextId: import("zod").ZodString;
@@ -1620,6 +1628,7 @@ export declare const contract: {
1620
1628
  scopePath: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodNumber>>;
1621
1629
  signalInvocationId: import("zod").ZodString;
1622
1630
  slot: import("zod").ZodNumber;
1631
+ timestamp: import("zod").ZodDate;
1623
1632
  failure: import("zod").ZodObject<{
1624
1633
  message: import("zod").ZodString;
1625
1634
  name: import("zod").ZodString;
@@ -1631,6 +1640,7 @@ export declare const contract: {
1631
1640
  scopePath: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodNumber>>;
1632
1641
  signalInvocationId: import("zod").ZodString;
1633
1642
  slot: import("zod").ZodNumber;
1643
+ timestamp: import("zod").ZodDate;
1634
1644
  output: import("zod").ZodOptional<import("zod").ZodOptional<import("zod").ZodCustom<import("@automate.ax/codec").Encodable, import("@automate.ax/codec").Encodable>>>;
1635
1645
  selectedIndex: import("zod").ZodOptional<import("zod").ZodNumber>;
1636
1646
  status: import("zod").ZodLiteral<"succeeded">;
@@ -1661,6 +1671,7 @@ export declare const contract: {
1661
1671
  contextId: import("zod").ZodString;
1662
1672
  scopePath: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodNumber>>;
1663
1673
  slot: import("zod").ZodNumber;
1674
+ timestamp: import("zod").ZodDate;
1664
1675
  outcomeSeq: import("zod").ZodNumber;
1665
1676
  status: import("zod").ZodLiteral<"failed">;
1666
1677
  failure: import("zod").ZodObject<{
@@ -1673,6 +1684,7 @@ export declare const contract: {
1673
1684
  outcomeSeq: import("zod").ZodNumber;
1674
1685
  scopePath: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodNumber>>;
1675
1686
  slot: import("zod").ZodNumber;
1687
+ timestamp: import("zod").ZodDate;
1676
1688
  reason: import("zod").ZodLiteral<"closed-dependency">;
1677
1689
  status: import("zod").ZodLiteral<"skipped">;
1678
1690
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
@@ -1681,6 +1693,7 @@ export declare const contract: {
1681
1693
  outcomeSeq: import("zod").ZodNumber;
1682
1694
  scopePath: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodNumber>>;
1683
1695
  slot: import("zod").ZodNumber;
1696
+ timestamp: import("zod").ZodDate;
1684
1697
  failure: import("zod").ZodObject<{
1685
1698
  message: import("zod").ZodString;
1686
1699
  name: import("zod").ZodString;
@@ -1693,6 +1706,7 @@ export declare const contract: {
1693
1706
  outcomeSeq: import("zod").ZodNumber;
1694
1707
  scopePath: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodNumber>>;
1695
1708
  slot: import("zod").ZodNumber;
1709
+ timestamp: import("zod").ZodDate;
1696
1710
  output: import("zod").ZodOptional<import("zod").ZodCustom<import("@automate.ax/codec").Encodable, import("@automate.ax/codec").Encodable>>;
1697
1711
  status: import("zod").ZodLiteral<"succeeded">;
1698
1712
  }, import("zod/v4/core").$strip>]>>;
@@ -1719,6 +1733,7 @@ export declare const contract: {
1719
1733
  payload: import("zod").ZodOptional<import("zod").ZodCustom<import("@automate.ax/codec").Encodable, import("@automate.ax/codec").Encodable>>;
1720
1734
  scopePath: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodNumber>>;
1721
1735
  slot: import("zod").ZodNumber;
1736
+ timestamp: import("zod").ZodDate;
1722
1737
  }, import("zod/v4/core").$strip>>;
1723
1738
  signalOutputs: import("zod").ZodArray<import("zod").ZodUnion<readonly [import("zod").ZodObject<{
1724
1739
  contextId: import("zod").ZodString;
@@ -1726,6 +1741,7 @@ export declare const contract: {
1726
1741
  scopePath: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodNumber>>;
1727
1742
  signalInvocationId: import("zod").ZodString;
1728
1743
  slot: import("zod").ZodNumber;
1744
+ timestamp: import("zod").ZodDate;
1729
1745
  status: import("zod").ZodLiteral<"open">;
1730
1746
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
1731
1747
  contextId: import("zod").ZodString;
@@ -1733,6 +1749,7 @@ export declare const contract: {
1733
1749
  scopePath: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodNumber>>;
1734
1750
  signalInvocationId: import("zod").ZodString;
1735
1751
  slot: import("zod").ZodNumber;
1752
+ timestamp: import("zod").ZodDate;
1736
1753
  status: import("zod").ZodLiteral<"closed">;
1737
1754
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
1738
1755
  contextId: import("zod").ZodString;
@@ -1740,6 +1757,7 @@ export declare const contract: {
1740
1757
  scopePath: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodNumber>>;
1741
1758
  signalInvocationId: import("zod").ZodString;
1742
1759
  slot: import("zod").ZodNumber;
1760
+ timestamp: import("zod").ZodDate;
1743
1761
  failure: import("zod").ZodObject<{
1744
1762
  message: import("zod").ZodString;
1745
1763
  name: import("zod").ZodString;
@@ -1751,6 +1769,7 @@ export declare const contract: {
1751
1769
  scopePath: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodNumber>>;
1752
1770
  signalInvocationId: import("zod").ZodString;
1753
1771
  slot: import("zod").ZodNumber;
1772
+ timestamp: import("zod").ZodDate;
1754
1773
  output: import("zod").ZodOptional<import("zod").ZodOptional<import("zod").ZodCustom<import("@automate.ax/codec").Encodable, import("@automate.ax/codec").Encodable>>>;
1755
1774
  selectedIndex: import("zod").ZodOptional<import("zod").ZodNumber>;
1756
1775
  status: import("zod").ZodLiteral<"succeeded">;
package/dist/runtime.d.ts CHANGED
@@ -103,6 +103,7 @@ declare const COORDINATION_OFFER_SCHEMA: z.ZodUnion<readonly [z.ZodObject<{
103
103
  both: "both";
104
104
  }>;
105
105
  ttl: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
106
+ until: z.ZodOptional<z.ZodDate>;
106
107
  }, z.core.$strip>, z.ZodUnion<readonly [z.ZodObject<{
107
108
  actionDependencyIds: z.ZodArray<z.ZodString>;
108
109
  eventDependencyIds: z.ZodArray<z.ZodString>;
@@ -406,6 +407,7 @@ export declare const runtimeContract: {
406
407
  both: "both";
407
408
  }>;
408
409
  ttl: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
410
+ until: z.ZodOptional<z.ZodDate>;
409
411
  }, z.core.$strip>, z.ZodUnion<readonly [z.ZodObject<{
410
412
  actionDependencyIds: z.ZodArray<z.ZodString>;
411
413
  eventDependencyIds: z.ZodArray<z.ZodString>;
@@ -780,6 +782,7 @@ export declare const runtimeContract: {
780
782
  contextId: z.ZodString;
781
783
  scopePath: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
782
784
  slot: z.ZodNumber;
785
+ timestamp: z.ZodDate;
783
786
  outcomeSeq: z.ZodNumber;
784
787
  status: z.ZodLiteral<"failed">;
785
788
  failure: z.ZodObject<{
@@ -792,6 +795,7 @@ export declare const runtimeContract: {
792
795
  outcomeSeq: z.ZodNumber;
793
796
  scopePath: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
794
797
  slot: z.ZodNumber;
798
+ timestamp: z.ZodDate;
795
799
  reason: z.ZodLiteral<"closed-dependency">;
796
800
  status: z.ZodLiteral<"skipped">;
797
801
  }, z.core.$strip>, z.ZodObject<{
@@ -800,6 +804,7 @@ export declare const runtimeContract: {
800
804
  outcomeSeq: z.ZodNumber;
801
805
  scopePath: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
802
806
  slot: z.ZodNumber;
807
+ timestamp: z.ZodDate;
803
808
  failure: z.ZodObject<{
804
809
  message: z.ZodString;
805
810
  name: z.ZodString;
@@ -812,6 +817,7 @@ export declare const runtimeContract: {
812
817
  outcomeSeq: z.ZodNumber;
813
818
  scopePath: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
814
819
  slot: z.ZodNumber;
820
+ timestamp: z.ZodDate;
815
821
  output: z.ZodOptional<z.ZodCustom<import("@automate.ax/codec").Encodable, import("@automate.ax/codec").Encodable>>;
816
822
  status: z.ZodLiteral<"succeeded">;
817
823
  }, z.core.$strip>]>>;
@@ -838,6 +844,7 @@ export declare const runtimeContract: {
838
844
  payload: z.ZodOptional<z.ZodCustom<import("@automate.ax/codec").Encodable, import("@automate.ax/codec").Encodable>>;
839
845
  scopePath: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
840
846
  slot: z.ZodNumber;
847
+ timestamp: z.ZodDate;
841
848
  }, z.core.$strip>>;
842
849
  signalOutputs: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
843
850
  contextId: z.ZodString;
@@ -845,6 +852,7 @@ export declare const runtimeContract: {
845
852
  scopePath: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
846
853
  signalInvocationId: z.ZodString;
847
854
  slot: z.ZodNumber;
855
+ timestamp: z.ZodDate;
848
856
  status: z.ZodLiteral<"open">;
849
857
  }, z.core.$strip>, z.ZodObject<{
850
858
  contextId: z.ZodString;
@@ -852,6 +860,7 @@ export declare const runtimeContract: {
852
860
  scopePath: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
853
861
  signalInvocationId: z.ZodString;
854
862
  slot: z.ZodNumber;
863
+ timestamp: z.ZodDate;
855
864
  status: z.ZodLiteral<"closed">;
856
865
  }, z.core.$strip>, z.ZodObject<{
857
866
  contextId: z.ZodString;
@@ -859,6 +868,7 @@ export declare const runtimeContract: {
859
868
  scopePath: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
860
869
  signalInvocationId: z.ZodString;
861
870
  slot: z.ZodNumber;
871
+ timestamp: z.ZodDate;
862
872
  failure: z.ZodObject<{
863
873
  message: z.ZodString;
864
874
  name: z.ZodString;
@@ -870,6 +880,7 @@ export declare const runtimeContract: {
870
880
  scopePath: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
871
881
  signalInvocationId: z.ZodString;
872
882
  slot: z.ZodNumber;
883
+ timestamp: z.ZodDate;
873
884
  output: z.ZodOptional<z.ZodOptional<z.ZodCustom<import("@automate.ax/codec").Encodable, import("@automate.ax/codec").Encodable>>>;
874
885
  selectedIndex: z.ZodOptional<z.ZodNumber>;
875
886
  status: z.ZodLiteral<"succeeded">;
@@ -900,6 +911,7 @@ export declare const runtimeContract: {
900
911
  contextId: z.ZodString;
901
912
  scopePath: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
902
913
  slot: z.ZodNumber;
914
+ timestamp: z.ZodDate;
903
915
  outcomeSeq: z.ZodNumber;
904
916
  status: z.ZodLiteral<"failed">;
905
917
  failure: z.ZodObject<{
@@ -912,6 +924,7 @@ export declare const runtimeContract: {
912
924
  outcomeSeq: z.ZodNumber;
913
925
  scopePath: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
914
926
  slot: z.ZodNumber;
927
+ timestamp: z.ZodDate;
915
928
  reason: z.ZodLiteral<"closed-dependency">;
916
929
  status: z.ZodLiteral<"skipped">;
917
930
  }, z.core.$strip>, z.ZodObject<{
@@ -920,6 +933,7 @@ export declare const runtimeContract: {
920
933
  outcomeSeq: z.ZodNumber;
921
934
  scopePath: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
922
935
  slot: z.ZodNumber;
936
+ timestamp: z.ZodDate;
923
937
  failure: z.ZodObject<{
924
938
  message: z.ZodString;
925
939
  name: z.ZodString;
@@ -932,6 +946,7 @@ export declare const runtimeContract: {
932
946
  outcomeSeq: z.ZodNumber;
933
947
  scopePath: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
934
948
  slot: z.ZodNumber;
949
+ timestamp: z.ZodDate;
935
950
  output: z.ZodOptional<z.ZodCustom<import("@automate.ax/codec").Encodable, import("@automate.ax/codec").Encodable>>;
936
951
  status: z.ZodLiteral<"succeeded">;
937
952
  }, z.core.$strip>]>>;
@@ -958,6 +973,7 @@ export declare const runtimeContract: {
958
973
  payload: z.ZodOptional<z.ZodCustom<import("@automate.ax/codec").Encodable, import("@automate.ax/codec").Encodable>>;
959
974
  scopePath: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
960
975
  slot: z.ZodNumber;
976
+ timestamp: z.ZodDate;
961
977
  }, z.core.$strip>>;
962
978
  signalOutputs: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
963
979
  contextId: z.ZodString;
@@ -965,6 +981,7 @@ export declare const runtimeContract: {
965
981
  scopePath: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
966
982
  signalInvocationId: z.ZodString;
967
983
  slot: z.ZodNumber;
984
+ timestamp: z.ZodDate;
968
985
  status: z.ZodLiteral<"open">;
969
986
  }, z.core.$strip>, z.ZodObject<{
970
987
  contextId: z.ZodString;
@@ -972,6 +989,7 @@ export declare const runtimeContract: {
972
989
  scopePath: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
973
990
  signalInvocationId: z.ZodString;
974
991
  slot: z.ZodNumber;
992
+ timestamp: z.ZodDate;
975
993
  status: z.ZodLiteral<"closed">;
976
994
  }, z.core.$strip>, z.ZodObject<{
977
995
  contextId: z.ZodString;
@@ -979,6 +997,7 @@ export declare const runtimeContract: {
979
997
  scopePath: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
980
998
  signalInvocationId: z.ZodString;
981
999
  slot: z.ZodNumber;
1000
+ timestamp: z.ZodDate;
982
1001
  failure: z.ZodObject<{
983
1002
  message: z.ZodString;
984
1003
  name: z.ZodString;
@@ -990,6 +1009,7 @@ export declare const runtimeContract: {
990
1009
  scopePath: z.ZodDefault<z.ZodArray<z.ZodNumber>>;
991
1010
  signalInvocationId: z.ZodString;
992
1011
  slot: z.ZodNumber;
1012
+ timestamp: z.ZodDate;
993
1013
  output: z.ZodOptional<z.ZodOptional<z.ZodCustom<import("@automate.ax/codec").Encodable, import("@automate.ax/codec").Encodable>>>;
994
1014
  selectedIndex: z.ZodOptional<z.ZodNumber>;
995
1015
  status: z.ZodLiteral<"succeeded">;
package/dist/runtime.js CHANGED
@@ -191,10 +191,12 @@ const FUNNEL_OFFER_SCHEMA = SIGNAL_INVOCATION_DEPENDENCIES_SCHEMA.extend({
191
191
  selection: z.enum(["all", "first", "last"]),
192
192
  triggerAt: z.enum(["start", "end", "both"]),
193
193
  ttl: COORDINATION_DURATION_SCHEMA.optional(),
194
+ until: z.date().optional(),
194
195
  }).superRefine((offer, context) => {
195
196
  if (offer.maxBurstDuration === undefined &&
196
197
  offer.minGap === undefined &&
197
- offer.minQuietPeriod === undefined) {
198
+ offer.minQuietPeriod === undefined &&
199
+ offer.until === undefined) {
198
200
  context.addIssue({
199
201
  code: "custom",
200
202
  message: "A funnel requires at least one timing control.",
@@ -203,13 +205,21 @@ const FUNNEL_OFFER_SCHEMA = SIGNAL_INVOCATION_DEPENDENCIES_SCHEMA.extend({
203
205
  if (offer.triggerAt === "end" &&
204
206
  offer.minGap !== undefined &&
205
207
  offer.minQuietPeriod === undefined &&
206
- offer.maxBurstDuration === undefined) {
208
+ offer.maxBurstDuration === undefined &&
209
+ offer.until === undefined) {
207
210
  context.addIssue({
208
211
  code: "custom",
209
- message: "A trailing funnel with minGap also requires minQuietPeriod or maxBurstDuration.",
212
+ message: "A trailing funnel with minGap also requires minQuietPeriod, maxBurstDuration, or until.",
210
213
  path: ["minGap"],
211
214
  });
212
215
  }
216
+ if (offer.maxBurstDuration !== undefined && offer.until !== undefined) {
217
+ context.addIssue({
218
+ code: "custom",
219
+ message: "A funnel cannot use maxBurstDuration and until together.",
220
+ path: ["until"],
221
+ });
222
+ }
213
223
  if (offer.selection !== "all" && offer.selection !== offer.primaryPosition) {
214
224
  context.addIssue({
215
225
  code: "custom",
@@ -295,6 +305,7 @@ const ACTION_VALUE_OUTCOME_BASE_SCHEMA = z.object({
295
305
  outcomeSeq: OUTCOME_SEQUENCE_SCHEMA,
296
306
  scopePath: HOOK_SCOPE_PATH_SCHEMA,
297
307
  slot: z.number().int(),
308
+ timestamp: z.date(),
298
309
  });
299
310
  const ACTION_VALUE_OUTCOME_SCHEMA = z.union([
300
311
  ACTION_VALUE_OUTCOME_BASE_SCHEMA.extend({
@@ -322,6 +333,7 @@ const SIGNAL_VALUE_OUTCOME_BASE_SCHEMA = z.object({
322
333
  scopePath: HOOK_SCOPE_PATH_SCHEMA,
323
334
  signalInvocationId: z.string(),
324
335
  slot: z.number().int(),
336
+ timestamp: z.date(),
325
337
  });
326
338
  const RUNTIME_CONTEXT_PARENT_SCHEMA = z.object({
327
339
  contextId: z.string(),
@@ -364,6 +376,7 @@ const RUNTIME_VALUE_CONTEXT_SCHEMA = z.object({
364
376
  payload: encodableSchema,
365
377
  scopePath: HOOK_SCOPE_PATH_SCHEMA,
366
378
  slot: z.number().int(),
379
+ timestamp: z.date(),
367
380
  })
368
381
  .array(),
369
382
  signalOutputs: SIGNAL_VALUE_OUTCOME_SCHEMA.array(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@automate.ax/api-contract",
3
- "version": "0.68.2",
3
+ "version": "0.70.0",
4
4
  "description": "Public oRPC contract for the Automate.ax API.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -28,7 +28,7 @@
28
28
  },
29
29
  "dependencies": {
30
30
  "@ai-sdk/gateway": "^4.0.46",
31
- "@automate.ax/codec": "0.68.2",
31
+ "@automate.ax/codec": "0.70.0",
32
32
  "@orpc/contract": "1.15.0",
33
33
  "fast-json-stable-stringify": "^2.1.0",
34
34
  "zod": "^4.3.6"
package/src/runtime.ts CHANGED
@@ -212,11 +212,13 @@ const FUNNEL_OFFER_SCHEMA = SIGNAL_INVOCATION_DEPENDENCIES_SCHEMA.extend({
212
212
  selection: z.enum(["all", "first", "last"]),
213
213
  triggerAt: z.enum(["start", "end", "both"]),
214
214
  ttl: COORDINATION_DURATION_SCHEMA.optional(),
215
+ until: z.date().optional(),
215
216
  }).superRefine((offer, context) => {
216
217
  if (
217
218
  offer.maxBurstDuration === undefined &&
218
219
  offer.minGap === undefined &&
219
- offer.minQuietPeriod === undefined
220
+ offer.minQuietPeriod === undefined &&
221
+ offer.until === undefined
220
222
  ) {
221
223
  context.addIssue({
222
224
  code: "custom",
@@ -227,15 +229,23 @@ const FUNNEL_OFFER_SCHEMA = SIGNAL_INVOCATION_DEPENDENCIES_SCHEMA.extend({
227
229
  offer.triggerAt === "end" &&
228
230
  offer.minGap !== undefined &&
229
231
  offer.minQuietPeriod === undefined &&
230
- offer.maxBurstDuration === undefined
232
+ offer.maxBurstDuration === undefined &&
233
+ offer.until === undefined
231
234
  ) {
232
235
  context.addIssue({
233
236
  code: "custom",
234
237
  message:
235
- "A trailing funnel with minGap also requires minQuietPeriod or maxBurstDuration.",
238
+ "A trailing funnel with minGap also requires minQuietPeriod, maxBurstDuration, or until.",
236
239
  path: ["minGap"],
237
240
  })
238
241
  }
242
+ if (offer.maxBurstDuration !== undefined && offer.until !== undefined) {
243
+ context.addIssue({
244
+ code: "custom",
245
+ message: "A funnel cannot use maxBurstDuration and until together.",
246
+ path: ["until"],
247
+ })
248
+ }
239
249
  if (offer.selection !== "all" && offer.selection !== offer.primaryPosition) {
240
250
  context.addIssue({
241
251
  code: "custom",
@@ -335,6 +345,7 @@ const ACTION_VALUE_OUTCOME_BASE_SCHEMA = z.object({
335
345
  outcomeSeq: OUTCOME_SEQUENCE_SCHEMA,
336
346
  scopePath: HOOK_SCOPE_PATH_SCHEMA,
337
347
  slot: z.number().int(),
348
+ timestamp: z.date(),
338
349
  })
339
350
 
340
351
  const ACTION_VALUE_OUTCOME_SCHEMA = z.union([
@@ -364,6 +375,7 @@ const SIGNAL_VALUE_OUTCOME_BASE_SCHEMA = z.object({
364
375
  scopePath: HOOK_SCOPE_PATH_SCHEMA,
365
376
  signalInvocationId: z.string(),
366
377
  slot: z.number().int(),
378
+ timestamp: z.date(),
367
379
  })
368
380
 
369
381
  const RUNTIME_CONTEXT_PARENT_SCHEMA = z.object({
@@ -410,6 +422,7 @@ const RUNTIME_VALUE_CONTEXT_SCHEMA = z.object({
410
422
  payload: encodableSchema,
411
423
  scopePath: HOOK_SCOPE_PATH_SCHEMA,
412
424
  slot: z.number().int(),
425
+ timestamp: z.date(),
413
426
  })
414
427
  .array(),
415
428
  signalOutputs: SIGNAL_VALUE_OUTCOME_SCHEMA.array(),