@trigger.dev/core 4.7.4 → 4.8.0-webhooks.20261020092920

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/dist/commonjs/utils.js.map +1 -1
  2. package/dist/commonjs/v3/apiClient/core.d.ts +2 -0
  3. package/dist/commonjs/v3/apiClient/core.js +2 -0
  4. package/dist/commonjs/v3/apiClient/core.js.map +1 -1
  5. package/dist/commonjs/v3/apiClient/errors.d.ts +3 -1
  6. package/dist/commonjs/v3/apiClient/errors.js +17 -13
  7. package/dist/commonjs/v3/apiClient/errors.js.map +1 -1
  8. package/dist/commonjs/v3/apiClient/getBranch.js +2 -2
  9. package/dist/commonjs/v3/apiClient/getBranch.js.map +1 -1
  10. package/dist/commonjs/v3/apiClient/index.d.ts +366 -1
  11. package/dist/commonjs/v3/apiClient/index.js +65 -0
  12. package/dist/commonjs/v3/apiClient/index.js.map +1 -1
  13. package/dist/commonjs/v3/apiClient/runStream.js +35 -19
  14. package/dist/commonjs/v3/apiClient/runStream.js.map +1 -1
  15. package/dist/commonjs/v3/apiClient/stream.js +7 -1
  16. package/dist/commonjs/v3/apiClient/stream.js.map +1 -1
  17. package/dist/commonjs/v3/config.d.ts +44 -1
  18. package/dist/commonjs/v3/errors.d.ts +25 -2
  19. package/dist/commonjs/v3/errors.js +51 -12
  20. package/dist/commonjs/v3/errors.js.map +1 -1
  21. package/dist/commonjs/v3/otel/tracingSDK.d.ts +2 -0
  22. package/dist/commonjs/v3/otel/tracingSDK.js +2 -1
  23. package/dist/commonjs/v3/otel/tracingSDK.js.map +1 -1
  24. package/dist/commonjs/v3/otel/userSpanProcessor.d.ts +20 -0
  25. package/dist/commonjs/v3/otel/userSpanProcessor.js +94 -0
  26. package/dist/commonjs/v3/otel/userSpanProcessor.js.map +1 -0
  27. package/dist/commonjs/v3/runEngineWorker/supervisor/continueRetry.d.ts +28 -0
  28. package/dist/commonjs/v3/runEngineWorker/supervisor/continueRetry.js +54 -0
  29. package/dist/commonjs/v3/runEngineWorker/supervisor/continueRetry.js.map +1 -0
  30. package/dist/commonjs/v3/runEngineWorker/supervisor/http.d.ts +7 -16
  31. package/dist/commonjs/v3/runEngineWorker/supervisor/http.js +21 -16
  32. package/dist/commonjs/v3/runEngineWorker/supervisor/http.js.map +1 -1
  33. package/dist/commonjs/v3/runEngineWorker/supervisor/schemas.d.ts +1 -0
  34. package/dist/commonjs/v3/runEngineWorker/supervisor/schemas.js +2 -0
  35. package/dist/commonjs/v3/runEngineWorker/supervisor/schemas.js.map +1 -1
  36. package/dist/commonjs/v3/runEngineWorker/workload/schemas.d.ts +1 -0
  37. package/dist/commonjs/v3/schemas/api.d.ts +28 -0
  38. package/dist/commonjs/v3/schemas/api.js +4 -1
  39. package/dist/commonjs/v3/schemas/api.js.map +1 -1
  40. package/dist/commonjs/v3/schemas/build.d.ts +80 -24
  41. package/dist/commonjs/v3/schemas/index.d.ts +1 -0
  42. package/dist/commonjs/v3/schemas/messages.d.ts +49 -20
  43. package/dist/commonjs/v3/schemas/messages.js +2 -0
  44. package/dist/commonjs/v3/schemas/messages.js.map +1 -1
  45. package/dist/commonjs/v3/schemas/query.d.ts +854 -0
  46. package/dist/commonjs/v3/schemas/query.js +156 -1
  47. package/dist/commonjs/v3/schemas/query.js.map +1 -1
  48. package/dist/commonjs/v3/schemas/resources.d.ts +80 -24
  49. package/dist/commonjs/v3/schemas/schemas.d.ts +56 -0
  50. package/dist/commonjs/v3/schemas/webhookConfig.d.ts +64 -0
  51. package/dist/commonjs/v3/schemas/webhookConfig.js +40 -5
  52. package/dist/commonjs/v3/schemas/webhookConfig.js.map +1 -1
  53. package/dist/commonjs/v3/schemas/webhookFilter.d.ts +70 -17
  54. package/dist/commonjs/v3/streams/asyncIterableStream.d.ts +1 -1
  55. package/dist/commonjs/v3/streams/asyncIterableStream.js +46 -12
  56. package/dist/commonjs/v3/streams/asyncIterableStream.js.map +1 -1
  57. package/dist/commonjs/v3/types/chatEvents.d.ts +26 -4
  58. package/dist/commonjs/v3/types/webhooks.d.ts +27 -0
  59. package/dist/commonjs/v3/utils/structuredLogger.d.ts +6 -6
  60. package/dist/commonjs/v3/utils/structuredLogger.js.map +1 -1
  61. package/dist/commonjs/v3/webhooks/index.d.ts +613 -8
  62. package/dist/commonjs/v3/webhooks/index.js +246 -16
  63. package/dist/commonjs/v3/webhooks/index.js.map +1 -1
  64. package/dist/commonjs/version.js +1 -1
  65. package/dist/esm/utils.js.map +1 -1
  66. package/dist/esm/v3/apiClient/core.d.ts +2 -0
  67. package/dist/esm/v3/apiClient/core.js +2 -0
  68. package/dist/esm/v3/apiClient/core.js.map +1 -1
  69. package/dist/esm/v3/apiClient/errors.d.ts +3 -1
  70. package/dist/esm/v3/apiClient/errors.js +17 -13
  71. package/dist/esm/v3/apiClient/errors.js.map +1 -1
  72. package/dist/esm/v3/apiClient/getBranch.js +2 -2
  73. package/dist/esm/v3/apiClient/getBranch.js.map +1 -1
  74. package/dist/esm/v3/apiClient/index.d.ts +366 -1
  75. package/dist/esm/v3/apiClient/index.js +66 -1
  76. package/dist/esm/v3/apiClient/index.js.map +1 -1
  77. package/dist/esm/v3/apiClient/runStream.js +35 -19
  78. package/dist/esm/v3/apiClient/runStream.js.map +1 -1
  79. package/dist/esm/v3/apiClient/stream.js +7 -1
  80. package/dist/esm/v3/apiClient/stream.js.map +1 -1
  81. package/dist/esm/v3/config.d.ts +44 -1
  82. package/dist/esm/v3/errors.d.ts +25 -2
  83. package/dist/esm/v3/errors.js +45 -10
  84. package/dist/esm/v3/errors.js.map +1 -1
  85. package/dist/esm/v3/otel/tracingSDK.d.ts +2 -0
  86. package/dist/esm/v3/otel/tracingSDK.js +2 -1
  87. package/dist/esm/v3/otel/tracingSDK.js.map +1 -1
  88. package/dist/esm/v3/otel/userSpanProcessor.d.ts +20 -0
  89. package/dist/esm/v3/otel/userSpanProcessor.js +90 -0
  90. package/dist/esm/v3/otel/userSpanProcessor.js.map +1 -0
  91. package/dist/esm/v3/runEngineWorker/supervisor/continueRetry.d.ts +28 -0
  92. package/dist/esm/v3/runEngineWorker/supervisor/continueRetry.js +51 -0
  93. package/dist/esm/v3/runEngineWorker/supervisor/continueRetry.js.map +1 -0
  94. package/dist/esm/v3/runEngineWorker/supervisor/http.d.ts +7 -16
  95. package/dist/esm/v3/runEngineWorker/supervisor/http.js +21 -16
  96. package/dist/esm/v3/runEngineWorker/supervisor/http.js.map +1 -1
  97. package/dist/esm/v3/runEngineWorker/supervisor/schemas.d.ts +1 -0
  98. package/dist/esm/v3/runEngineWorker/supervisor/schemas.js +2 -0
  99. package/dist/esm/v3/runEngineWorker/supervisor/schemas.js.map +1 -1
  100. package/dist/esm/v3/runEngineWorker/workload/schemas.d.ts +1 -0
  101. package/dist/esm/v3/schemas/api.d.ts +28 -0
  102. package/dist/esm/v3/schemas/api.js +4 -1
  103. package/dist/esm/v3/schemas/api.js.map +1 -1
  104. package/dist/esm/v3/schemas/build.d.ts +80 -24
  105. package/dist/esm/v3/schemas/index.d.ts +1 -0
  106. package/dist/esm/v3/schemas/messages.d.ts +49 -20
  107. package/dist/esm/v3/schemas/messages.js +2 -0
  108. package/dist/esm/v3/schemas/messages.js.map +1 -1
  109. package/dist/esm/v3/schemas/query.d.ts +854 -0
  110. package/dist/esm/v3/schemas/query.js +155 -0
  111. package/dist/esm/v3/schemas/query.js.map +1 -1
  112. package/dist/esm/v3/schemas/resources.d.ts +80 -24
  113. package/dist/esm/v3/schemas/schemas.d.ts +56 -0
  114. package/dist/esm/v3/schemas/webhookConfig.d.ts +64 -0
  115. package/dist/esm/v3/schemas/webhookConfig.js +40 -5
  116. package/dist/esm/v3/schemas/webhookConfig.js.map +1 -1
  117. package/dist/esm/v3/schemas/webhookFilter.d.ts +70 -17
  118. package/dist/esm/v3/streams/asyncIterableStream.d.ts +1 -1
  119. package/dist/esm/v3/streams/asyncIterableStream.js +46 -12
  120. package/dist/esm/v3/streams/asyncIterableStream.js.map +1 -1
  121. package/dist/esm/v3/types/chatEvents.d.ts +26 -4
  122. package/dist/esm/v3/types/webhooks.d.ts +27 -0
  123. package/dist/esm/v3/utils/structuredLogger.d.ts +6 -6
  124. package/dist/esm/v3/utils/structuredLogger.js.map +1 -1
  125. package/dist/esm/v3/webhooks/index.d.ts +613 -8
  126. package/dist/esm/v3/webhooks/index.js +246 -16
  127. package/dist/esm/v3/webhooks/index.js.map +1 -1
  128. package/dist/esm/version.js +1 -1
  129. package/package.json +1 -1
