@cat-factory/contracts 0.266.0 → 0.268.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/documents.d.ts +45 -0
  2. package/dist/documents.d.ts.map +1 -1
  3. package/dist/documents.js +35 -0
  4. package/dist/documents.js.map +1 -1
  5. package/dist/errors.d.ts +1 -1
  6. package/dist/errors.d.ts.map +1 -1
  7. package/dist/errors.js +6 -0
  8. package/dist/errors.js.map +1 -1
  9. package/dist/execution.d.ts +66 -0
  10. package/dist/execution.d.ts.map +1 -1
  11. package/dist/execution.js +19 -0
  12. package/dist/execution.js.map +1 -1
  13. package/dist/notification-webhooks.d.ts +92 -2
  14. package/dist/notification-webhooks.d.ts.map +1 -1
  15. package/dist/notification-webhooks.js +63 -4
  16. package/dist/notification-webhooks.js.map +1 -1
  17. package/dist/pr-report.d.ts +132 -1
  18. package/dist/pr-report.d.ts.map +1 -1
  19. package/dist/pr-report.js +53 -1
  20. package/dist/pr-report.js.map +1 -1
  21. package/dist/routes/agent-runs.d.ts +32 -0
  22. package/dist/routes/agent-runs.d.ts.map +1 -1
  23. package/dist/routes/bug-hunt.d.ts +32 -0
  24. package/dist/routes/bug-hunt.d.ts.map +1 -1
  25. package/dist/routes/execution.d.ts +128 -0
  26. package/dist/routes/execution.d.ts.map +1 -1
  27. package/dist/routes/human-review.d.ts +16 -0
  28. package/dist/routes/human-review.d.ts.map +1 -1
  29. package/dist/routes/human-test.d.ts +80 -0
  30. package/dist/routes/human-test.d.ts.map +1 -1
  31. package/dist/routes/notification-webhooks.d.ts +390 -1
  32. package/dist/routes/notification-webhooks.d.ts.map +1 -1
  33. package/dist/routes/notification-webhooks.js +97 -8
  34. package/dist/routes/notification-webhooks.js.map +1 -1
  35. package/dist/routes/public-evidence.d.ts +42 -0
  36. package/dist/routes/public-evidence.d.ts.map +1 -1
  37. package/dist/routes/visual-confirm.d.ts +48 -0
  38. package/dist/routes/visual-confirm.d.ts.map +1 -1
  39. package/dist/routes/workspaces.d.ts +32 -0
  40. package/dist/routes/workspaces.d.ts.map +1 -1
  41. package/dist/run-outcome.d.ts +98 -1
  42. package/dist/run-outcome.d.ts.map +1 -1
  43. package/dist/run-outcome.js +73 -1
  44. package/dist/run-outcome.js.map +1 -1
  45. package/dist/snapshot.d.ts +16 -0
  46. package/dist/snapshot.d.ts.map +1 -1
  47. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"human-test.d.ts","sourceRoot":"","sources":["../../src/routes/human-test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqB,MAAM,yBAAyB,CAAA;AAc3E,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMnC,CAAA;AAEF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMtC,CAAA;AAEF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMpC,CAAA;AAEF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMvC,CAAA;AAEF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMtC,CAAA"}
