@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.
- package/dist/documents.d.ts +45 -0
- package/dist/documents.d.ts.map +1 -1
- package/dist/documents.js +35 -0
- package/dist/documents.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +6 -0
- package/dist/errors.js.map +1 -1
- package/dist/execution.d.ts +66 -0
- package/dist/execution.d.ts.map +1 -1
- package/dist/execution.js +19 -0
- package/dist/execution.js.map +1 -1
- package/dist/notification-webhooks.d.ts +92 -2
- package/dist/notification-webhooks.d.ts.map +1 -1
- package/dist/notification-webhooks.js +63 -4
- package/dist/notification-webhooks.js.map +1 -1
- package/dist/pr-report.d.ts +132 -1
- package/dist/pr-report.d.ts.map +1 -1
- package/dist/pr-report.js +53 -1
- package/dist/pr-report.js.map +1 -1
- package/dist/routes/agent-runs.d.ts +32 -0
- package/dist/routes/agent-runs.d.ts.map +1 -1
- package/dist/routes/bug-hunt.d.ts +32 -0
- package/dist/routes/bug-hunt.d.ts.map +1 -1
- package/dist/routes/execution.d.ts +128 -0
- package/dist/routes/execution.d.ts.map +1 -1
- package/dist/routes/human-review.d.ts +16 -0
- package/dist/routes/human-review.d.ts.map +1 -1
- package/dist/routes/human-test.d.ts +80 -0
- package/dist/routes/human-test.d.ts.map +1 -1
- package/dist/routes/notification-webhooks.d.ts +390 -1
- package/dist/routes/notification-webhooks.d.ts.map +1 -1
- package/dist/routes/notification-webhooks.js +97 -8
- package/dist/routes/notification-webhooks.js.map +1 -1
- package/dist/routes/public-evidence.d.ts +42 -0
- package/dist/routes/public-evidence.d.ts.map +1 -1
- package/dist/routes/visual-confirm.d.ts +48 -0
- package/dist/routes/visual-confirm.d.ts.map +1 -1
- package/dist/routes/workspaces.d.ts +32 -0
- package/dist/routes/workspaces.d.ts.map +1 -1
- package/dist/run-outcome.d.ts +98 -1
- package/dist/run-outcome.d.ts.map +1 -1
- package/dist/run-outcome.js +73 -1
- package/dist/run-outcome.js.map +1 -1
- package/dist/snapshot.d.ts +16 -0
- package/dist/snapshot.d.ts.map +1 -1
- 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
|
|
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
|
|
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;
|
|
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
|
|
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
|
|
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
|
-
//
|
|
22
|
-
|
|
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
|