@relaymessenger/sdk 0.2.0 → 0.3.0-staging.1

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 (55) hide show
  1. package/LICENSE +21 -0
  2. package/LICENSES/Apache-2.0.txt +201 -0
  3. package/NOTICE +6 -0
  4. package/README.md +189 -17
  5. package/dist/client.d.ts +135 -57
  6. package/dist/client.d.ts.map +1 -0
  7. package/dist/client.js +520 -144
  8. package/dist/client.js.map +1 -1
  9. package/dist/errors.d.ts +26 -19
  10. package/dist/errors.d.ts.map +1 -0
  11. package/dist/errors.js +28 -37
  12. package/dist/errors.js.map +1 -1
  13. package/dist/index.d.ts +9 -9
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +7 -8
  16. package/dist/index.js.map +1 -1
  17. package/dist/operations.d.ts +144 -0
  18. package/dist/operations.d.ts.map +1 -0
  19. package/dist/operations.js +190 -0
  20. package/dist/operations.js.map +1 -0
  21. package/dist/pagination.d.ts +24 -0
  22. package/dist/pagination.d.ts.map +1 -0
  23. package/dist/pagination.js +48 -0
  24. package/dist/pagination.js.map +1 -0
  25. package/dist/types.d.ts +436 -74
  26. package/dist/types.d.ts.map +1 -0
  27. package/dist/types.js +0 -1
  28. package/dist/types.js.map +1 -1
  29. package/dist/webhooks.d.ts +19 -0
  30. package/dist/webhooks.d.ts.map +1 -0
  31. package/dist/webhooks.js +36 -0
  32. package/dist/webhooks.js.map +1 -0
  33. package/dist/websocket.d.ts +38 -0
  34. package/dist/websocket.d.ts.map +1 -0
  35. package/dist/websocket.js +547 -0
  36. package/dist/websocket.js.map +1 -0
  37. package/package.json +22 -15
  38. package/dist/file-cursor.d.ts +0 -10
  39. package/dist/file-cursor.js +0 -53
  40. package/dist/file-cursor.js.map +0 -1
  41. package/dist/idempotency.d.ts +0 -8
  42. package/dist/idempotency.js +0 -35
  43. package/dist/idempotency.js.map +0 -1
  44. package/dist/memory-dedupe.d.ts +0 -13
  45. package/dist/memory-dedupe.js +0 -25
  46. package/dist/memory-dedupe.js.map +0 -1
  47. package/dist/poll-loop.d.ts +0 -43
  48. package/dist/poll-loop.js +0 -164
  49. package/dist/poll-loop.js.map +0 -1
  50. package/dist/signature.d.ts +0 -18
  51. package/dist/signature.js +0 -61
  52. package/dist/signature.js.map +0 -1
  53. package/dist/url.d.ts +0 -6
  54. package/dist/url.js +0 -40
  55. package/dist/url.js.map +0 -1