1
+ {"version":3,"file":"human-test.d.ts","sourceRoot":"","sources":["../../src/routes/human-test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqB,MAAM,yBAAyB,CAAA;AAc3E,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMnC,CAAA;AAEF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMtC,CAAA;AAEF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMpC,CAAA;AAEF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMvC,CAAA;AAEF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMtC,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { ContractNoBody } from '@toad-contracts/valibot';
2
2
  import * as v from 'valibot';
3
- /** The workspace's registered webhook, or null when none is set. Never returns the secret. */
3
+ /** The workspace's default webhook, or null when none is set. Never returns the secret. */
4
4
  export declare const getNotificationWebhookContract: {
5
5
  readonly method: "get";
6
6
  readonly pathResolver: () => string;
@@ -28,6 +28,8 @@ export declare const getNotificationWebhookContract: {
28
28
  }, undefined>;
29
29
  }, undefined>;
30
30
  readonly 200: v.NullableSchema<v.ObjectSchema<{
31
+ readonly id: v.StringSchema<undefined>;
32
+ readonly name: v.StringSchema<undefined>;
31
33
  readonly url: v.StringSchema<undefined>;
32
34
  readonly types: v.ArraySchema<v.PicklistSchema<["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "judge_review", "pr_review_ready", "initiative", "platform_health", "infra_unreachable", "budget_paused", "budget_threshold", "key_drift", "merge_tag_request"], undefined>, undefined>;
33
35
  readonly runEvents: v.ArraySchema<v.PicklistSchema<["run.started", "run.completed", "run.failed"], undefined>, undefined>;
@@ -44,6 +46,7 @@ export declare const putNotificationWebhookContract: {
44
46
  readonly pathResolver: () => string;
45
47
  readonly requestBodySchema: v.ObjectSchema<{
46
48
  readonly url: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.UrlAction<string, undefined>, v.StartsWithAction<string, "https://", "The webhook endpoint must be an https:// URL">, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
49
+ readonly name: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 100, undefined>]>, undefined>;
47
50
  readonly types: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "judge_review", "pr_review_ready", "initiative", "platform_health", "infra_unreachable", "budget_paused", "budget_threshold", "key_drift", "merge_tag_request"], undefined>, undefined>, undefined>;
48
51
  readonly runEvents: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["run.started", "run.completed", "run.failed"], undefined>, undefined>, undefined>;
49
52
  readonly alertEvents: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["platform_health.firing", "platform_health.resolved"], undefined>, undefined>, undefined>;
@@ -74,6 +77,8 @@ export declare const putNotificationWebhookContract: {
74
77
  }, undefined>;
75
78
  }, undefined>;
76
79
  readonly 200: v.ObjectSchema<{
80
+ readonly id: v.StringSchema<undefined>;
81
+ readonly name: v.StringSchema<undefined>;
77
82
  readonly url: v.StringSchema<undefined>;
78
83
  readonly types: v.ArraySchema<v.PicklistSchema<["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "judge_review", "pr_review_ready", "initiative", "platform_health", "infra_unreachable", "budget_paused", "budget_threshold", "key_drift", "merge_tag_request"], undefined>, undefined>;
79
84
  readonly runEvents: v.ArraySchema<v.PicklistSchema<["run.started", "run.completed", "run.failed"], undefined>, undefined>;
@@ -114,6 +119,184 @@ export declare const deleteNotificationWebhookContract: {
114
119
  readonly 204: typeof ContractNoBody;
115
120
  };
116
121
  };
122
+ /** Every endpoint the workspace has registered, ordered by id. Never returns a secret. */
123
+ export declare const listNotificationWebhooksContract: {
124
+ readonly method: "get";
125
+ readonly pathResolver: () => string;
126
+ readonly responsesByStatusCode: {
127
+ readonly '4xx': v.ObjectSchema<{
128
+ readonly error: v.ObjectSchema<{
129
+ readonly code: v.StringSchema<undefined>;
130
+ readonly message: v.StringSchema<undefined>;
131
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
132
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
133
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
134
+ readonly message: v.StringSchema<undefined>;
135
+ }, undefined>, undefined>, undefined>;
136
+ }, undefined>;
137
+ }, undefined>;
138
+ readonly '5xx': v.ObjectSchema<{
139
+ readonly error: v.ObjectSchema<{
140
+ readonly code: v.StringSchema<undefined>;
141
+ readonly message: v.StringSchema<undefined>;
142
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
143
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
144
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
145
+ readonly message: v.StringSchema<undefined>;
146
+ }, undefined>, undefined>, undefined>;
147
+ }, undefined>;
148
+ }, undefined>;
149
+ readonly 200: v.ObjectSchema<{
150
+ readonly webhooks: v.ArraySchema<v.ObjectSchema<{
151
+ readonly id: v.StringSchema<undefined>;
152
+ readonly name: v.StringSchema<undefined>;
153
+ readonly url: v.StringSchema<undefined>;
154
+ readonly types: v.ArraySchema<v.PicklistSchema<["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "judge_review", "pr_review_ready", "initiative", "platform_health", "infra_unreachable", "budget_paused", "budget_threshold", "key_drift", "merge_tag_request"], undefined>, undefined>;
155
+ readonly runEvents: v.ArraySchema<v.PicklistSchema<["run.started", "run.completed", "run.failed"], undefined>, undefined>;
156
+ readonly alertEvents: v.ArraySchema<v.PicklistSchema<["platform_health.firing", "platform_health.resolved"], undefined>, undefined>;
157
+ readonly enabled: v.BooleanSchema<undefined>;
158
+ readonly hasSecret: v.BooleanSchema<undefined>;
159
+ readonly updatedAt: v.NumberSchema<undefined>;
160
+ }, undefined>, undefined>;
161
+ }, undefined>;
162
+ };
163
+ };
164
+ /** One named endpoint, or null when nothing is registered under that id. */
165
+ export declare const getNamedNotificationWebhookContract: {
166
+ readonly method: "get";
167
+ readonly pathResolver: (p: {
168
+ webhookId: string;
169
+ }) => string;
170
+ readonly requestPathParamsSchema: v.ObjectSchema<{
171
+ webhookId: v.StringSchema<undefined>;
172
+ }, undefined> & import("@toad-contracts/core").StandardObjectKeysV1<unknown, unknown>;
173
+ readonly responsesByStatusCode: {
174
+ readonly '4xx': v.ObjectSchema<{
175
+ readonly error: v.ObjectSchema<{
176
+ readonly code: v.StringSchema<undefined>;
177
+ readonly message: v.StringSchema<undefined>;
178
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
179
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
180
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
181
+ readonly message: v.StringSchema<undefined>;
182
+ }, undefined>, undefined>, undefined>;
183
+ }, undefined>;
184
+ }, undefined>;
185
+ readonly '5xx': v.ObjectSchema<{
186
+ readonly error: v.ObjectSchema<{
187
+ readonly code: v.StringSchema<undefined>;
188
+ readonly message: v.StringSchema<undefined>;
189
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
190
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
191
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
192
+ readonly message: v.StringSchema<undefined>;
193
+ }, undefined>, undefined>, undefined>;
194
+ }, undefined>;
195
+ }, undefined>;
196
+ readonly 200: v.ObjectSchema<{
197
+ readonly webhook: v.NullableSchema<v.ObjectSchema<{
198
+ readonly id: v.StringSchema<undefined>;
199
+ readonly name: v.StringSchema<undefined>;
200
+ readonly url: v.StringSchema<undefined>;
201
+ readonly types: v.ArraySchema<v.PicklistSchema<["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "judge_review", "pr_review_ready", "initiative", "platform_health", "infra_unreachable", "budget_paused", "budget_threshold", "key_drift", "merge_tag_request"], undefined>, undefined>;
202
+ readonly runEvents: v.ArraySchema<v.PicklistSchema<["run.started", "run.completed", "run.failed"], undefined>, undefined>;
203
+ readonly alertEvents: v.ArraySchema<v.PicklistSchema<["platform_health.firing", "platform_health.resolved"], undefined>, undefined>;
204
+ readonly enabled: v.BooleanSchema<undefined>;
205
+ readonly hasSecret: v.BooleanSchema<undefined>;
206
+ readonly updatedAt: v.NumberSchema<undefined>;
207
+ }, undefined>, undefined>;
208
+ }, undefined>;
209
+ };
210
+ };
211
+ /** Register or update one named endpoint. Keep-on-omit in every field, like the singular route. */
212
+ export declare const putNamedNotificationWebhookContract: {
213
+ readonly method: "put";
214
+ readonly pathResolver: (p: {
215
+ webhookId: string;
216
+ }) => string;
217
+ readonly requestPathParamsSchema: v.ObjectSchema<{
218
+ webhookId: v.StringSchema<undefined>;
219
+ }, undefined> & import("@toad-contracts/core").StandardObjectKeysV1<unknown, unknown>;
220
+ readonly requestBodySchema: v.ObjectSchema<{
221
+ readonly url: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.UrlAction<string, undefined>, v.StartsWithAction<string, "https://", "The webhook endpoint must be an https:// URL">, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
222
+ readonly name: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 100, undefined>]>, undefined>;
223
+ readonly types: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "judge_review", "pr_review_ready", "initiative", "platform_health", "infra_unreachable", "budget_paused", "budget_threshold", "key_drift", "merge_tag_request"], undefined>, undefined>, undefined>;
224
+ readonly runEvents: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["run.started", "run.completed", "run.failed"], undefined>, undefined>, undefined>;
225
+ readonly alertEvents: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["platform_health.firing", "platform_health.resolved"], undefined>, undefined>, undefined>;
226
+ readonly enabled: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
227
+ readonly secret: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 16, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
228
+ }, undefined>;
229
+ readonly responsesByStatusCode: {
230
+ readonly '4xx': v.ObjectSchema<{
231
+ readonly error: v.ObjectSchema<{
232
+ readonly code: v.StringSchema<undefined>;
233
+ readonly message: v.StringSchema<undefined>;
234
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
235
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
236
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
237
+ readonly message: v.StringSchema<undefined>;
238
+ }, undefined>, undefined>, undefined>;
239
+ }, undefined>;
240
+ }, undefined>;
241
+ readonly '5xx': v.ObjectSchema<{
242
+ readonly error: v.ObjectSchema<{
243
+ readonly code: v.StringSchema<undefined>;
244
+ readonly message: v.StringSchema<undefined>;
245
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
246
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
247
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
248
+ readonly message: v.StringSchema<undefined>;
249
+ }, undefined>, undefined>, undefined>;
250
+ }, undefined>;
251
+ }, undefined>;
252
+ readonly 200: v.ObjectSchema<{
253
+ readonly id: v.StringSchema<undefined>;
254
+ readonly name: v.StringSchema<undefined>;
255
+ readonly url: v.StringSchema<undefined>;
256
+ readonly types: v.ArraySchema<v.PicklistSchema<["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "judge_review", "pr_review_ready", "initiative", "platform_health", "infra_unreachable", "budget_paused", "budget_threshold", "key_drift", "merge_tag_request"], undefined>, undefined>;
257
+ readonly runEvents: v.ArraySchema<v.PicklistSchema<["run.started", "run.completed", "run.failed"], undefined>, undefined>;
258
+ readonly alertEvents: v.ArraySchema<v.PicklistSchema<["platform_health.firing", "platform_health.resolved"], undefined>, undefined>;
259
+ readonly enabled: v.BooleanSchema<undefined>;
260
+ readonly hasSecret: v.BooleanSchema<undefined>;
261
+ readonly updatedAt: v.NumberSchema<undefined>;
262
+ }, undefined>;
263
+ };
264
+ };
265
+ /** Remove one named endpoint (its deliveries stop; its siblings are untouched). Idempotent. */
266
+ export declare const deleteNamedNotificationWebhookContract: {
267
+ readonly method: "delete";
268
+ readonly pathResolver: (p: {
269
+ webhookId: string;
270
+ }) => string;
271
+ readonly requestPathParamsSchema: v.ObjectSchema<{
272
+ webhookId: v.StringSchema<undefined>;
273
+ }, undefined> & import("@toad-contracts/core").StandardObjectKeysV1<unknown, unknown>;
274
+ readonly responsesByStatusCode: {
275
+ readonly '4xx': v.ObjectSchema<{
276
+ readonly error: v.ObjectSchema<{
277
+ readonly code: v.StringSchema<undefined>;
278
+ readonly message: v.StringSchema<undefined>;
279
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
280
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
281
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
282
+ readonly message: v.StringSchema<undefined>;
283
+ }, undefined>, undefined>, undefined>;
284
+ }, undefined>;
285
+ }, undefined>;
286
+ readonly '5xx': v.ObjectSchema<{
287
+ readonly error: v.ObjectSchema<{
288
+ readonly code: v.StringSchema<undefined>;
289
+ readonly message: v.StringSchema<undefined>;
290
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
291
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
292
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
293
+ readonly message: v.StringSchema<undefined>;
294
+ }, undefined>, undefined>, undefined>;
295
+ }, undefined>;
296
+ }, undefined>;
297
+ readonly 204: typeof ContractNoBody;
298
+ };
299
+ };
117
300
  /**
118
301
  * Read the workspace's registered endpoint. `{ webhook: null }` when none is registered: a real
119
302
  * answer rather than a 404, so a caller's startup self-check ("am I already wired up?") reads one
@@ -147,6 +330,8 @@ export declare const getPublicNotificationWebhookContract: {
147
330
  }, undefined>;
148
331
  readonly 200: v.ObjectSchema<{
149
332
  readonly webhook: v.NullableSchema<v.ObjectSchema<{
333
+ readonly id: v.StringSchema<undefined>;
334
+ readonly name: v.StringSchema<undefined>;
150
335
  readonly url: v.StringSchema<undefined>;
151
336
  readonly types: v.ArraySchema<v.PicklistSchema<["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "judge_review", "pr_review_ready", "initiative", "platform_health", "infra_unreachable", "budget_paused", "budget_threshold", "key_drift", "merge_tag_request"], undefined>, undefined>;
152
337
  readonly runEvents: v.ArraySchema<v.PicklistSchema<["run.started", "run.completed", "run.failed"], undefined>, undefined>;
@@ -174,6 +359,7 @@ export declare const putPublicNotificationWebhookContract: {
174
359
  readonly pathResolver: () => string;
175
360
  readonly requestBodySchema: v.ObjectSchema<{
176
361
  readonly url: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.UrlAction<string, undefined>, v.StartsWithAction<string, "https://", "The webhook endpoint must be an https:// URL">, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
362
+ readonly name: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 100, undefined>]>, undefined>;
177
363
  readonly types: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "judge_review", "pr_review_ready", "initiative", "platform_health", "infra_unreachable", "budget_paused", "budget_threshold", "key_drift", "merge_tag_request"], undefined>, undefined>, undefined>;
178
364
  readonly runEvents: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["run.started", "run.completed", "run.failed"], undefined>, undefined>, undefined>;
179
365
  readonly alertEvents: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["platform_health.firing", "platform_health.resolved"], undefined>, undefined>, undefined>;
@@ -204,6 +390,8 @@ export declare const putPublicNotificationWebhookContract: {
204
390
  }, undefined>;
205
391
  }, undefined>;
206
392
  readonly 200: v.ObjectSchema<{
393
+ readonly id: v.StringSchema<undefined>;
394
+ readonly name: v.StringSchema<undefined>;
207
395
  readonly url: v.StringSchema<undefined>;
208
396
  readonly types: v.ArraySchema<v.PicklistSchema<["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "judge_review", "pr_review_ready", "initiative", "platform_health", "infra_unreachable", "budget_paused", "budget_threshold", "key_drift", "merge_tag_request"], undefined>, undefined>;
209
397
  readonly runEvents: v.ArraySchema<v.PicklistSchema<["run.started", "run.completed", "run.failed"], undefined>, undefined>;
@@ -248,4 +436,205 @@ export declare const deletePublicNotificationWebhookContract: {
248
436
  } & {
249
437
  readonly minScope: "admin";
250
438
  };
439
+ /**
440
+ * Every endpoint the workspace has registered. Bounded by the write path
441
+ * (`MAX_NOTIFICATION_WEBHOOKS_PER_WORKSPACE`) rather than by a cursor: see the schema.
442
+ */
443
+ export declare const listPublicNotificationWebhooksContract: {
444
+ readonly method: "get";
445
+ readonly pathResolver: () => string;
446
+ readonly responsesByStatusCode: {
447
+ readonly '4xx': v.ObjectSchema<{
448
+ readonly error: v.ObjectSchema<{
449
+ readonly code: v.StringSchema<undefined>;
450
+ readonly message: v.StringSchema<undefined>;
451
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
452
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
453
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
454
+ readonly message: v.StringSchema<undefined>;
455
+ }, undefined>, undefined>, undefined>;
456
+ }, undefined>;
457
+ }, undefined>;
458
+ readonly '5xx': v.ObjectSchema<{
459
+ readonly error: v.ObjectSchema<{
460
+ readonly code: v.StringSchema<undefined>;
461
+ readonly message: v.StringSchema<undefined>;
462
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
463
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
464
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
465
+ readonly message: v.StringSchema<undefined>;
466
+ }, undefined>, undefined>, undefined>;
467
+ }, undefined>;
468
+ }, undefined>;
469
+ readonly 200: v.ObjectSchema<{
470
+ readonly webhooks: v.ArraySchema<v.ObjectSchema<{
471
+ readonly id: v.StringSchema<undefined>;
472
+ readonly name: v.StringSchema<undefined>;
473
+ readonly url: v.StringSchema<undefined>;
474
+ readonly types: v.ArraySchema<v.PicklistSchema<["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "judge_review", "pr_review_ready", "initiative", "platform_health", "infra_unreachable", "budget_paused", "budget_threshold", "key_drift", "merge_tag_request"], undefined>, undefined>;
475
+ readonly runEvents: v.ArraySchema<v.PicklistSchema<["run.started", "run.completed", "run.failed"], undefined>, undefined>;
476
+ readonly alertEvents: v.ArraySchema<v.PicklistSchema<["platform_health.firing", "platform_health.resolved"], undefined>, undefined>;
477
+ readonly enabled: v.BooleanSchema<undefined>;
478
+ readonly hasSecret: v.BooleanSchema<undefined>;
479
+ readonly updatedAt: v.NumberSchema<undefined>;
480
+ }, undefined>, undefined>;
481
+ }, undefined>;
482
+ };
483
+ } & {
484
+ readonly minScope: "admin";
485
+ };
486
+ /**
487
+ * Read one named endpoint. `{ webhook: null }` when nothing is registered under that id, for the
488
+ * same reason the singular read answers that way: this is a startup self-check, and an id a caller
489
+ * chose for itself is not a resource it can mistype into somebody else's.
490
+ */
491
+ export declare const getPublicNamedNotificationWebhookContract: {
492
+ readonly method: "get";
493
+ readonly requestPathParamsSchema: v.ObjectSchema<{
494
+ webhookId: v.StringSchema<undefined>;
495
+ }, undefined> & import("@toad-contracts/core").StandardObjectKeysV1<unknown, unknown>;
496
+ readonly pathResolver: ({ webhookId }: {
497
+ webhookId: string;
498
+ }) => string;
499
+ readonly responsesByStatusCode: {
500
+ readonly '4xx': v.ObjectSchema<{
501
+ readonly error: v.ObjectSchema<{
502
+ readonly code: v.StringSchema<undefined>;
503
+ readonly message: v.StringSchema<undefined>;
504
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
505
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
506
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
507
+ readonly message: v.StringSchema<undefined>;
508
+ }, undefined>, undefined>, undefined>;
509
+ }, undefined>;
510
+ }, undefined>;
511
+ readonly '5xx': v.ObjectSchema<{
512
+ readonly error: v.ObjectSchema<{
513
+ readonly code: v.StringSchema<undefined>;
514
+ readonly message: v.StringSchema<undefined>;
515
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
516
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
517
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
518
+ readonly message: v.StringSchema<undefined>;
519
+ }, undefined>, undefined>, undefined>;
520
+ }, undefined>;
521
+ }, undefined>;
522
+ readonly 200: v.ObjectSchema<{
523
+ readonly webhook: v.NullableSchema<v.ObjectSchema<{
524
+ readonly id: v.StringSchema<undefined>;
525
+ readonly name: v.StringSchema<undefined>;
526
+ readonly url: v.StringSchema<undefined>;
527
+ readonly types: v.ArraySchema<v.PicklistSchema<["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "judge_review", "pr_review_ready", "initiative", "platform_health", "infra_unreachable", "budget_paused", "budget_threshold", "key_drift", "merge_tag_request"], undefined>, undefined>;
528
+ readonly runEvents: v.ArraySchema<v.PicklistSchema<["run.started", "run.completed", "run.failed"], undefined>, undefined>;
529
+ readonly alertEvents: v.ArraySchema<v.PicklistSchema<["platform_health.firing", "platform_health.resolved"], undefined>, undefined>;
530
+ readonly enabled: v.BooleanSchema<undefined>;
531
+ readonly hasSecret: v.BooleanSchema<undefined>;
532
+ readonly updatedAt: v.NumberSchema<undefined>;
533
+ }, undefined>, undefined>;
534
+ }, undefined>;
535
+ };
536
+ } & {
537
+ readonly minScope: "admin";
538
+ };
539
+ /**
540
+ * Register or update one named endpoint under a CALLER-CHOSEN id, with the same keep-on-omit rule
541
+ * and the same write-only secret as the singular route. Creating a new id past the per-workspace
542
+ * cap is refused with `reason: 'webhook_limit_reached'`; an id that is not a lowercase slug with
543
+ * `reason: 'invalid_webhook_id'`.
544
+ */
545
+ export declare const putPublicNamedNotificationWebhookContract: {
546
+ readonly method: "put";
547
+ readonly requestPathParamsSchema: v.ObjectSchema<{
548
+ webhookId: v.StringSchema<undefined>;
549
+ }, undefined> & import("@toad-contracts/core").StandardObjectKeysV1<unknown, unknown>;
550
+ readonly pathResolver: ({ webhookId }: {
551
+ webhookId: string;
552
+ }) => string;
553
+ readonly requestBodySchema: v.ObjectSchema<{
554
+ readonly url: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.UrlAction<string, undefined>, v.StartsWithAction<string, "https://", "The webhook endpoint must be an https:// URL">, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
555
+ readonly name: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 100, undefined>]>, undefined>;
556
+ readonly types: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "judge_review", "pr_review_ready", "initiative", "platform_health", "infra_unreachable", "budget_paused", "budget_threshold", "key_drift", "merge_tag_request"], undefined>, undefined>, undefined>;
557
+ readonly runEvents: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["run.started", "run.completed", "run.failed"], undefined>, undefined>, undefined>;
558
+ readonly alertEvents: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["platform_health.firing", "platform_health.resolved"], undefined>, undefined>, undefined>;
559
+ readonly enabled: v.OptionalSchema<v.BooleanSchema<undefined>, undefined>;
560
+ readonly secret: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 16, undefined>, v.MaxLengthAction<string, 200, undefined>]>, undefined>;
561
+ }, undefined>;
562
+ readonly responsesByStatusCode: {
563
+ readonly '4xx': v.ObjectSchema<{
564
+ readonly error: v.ObjectSchema<{
565
+ readonly code: v.StringSchema<undefined>;
566
+ readonly message: v.StringSchema<undefined>;
567
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
568
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
569
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
570
+ readonly message: v.StringSchema<undefined>;
571
+ }, undefined>, undefined>, undefined>;
572
+ }, undefined>;
573
+ }, undefined>;
574
+ readonly '5xx': v.ObjectSchema<{
575
+ readonly error: v.ObjectSchema<{
576
+ readonly code: v.StringSchema<undefined>;
577
+ readonly message: v.StringSchema<undefined>;
578
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
579
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
580
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
581
+ readonly message: v.StringSchema<undefined>;
582
+ }, undefined>, undefined>, undefined>;
583
+ }, undefined>;
584
+ }, undefined>;
585
+ readonly 200: v.ObjectSchema<{
586
+ readonly id: v.StringSchema<undefined>;
587
+ readonly name: v.StringSchema<undefined>;
588
+ readonly url: v.StringSchema<undefined>;
589
+ readonly types: v.ArraySchema<v.PicklistSchema<["merge_review", "pipeline_complete", "ci_failed", "test_failed", "requirement_review", "clarity_review", "release_regression", "decision_required", "human_test_ready", "visual_confirmation_ready", "human_review", "followup_pending", "fork_decision_pending", "judge_review", "pr_review_ready", "initiative", "platform_health", "infra_unreachable", "budget_paused", "budget_threshold", "key_drift", "merge_tag_request"], undefined>, undefined>;
590
+ readonly runEvents: v.ArraySchema<v.PicklistSchema<["run.started", "run.completed", "run.failed"], undefined>, undefined>;
591
+ readonly alertEvents: v.ArraySchema<v.PicklistSchema<["platform_health.firing", "platform_health.resolved"], undefined>, undefined>;
592
+ readonly enabled: v.BooleanSchema<undefined>;
593
+ readonly hasSecret: v.BooleanSchema<undefined>;
594
+ readonly updatedAt: v.NumberSchema<undefined>;
595
+ }, undefined>;
596
+ };
597
+ } & {
598
+ readonly minScope: "admin";
599
+ };
600
+ /**
601
+ * Remove one named endpoint. Idempotent, and scoped to the id alone: a caller tearing its own
602
+ * receiver down can never take a sibling integration's registration with it.
603
+ */
604
+ export declare const deletePublicNamedNotificationWebhookContract: {
605
+ readonly method: "delete";
606
+ readonly requestPathParamsSchema: v.ObjectSchema<{
607
+ webhookId: v.StringSchema<undefined>;
608
+ }, undefined> & import("@toad-contracts/core").StandardObjectKeysV1<unknown, unknown>;
609
+ readonly pathResolver: ({ webhookId }: {
610
+ webhookId: string;
611
+ }) => string;
612
+ readonly responsesByStatusCode: {
613
+ readonly '4xx': v.ObjectSchema<{
614
+ readonly error: v.ObjectSchema<{
615
+ readonly code: v.StringSchema<undefined>;
616
+ readonly message: v.StringSchema<undefined>;
617
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
618
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
619
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
620
+ readonly message: v.StringSchema<undefined>;
621
+ }, undefined>, undefined>, undefined>;
622
+ }, undefined>;
623
+ }, undefined>;
624
+ readonly '5xx': v.ObjectSchema<{
625
+ readonly error: v.ObjectSchema<{
626
+ readonly code: v.StringSchema<undefined>;
627
+ readonly message: v.StringSchema<undefined>;
628
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
629
+ readonly issues: v.OptionalSchema<v.ArraySchema<v.ObjectSchema<{
630
+ readonly path: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
631
+ readonly message: v.StringSchema<undefined>;
632
+ }, undefined>, undefined>, undefined>;
633
+ }, undefined>;
634
+ }, undefined>;
635
+ readonly 204: typeof ContractNoBody;
636
+ };
637
+ } & {
638
+ readonly minScope: "admin";
639
+ };
251
640
  //# sourceMappingURL=notification-webhooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"notification-webhooks.d.ts","sourceRoot":"","sources":["../../src/routes/notification-webhooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqB,MAAM,yBAAyB,CAAA;AAC3E,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AA0B5B,8FAA8F;AAC9F,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOzC,CAAA;AAEF,yFAAyF;AACzF,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKzC,CAAA;AAEF,wDAAwD;AACxD,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAI5C,CAAA;AAIF;;;;GAIG;AACH,eAAO,MAAM,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOhD,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQhD,CAAA;AAED,gGAAgG;AAChG,eAAO,MAAM,uCAAuC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOnD,CAAA"}
