@agentuity/server 1.0.21 → 1.0.23

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 (62) hide show
  1. package/dist/api/index.d.ts +1 -0
  2. package/dist/api/index.d.ts.map +1 -1
  3. package/dist/api/index.js +1 -0
  4. package/dist/api/index.js.map +1 -1
  5. package/dist/api/project/deploy.d.ts +8 -0
  6. package/dist/api/project/deploy.d.ts.map +1 -1
  7. package/dist/api/project/deploy.js +14 -13
  8. package/dist/api/project/deploy.js.map +1 -1
  9. package/dist/api/sandbox/execute.d.ts +2 -2
  10. package/dist/api/sandbox/execution.d.ts +4 -4
  11. package/dist/api/sandbox/snapshot-build.d.ts +2 -0
  12. package/dist/api/sandbox/snapshot-build.d.ts.map +1 -1
  13. package/dist/api/sandbox/snapshot-build.js +4 -0
  14. package/dist/api/sandbox/snapshot-build.js.map +1 -1
  15. package/dist/api/webhook/deliveries.d.ts +94 -0
  16. package/dist/api/webhook/deliveries.d.ts.map +1 -0
  17. package/dist/api/webhook/deliveries.js +79 -0
  18. package/dist/api/webhook/deliveries.js.map +1 -0
  19. package/dist/api/webhook/destinations.d.ts +136 -0
  20. package/dist/api/webhook/destinations.d.ts.map +1 -0
  21. package/dist/api/webhook/destinations.js +137 -0
  22. package/dist/api/webhook/destinations.js.map +1 -0
  23. package/dist/api/webhook/index.d.ts +41 -0
  24. package/dist/api/webhook/index.d.ts.map +1 -0
  25. package/dist/api/webhook/index.js +59 -0
  26. package/dist/api/webhook/index.js.map +1 -0
  27. package/dist/api/webhook/receipts.d.ts +77 -0
  28. package/dist/api/webhook/receipts.d.ts.map +1 -0
  29. package/dist/api/webhook/receipts.js +78 -0
  30. package/dist/api/webhook/receipts.js.map +1 -0
  31. package/dist/api/webhook/types.d.ts +249 -0
  32. package/dist/api/webhook/types.d.ts.map +1 -0
  33. package/dist/api/webhook/types.js +221 -0
  34. package/dist/api/webhook/types.js.map +1 -0
  35. package/dist/api/webhook/util.d.ts +202 -0
  36. package/dist/api/webhook/util.d.ts.map +1 -0
  37. package/dist/api/webhook/util.js +201 -0
  38. package/dist/api/webhook/util.js.map +1 -0
  39. package/dist/api/webhook/webhooks.d.ts +146 -0
  40. package/dist/api/webhook/webhooks.d.ts.map +1 -0
  41. package/dist/api/webhook/webhooks.js +165 -0
  42. package/dist/api/webhook/webhooks.js.map +1 -0
  43. package/dist/config.d.ts +1 -0
  44. package/dist/config.d.ts.map +1 -1
  45. package/dist/config.js +1 -0
  46. package/dist/config.js.map +1 -1
  47. package/dist/runtime-bootstrap.d.ts.map +1 -1
  48. package/dist/runtime-bootstrap.js +3 -0
  49. package/dist/runtime-bootstrap.js.map +1 -1
  50. package/package.json +4 -4
  51. package/src/api/index.ts +1 -0
  52. package/src/api/project/deploy.ts +16 -16
  53. package/src/api/sandbox/snapshot-build.ts +6 -0
  54. package/src/api/webhook/deliveries.ts +129 -0
  55. package/src/api/webhook/destinations.ts +224 -0
  56. package/src/api/webhook/index.ts +133 -0
  57. package/src/api/webhook/receipts.ts +124 -0
  58. package/src/api/webhook/types.ts +309 -0
  59. package/src/api/webhook/util.ts +237 -0
  60. package/src/api/webhook/webhooks.ts +260 -0
  61. package/src/config.ts +2 -0
  62. package/src/runtime-bootstrap.ts +3 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/api/webhook/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB;;;;;;;;;GASG;AACH,eAAO,MAAM,4BAA4B;;EAAkB,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAMlF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,2BAA2B;;;;EAA2C,CAAC;AAEpF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAMhF;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa;;;;;;;;iBAexB,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEpD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;iBAenC,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB;;;;;;iBAW/B,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;iBAmBhC,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAMpE;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IACjC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAMD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,0BAA0B;;;iBAKrC,CAAC;AAEH,2CAA2C;AAC3C,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E;;;;;;;;;;GAUG;AACH,eAAO,MAAM,0BAA0B;;;iBAKrC,CAAC;AAEH,2CAA2C;AAC3C,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E;;;;;;;;;;GAUG;AACH,eAAO,MAAM,qCAAqC;;;;;iBAKhD,CAAC;AAEH,uDAAuD;AACvD,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qCAAqC,CAAC,CAAC;AAEpG;;;;;;;;;GASG;AACH,eAAO,MAAM,qCAAqC;;iBAGhD,CAAC;AAEH,uDAAuD;AACvD,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qCAAqC,CAAC,CAAC;AAEpG,eAAO,MAAM,uBAAuB;;;iBAGlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,eAAO,MAAM,yBAAyB;;;iBAA0B,CAAC;AAEjE,yCAAyC;AACzC,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,gCAAgC;;;iBAA0B,CAAC;AAExE,iDAAiD;AACjD,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAC;AAE1F,eAAO,MAAM,kCAAkC;;;iBAA0B,CAAC;AAE1E,mDAAmD;AACnD,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC"}