@@ -52,24 +52,64 @@ type FilterError<M extends string> = `✖ ${M}`;
52
52
  type Invalid = {
53
53
  readonly "~webhookFilterInvalid": true;
54
54
  };
55
- type PathValue<T, P extends string> = P extends `${infer H}.${infer R}` ? H extends keyof T ? PathValue<NonNullable<T[H]>, R> : Invalid : P extends keyof T ? NonNullable<T[P]> : Invalid;
56
- type ResolveFilterPath<TEvent, P extends string> = P extends `event.${infer R}` ? PathValue<TEvent, R> : P extends `header.${string}` ? string : P extends `webhook.${infer R}` ? PathValue<WebhookFilterMeta, R> : Invalid;
55
+ type IsValidFilterPath<P extends string> = P extends "" | `.${string}` | `${string}.` | `${string}..${string}` ? false : true;
56
+ type KnownValue<T> = unknown extends T ? unknown : NonNullable<T>;
57
+ /** Resolves per union member, so a path only some members have still resolves. */
58
+ type MemberPathValue<T, P extends string> = unknown extends T ? unknown : NonNullable<T> extends infer M ? M extends unknown ? P extends `${infer H}.${infer R}` ? H extends keyof M ? MemberPathValue<M[H], R> : Invalid : P extends keyof M ? KnownValue<M[P]> : Invalid : never : never;
59
+ type PathValue<T, P extends string> = IsValidFilterPath<P> extends false ? Invalid : [Exclude<MemberPathValue<T, P>, Invalid>] extends [never] ? Invalid : Exclude<MemberPathValue<T, P>, Invalid>;
60
+ type ResolveFilterPath<TEvent, P extends string> = IsValidFilterPath<P> extends false ? Invalid : P extends `event.${infer R}` ? PathValue<TEvent, R> : P extends `header.${string}` ? string : P extends `webhook.${infer R}` ? PathValue<WebhookFilterMeta, R> : Invalid;
57
61
  type FilterLiteralType<Lit extends string> = Lit extends `'${infer S}'` ? S : Lit extends `${infer N extends number}` ? N : Lit extends "true" ? true : Lit extends "false" ? false : Lit extends "null" ? null : Invalid;