1
+ {"version":3,"file":"notification-webhooks.d.ts","sourceRoot":"","sources":["../../src/routes/notification-webhooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqB,MAAM,yBAAyB,CAAA;AAC3E,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAiC5B,2FAA2F;AAC3F,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOzC,CAAA;AAEF,yFAAyF;AACzF,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKzC,CAAA;AAEF,wDAAwD;AACxD,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAI5C,CAAA;AAIF,0FAA0F;AAC1F,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAO3C,CAAA;AAEF,4EAA4E;AAC5E,eAAO,MAAM,mCAAmC;;+BAE5B;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGvC,CAAA;AAEF,mGAAmG;AACnG,eAAO,MAAM,mCAAmC;;+BAE5B;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAIvC,CAAA;AAEF,+FAA+F;AAC/F,eAAO,MAAM,sCAAsC;;+BAE/B;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGvC,CAAA;AAIF;;;;GAIG;AACH,eAAO,MAAM,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOhD,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQhD,CAAA;AAED,gGAAgG;AAChG,eAAO,MAAM,uCAAuC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOnD,CAAA;AAWD;;;GAGG;AACH,eAAO,MAAM,sCAAsC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOlD,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,yCAAyC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQrD,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,yCAAyC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CASrD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,4CAA4C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQxD,CAAA"}
@@ -1,8 +1,8 @@
1
1
  import { ContractNoBody, defineApiContract } from '@toad-contracts/valibot';
2
2
  import * as v from 'valibot';
3
- import { notificationWebhookSchema, publicNotificationWebhookSchema, putNotificationWebhookSchema, } from '../notification-webhooks.js';
4
- import { errorResponses, withMinScope } from './_shared.js';
5
- // Management routes for a workspace's OUTBOUND notification webhook, on TWO surfaces:
3
+ import { notificationWebhookSchema, publicNotificationWebhookListSchema, publicNotificationWebhookSchema, putNotificationWebhookSchema, } from '../notification-webhooks.js';
4
+ import { errorResponses, singleStringParam, withMinScope } from './_shared.js';
5
+ // Management routes for a workspace's OUTBOUND notification webhooks, on TWO surfaces:
6
6
  //
7
7
  // 1. Session-authed, mounted under `/workspaces/:workspaceId` (so paths are relative), like the
8
8
  // tracker/Slack settings. These are writes to an integration's configuration, so they sit
@@ -10,16 +10,22 @@ import { errorResponses, withMinScope } from './_shared.js';
10
10
  // 2. `/api/v1/notification-webhook`, on absolute paths, authenticated in-controller by an
11
11
  // `admin`-scope public-API key. Same three verbs against the same service.
12
12
  //
13
- // The endpoint they configure is consumed by `WebhookNotificationChannel` and the run-lifecycle /
14
- // platform-alert sinks beside it, not by these routes.
13
+ // The endpoints they configure are consumed by `WebhookNotificationChannel` and the run-lifecycle
14
+ // / platform-alert sinks beside it, not by these routes.
15
15
  //
16
16
  // The second surface exists because the FIRST one made the push channel unreachable to exactly
17
17
  // the caller it was built for. A deployment whose operator is headless has no browser session, so
18
18
  // the receiver that run-lifecycle push exists to feed could only be registered by a human clicking
19
19
  // through an app the feature deliberately does not need. Both surfaces are thin delegates over
20
- // `NotificationWebhookService` (same URL guard, same write-only secret, same
21
- // one-row-per-workspace rule), so neither can admit an endpoint the other would reject.
22
- /** The workspace's registered webhook, or null when none is set. Never returns the secret. */
20
+ // `NotificationWebhookService` (same URL guard, same write-only secret, same per-endpoint rules),
21
+ // so neither can admit an endpoint the other would reject.
22
+ //
23
+ // Each surface comes in two shapes. The SINGULAR routes (`…/notification-webhook`) address the one
24
+ // id `default`; the COLLECTION (`…/notification-webhooks[/:webhookId]`) addresses any of them. The
25
+ // singular pair is not a legacy alias kept alive out of politeness: it is the whole surface a
26
+ // deployment with one receiver ever needs, and collapsing it into the collection would have made
27
+ // every existing consumer move for a capability it does not use.
28
+ /** The workspace's default webhook, or null when none is set. Never returns the secret. */
23
29
  export const getNotificationWebhookContract = defineApiContract({
24
30
  method: 'get',
25
31
  pathResolver: () => '/notification-webhook',
@@ -41,6 +47,38 @@ export const deleteNotificationWebhookContract = defineApiContract({
41
47
  pathResolver: () => '/notification-webhook',
42
48
  responsesByStatusCode: { 204: ContractNoBody, ...errorResponses },
43
49
  });
50
+ // ---- the session surface's COLLECTION (every named endpoint) ----
51
+ /** Every endpoint the workspace has registered, ordered by id. Never returns a secret. */
52
+ export const listNotificationWebhooksContract = defineApiContract({
53
+ method: 'get',
54
+ pathResolver: () => '/notification-webhooks',
55
+ responsesByStatusCode: {
56
+ 200: publicNotificationWebhookListSchema,
57
+ ...errorResponses,
58
+ },
59
+ });
60
+ /** One named endpoint, or null when nothing is registered under that id. */
61
+ export const getNamedNotificationWebhookContract = defineApiContract({
62
+ method: 'get',
63
+ pathResolver: (p) => `/notification-webhooks/${p.webhookId}`,
64
+ requestPathParamsSchema: singleStringParam('webhookId'),
65
+ responsesByStatusCode: { 200: publicNotificationWebhookSchema, ...errorResponses },
66
+ });
67
+ /** Register or update one named endpoint. Keep-on-omit in every field, like the singular route. */
68
+ export const putNamedNotificationWebhookContract = defineApiContract({
69
+ method: 'put',
70
+ pathResolver: (p) => `/notification-webhooks/${p.webhookId}`,
71
+ requestPathParamsSchema: singleStringParam('webhookId'),
72
+ requestBodySchema: putNotificationWebhookSchema,
73
+ responsesByStatusCode: { 200: notificationWebhookSchema, ...errorResponses },
74
+ });
75
+ /** Remove one named endpoint (its deliveries stop; its siblings are untouched). Idempotent. */
76
+ export const deleteNamedNotificationWebhookContract = defineApiContract({
77
+ method: 'delete',
78
+ pathResolver: (p) => `/notification-webhooks/${p.webhookId}`,
79
+ requestPathParamsSchema: singleStringParam('webhookId'),
80
+ responsesByStatusCode: { 204: ContractNoBody, ...errorResponses },
81
+ });
44
82
  // ---- the external `/api/v1` surface (absolute paths, key-authenticated) ----
45
83
  /**
46
84
  * Read the workspace's registered endpoint. `{ webhook: null }` when none is registered: a real
@@ -73,4 +111,55 @@ export const deletePublicNotificationWebhookContract = withMinScope('admin', def
73
111
  pathResolver: () => '/api/v1/notification-webhook',
74
112
  responsesByStatusCode: { 204: ContractNoBody, ...errorResponses },
75
113
  }));
114
+ // ---- the public COLLECTION: several named endpoints per workspace ----
115
+ //
116
+ // The singular resource above is ONE endpoint per workspace, which made a second integration's
117
+ // enrolment a hostile act: registering it stole the slot from whatever was already there, and the
118
+ // only way to notice was that the previous receiver went quiet. The collection is the additive fix
119
+ // — the singular routes keep working and now project onto the `default` id — and it is what lets a
120
+ // credential-holding front-end (a Cloudflare OS gatekeeper) enroll its own receiver, with its own
121
+ // signing secret and its own event filters, beside a deployment's existing CI hook.
122
+ /**
123
+ * Every endpoint the workspace has registered. Bounded by the write path
124
+ * (`MAX_NOTIFICATION_WEBHOOKS_PER_WORKSPACE`) rather than by a cursor: see the schema.
125
+ */
126
+ export const listPublicNotificationWebhooksContract = withMinScope('admin', defineApiContract({
127
+ method: 'get',
128
+ pathResolver: () => '/api/v1/notification-webhooks',
129
+ responsesByStatusCode: { 200: publicNotificationWebhookListSchema, ...errorResponses },
130
+ }));
131
+ /**
132
+ * Read one named endpoint. `{ webhook: null }` when nothing is registered under that id, for the
133
+ * same reason the singular read answers that way: this is a startup self-check, and an id a caller
134
+ * chose for itself is not a resource it can mistype into somebody else's.
135
+ */
136
+ export const getPublicNamedNotificationWebhookContract = withMinScope('admin', defineApiContract({
137
+ method: 'get',
138
+ requestPathParamsSchema: singleStringParam('webhookId'),
139
+ pathResolver: ({ webhookId }) => `/api/v1/notification-webhooks/${webhookId}`,
140
+ responsesByStatusCode: { 200: publicNotificationWebhookSchema, ...errorResponses },
141
+ }));
142
+ /**
143
+ * Register or update one named endpoint under a CALLER-CHOSEN id, with the same keep-on-omit rule
144
+ * and the same write-only secret as the singular route. Creating a new id past the per-workspace
145
+ * cap is refused with `reason: 'webhook_limit_reached'`; an id that is not a lowercase slug with
146
+ * `reason: 'invalid_webhook_id'`.
147
+ */
148
+ export const putPublicNamedNotificationWebhookContract = withMinScope('admin', defineApiContract({
149
+ method: 'put',
150
+ requestPathParamsSchema: singleStringParam('webhookId'),
151
+ pathResolver: ({ webhookId }) => `/api/v1/notification-webhooks/${webhookId}`,
152
+ requestBodySchema: putNotificationWebhookSchema,
153
+ responsesByStatusCode: { 200: notificationWebhookSchema, ...errorResponses },
154
+ }));
155
+ /**
156
+ * Remove one named endpoint. Idempotent, and scoped to the id alone: a caller tearing its own
157
+ * receiver down can never take a sibling integration's registration with it.
158
+ */
159
+ export const deletePublicNamedNotificationWebhookContract = withMinScope('admin', defineApiContract({
160
+ method: 'delete',
161
+ requestPathParamsSchema: singleStringParam('webhookId'),
162
+ pathResolver: ({ webhookId }) => `/api/v1/notification-webhooks/${webhookId}`,
163
+ responsesByStatusCode: { 204: ContractNoBody, ...errorResponses },
164
+ }));
76
165
  //# sourceMappingURL=notification-webhooks.js.map