@@ -0,0 +1,48 @@
1
+ export class RelayPage {
2
+ data;
3
+ nextCursor;
4
+ #next;
5
+ constructor(body, next) {
6
+ this.data = body.data;
7
+ this.nextCursor = body.nextCursor;
8
+ this.#next = next;
9
+ }
10
+ hasNextPage() {
11
+ return this.nextCursor !== null;
12
+ }
13
+ async getNextPage() {
14
+ if (!this.nextCursor)
15
+ return null;
16
+ if (!this.#next)
17
+ throw new Error("Relay page has no next-page loader.");
18
+ return this.#next(this.nextCursor);
19
+ }
20
+ async *[Symbol.asyncIterator]() {
21
+ let page = this;
22
+ while (page) {
23
+ yield* page.data;
24
+ page = await page.getNextPage();
25
+ }
26
+ }
27
+ }
28
+ export class ChatsPage extends RelayPage {
29
+ chats;
30
+ constructor(body, next) {
31
+ super(body, next);
32
+ this.chats = this.data;
33
+ }
34
+ async getNextPage() {
35
+ return await super.getNextPage();
36
+ }
37
+ }
38
+ export class MessagesPage extends RelayPage {
39
+ messages;
40
+ constructor(body, next) {
41
+ super(body, next);
42
+ this.messages = this.data;
43
+ }
44
+ async getNextPage() {
45
+ return await super.getNextPage();
46
+ }
47
+ }
48
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../src/pagination.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,SAAS;IACX,IAAI,CAAM;IACV,UAAU,CAAgB;IAC1B,KAAK,CAA0D;IAExE,YACE,IAAiB,EACjB,IAAgD;QAEhD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QAC3B,IAAI,IAAI,GAAwB,IAAI,CAAC;QACrC,OAAO,IAAI,EAAE,CAAC;YACZ,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACjB,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,SAAa,SAAQ,SAAY;IACnC,KAAK,CAAM;IAEpB,YACE,IAAiB,EACjB,IAAgD;QAEhD,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;IACzB,CAAC;IAEQ,KAAK,CAAC,WAAW;QACxB,OAAO,MAAM,KAAK,CAAC,WAAW,EAAyB,CAAC;IAC1D,CAAC;CACF;AAED,MAAM,OAAO,YAAgB,SAAQ,SAAY;IACtC,QAAQ,CAAM;IAEvB,YACE,IAAiB,EACjB,IAAmD;QAEnD,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;IAC5B,CAAC;IAEQ,KAAK,CAAC,WAAW;QACxB,OAAO,MAAM,KAAK,CAAC,WAAW,EAA4B,CAAC;IAC7D,CAAC;CACF"}
package/dist/types.d.ts CHANGED
@@ -1,84 +1,446 @@
1
- /** Wire types for the Relay v1 developer API used by plugins and examples. */
2
- export type RelaySender = {
3
- kind: "user" | "agent" | "system";
4
- id: string;
5
- display_name?: string;
6
- };
7
- export type RelayOutgoingPart = {
1
+ import type { RELAY_WEBHOOK_EVENT_TYPES } from "./operations.js";
2
+ export type UUID = string;
3
+ export interface RequestOptions {
4
+ signal?: AbortSignal;
5
+ timeout?: number;
6
+ maxRetries?: number;
7
+ headers?: HeadersInit;
8
+ }
9
+ export type DeliveryStatus = "sent" | "delivered" | "read";
10
+ export type ReactionType = "love" | "like" | "dislike" | "laugh" | "emphasize" | "question" | "custom";
11
+ interface ChatHandleBase {
12
+ id: UUID;
13
+ handle: string;
14
+ status?: "active" | "left" | "removed" | null;
15
+ joined_at: string;
16
+ left_at?: string | null;
17
+ is_me?: boolean | null;
18
+ display_name: string | null;
19
+ avatar_url: string | null;
20
+ tagline: string | null;
21
+ verified: boolean;
22
+ }
23
+ export interface UserChatHandle extends ChatHandleBase {
24
+ kind: "user";
25
+ }
26
+ export interface AgentChatHandle extends ChatHandleBase {
27
+ kind: "agent";
28
+ }
29
+ export type ChatHandle = UserChatHandle | AgentChatHandle;
30
+ export interface Reaction {
31
+ is_me: boolean;
32
+ handle: ChatHandle;
33
+ type: ReactionType;
34
+ custom_emoji?: string | null;
35
+ }
36
+ export interface TextPart {
8
37
  type: "text";
9
- text: string;
10
- } | {
38
+ value: string;
39
+ mention?: string | null;
40
+ mention_range?: [number, number] | null;
41
+ }
42
+ export interface MediaPart {
11
43
  type: "media";
12
- attachment_id?: string;
13
- url?: string;
14
- } | {
15
- type: "voice_memo";
16
- attachment_id?: string;
17
44
  url?: string;
18
- duration_ms?: number;
19
- } | {
20
- type: "link_preview";
45
+ attachment_id?: UUID;
46
+ }
47
+ export interface LinkPart {
48
+ type: "link";
49
+ value: string;
50
+ }
51
+ export type MessagePart = TextPart | MediaPart | LinkPart;
52
+ export interface TextPartResponse extends TextPart {
53
+ reactions: Reaction[] | null;
54
+ }
55
+ export interface MediaPartResponse {
56
+ type: "media";
57
+ id: UUID;
21
58
  url: string;
22
- } | {
23
- type: "data";
24
- data: Record<string, unknown>;
25
- };
26
- export type RelayPart = {
27
- type: string;
59
+ filename: string;
60
+ mime_type: string;
61
+ size_bytes: number;
62
+ duration_ms?: number | null;
63
+ width?: number | null;
64
+ height?: number | null;
65
+ reactions: Reaction[] | null;
66
+ }
67
+ export interface LinkPartResponse extends LinkPart {
68
+ reactions: Reaction[] | null;
69
+ }
70
+ export interface SystemEventParty {
71
+ id: UUID;
72
+ handle: string;
73
+ kind: "user" | "agent";
74
+ }
75
+ export type TypingContact = SystemEventParty;
76
+ export interface TypingIndicatorWebhookData {
77
+ chat_id: UUID;
78
+ contact: TypingContact;
79
+ }
80
+ export type SystemEventType = "chat_created" | "participant_added" | "participant_removed" | "group_name_updated" | "group_icon_updated" | "contact_card_shared";
81
+ export interface SystemEvent {
82
+ type: SystemEventType;
83
+ actor: SystemEventParty;
84
+ subject: SystemEventParty | null;
85
+ value: string | null;
86
+ icon_attachment_id: UUID | null;
87
+ contact_card: ContactCardItem | null;
88
+ }
89
+ export interface SystemPartResponse {
90
+ type: "system";
91
+ value: string;
92
+ reactions: null;
93
+ }
94
+ export type MessagePartResponse = TextPartResponse | MediaPartResponse | LinkPartResponse | SystemPartResponse;
95
+ export interface ReplyTo {
96
+ message_id: UUID;
28
97
  part_index?: number;
29
- text?: string;
30
- url?: string;
31
- attachment_id?: string;
32
- duration_ms?: number;
33
- data?: Record<string, unknown>;
34
- [key: string]: unknown;
35
- };
36
- export type RelayReplyRef = {
37
- message_id: string;
38
- };
39
- export type RelayMessage = {
40
- id: string;
41
- conversation_id: string;
42
- sequence: number;
43
- sender: RelaySender;
44
- parts: RelayPart[];
45
- reply_to?: RelayReplyRef | null;
46
- fallback_text?: string;
47
- status?: string;
98
+ }
99
+ export interface MessageContent {
100
+ parts: MessagePart[];
101
+ reply_to?: ReplyTo;
102
+ idempotency_key?: string;
103
+ }
104
+ export interface SentMessage {
105
+ id: UUID;
106
+ parts: MessagePartResponse[];
48
107
  created_at: string;
49
- };
50
- export type RelayEventEnvelope<TData = Record<string, unknown>> = {
51
- event_id: string;
52
- event_type: string;
53
- agent_id: string;
108
+ sent_at: string | null;
109
+ delivered_at?: string | null;
110
+ delivery_status: DeliveryStatus;
111
+ from_handle?: ChatHandle | null;
112
+ reply_to?: ReplyTo | null;
113
+ is_system_message: boolean;
114
+ system_event?: SystemEvent | null;
115
+ }
116
+ export interface Message {
117
+ id: UUID;
118
+ chat_id: UUID;
119
+ from?: string | null;
120
+ from_handle?: ChatHandle | null;
121
+ parts?: MessagePartResponse[] | null;
122
+ reply_to?: ReplyTo | null;
123
+ is_system_message: boolean;
124
+ system_event?: SystemEvent | null;
125
+ is_from_me: boolean;
126
+ delivery_status: DeliveryStatus;
54
127
  created_at: string;
55
- data: TData;
56
- };
57
- export type MessageReceivedData = {
58
- message: RelayMessage;
59
- invocation_id?: string;
128
+ updated_at: string;
129
+ sent_at?: string | null;
130
+ delivered_at?: string | null;
131
+ read_at?: string | null;
132
+ deliveries?: MessageDelivery[];
133
+ }
134
+ export interface MessageDelivery {
135
+ contact: ChatHandle;
136
+ delivered_at: string | null;
137
+ read_at: string | null;
138
+ }
139
+ export interface Chat {
140
+ id: UUID;
141
+ display_name: string | null;
142
+ group_chat_icon?: string | null;
143
+ handles: ChatHandle[];
144
+ is_group: boolean;
145
+ created_at: string;
146
+ updated_at: string;
147
+ }
148
+ export interface ChatCreateParams {
149
+ from: string;
150
+ to: string[];
151
+ message: MessageContent;
152
+ }
153
+ export interface ChatCreateResponse {
154
+ chat: Pick<Chat, "id" | "display_name" | "is_group" | "handles"> & {
155
+ message: SentMessage;
156
+ };
157
+ }
158
+ export interface ChatUpdateParams {
159
+ display_name?: string;
160
+ group_chat_icon?: UUID | null;
161
+ }
162
+ export interface AcceptedResponse {
163
+ status?: string;
164
+ message?: string;
165
+ trace_id?: string;
166
+ }
167
+ export interface ChatUpdateResponse {
168
+ status?: string;
169
+ chat_id?: UUID;
170
+ }
171
+ export interface ChatListChatsParams {
172
+ cursor?: string;
173
+ limit?: number;
174
+ }
175
+ export interface ParticipantAddParams {
176
+ handle: string;
177
+ }
178
+ export type ParticipantRemoveParams = ParticipantAddParams;
179
+ export interface MessageSendParams {
180
+ message: MessageContent;
181
+ }
182
+ export interface MessageSendResponse {
183
+ chat_id: UUID;
184
+ message: SentMessage;
185
+ }
186
+ export interface MessageCreateParams {
187
+ to: string[];
188
+ message: MessageContent;
189
+ "Idempotency-Key"?: string;
190
+ }
191
+ export interface MessageCreateResponse {
192
+ from: string;
193
+ chat_id: UUID;
194
+ created_new_chat: boolean;
195
+ is_group: boolean;
196
+ handles: ChatHandle[];
197
+ message: SentMessage;
198
+ }
199
+ export interface MessageListParams {
200
+ cursor?: string;
201
+ limit?: number;
202
+ }
203
+ export interface MessageThreadParams extends MessageListParams {
204
+ order?: "asc" | "desc";
205
+ }
206
+ export interface MessageAddReactionParams {
207
+ operation: "add" | "remove";
208
+ type: ReactionType;
209
+ custom_emoji?: string;
210
+ part_index?: number;
211
+ }
212
+ export type MessageAddReactionResponse = AcceptedResponse;
213
+ export type ChatSendVoicememoParams = {
214
+ attachment_id: UUID;
215
+ voice_memo_url?: never;
216
+ } | {
217
+ voice_memo_url: string;
218
+ attachment_id?: never;
60
219
  };
61
- export type MessageReceivedEvent = RelayEventEnvelope<MessageReceivedData>;
62
- export type RelayAgentProfile = {
63
- id: string;
64
- owner_user_id?: string;
220
+ export interface VoiceMemoAttachment {
221
+ id: UUID;
222
+ url: string;
223
+ filename: string;
224
+ mime_type: string;
225
+ size_bytes: number;
226
+ duration_ms?: number | null;
227
+ }
228
+ export interface ChatSendVoicememoResponse {
229
+ voice_memo: {
230
+ id: UUID;
231
+ from: string;
232
+ to: string[];
233
+ status: string;
234
+ voice_memo: VoiceMemoAttachment;
235
+ created_at: string;
236
+ chat: {
237
+ id: UUID;
238
+ handles: ChatHandle[];
239
+ is_group: boolean;
240
+ };
241
+ };
242
+ }
243
+ export type SupportedContentType = "image/jpeg" | "image/png" | "image/gif" | "image/heic" | "image/heif" | "image/tiff" | "image/bmp" | "image/webp" | "image/x-icon" | "video/mp4" | "video/quicktime" | "video/mpeg" | "video/mpeg2" | "video/x-m4v" | "video/x-msvideo" | "video/3gpp" | "audio/mpeg" | "audio/mp3" | "audio/x-m4a" | "audio/mp4" | "audio/x-caf" | "audio/x-wav" | "audio/x-aiff" | "audio/aiff" | "audio/aac" | "audio/midi" | "audio/amr" | "application/pdf" | "application/vnd.apple.pkpass" | "text/plain" | "text/markdown" | "text/vcard" | "text/rtf" | "text/csv" | "text/html" | "text/calendar" | "application/msword" | "application/vnd.openxmlformats-officedocument.wordprocessingml.document" | "application/vnd.ms-excel" | "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" | "application/vnd.ms-powerpoint" | "application/vnd.openxmlformats-officedocument.presentationml.presentation" | "application/x-iwork-pages-sffpages" | "application/x-iwork-numbers-sffnumbers" | "application/x-iwork-keynote-sffkey" | "application/epub+zip" | "text/xml" | "application/json" | "application/zip" | "application/x-gzip";
244
+ export interface AttachmentCreateParams {
245
+ filename: string;
246
+ content_type: SupportedContentType;
247
+ size_bytes: number;
248
+ duration_ms?: number | null;
249
+ width?: number | null;
250
+ height?: number | null;
251
+ }
252
+ export interface AttachmentCreateResponse {
253
+ attachment_id: UUID;
254
+ upload_url: string;
255
+ download_url: string;
256
+ http_method: "PUT";
257
+ expires_at: string;
258
+ required_headers: Record<string, string>;
259
+ }
260
+ export interface Attachment {
261
+ id: UUID;
262
+ filename: string;
263
+ content_type: SupportedContentType;
264
+ size_bytes: number;
265
+ status: "pending" | "complete" | "failed";
266
+ download_url?: string;
267
+ created_at: string;
268
+ duration_ms?: number | null;
269
+ width?: number | null;
270
+ height?: number | null;
271
+ }
272
+ export type WebhookEventType = (typeof RELAY_WEBHOOK_EVENT_TYPES)[number];
273
+ export interface WebhookEventListResponse {
274
+ events: WebhookEventType[];
275
+ doc_url: string;
276
+ }
277
+ export interface WebhookSubscription {
278
+ id: UUID;
279
+ target_url: string;
280
+ subscribed_events: WebhookEventType[];
281
+ is_active: boolean;
282
+ created_at: string;
283
+ updated_at: string;
284
+ }
285
+ export interface WebhookSubscriptionCreateParams {
286
+ target_url: string;
287
+ subscribed_events: WebhookEventType[];
288
+ }
289
+ export interface WebhookSubscriptionCreateResponse extends WebhookSubscription {
290
+ signing_secret: string;
291
+ }
292
+ export interface WebhookSubscriptionUpdateParams {
293
+ target_url?: string;
294
+ subscribed_events?: WebhookEventType[];
295
+ is_active?: boolean;
296
+ }
297
+ export interface WebhookSubscriptionListResponse {
298
+ subscriptions: WebhookSubscription[];
299
+ }
300
+ export interface ContactCardItem {
301
+ handle: string;
302
+ first_name: string;
303
+ last_name: string | null;
304
+ image_url: string | null;
305
+ is_active: boolean;
306
+ kind: "user" | "agent";
307
+ }
308
+ export interface ContactCardCreateParams {
309
+ handle: string;
310
+ first_name: string;
311
+ last_name?: string;
312
+ image_url?: string;
313
+ }
314
+ export interface ContactCardRetrieveParams {
315
+ handle?: string;
316
+ }
317
+ export interface ContactCardRetrieveResponse {
318
+ contact_cards: ContactCardItem[];
319
+ }
320
+ export interface ContactCardUpdateParams {
321
+ handle: string;
322
+ first_name?: string;
323
+ last_name?: string | null;
324
+ image_url?: string | null;
325
+ }
326
+ export interface ContactRequestCreateParams {
327
+ handle: string;
328
+ "Idempotency-Key"?: string;
329
+ }
330
+ export interface ContactRequestCreateResponse {
331
+ state: "pending";
332
+ }
333
+ export interface BlockedHandle {
334
+ handle: string;
335
+ reason: string | null;
336
+ blocked_at: string;
337
+ }
338
+ export interface BlockedHandleListResponse {
339
+ blocked_handles: BlockedHandle[];
340
+ }
341
+ export interface BlockHandleParams {
342
+ handle: string;
343
+ reason?: string;
344
+ }
345
+ export interface BlockHandleResponse {
346
+ blocked_handle: BlockedHandle;
347
+ }
348
+ export interface UnblockHandleParams {
349
+ handle: string;
350
+ }
351
+ export interface WebSocketReadyFrame {
352
+ type: "ready";
353
+ connection_id: UUID;
354
+ acked_through: string;
355
+ full_sync_required: boolean;
356
+ full_sync_through: string | null;
357
+ heartbeat_interval_ms: number;
358
+ max_in_flight: number;
359
+ }
360
+ export interface WebSocketEventFrame<TEvent extends RelayWebhookEvent = RelayWebhookEvent> {
361
+ type: "event";
362
+ sequence: string;
363
+ event: TEvent;
364
+ }
365
+ export interface WebSocketAckFrame {
366
+ type: "ack";
367
+ through_sequence: string;
368
+ }
369
+ export interface WebSocketFullSyncFrame {
370
+ type: "full_sync";
371
+ through_sequence: string;
372
+ reason: "checkpoint_outside_retention";
373
+ }
374
+ export interface WebSocketFullSyncCompleteFrame {
375
+ type: "full_sync_complete";
376
+ through_sequence: string;
377
+ }
378
+ export interface WebSocketPingFrame {
379
+ type: "ping";
380
+ sent_at: string;
381
+ }
382
+ export interface WebSocketPongFrame {
383
+ type: "pong";
384
+ }
385
+ export interface WebSocketErrorFrame {
386
+ type: "error";
387
+ code: WebSocketErrorCode;
388
+ message: string;
389
+ fatal: boolean;
390
+ retryable: boolean;
391
+ }
392
+ export type WebSocketErrorCode = "invalid_frame" | "ack_out_of_range" | "stale_connection" | "ack_failed" | "delivery_failed" | "full_sync_required" | "full_sync_mismatch";
393
+ export interface WebSocketDisconnectFrame {
394
+ type: "disconnect";
395
+ reason: "revoked" | "heartbeat_timeout" | "restart" | "webhook_configured";
396
+ }
397
+ export interface MessageWebhookData {
398
+ chat: {
399
+ id: UUID;
400
+ is_group?: boolean | null;
401
+ owner_handle?: ChatHandle | null;
402
+ };
403
+ id: UUID;
404
+ idempotency_key?: string | null;
405
+ direction: "inbound" | "outbound";
406
+ sender_handle: ChatHandle;
407
+ parts: MessagePartResponse[];
408
+ sent_at?: string | null;
409
+ delivered_at?: string | null;
410
+ read_at?: string | null;
411
+ reply_to?: ReplyTo | null;
412
+ }
413
+ export interface ContactEventContact {
414
+ id: UUID;
65
415
  handle: string;
66
416
  display_name: string;
67
- tagline?: string;
68
- avatar_url?: string | null;
69
- visibility?: "private" | "unlisted" | "public";
70
- created_at?: string;
71
- };
72
- export type RelayEventsPage = {
73
- events: RelayEventEnvelope[];
74
- nextCursor: number;
75
- };
76
- /**
77
- * The 202 from `POST /v1/messages`. The server splits the accepted parts at
78
- * ingest: each visible non-media part becomes its own message, contiguous
79
- * media parts stay one media message, and a voice memo always commits alone,
80
- * so one send commits one or more messages, in display order.
81
- */
82
- export type RelaySendResult = {
83
- messages: RelayMessage[];
84
- };
417
+ }
418
+ export interface ContactAddedEvent {
419
+ contact: ContactEventContact;
420
+ chat_id: UUID;
421
+ }
422
+ export interface ContactRemovedEvent {
423
+ contact: ContactEventContact;
424
+ }
425
+ export interface RelayWebhookEnvelope<T = Record<string, unknown>, TEventType extends WebhookEventType = WebhookEventType> {
426
+ api_version: "v1";
427
+ webhook_version: "2026-02-03";
428
+ event_type: TEventType;
429
+ event_id: UUID;
430
+ created_at: string;
431
+ trace_id: string;
432
+ agent_id: UUID;
433
+ data: T;
434
+ }
435
+ export type ContactAddedWebhook = RelayWebhookEnvelope<ContactAddedEvent, "contact.added">;
436
+ export type ContactRemovedWebhook = RelayWebhookEnvelope<ContactRemovedEvent, "contact.removed">;
437
+ export type ContactAddedWebhookData = ContactAddedEvent;
438
+ export type ContactRemovedWebhookData = ContactRemovedEvent;
439
+ export type ContactAddedWebhookEvent = ContactAddedWebhook;
440
+ export type ContactRemovedWebhookEvent = ContactRemovedWebhook;
441
+ type MessageWebhookEventType = "message.sent" | "message.received" | "message.read" | "message.delivered";
442
+ type TypingIndicatorWebhookEventType = "chat.typing_indicator.started" | "chat.typing_indicator.stopped";
443
+ type OtherWebhookEventType = Exclude<WebhookEventType, MessageWebhookEventType | TypingIndicatorWebhookEventType | "contact.added" | "contact.removed">;
444
+ export type RelayWebhookEvent = RelayWebhookEnvelope<MessageWebhookData, MessageWebhookEventType> | RelayWebhookEnvelope<TypingIndicatorWebhookData, TypingIndicatorWebhookEventType> | ContactAddedWebhookEvent | ContactRemovedWebhookEvent | RelayWebhookEnvelope<Record<string, unknown>, OtherWebhookEventType>;
445
+ export {};
446
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -1,3 +1,2 @@
1
- /** Wire types for the Relay v1 developer API used by plugins and examples. */
2
1
  export {};
3
2
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,8EAA8E"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import { WebhookVerificationError } from "standardwebhooks";
2
+ import type { RelayWebhookEnvelope, RelayWebhookEvent } from "./types.js";
3
+ export { WebhookVerificationError };
4
+ export type WebhookHeaders = Headers | Record<string, string | null | undefined>;
5
+ export declare const verifyWebhookSignature: (secret: string, body: string | Buffer, headers: WebhookHeaders) => void;
6
+ export declare class Webhooks {
7
+ #private;
8
+ constructor(secret: string | null);
9
+ verify(body: string | Buffer, { headers, key }: {
10
+ headers: WebhookHeaders;
11
+ key?: string;
12
+ }): void;
13
+ unwrap<T = RelayWebhookEvent>(body: string | Buffer, params: {
14
+ headers: WebhookHeaders;
15
+ key?: string;
16
+ }): T;
17
+ }
18
+ export type { RelayWebhookEnvelope };
19
+ //# sourceMappingURL=webhooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,wBAAwB,EACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EACV,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,wBAAwB,EAAE,CAAC;AAEpC,MAAM,MAAM,cAAc,GACtB,OAAO,GACP,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAsB9C,eAAO,MAAM,sBAAsB,GACjC,QAAQ,MAAM,EACd,MAAM,MAAM,GAAG,MAAM,EACrB,SAAS,cAAc,KACtB,IAEF,CAAC;AAEF,qBAAa,QAAQ;;gBAGP,MAAM,EAAE,MAAM,GAAG,IAAI;IAIjC,MAAM,CACJ,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;QAAE,OAAO,EAAE,cAAc,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAC1D,IAAI;IAMP,MAAM,CAAC,CAAC,GAAG,iBAAiB,EAC1B,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,MAAM,EAAE;QAAE,OAAO,EAAE,cAAc,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAChD,CAAC;CAIL;AAED,YAAY,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { Webhook, WebhookVerificationError, } from "standardwebhooks";
2
+ export { WebhookVerificationError };
3
+ const requiredHeaders = (headers) => {
4
+ const get = (name) => headers instanceof Headers ? headers.get(name) : headers[name];
5
+ const id = get("webhook-id");
6
+ const timestamp = get("webhook-timestamp");
7
+ const signature = get("webhook-signature");
8
+ if (!id || !timestamp || !signature) {
9
+ throw new WebhookVerificationError("Missing webhook-id, webhook-timestamp, or webhook-signature.");
10
+ }
11
+ return {
12
+ "webhook-id": id,
13
+ "webhook-timestamp": timestamp,
14
+ "webhook-signature": signature,
15
+ };
16
+ };
17
+ export const verifyWebhookSignature = (secret, body, headers) => {
18
+ new Webhook(secret).verify(body, requiredHeaders(headers));
19
+ };
20
+ export class Webhooks {
21
+ #secret;
22
+ constructor(secret) {
23
+ this.#secret = secret;
24
+ }
25
+ verify(body, { headers, key }) {
26
+ const secret = key ?? this.#secret;
27
+ if (!secret)
28
+ throw new Error("Webhook key is required.");
29
+ verifyWebhookSignature(secret, body, headers);
30
+ }
31
+ unwrap(body, params) {
32
+ this.verify(body, params);
33
+ return JSON.parse(body.toString());
34
+ }
35
+ }
36
+ //# sourceMappingURL=webhooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAM1B,OAAO,EAAE,wBAAwB,EAAE,CAAC;AAMpC,MAAM,eAAe,GAAG,CACtB,OAAuB,EACC,EAAE;IAC1B,MAAM,GAAG,GAAG,CAAC,IAAY,EAA6B,EAAE,CACtD,OAAO,YAAY,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,MAAM,EAAE,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;IAC7B,MAAM,SAAS,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAC3C,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;QACpC,MAAM,IAAI,wBAAwB,CAChC,8DAA8D,CAC/D,CAAC;IACJ,CAAC;IACD,OAAO;QACL,YAAY,EAAE,EAAE;QAChB,mBAAmB,EAAE,SAAS;QAC9B,mBAAmB,EAAE,SAAS;KAC/B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,MAAc,EACd,IAAqB,EACrB,OAAuB,EACjB,EAAE;IACR,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;AAC7D,CAAC,CAAC;AAEF,MAAM,OAAO,QAAQ;IACV,OAAO,CAAgB;IAEhC,YAAY,MAAqB;QAC/B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,MAAM,CACJ,IAAqB,EACrB,EAAE,OAAO,EAAE,GAAG,EAA6C;QAE3D,MAAM,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACzD,sBAAsB,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,CACJ,IAAqB,EACrB,MAAiD;QAEjD,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAM,CAAC;IAC1C,CAAC;CACF"}