58
- type CheckValue<F, Lit extends string, P extends string> = [FilterLiteralType<Lit>] extends [
59
- Invalid
60
- ] ? FilterError<`cannot parse value: ${Lit}`> : [FilterLiteralType<Lit>] extends [F] ? true : FilterError<`value ${Lit} is not valid for ${P}`>;
61
- type CheckNum<F, Lit extends string, P extends string> = [F] extends [number] ? Lit extends `${number}` ? true : FilterError<`${P} needs a number`> : FilterError<`${P} is not numeric`>;
62
- type CheckStr<F, Lit extends string, P extends string> = [F] extends [string] ? Lit extends `'${string}'` ? true : FilterError<`${P} op needs a string literal`> : FilterError<`${P} is not a string`>;
63
- type CheckInItems<F, Items extends string, P extends string> = Items extends `${infer Head},${infer Tail}` ? CheckValue<F, Head, P> extends true ? CheckInItems<F, Tail, P> : CheckValue<F, Head, P> : CheckValue<F, Items, P>;
62
+ /** `null` is valid on every field: the server matches it against a missing field as well as a null one. */
63
+ type CheckValue<F, Lit extends string, P extends string> = Lit extends "null" ? true : [FilterLiteralType<Lit>] extends [Invalid] ? FilterError<`cannot parse value: ${Lit}`> : [FilterLiteralType<Lit>] extends [F] ? true : FilterError<`value ${Lit} is not valid for ${P}`>;
64
+ type CheckNum<F, Lit extends string, P extends string> = [
65
+ Extract<unknown extends F ? number : F, number>
66
+ ] extends [never] ? FilterError<`${P} is not numeric`> : Lit extends `${number}` ? true : FilterError<`${P} needs a number`>;
67
+ type CheckStr<F, Lit extends string, P extends string> = [
68
+ Extract<unknown extends F ? string : F, string>
69
+ ] extends [never] ? FilterError<`${P} is not a string`> : Lit extends `'${string}'` ? true : FilterError<`${P} op needs a string literal`>;
70
+ type TrimItem<S extends string> = S extends ` ${infer R}` ? TrimItem<R> : S extends `${infer L} ` ? TrimItem<L> : S;
71
+ type CheckInItems<F, Items extends string, P extends string> = Items extends `${infer Head},${infer Tail}` ? CheckValue<F, TrimItem<Head>, P> extends true ? CheckInItems<F, Tail, P> : CheckValue<F, TrimItem<Head>, P> : CheckValue<F, TrimItem<Items>, P>;
64
72
  type CheckIn<F, Lit extends string, P extends string> = Lit extends `[${infer Items}]` ? CheckInItems<F, Items, P> : FilterError<`${P} "in" expects a [list]`>;