@@ -0,0 +1,221 @@
1
+ import { z } from 'zod';
2
+ // ============================================================================
3
+ // Webhook Destination Types
4
+ // ============================================================================
5
+ /**
6
+ * Webhook destination type schema.
7
+ *
8
+ * Currently only 'url' destinations are supported.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * const destType = WebhookDestinationTypeSchema.parse('url');
13
+ * ```
14
+ */
15
+ export const WebhookDestinationTypeSchema = z.enum(['url']);
16
+ // ============================================================================
17
+ // Webhook Delivery Status
18
+ // ============================================================================
19
+ /**
20
+ * Webhook delivery status schema.
21
+ *
22
+ * - `pending`: Delivery is queued and waiting to be sent.
23
+ * - `success`: Delivery was completed successfully.
24
+ * - `failed`: Delivery failed after all retry attempts.
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * const status = WebhookDeliveryStatusSchema.parse('success');
29
+ * ```
30
+ */
31
+ export const WebhookDeliveryStatusSchema = z.enum(['pending', 'success', 'failed']);
32
+ // ============================================================================
33
+ // Core Schemas
34
+ // ============================================================================
35
+ /**
36
+ * Webhook schema representing a webhook endpoint.
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * const webhook = await getWebhook(client, 'wh_abc123');
41
+ * console.log(`Webhook: ${webhook.name} (${webhook.id})`);
42
+ * ```
43
+ */
44
+ export const WebhookSchema = z.object({
45
+ /** Unique identifier for the webhook (prefixed with wh_). */
46
+ id: z.string(),
47
+ /** ISO 8601 timestamp when the webhook was created. */
48
+ created_at: z.string(),
49
+ /** ISO 8601 timestamp when the webhook was last updated. */
50
+ updated_at: z.string(),
51
+ /** ID of the user who created the webhook. */
52
+ created_by: z.string(),
53
+ /** Human-readable webhook name. */
54
+ name: z.string(),
55
+ /** Optional description of the webhook's purpose. */
56
+ description: z.string().nullable().optional(),
57
+ /** Fully-qualified ingest URL for sending events to this webhook. Only present on create. */
58
+ url: z.string().optional(),
59
+ });
60
+ /**
61
+ * Webhook destination schema representing a delivery target for webhook events.
62
+ *
63
+ * Destinations define where incoming webhook payloads are forwarded to.
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * const destinations = await listWebhookDestinations(client, 'wh_abc123');
68
+ * for (const dest of destinations) {
69
+ * console.log(`Destination ${dest.id}: type=${dest.type}`);
70
+ * }
71
+ * ```
72
+ */
73
+ export const WebhookDestinationSchema = z.object({
74
+ /** Unique identifier for the destination (prefixed with whds_). */
75
+ id: z.string(),
76
+ /** ISO 8601 timestamp when the destination was created. */
77
+ created_at: z.string(),
78
+ /** ISO 8601 timestamp when the destination was last updated. */
79
+ updated_at: z.string(),
80
+ /** ID of the user who created the destination. */
81
+ created_by: z.string(),
82
+ /** ID of the webhook this destination belongs to. */
83
+ webhook_id: z.string(),
84
+ /** Type of destination (currently only 'url'). */
85
+ type: WebhookDestinationTypeSchema,
86
+ /** Configuration object for the destination (e.g., URL, headers). */
87
+ config: z.record(z.string(), z.unknown()),
88
+ });
89
+ /**
90
+ * Webhook receipt schema representing an incoming webhook payload that was received.
91
+ *
92
+ * Receipts capture the raw payload and headers of each incoming webhook request.
93
+ *
94
+ * @example
95
+ * ```typescript
96
+ * const receipt = await getWebhookReceipt(client, 'wh_abc123', 'whrc_def456');
97
+ * console.log(`Receipt ${receipt.id}: received at ${receipt.date}`);
98
+ * ```
99
+ */
100
+ export const WebhookReceiptSchema = z.object({
101
+ /** Unique identifier for the receipt (prefixed with whrc_). */
102
+ id: z.string(),
103
+ /** ISO 8601 timestamp when the receipt was recorded. */
104
+ date: z.string(),
105
+ /** ID of the webhook this receipt belongs to. */
106
+ webhook_id: z.string(),
107
+ /** HTTP headers from the incoming webhook request. */
108
+ headers: z.record(z.string(), z.unknown()),
109
+ /** Raw payload from the incoming webhook request (can be any type). */
110
+ payload: z.unknown(),
111
+ });
112
+ /**
113
+ * Webhook delivery schema representing a delivery attempt to a destination.
114
+ *
115
+ * Deliveries track the status and result of forwarding a received webhook
116
+ * payload to a configured destination.
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * const deliveries = await listWebhookDeliveries(client, 'wh_abc123');
121
+ * for (const delivery of deliveries) {
122
+ * console.log(`Delivery ${delivery.id}: ${delivery.status}`);
123
+ * }
124
+ * ```
125
+ */
126
+ export const WebhookDeliverySchema = z.object({
127
+ /** Unique identifier for the delivery (prefixed with whdv_). */
128
+ id: z.string(),
129
+ /** ISO 8601 timestamp when the delivery was attempted. */
130
+ date: z.string(),
131
+ /** ID of the webhook this delivery belongs to. */
132
+ webhook_id: z.string(),
133
+ /** ID of the destination this delivery was sent to. */
134
+ webhook_destination_id: z.string(),
135
+ /** ID of the receipt that triggered this delivery. */
136
+ webhook_receipt_id: z.string(),
137
+ /** Current status of the delivery. */
138
+ status: WebhookDeliveryStatusSchema,
139
+ /** Number of retry attempts made. */
140
+ retries: z.number(),
141
+ /** Error message if the delivery failed. */
142
+ error: z.string().nullable().optional(),
143
+ /** Response data from the destination (if available). */
144
+ response: z.record(z.string(), z.unknown()).nullable().optional(),
145
+ });
146
+ // ============================================================================
147
+ // Request Schemas
148
+ // ============================================================================
149
+ /**
150
+ * Request schema for creating a new webhook.
151
+ *
152
+ * @example
153
+ * ```typescript
154
+ * const request: CreateWebhookRequest = {
155
+ * name: 'github-events',
156
+ * description: 'Receives GitHub webhook events',
157
+ * };
158
+ * ```
159
+ */
160
+ export const CreateWebhookRequestSchema = z.object({
161
+ /** Human-readable name for the webhook. */
162
+ name: z.string(),
163
+ /** Optional description of the webhook's purpose. */
164
+ description: z.string().optional(),
165
+ });
166
+ /**
167
+ * Request schema for updating an existing webhook.
168
+ *
169
+ * @example
170
+ * ```typescript
171
+ * const request: UpdateWebhookRequest = {
172
+ * name: 'github-events-v2',
173
+ * description: 'Updated description',
174
+ * };
175
+ * ```
176
+ */
177
+ export const UpdateWebhookRequestSchema = z.object({
178
+ /** New name for the webhook. */
179
+ name: z.string(),
180
+ /** New description for the webhook. */
181
+ description: z.string().optional(),
182
+ });
183
+ /**
184
+ * Request schema for creating a webhook destination.
185
+ *
186
+ * @example
187
+ * ```typescript
188
+ * const request: CreateWebhookDestinationRequest = {
189
+ * type: 'url',
190
+ * config: { url: 'https://api.example.com/webhook' },
191
+ * };
192
+ * ```
193
+ */
194
+ export const CreateWebhookDestinationRequestSchema = z.object({
195
+ /** Type of destination to create. */
196
+ type: WebhookDestinationTypeSchema,
197
+ /** Configuration object for the destination. */
198
+ config: z.record(z.string(), z.unknown()),
199
+ });
200
+ /**
201
+ * Request schema for updating a webhook destination.
202
+ *
203
+ * @example
204
+ * ```typescript
205
+ * const request: UpdateWebhookDestinationRequest = {
206
+ * config: { url: 'https://api.example.com/webhook/v2' },
207
+ * };
208
+ * ```
209
+ */
210
+ export const UpdateWebhookDestinationRequestSchema = z.object({
211
+ /** Updated configuration object for the destination. */
212
+ config: z.record(z.string(), z.unknown()).optional(),
213
+ });
214
+ export const PaginationRequestSchema = z.object({
215
+ limit: z.number().optional(),
216
+ offset: z.number().optional(),
217
+ });
218
+ export const ListWebhooksRequestSchema = PaginationRequestSchema;
219
+ export const ListWebhookReceiptsRequestSchema = PaginationRequestSchema;
220
+ export const ListWebhookDeliveriesRequestSchema = PaginationRequestSchema;
221
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/api/webhook/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,202 @@
1
+ /**
2
+ * General webhook operation error.
3
+ *
4
+ * Thrown when a webhook operation fails for reasons other than not-found.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * try {
9
+ * await createWebhook(client, { name: 'my-webhook' });
10
+ * } catch (error) {
11
+ * if (error instanceof WebhookError) {
12
+ * console.error(`Webhook operation failed: ${error.message}`);
13
+ * }
14
+ * }
15
+ * ```
16
+ */
17
+ export declare const WebhookError: {
18
+ new (args?: ({
19
+ webhookId?: string;
20
+ } & {
21
+ message?: string;
22
+ cause?: unknown;
23
+ }) | undefined): import("@agentuity/core").RichError & {
24
+ readonly _tag: "WebhookError";
25
+ } & Readonly<{
26
+ webhookId?: string;
27
+ }>;
28
+ readonly defaultMessage?: string;
29
+ };
30
+ /**
31
+ * Error thrown when a webhook is not found.
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * try {
36
+ * await getWebhook(client, 'wh_nonexistent');
37
+ * } catch (error) {
38
+ * if (error instanceof WebhookNotFoundError) {
39
+ * console.error(`Webhook not found: ${error.webhookId}`);
40
+ * }
41
+ * }
42
+ * ```
43
+ */
44
+ export declare const WebhookNotFoundError: {
45
+ new (args?: ({
46
+ webhookId: string;
47
+ } & {
48
+ message?: string;
49
+ cause?: unknown;
50
+ }) | undefined): import("@agentuity/core").RichError & {
51
+ readonly _tag: "WebhookNotFoundError";
52
+ } & Readonly<{
53
+ webhookId: string;
54
+ }>;
55
+ readonly defaultMessage?: string;
56
+ };
57
+ /**
58
+ * Error thrown when a webhook destination is not found.
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * try {
63
+ * await deleteWebhookDestination(client, 'wh_abc', 'whds_nonexistent');
64
+ * } catch (error) {
65
+ * if (error instanceof WebhookDestinationNotFoundError) {
66
+ * console.error(`Destination ${error.destinationId} not found`);
67
+ * }
68
+ * }
69
+ * ```
70
+ */
71
+ export declare const WebhookDestinationNotFoundError: {
72
+ new (args?: ({
73
+ webhookId: string;
74
+ destinationId: string;
75
+ } & {
76
+ message?: string;
77
+ cause?: unknown;
78
+ }) | undefined): import("@agentuity/core").RichError & {
79
+ readonly _tag: "WebhookDestinationNotFoundError";
80
+ } & Readonly<{
81
+ webhookId: string;
82
+ destinationId: string;
83
+ }>;
84
+ readonly defaultMessage?: string;
85
+ };
86
+ /**
87
+ * Error thrown when a webhook receipt is not found.
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * try {
92
+ * await getWebhookReceipt(client, 'wh_abc', 'whrc_nonexistent');
93
+ * } catch (error) {
94
+ * if (error instanceof WebhookReceiptNotFoundError) {
95
+ * console.error(`Receipt ${error.receiptId} not found`);
96
+ * }
97
+ * }
98
+ * ```
99
+ */
100
+ export declare const WebhookReceiptNotFoundError: {
101
+ new (args?: ({
102
+ webhookId: string;
103
+ receiptId: string;
104
+ } & {
105
+ message?: string;
106
+ cause?: unknown;
107
+ }) | undefined): import("@agentuity/core").RichError & {
108
+ readonly _tag: "WebhookReceiptNotFoundError";
109
+ } & Readonly<{
110
+ webhookId: string;
111
+ receiptId: string;
112
+ }>;
113
+ readonly defaultMessage?: string;
114
+ };
115
+ /**
116
+ * Error thrown when a webhook delivery is not found.
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * try {
121
+ * await retryWebhookDelivery(client, 'wh_abc', 'whdv_nonexistent');
122
+ * } catch (error) {
123
+ * if (error instanceof WebhookDeliveryNotFoundError) {
124
+ * console.error(`Delivery ${error.deliveryId} not found`);
125
+ * }
126
+ * }
127
+ * ```
128
+ */
129
+ export declare const WebhookDeliveryNotFoundError: {
130
+ new (args?: ({
131
+ webhookId: string;
132
+ deliveryId: string;
133
+ } & {
134
+ message?: string;
135
+ cause?: unknown;
136
+ }) | undefined): import("@agentuity/core").RichError & {
137
+ readonly _tag: "WebhookDeliveryNotFoundError";
138
+ } & Readonly<{
139
+ webhookId: string;
140
+ deliveryId: string;
141
+ }>;
142
+ readonly defaultMessage?: string;
143
+ };
144
+ /**
145
+ * Constructs a full API path for webhook operations.
146
+ *
147
+ * Pattern: `/webhook/${VERSION}/${verb}/${segments.join('/')}`
148
+ * Each verb is unique to avoid route conflicts with the Go mux.
149
+ *
150
+ * @param verb - The action verb (e.g., 'create', 'list', 'get', 'destination-list')
151
+ * @param segments - Additional path segments (e.g., webhook ID, sub-resource ID)
152
+ * @returns The full API path with version and verb prefix
153
+ *
154
+ * @internal
155
+ */
156
+ export declare function webhookApiPath(verb: string, ...segments: string[]): string;
157
+ /**
158
+ * Constructs a full API path for webhook operations with query string.
159
+ *
160
+ * @param verb - The action verb
161
+ * @param queryString - Query string to append (without leading ?)
162
+ * @param segments - Additional path segments
163
+ * @returns The full API path with version, verb, and query string
164
+ *
165
+ * @internal
166
+ */
167
+ export declare function webhookApiPathWithQuery(verb: string, queryString: string | undefined, ...segments: string[]): string;
168
+ /**
169
+ * Constructs the public ingest URL for a webhook.
170
+ *
171
+ * Pattern: `/webhook/{orgId}-{webhookId}` (non-versioned, public)
172
+ *
173
+ * @param orgId - The organization ID
174
+ * @param webhookId - The webhook ID (prefixed with wh_)
175
+ * @returns The public ingest URL
176
+ *
177
+ * @internal
178
+ */
179
+ export declare function webhookIngestPath(orgId: string, webhookId: string): string;
180
+ /**
181
+ * Builds headers for webhook API requests.
182
+ *
183
+ * @param orgId - Optional organization ID for CLI authentication
184
+ * @returns Headers object to pass to API client
185
+ *
186
+ * @internal
187
+ */
188
+ export declare function buildWebhookHeaders(orgId?: string): Record<string, string> | undefined;
189
+ /**
190
+ * Wraps an API call and translates APIError with HTTP status codes to domain-specific webhook errors.
191
+ *
192
+ * - 404 → WebhookNotFoundError / WebhookDestinationNotFoundError / WebhookReceiptNotFoundError / WebhookDeliveryNotFoundError
193
+ *
194
+ * @internal
195
+ */
196
+ export declare function withWebhookErrorHandling<T>(apiCall: () => Promise<T>, context: {
197
+ webhookId?: string;
198
+ destinationId?: string;
199
+ receiptId?: string;
200
+ deliveryId?: string;
201
+ }): Promise<T>;
202
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/api/webhook/util.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,YAAY;;oBAAiD,MAAM;;;;;;;oBAAN,MAAM;;;CAAK,CAAC;AAEtF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,oBAAoB;;mBACrB,MAAM;;;;;;;mBAAN,MAAM;;;CACd,CAAC;AAEL;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,+BAA+B;;mBAChC,MAAM;uBACF,MAAM;;;;;;;mBADV,MAAM;uBACF,MAAM;;;CAClB,CAAC;AAEL;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,2BAA2B;;mBAC5B,MAAM;mBACN,MAAM;;;;;;;mBADN,MAAM;mBACN,MAAM;;;CACd,CAAC;AAEL;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,4BAA4B;;mBAC7B,MAAM;oBACL,MAAM;;;;;;;mBADP,MAAM;oBACL,MAAM;;;CACf,CAAC;AASL;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAM1E;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACtC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,GAAG,QAAQ,EAAE,MAAM,EAAE,GACnB,MAAM,CAGR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE1E;AAMD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAKtF;AAMD;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAAC,CAAC,EAC/C,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,OAAO,EAAE;IACR,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB,GACC,OAAO,CAAC,CAAC,CAAC,CAqCZ"}
@@ -0,0 +1,201 @@
1
+ import { StructuredError } from '@agentuity/core';
2
+ import { APIError } from "../api.js";
3
+ // ============================================================================
4
+ // Error Types
5
+ // ============================================================================
6
+ /**
7
+ * General webhook operation error.
8
+ *
9
+ * Thrown when a webhook operation fails for reasons other than not-found.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * try {
14
+ * await createWebhook(client, { name: 'my-webhook' });
15
+ * } catch (error) {
16
+ * if (error instanceof WebhookError) {
17
+ * console.error(`Webhook operation failed: ${error.message}`);
18
+ * }
19
+ * }
20
+ * ```
21
+ */
22
+ export const WebhookError = StructuredError('WebhookError')();
23
+ /**
24
+ * Error thrown when a webhook is not found.
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * try {
29
+ * await getWebhook(client, 'wh_nonexistent');
30
+ * } catch (error) {
31
+ * if (error instanceof WebhookNotFoundError) {
32
+ * console.error(`Webhook not found: ${error.webhookId}`);
33
+ * }
34
+ * }
35
+ * ```
36
+ */
37
+ export const WebhookNotFoundError = StructuredError('WebhookNotFoundError')();
38
+ /**
39
+ * Error thrown when a webhook destination is not found.
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * try {
44
+ * await deleteWebhookDestination(client, 'wh_abc', 'whds_nonexistent');
45
+ * } catch (error) {
46
+ * if (error instanceof WebhookDestinationNotFoundError) {
47
+ * console.error(`Destination ${error.destinationId} not found`);
48
+ * }
49
+ * }
50
+ * ```
51
+ */
52
+ export const WebhookDestinationNotFoundError = StructuredError('WebhookDestinationNotFoundError')();
53
+ /**
54
+ * Error thrown when a webhook receipt is not found.
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * try {
59
+ * await getWebhookReceipt(client, 'wh_abc', 'whrc_nonexistent');
60
+ * } catch (error) {
61
+ * if (error instanceof WebhookReceiptNotFoundError) {
62
+ * console.error(`Receipt ${error.receiptId} not found`);
63
+ * }
64
+ * }
65
+ * ```
66
+ */
67
+ export const WebhookReceiptNotFoundError = StructuredError('WebhookReceiptNotFoundError')();
68
+ /**
69
+ * Error thrown when a webhook delivery is not found.
70
+ *
71
+ * @example
72
+ * ```typescript
73
+ * try {
74
+ * await retryWebhookDelivery(client, 'wh_abc', 'whdv_nonexistent');
75
+ * } catch (error) {
76
+ * if (error instanceof WebhookDeliveryNotFoundError) {
77
+ * console.error(`Delivery ${error.deliveryId} not found`);
78
+ * }
79
+ * }
80
+ * ```
81
+ */
82
+ export const WebhookDeliveryNotFoundError = StructuredError('WebhookDeliveryNotFoundError')();
83
+ // ============================================================================
84
+ // API Path Helpers
85
+ // ============================================================================
86
+ /** Current Webhook API version. */
87
+ const WEBHOOK_API_VERSION = '2026-02-24';
88
+ /**
89
+ * Constructs a full API path for webhook operations.
90
+ *
91
+ * Pattern: `/webhook/${VERSION}/${verb}/${segments.join('/')}`
92
+ * Each verb is unique to avoid route conflicts with the Go mux.
93
+ *
94
+ * @param verb - The action verb (e.g., 'create', 'list', 'get', 'destination-list')
95
+ * @param segments - Additional path segments (e.g., webhook ID, sub-resource ID)
96
+ * @returns The full API path with version and verb prefix
97
+ *
98
+ * @internal
99
+ */
100
+ export function webhookApiPath(verb, ...segments) {
101
+ const encoded = segments.map((s) => encodeURIComponent(s)).join('/');
102
+ if (encoded) {
103
+ return `/webhook/${WEBHOOK_API_VERSION}/${verb}/${encoded}`;
104
+ }
105
+ return `/webhook/${WEBHOOK_API_VERSION}/${verb}`;
106
+ }
107
+ /**
108
+ * Constructs a full API path for webhook operations with query string.
109
+ *
110
+ * @param verb - The action verb
111
+ * @param queryString - Query string to append (without leading ?)
112
+ * @param segments - Additional path segments
113
+ * @returns The full API path with version, verb, and query string
114
+ *
115
+ * @internal
116
+ */
117
+ export function webhookApiPathWithQuery(verb, queryString, ...segments) {
118
+ const basePath = webhookApiPath(verb, ...segments);
119
+ return queryString ? `${basePath}?${queryString}` : basePath;
120
+ }
121
+ /**
122
+ * Constructs the public ingest URL for a webhook.
123
+ *
124
+ * Pattern: `/webhook/{orgId}-{webhookId}` (non-versioned, public)
125
+ *
126
+ * @param orgId - The organization ID
127
+ * @param webhookId - The webhook ID (prefixed with wh_)
128
+ * @returns The public ingest URL
129
+ *
130
+ * @internal
131
+ */
132
+ export function webhookIngestPath(orgId, webhookId) {
133
+ return `/webhook/${encodeURIComponent(orgId)}-${encodeURIComponent(webhookId)}`;
134
+ }
135
+ // ============================================================================
136
+ // Header Builder
137
+ // ============================================================================
138
+ /**
139
+ * Builds headers for webhook API requests.
140
+ *
141
+ * @param orgId - Optional organization ID for CLI authentication
142
+ * @returns Headers object to pass to API client
143
+ *
144
+ * @internal
145
+ */
146
+ export function buildWebhookHeaders(orgId) {
147
+ if (orgId) {
148
+ return { 'x-agentuity-orgid': orgId };
149
+ }
150
+ return undefined;
151
+ }
152
+ // ============================================================================
153
+ // Error Handling
154
+ // ============================================================================
155
+ /**
156
+ * Wraps an API call and translates APIError with HTTP status codes to domain-specific webhook errors.
157
+ *
158
+ * - 404 → WebhookNotFoundError / WebhookDestinationNotFoundError / WebhookReceiptNotFoundError / WebhookDeliveryNotFoundError
159
+ *
160
+ * @internal
161
+ */
162
+ export async function withWebhookErrorHandling(apiCall, context) {
163
+ try {
164
+ return await apiCall();
165
+ }
166
+ catch (error) {
167
+ if (error instanceof APIError) {
168
+ if (error.status === 404) {
169
+ if (context.deliveryId && context.webhookId) {
170
+ throw new WebhookDeliveryNotFoundError({
171
+ webhookId: context.webhookId,
172
+ deliveryId: context.deliveryId,
173
+ message: error.message,
174
+ });
175
+ }
176
+ if (context.receiptId && context.webhookId) {
177
+ throw new WebhookReceiptNotFoundError({
178
+ webhookId: context.webhookId,
179
+ receiptId: context.receiptId,
180
+ message: error.message,
181
+ });
182
+ }
183
+ if (context.destinationId && context.webhookId) {
184
+ throw new WebhookDestinationNotFoundError({
185
+ webhookId: context.webhookId,
186
+ destinationId: context.destinationId,
187
+ message: error.message,
188
+ });
189
+ }
190
+ if (context.webhookId) {
191
+ throw new WebhookNotFoundError({
192
+ webhookId: context.webhookId,
193
+ message: error.message,
194
+ });
195
+ }
196
+ }
197
+ }
198
+ throw error;
199
+ }
200
+ }
201
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/api/webhook/util.ts"],"names":[],"mappings":"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"}