65
73
  type CheckOp<F, Op extends string, Lit extends string, P extends string> = Op extends "==" | "!=" ? CheckValue<F, Lit, P> : Op extends ">" | "<" | ">=" | "<=" ? CheckNum<F, Lit, P> : Op extends "startsWith" | "endsWith" | "contains" ? CheckStr<F, Lit, P> : Op extends "in" ? CheckIn<F, Lit, P> : FilterError<`unknown operator: ${Op}`>;
66
74
  type IsFilterPath<S extends string> = S extends `event.${string}` | `header.${string}` | `webhook.${string}` ? true : false;
67
75
  type CheckFieldToField<TEvent, F, Op extends string, Rhs extends string, P extends string> = Op extends "==" | "!=" | ">" | "<" | ">=" | "<=" ? ResolveFilterPath<TEvent, Rhs> extends infer RF ? [RF] extends [Invalid] ? FilterError<`unknown field: ${Rhs}`> : [RF] extends [F] ? true : [F] extends [RF] ? true : FilterError<`${P} and ${Rhs} are not comparable`> : never : FilterError<`operator "${Op}" does not support a field reference`>;
68
76
  type LeafCheck<TEvent, P extends string, Op extends string, Lit extends string> = ResolveFilterPath<TEvent, P> extends infer F ? [F] extends [Invalid] ? FilterError<`unknown field: ${P}`> : IsFilterPath<Lit> extends true ? CheckFieldToField<TEvent, F, Op, Lit, P> : CheckOp<F, Op, Lit, P> : never;
69
- type ElementOf<T> = T extends readonly (infer E)[] ? E : never;
70
- type CheckQuantifier<TEvent, ArrP extends string, SubP extends string, Op extends string, Lit extends string> = ResolveFilterPath<TEvent, ArrP> extends infer Arr ? [Arr] extends [Invalid] ? FilterError<`unknown field: ${ArrP}`> : [ElementOf<Arr>] extends [never] ? FilterError<`${ArrP} is not an array`> : PathValue<ElementOf<Arr>, SubP> extends infer SF ? [SF] extends [Invalid] ? FilterError<`unknown field: ${SubP} (in ${ArrP})`> : CheckOp<SF, Op, Lit, SubP> : never : never;
71
- type Tokenize<S extends string, Acc extends string[] = []> = S extends `${infer H} ${infer R}` ? Tokenize<R, [...Acc, H]> : [...Acc, S];
72
- type Scan<TEvent, Tk extends string[], Depth extends 1[], Expect extends "operand" | "operator"> = Expect extends "operand" ? Tk extends ["(", ...infer Rest extends string[]] ? Scan<TEvent, Rest, [1, ...Depth], "operand"> : Tk extends [")" | "&&" | "||", ...string[]] ? FilterError<`unexpected "${Tk[0] & string}"`> : Tk extends [
77
+ type ElementOf<T> = unknown extends T ? unknown : T extends readonly (infer E)[] ? E : never;
78
+ /** The array a quantifier reads: a field, or the event itself (`event any (...)`) when the body is an array. */
79
+ type ResolveQuantifierArray<TEvent, ArrP extends string> = ArrP extends "event" ? TEvent : ResolveFilterPath<TEvent, ArrP>;
80
+ type CheckQuantifier<TEvent, ArrP extends string, SubP extends string, Op extends string, Lit extends string> = ResolveQuantifierArray<TEvent, ArrP> extends infer Arr ? [Arr] extends [Invalid] ? FilterError<`unknown field: ${ArrP}`> : [ElementOf<Arr>] extends [never] ? FilterError<`${ArrP} is not an array`> : PathValue<ElementOf<Arr>, SubP> extends infer SF ? [SF] extends [Invalid] ? FilterError<`unknown field: ${SubP} (in ${ArrP})`> : CheckOp<SF, Op, Lit, SubP> : never : never;
81
+ type OddQuotes<S extends string, Odd extends boolean = false> = S extends `${string}'${infer R}` ? OddQuotes<R, Odd extends true ? false : true> : Odd;
82
+ type Unclosed<S extends string> = OddQuotes<S> extends true ? true : S extends `${string}[${infer After}` ? After extends `${string}]${string}` ? false : true : false;
83
+ /** Splits on spaces, keeping a quoted string or a `[list]` that contains spaces as one token. */
84
+ type SplitOnSpaces<S extends string, Acc extends string[] = []> = S extends `${infer H} ${infer R}` ? Unclosed<H> extends true ? TokenizeJoin<R, H, Acc> : SplitOnSpaces<R, [...Acc, H]> : [...Acc, S];
85
+ type TokenizeJoin<S extends string, Cur extends string, Acc extends string[]> = S extends `${infer H} ${infer R}` ? Unclosed<`${Cur} ${H}`> extends true ? TokenizeJoin<R, `${Cur} ${H}`, Acc> : SplitOnSpaces<R, [...Acc, `${Cur} ${H}`]> : [...Acc, `${Cur} ${S}`];
86
+ type SplitClose<S extends string, Post extends string[] = []> = S extends `${infer L})` ? SplitClose<L, [")", ...Post]> : S extends "" ? Post : [S, ...Post];
87
+ type SplitOpen<S extends string, Pre extends string[] = []> = S extends `(${infer R}` ? SplitOpen<R, [...Pre, "("]> : [...Pre, ...SplitClose<S>];
88
+ type SplitParens<Tk extends string[], Acc extends string[] = []> = Tk extends [
89
+ infer H extends string,
90
+ ...infer R extends string[]
91
+ ] ? SplitParens<R, [...Acc, ...(H extends `'${string}'` ? [H] : SplitOpen<H>)]> : Acc;
92
+ type Tokenize<S extends string> = SplitParens<SplitOnSpaces<S>>;
93
+ type InItemTypes<Items extends string, Acc = never> = Items extends `${infer Head},${infer Tail}` ? InItemTypes<Tail, Acc | FilterLiteralType<TrimItem<Head>>> : Acc | FilterLiteralType<TrimItem<Items>>;
94
+ type LooseEqKind<V> = V extends string ? string : V extends number ? number : unknown;
95
+ /**
96
+ * Drops a member only when its field can never equal `V` under the server's coercing `==`: the field
97
+ * is missing, or holds only values of `V`'s own primitive kind that differ from it.
98
+ */
99
+ type NarrowTo<T, P extends string, V> = V extends unknown ? T extends unknown ? Exclude<MemberPathValue<T, P>, Invalid> extends infer F ? [V] extends [F] ? T : [F] extends [LooseEqKind<V>] ? never : T : never : never : never;
100
+ /**
101
+ * The server's `==` also matches a null field for `null`, `'null'` and `0`, so those never narrow,
102
+ * nor does a number literal TypeScript can't type exactly (`0.0`, `-0`), which reads as `number`.
103
+ */
104
+ type NarrowEq<T, P extends string, V> = unknown extends T ? T : number extends V ? T : [Extract<V, null | "null" | 0>] extends [never] ? NarrowTo<T, P, V> : T;
105
+ type NarrowLeaf<T, P extends string, Op extends string, Lit extends string> = P extends `event.${infer R}` ? Op extends "==" ? IsFilterPath<Lit> extends true ? T : NarrowEq<T, R, FilterLiteralType<Lit>> : Op extends "in" ? Lit extends `[${infer Items}]` ? NarrowEq<T, R, InItemTypes<Items>> : T : T : T;
106
+ type Frame = [unknown, unknown];
107
+ /**
108
+ * `Cur` is the event the current `&&` chain has narrowed to. Each paren group (and the whole filter)
109
+ * is a frame of [the type the group started from, the union of its finished `||` branches]. A valid
110
+ * filter scans to `[narrowed event]`, an invalid one to its error.
111
+ */
112
+ type Scan<Cur, Tk extends string[], Frames extends Frame[], Expect extends "operand" | "operator"> = Expect extends "operand" ? Tk extends ["(", ...infer Rest extends string[]] ? Scan<Cur, Rest, [[Cur, never], ...Frames], "operand"> : Tk extends [")" | "&&" | "||", ...string[]] ? FilterError<`unexpected "${Tk[0] & string}"`> : Tk extends [
73
113
  infer ArrP extends string,
74
114
  "any" | "all",
75
115
  "(",
@@ -78,18 +118,31 @@ type Scan<TEvent, Tk extends string[], Depth extends 1[], Expect extends "operan
78
118
  infer SubLit extends string,
79
119
  ")",
80
120
  ...infer Rest extends string[]
81
- ] ? CheckQuantifier<TEvent, ArrP, SubP, SubOp, SubLit> extends infer R ? R extends true ? Scan<TEvent, Rest, Depth, "operator"> : R : never : Tk extends [
121
+ ] ? CheckQuantifier<Cur, ArrP, SubP, SubOp, SubLit> extends infer R ? R extends true ? Scan<Cur, Rest, Frames, "operator"> : R : never : Tk extends [
82
122
  infer P extends string,
83
123
  "not",
84
124
  "in",
85
125
  infer Lit extends string,
86
126
  ...infer Rest extends string[]
87
- ] ? ResolveFilterPath<TEvent, P> extends infer F ? [F] extends [Invalid] ? FilterError<`unknown field: ${P}`> : CheckIn<F, Lit, P> extends infer R ? R extends true ? Scan<TEvent, Rest, Depth, "operator"> : R : never : never : Tk extends [
127
+ ] ? ResolveFilterPath<Cur, P> extends infer F ? [F] extends [Invalid] ? FilterError<`unknown field: ${P}`> : CheckIn<F, Lit, P> extends infer R ? R extends true ? Scan<Cur, Rest, Frames, "operator"> : R : never : never : Tk extends [
88
128
  infer P extends string,
89
129
  infer Op extends string,
90
130
  infer Lit extends string,
91
131
  ...infer Rest extends string[]
92
- ] ? LeafCheck<TEvent, P, Op, Lit> extends infer R ? R extends true ? Scan<TEvent, Rest, Depth, "operator"> : R : never : FilterError<`incomplete clause`> : Tk extends [] ? Depth extends [] ? true : FilterError<`unbalanced parens (missing ")")`> : Tk extends ["&&" | "||", ...infer Rest extends string[]] ? Scan<TEvent, Rest, Depth, "operand"> : Tk extends [")", ...infer Rest extends string[]] ? Depth extends [1, ...infer D extends 1[]] ? Scan<TEvent, Rest, D, "operator"> : FilterError<`unmatched ")"`> : FilterError<`expected && or ||, got "${Tk[0] & string}"`>;
93
- type ScanFilter<TEvent, S extends string> = Scan<TEvent, Tokenize<S>, [], "operand">;
94
- export type ValidateWebhookFilter<TEvent, S extends string> = ScanFilter<TEvent, S> extends true ? S : ScanFilter<TEvent, S>;
132
+ ] ? LeafCheck<Cur, P, Op, Lit> extends infer R ? R extends true ? Scan<NarrowLeaf<Cur, P, Op, Lit>, Rest, Frames, "operator"> : R : never : FilterError<`incomplete clause`> : Tk extends [] ? Frames extends [[unknown, infer Done]] ? [Done | Cur] : FilterError<`unbalanced parens (missing ")")`> : Tk extends ["&&", ...infer Rest extends string[]] ? Scan<Cur, Rest, Frames, "operand"> : Tk extends ["||", ...infer Rest extends string[]] ? Frames extends [[infer Base, infer Done], ...infer Outer extends Frame[]] ? Scan<Base, Rest, [[Base, Done | Cur], ...Outer], "operand"> : never : Tk extends [")", ...infer Rest extends string[]] ? Frames extends [
133
+ [
134
+ unknown,
135
+ infer Done
136
+ ],
137
+ infer Next extends Frame,
138
+ ...infer Outer extends Frame[]
139
+ ] ? Scan<Done | Cur, Rest, [Next, ...Outer], "operator"> : FilterError<`unmatched ")"`> : FilterError<`expected && or ||, got "${Tk[0] & string}"`>;
140
+ type ScanFilter<TEvent, S extends string> = Scan<TEvent, Tokenize<S>, [[TEvent, never]], "operand">;
141
+ export type ValidateWebhookFilter<TEvent, S extends string> = string extends S ? S : ScanFilter<TEvent, S> extends [unknown] ? S : ScanFilter<TEvent, S>;
142
+ /**
143
+ * The event a handler sees once the filter `S` has passed: the members of a union event that the
144
+ * filter's `event.<path> == <literal>` (or `in [...]`) clauses select, or `TEvent` when the filter
145
+ * doesn't narrow it (or isn't a literal).
146
+ */
147
+ export type NarrowWebhookEvent<TEvent, S extends string> = string extends S ? TEvent : ScanFilter<TEvent, S> extends [infer Narrowed] ? Narrowed : TEvent;
95
148
  export {};
@@ -1,6 +1,6 @@
1
1
  export type AsyncIterableStream<T> = AsyncIterable<T> & ReadableStream<T>;
2
2
  export declare function createAsyncIterableStream<S, T>(source: ReadableStream<S>, transformer: Transformer<S, T>): AsyncIterableStream<T>;
3
- export declare function createAsyncIterableReadable<S, T>(source: ReadableStream<S>, transformer: Transformer<S, T>, signal: AbortSignal): AsyncIterableStream<T>;
3
+ export declare function createAsyncIterableReadable<S, T>(source: ReadableStream<S>, transformer: Transformer<S, T>, signal: AbortSignal, onCancel?: () => void): AsyncIterableStream<T>;
4
4
  export declare function createAsyncIterableStreamFromAsyncIterable<T>(asyncIterable: AsyncIterable<T>, transformer?: Transformer<T, T>, signal?: AbortSignal): AsyncIterableStream<T>;
5
5
  export declare function createAsyncIterableStreamFromAsyncGenerator<T>(asyncGenerator: AsyncGenerator<T, void, unknown>, transformer: Transformer<T, T>, signal?: AbortSignal): AsyncIterableStream<T>;
6
6
  export declare function ensureAsyncIterable<T>(input: AsyncIterable<T> | ReadableStream<T>): AsyncIterable<T>;
@@ -11,25 +11,59 @@ export function createAsyncIterableStream(source, transformer) {
11
11
  };
12
12
  return transformedStream;
13
13
  }
14
- export function createAsyncIterableReadable(source, transformer, signal) {
14
+ export function createAsyncIterableReadable(source, transformer, signal, onCancel) {
15
+ // Set once the stream is closed, errored or cancelled; the controller must not be touched after
16
+ let closed = false;
17
+ let reader;
15
18
  return new ReadableStream({
16
19
  async start(controller) {
17
20
  const transformedStream = source.pipeThrough(new TransformStream(transformer));
18
- const reader = transformedStream.getReader();
19
- signal.addEventListener("abort", () => {
20
- queueMicrotask(() => {
21
- reader.cancel();
21
+ const activeReader = transformedStream.getReader();
22
+ reader = activeReader;
23
+ const safeClose = () => {
24
+ if (closed)
25
+ return;
26
+ closed = true;
27
+ try {
22
28
  controller.close();
29
+ }
30
+ catch { }
31
+ };
32
+ const onAbort = () => {
33
+ queueMicrotask(() => {
34
+ activeReader.cancel().catch(() => { });
35
+ safeClose();
23
36
  });
24
- });
25
- while (true) {
26
- const { done, value } = await reader.read();
27
- if (done) {
28
- controller.close();
29
- break;
37
+ };
38
+ if (signal.aborted) {
39
+ onAbort();
40
+ }
41
+ else {
42
+ signal.addEventListener("abort", onAbort, { once: true });
43
+ }
44
+ try {
45
+ while (!closed) {
46
+ const { done, value } = await activeReader.read();
47
+ if (done || closed)
48
+ break;
49
+ controller.enqueue(value);
50
+ }
51
+ safeClose();
52
+ }
53
+ catch (error) {
54
+ if (!closed) {
55
+ closed = true;
56
+ controller.error(error);
30
57
  }
31
- controller.enqueue(value);
32
58
  }
59
+ finally {
60
+ signal.removeEventListener("abort", onAbort);
61
+ }
62
+ },
63
+ cancel(reason) {
64
+ closed = true;
65
+ reader?.cancel(reason).catch(() => { });
66
+ onCancel?.();
33
67
  },
34
68
  });
35
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"asyncIterableStream.js","sourceRoot":"","sources":["../../../../src/v3/streams/asyncIterableStream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"asyncIterableStream.js","sourceRoot":"","sources":["../../../../src/v3/streams/asyncIterableStream.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { WebhookSecretProvisioning, WebhookVerifierArtifact } from "../schemas/webhookConfig.js";
1
+ import type { WebhookEndpointContext } from "./webhooks.js";
2
2
  export type WebhookKeyScalar = string | number | boolean | bigint;
3
3
  export interface WebhookKeyMeta {
4
4
  externalRef: string;
@@ -14,18 +14,32 @@ type Invalid = {
14
14
  type PathValue<T, P extends string> = P extends `${infer Head}.${infer Rest}` ? Head extends keyof T ? PathValue<NonNullable<T[Head]>, Rest> : Invalid : P extends keyof T ? NonNullable<T[P]> : Invalid;
15
15
  export type WebhookKeyError<M extends string> = `✖ ${M}`;
16
16
  type TrimSpace<S extends string> = S extends ` ${infer R}` ? TrimSpace<R> : S extends `${infer L} ` ? TrimSpace<L> : S;
17
- type CheckKeyPathSingle<TEvent, Path extends string> = Path extends `webhook.${infer Rest}` ? PathValue<WebhookKeyMeta, Rest> extends WebhookKeyScalar ? true : WebhookKeyError<`unknown or non-scalar webhook meta path: ${Rest}`> : Path extends `header.${infer Name}` ? Name extends "" ? WebhookKeyError<`empty header name`> : true : Path extends `body.${infer Rest}` ? PathValue<TEvent, Rest> extends WebhookKeyScalar ? true : WebhookKeyError<`unknown or non-scalar event path: ${Rest}`> : PathValue<TEvent, Path> extends WebhookKeyScalar ? true : WebhookKeyError<`unknown or non-scalar event path: ${Path}`>;
18
17
  type CheckKeyPath<TEvent, Path extends string> = Path extends `${infer L}||${infer R}` ? CheckKeyPathSingle<TEvent, TrimSpace<L>> extends true ? CheckKeyPath<TEvent, TrimSpace<R>> : CheckKeyPathSingle<TEvent, TrimSpace<L>> : CheckKeyPathSingle<TEvent, TrimSpace<Path>>;
19
18
  type CheckKeyTemplate<TEvent, S extends string> = S extends `${infer _Pre}{${infer Path}}${infer Rest}` ? CheckKeyPath<TEvent, Path> extends true ? CheckKeyTemplate<TEvent, Rest> : CheckKeyPath<TEvent, Path> : true;
20
19
  export type ValidatedWebhookKey<TEvent, S extends string> = CheckKeyTemplate<TEvent, S> extends true ? S : CheckKeyTemplate<TEvent, S>;
20
+ type MatchNext<X> = unknown extends X ? unknown : NonNullable<X>;
21
+ type MatchPathValue<T, P extends string> = unknown extends T ? unknown : P extends `${infer Head}.${infer Rest}` ? Head extends keyof T ? MatchPathValue<MatchNext<T[Head]>, Rest> : string extends keyof T ? unknown : Invalid : P extends keyof T ? MatchNext<T[P]> : string extends keyof T ? unknown : Invalid;
22
+ type CheckEventPath<TEvent, Path extends string> = Path extends "" | `.${string}` | `${string}.` | `${string}..${string}` ? WebhookKeyError<`empty path segment: ${Path}`> : MatchPathValue<TEvent, Path> extends Invalid ? WebhookKeyError<`unknown event path: ${Path}`> : unknown extends MatchPathValue<TEvent, Path> ? true : MatchPathValue<TEvent, Path> extends WebhookKeyScalar ? true : WebhookKeyError<`non-scalar event path: ${Path}`>;
23
+ type CheckMetaPath<Path extends string> = Path extends `header.${infer Name}` ? Name extends "" ? WebhookKeyError<`empty header name`> : true : Path extends `webhook.${infer Rest}` ? PathValue<WebhookKeyMeta, Rest> extends WebhookKeyScalar ? true : WebhookKeyError<`unknown or non-scalar webhook meta path: ${Rest}`> : false;
24
+ type CheckNamespacedPath<TEvent, Path extends string, What extends string> = Path extends `event.${infer Rest}` ? CheckEventPath<TEvent, Rest> : CheckMetaPath<Path> extends false ? WebhookKeyError<`${What} paths start with event., header. or webhook.: ${Path}`> : CheckMetaPath<Path>;
25
+ type CheckMatchPath<TEvent, Path extends string> = CheckNamespacedPath<TEvent, Path, "match">;
26
+ type CheckKeyPathSingle<TEvent, Path extends string> = CheckNamespacedPath<TEvent, Path, "key">;
27
+ /**
28
+ * A webhook waiter's `match`: each key a path (`event.*` reads the event, `header.*` a header and
29
+ * `webhook.*` the endpoint), each value the scalar it must equal. A bad path turns that key's value
30
+ * type into an error naming it.
31
+ */
32
+ export type ValidatedWebhookMatch<TEvent, M> = {
33
+ [K in keyof M]: K extends string ? CheckMatchPath<TEvent, K> extends true ? M[K] : CheckMatchPath<TEvent, K> : never;
34
+ };
21
35
  declare const dEvt: unique symbol;
22
36
  export interface ChatEvent<TType extends string, TEvent> {
23
37
  id: string;
24
38
  type: TType;
25
39
  key: string;
40
+ /** The endpoint this event subscribes to (`webhooks.endpoint.define` id). */
41
+ endpointId: string;
26
42
  source: string;
27
- verifierArtifact: WebhookVerifierArtifact;
28
- secretProvisioning?: WebhookSecretProvisioning;
29
43
  filter?: string;
30
44
  readonly [dEvt]?: TEvent;
31
45
  }
@@ -35,7 +49,15 @@ export type ChatEventAction<W> = W extends ChatEvent<infer TType, infer TEvent>
35
49
  event: TEvent;
36
50
  source: string;
37
51
  headers: Record<string, string>;
52
+ /** The delivery's id (`whd_...`), as in the dashboard and the deliveries API. A replay gets a new one. */
38
53
  deliveryId: string;
54
+ /**
55
+ * The provider's id for the delivery (e.g. Stripe's `evt_...`), the same across replays.
56
+ * Absent on an action delivered by an older server.
57
+ */
58
+ externalDeliveryId?: string;
59
+ /** The endpoint the delivery arrived on. */
60
+ endpoint?: WebhookEndpointContext;
39
61
  } : never;
40
62
  export type ChatEventActions<TW extends readonly AnyChatEvent[]> = ChatEventAction<TW[number]>;
41
63
  export {};
@@ -16,6 +16,33 @@ export type WebhookSource<TEvent = unknown> = {
16
16
  [__webhookEvent]?: TEvent;
17
17
  };
18
18
  export type AnyWebhookSource = WebhookSource<any>;
19
+ declare const __endpointEvent: unique symbol;
20
+ /**
21
+ * A declared webhook endpoint (`webhooks.endpoint.define`): one provider URL that subscribers
22
+ * (`webhook()`, `chat.event`, channel connectors) and waiters attach to. The event type comes from
23
+ * the endpoint's source.
24
+ */
25
+ export type WebhookEndpoint<TEvent = unknown> = {
26
+ /** The declared endpoint id. */
27
+ id: string;
28
+ /** The source's provider tag, e.g. "stripe". */
29
+ source: string;
30
+ /** phantom, type-level only; never present at runtime */
31
+ [__endpointEvent]?: TEvent;
32
+ };
33
+ export type AnyWebhookEndpoint = WebhookEndpoint<any>;
34
+ /** What a webhook waiter resumes its run with. */
35
+ export type WebhookWaiterOutput<TEvent = unknown> = {
36
+ /** The verified event body. */
37
+ event: TEvent;
38
+ /** The inbound headers, curated as for `webhook()` (credentials dropped). */
39
+ headers: Record<string, string>;
40
+ /** The delivery's id (`whd_...`). */
41
+ deliveryId: string;
42
+ /** The endpoint the delivery arrived on. */
43
+ endpoint: WebhookEndpointContext;
44
+ };
45
+ export type InferWebhookEndpointEvent<E> = E extends WebhookEndpoint<infer TEvent> ? TEvent : unknown;
19
46
  export type InferWebhookEvent<S> = S extends WebhookSource<infer TEvent> ? TEvent : unknown;
20
47
  /**
21
48
  * The endpoint a delivery arrived on. `id` is the endpoint instance (`wh_...`); `declaredId` is the
@@ -8,12 +8,12 @@ export interface StructuredLogger {
8
8
  child: (fields: Record<string, unknown>) => StructuredLogger;
9
9
  }
10
10
  export declare enum LogLevel {
11
- "log" = 0,
12
- "error" = 1,
13
- "warn" = 2,
14
- "info" = 3,
15
- "debug" = 4,
16
- "verbose" = 5
11
+ log = 0,
12
+ error = 1,
13
+ warn = 2,
14
+ info = 3,
15
+ debug = 4,
16
+ verbose = 5
17
17
  }
18
18
  export declare class SimpleStructuredLogger implements StructuredLogger {
19
19
  #private;
@@ -1 +1 @@
1
- {"version":3,"file":"structuredLogger.js","sourceRoot":"","sources":["../../../../src/v3/utils/structuredLogger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"structuredLogger.js","sourceRoot":"","sources":["../../../../src/v3/utils/structuredLogger.ts"],"names":[],"mappings":"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"}