From f218d56b4c1a81dc913d72c169551ceabeebad23 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes da Costa Date: Wed, 8 Oct 2025 15:41:33 -0300 Subject: [PATCH 1/2] feat: move emails inbound method to be nested within email --- src/emails/emails.ts | 7 ++- .../interfaces/get-inbound-email.interface.ts | 11 +--- src/emails/receiving/interfaces/index.ts | 1 + .../receiving/receiving.spec.ts} | 28 +++++----- src/emails/receiving/receiving.ts | 17 ++++++ src/inbound/inbound.ts | 53 ------------------- src/inbound/interfaces/inbound-email.ts | 22 -------- src/inbound/interfaces/index.ts | 5 -- src/index.ts | 2 +- src/resend.ts | 2 - 10 files changed, 41 insertions(+), 107 deletions(-) rename src/{inbound => emails/receiving}/interfaces/get-inbound-email.interface.ts (63%) create mode 100644 src/emails/receiving/interfaces/index.ts rename src/{inbound/inbound.spec.ts => emails/receiving/receiving.spec.ts} (86%) create mode 100644 src/emails/receiving/receiving.ts delete mode 100644 src/inbound/inbound.ts delete mode 100644 src/inbound/interfaces/inbound-email.ts delete mode 100644 src/inbound/interfaces/index.ts diff --git a/src/emails/emails.ts b/src/emails/emails.ts index 8be8b119..cd470a78 100644 --- a/src/emails/emails.ts +++ b/src/emails/emails.ts @@ -27,9 +27,14 @@ import type { UpdateEmailResponse, UpdateEmailResponseSuccess, } from './interfaces/update-email-options.interface'; +import { Receiving } from './receiving/receiving'; export class Emails { - constructor(private readonly resend: Resend) {} + readonly receiving: Receiving; + + constructor(private readonly resend: Resend) { + this.receiving = new Receiving(resend); + } async send( payload: CreateEmailOptions, diff --git a/src/inbound/interfaces/get-inbound-email.interface.ts b/src/emails/receiving/interfaces/get-inbound-email.interface.ts similarity index 63% rename from src/inbound/interfaces/get-inbound-email.interface.ts rename to src/emails/receiving/interfaces/get-inbound-email.interface.ts index 4b6ccc57..4e19c00d 100644 --- a/src/inbound/interfaces/get-inbound-email.interface.ts +++ b/src/emails/receiving/interfaces/get-inbound-email.interface.ts @@ -1,8 +1,6 @@ -import type { ErrorResponse } from '../../interfaces'; -import type { InboundEmail } from './inbound-email'; +import type { ErrorResponse } from '../../../interfaces'; -// API response type (snake_case from API) -export interface GetInboundEmailApiResponse { +export interface GetInboundEmailResponseSuccess { object: 'inbound'; id: string; to: string[]; @@ -24,11 +22,6 @@ export interface GetInboundEmailApiResponse { }>; } -// SDK response type (camelCase for users) -export interface GetInboundEmailResponseSuccess extends InboundEmail { - object: 'inbound'; -} - export type GetInboundEmailResponse = | { data: GetInboundEmailResponseSuccess; diff --git a/src/emails/receiving/interfaces/index.ts b/src/emails/receiving/interfaces/index.ts new file mode 100644 index 00000000..7137669a --- /dev/null +++ b/src/emails/receiving/interfaces/index.ts @@ -0,0 +1 @@ +export * from './get-inbound-email.interface'; diff --git a/src/inbound/inbound.spec.ts b/src/emails/receiving/receiving.spec.ts similarity index 86% rename from src/inbound/inbound.spec.ts rename to src/emails/receiving/receiving.spec.ts index a50b5a0c..d89ec665 100644 --- a/src/inbound/inbound.spec.ts +++ b/src/emails/receiving/receiving.spec.ts @@ -1,9 +1,9 @@ -import type { ErrorResponse } from '../interfaces'; -import { Resend } from '../resend'; +import type { ErrorResponse } from '../../interfaces'; +import { Resend } from '../../resend'; const resend = new Resend('re_zKa4RCko_Lhm9ost2YjNCctnPjbLw8Nop'); -describe('Inbound', () => { +describe('Receiving', () => { afterEach(() => fetchMock.resetMocks()); describe('get', () => { @@ -22,7 +22,7 @@ describe('Inbound', () => { }, }); - const result = resend.inbound.get( + const result = resend.emails.receiving.get( '61cda979-919d-4b9d-9638-c148b93ff410', ); @@ -39,7 +39,7 @@ describe('Inbound', () => { }); describe('when inbound email found', () => { - it('returns inbound email with transformed fields', async () => { + it('returns inbound email', async () => { const apiResponse = { object: 'inbound' as const, id: '67d9bcdb-5a02-42d7-8da9-0d6feea18cff', @@ -74,7 +74,7 @@ describe('Inbound', () => { }, }); - const result = await resend.inbound.get( + const result = await resend.emails.receiving.get( '67d9bcdb-5a02-42d7-8da9-0d6feea18cff', ); @@ -83,9 +83,9 @@ describe('Inbound', () => { "data": { "attachments": [ { - "contentDisposition": "attachment", - "contentId": "cid_123", - "contentType": "application/pdf", + "content_disposition": "attachment", + "content_id": "cid_123", + "content_type": "application/pdf", "filename": "document.pdf", "id": "att_123", }, @@ -94,7 +94,7 @@ describe('Inbound', () => { "cc": [ "cc@example.com", ], - "createdAt": "2023-04-07T23:13:52.669661+00:00", + "created_at": "2023-04-07T23:13:52.669661+00:00", "from": "sender@example.com", "headers": { "example": "value", @@ -102,7 +102,7 @@ describe('Inbound', () => { "html": "

hello world

", "id": "67d9bcdb-5a02-42d7-8da9-0d6feea18cff", "object": "inbound", - "replyTo": [ + "reply_to": [ "reply@example.com", ], "subject": "Test inbound email", @@ -141,7 +141,7 @@ describe('Inbound', () => { }, }); - const result = await resend.inbound.get( + const result = await resend.emails.receiving.get( '67d9bcdb-5a02-42d7-8da9-0d6feea18cff', ); @@ -151,13 +151,13 @@ describe('Inbound', () => { "attachments": [], "bcc": null, "cc": null, - "createdAt": "2023-04-07T23:13:52.669661+00:00", + "created_at": "2023-04-07T23:13:52.669661+00:00", "from": "sender@example.com", "headers": {}, "html": null, "id": "67d9bcdb-5a02-42d7-8da9-0d6feea18cff", "object": "inbound", - "replyTo": null, + "reply_to": null, "subject": "Test inbound email", "text": "hello world", "to": [ diff --git a/src/emails/receiving/receiving.ts b/src/emails/receiving/receiving.ts new file mode 100644 index 00000000..370161ce --- /dev/null +++ b/src/emails/receiving/receiving.ts @@ -0,0 +1,17 @@ +import type { Resend } from '../../resend'; +import type { + GetInboundEmailResponse, + GetInboundEmailResponseSuccess, +} from './interfaces/get-inbound-email.interface'; + +export class Receiving { + constructor(private readonly resend: Resend) {} + + async get(id: string): Promise { + const data = await this.resend.get( + `/emails/receiving/${id}`, + ); + + return data; + } +} diff --git a/src/inbound/inbound.ts b/src/inbound/inbound.ts deleted file mode 100644 index 9b551f42..00000000 --- a/src/inbound/inbound.ts +++ /dev/null @@ -1,53 +0,0 @@ -import type { Resend } from '../resend'; -import type { - GetInboundEmailApiResponse, - GetInboundEmailResponse, - GetInboundEmailResponseSuccess, -} from './interfaces/get-inbound-email.interface'; - -export class Inbound { - constructor(private readonly resend: Resend) {} - - async get(id: string): Promise { - const data = await this.resend.get( - `/emails/inbound/${id}`, - ); - - if (data.error) { - return { - data: null, - error: data.error, - }; - } - - const apiResponse = data.data; - - // Transform snake_case to camelCase - const transformedData: GetInboundEmailResponseSuccess = { - object: apiResponse.object, - id: apiResponse.id, - to: apiResponse.to, - from: apiResponse.from, - createdAt: apiResponse.created_at, - subject: apiResponse.subject, - bcc: apiResponse.bcc, - cc: apiResponse.cc, - replyTo: apiResponse.reply_to, - html: apiResponse.html, - text: apiResponse.text, - headers: apiResponse.headers, - attachments: apiResponse.attachments.map((attachment) => ({ - id: attachment.id, - filename: attachment.filename, - contentType: attachment.content_type, - contentId: attachment.content_id, - contentDisposition: attachment.content_disposition, - })), - }; - - return { - data: transformedData, - error: null, - }; - } -} diff --git a/src/inbound/interfaces/inbound-email.ts b/src/inbound/interfaces/inbound-email.ts deleted file mode 100644 index 0207ffb9..00000000 --- a/src/inbound/interfaces/inbound-email.ts +++ /dev/null @@ -1,22 +0,0 @@ -export interface InboundEmail { - id: string; - to: string[]; - from: string; - createdAt: string; - subject: string; - bcc: string[] | null; - cc: string[] | null; - replyTo: string[] | null; - html: string | null; - text: string | null; - headers: Record; - attachments: InboundEmailAttachment[]; -} - -export interface InboundEmailAttachment { - id: string; - filename: string; - contentType: string; - contentId: string; - contentDisposition: string; -} diff --git a/src/inbound/interfaces/index.ts b/src/inbound/interfaces/index.ts deleted file mode 100644 index 75aeb194..00000000 --- a/src/inbound/interfaces/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export type { - GetInboundEmailResponse, - GetInboundEmailResponseSuccess, -} from './get-inbound-email.interface'; -export type { InboundEmail, InboundEmailAttachment } from './inbound-email'; diff --git a/src/index.ts b/src/index.ts index 64646851..a43e4bb5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -7,6 +7,6 @@ export * from './common/interfaces'; export * from './contacts/interfaces'; export * from './domains/interfaces'; export * from './emails/interfaces'; -export * from './inbound/interfaces'; +export * from './emails/receiving/interfaces'; export { ErrorResponse } from './interfaces'; export { Resend } from './resend'; diff --git a/src/resend.ts b/src/resend.ts index c52a3bce..d83ee8f8 100644 --- a/src/resend.ts +++ b/src/resend.ts @@ -10,7 +10,6 @@ import type { PatchOptions } from './common/interfaces/patch-option.interface'; import { Contacts } from './contacts/contacts'; import { Domains } from './domains/domains'; import { Emails } from './emails/emails'; -import { Inbound } from './inbound/inbound'; import type { ErrorResponse } from './interfaces'; const defaultBaseUrl = 'https://api.resend.com'; @@ -35,7 +34,6 @@ export class Resend { readonly contacts = new Contacts(this); readonly domains = new Domains(this); readonly emails = new Emails(this); - readonly inbound = new Inbound(this); constructor(readonly key?: string) { if (!key) { From 3450b800d3ece543d847816df2b52845b58d1235 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes da Costa Date: Wed, 8 Oct 2025 18:45:27 -0300 Subject: [PATCH 2/2] feat: move attachment inbound methods to be nested --- src/attachments/attachments.ts | 82 +--------------- .../interfaces/list-attachments.interface.ts | 29 ------ .../{ => receiving}/interfaces/attachment.ts | 6 +- .../interfaces/get-attachment.interface.ts | 4 +- .../{ => receiving}/interfaces/index.ts | 0 .../interfaces/list-attachments.interface.ts | 21 ++++ .../receiving.spec.ts} | 97 ++++++------------- src/attachments/receiving/receiving.ts | 37 +++++++ src/index.ts | 2 +- 9 files changed, 98 insertions(+), 180 deletions(-) delete mode 100644 src/attachments/interfaces/list-attachments.interface.ts rename src/attachments/{ => receiving}/interfaces/attachment.ts (52%) rename src/attachments/{ => receiving}/interfaces/get-attachment.interface.ts (90%) rename src/attachments/{ => receiving}/interfaces/index.ts (100%) create mode 100644 src/attachments/receiving/interfaces/list-attachments.interface.ts rename src/attachments/{attachments.spec.ts => receiving/receiving.spec.ts} (72%) create mode 100644 src/attachments/receiving/receiving.ts diff --git a/src/attachments/attachments.ts b/src/attachments/attachments.ts index 7ac622f0..80e48f52 100644 --- a/src/attachments/attachments.ts +++ b/src/attachments/attachments.ts @@ -1,84 +1,10 @@ import type { Resend } from '../resend'; -import type { - GetAttachmentApiResponse, - GetAttachmentOptions, - GetAttachmentResponse, - GetAttachmentResponseSuccess, -} from './interfaces/get-attachment.interface'; -import type { - ListAttachmentsApiResponse, - ListAttachmentsOptions, - ListAttachmentsResponse, -} from './interfaces/list-attachments.interface'; +import { Receiving } from './receiving/receiving'; export class Attachments { - constructor(private readonly resend: Resend) {} + readonly receiving: Receiving; - async get(options: GetAttachmentOptions): Promise { - const { inboundId, id } = options; - - const data = await this.resend.get( - `/emails/inbound/${inboundId}/attachments/${id}`, - ); - - if (data.error) { - return { - data: null, - error: data.error, - }; - } - - const apiResponse = data.data; - - const transformedData: GetAttachmentResponseSuccess = { - object: apiResponse.object, - data: { - id: apiResponse.data.id, - filename: apiResponse.data.filename, - contentType: apiResponse.data.content_type, - contentDisposition: apiResponse.data.content_disposition, - contentId: apiResponse.data.content_id, - content: apiResponse.data.content, - }, - }; - - return { - data: transformedData, - error: null, - }; - } - - async list( - options: ListAttachmentsOptions, - ): Promise { - const { inboundId } = options; - - const data = await this.resend.get( - `/emails/inbound/${inboundId}/attachments`, - ); - - if (data.error) { - return { - data: null, - error: data.error, - }; - } - - const apiResponse = data.data; - - // Transform snake_case to camelCase and return array directly - const transformedData = apiResponse.data.map((attachment) => ({ - id: attachment.id, - filename: attachment.filename, - contentType: attachment.content_type, - contentDisposition: attachment.content_disposition, - contentId: attachment.content_id, - content: attachment.content, - })); - - return { - data: transformedData, - error: null, - }; + constructor(resend: Resend) { + this.receiving = new Receiving(resend); } } diff --git a/src/attachments/interfaces/list-attachments.interface.ts b/src/attachments/interfaces/list-attachments.interface.ts deleted file mode 100644 index 966c7a78..00000000 --- a/src/attachments/interfaces/list-attachments.interface.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { ErrorResponse } from '../../interfaces'; -import type { InboundAttachment } from './attachment'; - -export interface ListAttachmentsOptions { - inboundId: string; -} - -// API response type (snake_case from API) -export interface ListAttachmentsApiResponse { - object: 'attachment'; - data: Array<{ - id: string; - filename?: string; - content_type: string; - content_disposition: 'inline' | 'attachment'; - content_id?: string; - content: string; - }>; -} - -export type ListAttachmentsResponse = - | { - data: InboundAttachment[]; - error: null; - } - | { - data: null; - error: ErrorResponse; - }; diff --git a/src/attachments/interfaces/attachment.ts b/src/attachments/receiving/interfaces/attachment.ts similarity index 52% rename from src/attachments/interfaces/attachment.ts rename to src/attachments/receiving/interfaces/attachment.ts index b59c1292..718868a6 100644 --- a/src/attachments/interfaces/attachment.ts +++ b/src/attachments/receiving/interfaces/attachment.ts @@ -1,8 +1,8 @@ export interface InboundAttachment { id: string; filename?: string; - contentType: string; - contentDisposition: 'inline' | 'attachment'; - contentId?: string; + content_type: string; + content_disposition: 'inline' | 'attachment'; + content_id?: string; content: string; // base64 } diff --git a/src/attachments/interfaces/get-attachment.interface.ts b/src/attachments/receiving/interfaces/get-attachment.interface.ts similarity index 90% rename from src/attachments/interfaces/get-attachment.interface.ts rename to src/attachments/receiving/interfaces/get-attachment.interface.ts index 700c1c80..74901024 100644 --- a/src/attachments/interfaces/get-attachment.interface.ts +++ b/src/attachments/receiving/interfaces/get-attachment.interface.ts @@ -1,8 +1,8 @@ -import type { ErrorResponse } from '../../interfaces'; +import type { ErrorResponse } from '../../../interfaces'; import type { InboundAttachment } from './attachment'; export interface GetAttachmentOptions { - inboundId: string; + emailId: string; id: string; } diff --git a/src/attachments/interfaces/index.ts b/src/attachments/receiving/interfaces/index.ts similarity index 100% rename from src/attachments/interfaces/index.ts rename to src/attachments/receiving/interfaces/index.ts diff --git a/src/attachments/receiving/interfaces/list-attachments.interface.ts b/src/attachments/receiving/interfaces/list-attachments.interface.ts new file mode 100644 index 00000000..f4c29245 --- /dev/null +++ b/src/attachments/receiving/interfaces/list-attachments.interface.ts @@ -0,0 +1,21 @@ +import type { ErrorResponse } from '../../../interfaces'; +import type { InboundAttachment } from './attachment'; + +export interface ListAttachmentsOptions { + emailId: string; +} + +export interface ListAttachmentsResponseSuccess { + object: 'attachment'; + data: InboundAttachment[]; +} + +export type ListAttachmentsResponse = + | { + data: ListAttachmentsResponseSuccess; + error: null; + } + | { + data: null; + error: ErrorResponse; + }; diff --git a/src/attachments/attachments.spec.ts b/src/attachments/receiving/receiving.spec.ts similarity index 72% rename from src/attachments/attachments.spec.ts rename to src/attachments/receiving/receiving.spec.ts index 50f1beec..7f773ad2 100644 --- a/src/attachments/attachments.spec.ts +++ b/src/attachments/receiving/receiving.spec.ts @@ -1,9 +1,9 @@ -import type { ErrorResponse } from '../interfaces'; -import { Resend } from '../resend'; +import type { ErrorResponse } from '../../interfaces'; +import { Resend } from '../../resend'; const resend = new Resend('re_zKa4RCko_Lhm9ost2YjNCctnPjbLw8Nop'); -describe('Attachments', () => { +describe('Receiving', () => { afterEach(() => fetchMock.resetMocks()); describe('get', () => { @@ -22,8 +22,8 @@ describe('Attachments', () => { }, }); - const result = await resend.attachments.get({ - inboundId: '61cda979-919d-4b9d-9638-c148b93ff410', + const result = await resend.attachments.receiving.get({ + emailId: '61cda979-919d-4b9d-9638-c148b93ff410', id: 'att_123', }); @@ -61,8 +61,8 @@ describe('Attachments', () => { }, }); - const result = await resend.attachments.get({ - inboundId: '67d9bcdb-5a02-42d7-8da9-0d6feea18cff', + const result = await resend.attachments.receiving.get({ + emailId: '67d9bcdb-5a02-42d7-8da9-0d6feea18cff', id: 'att_123', }); @@ -71,9 +71,9 @@ describe('Attachments', () => { "data": { "data": { "content": "base64encodedcontent==", - "contentDisposition": "attachment", - "contentId": "cid_123", - "contentType": "application/pdf", + "content_disposition": "attachment", + "content_id": "cid_123", + "content_type": "application/pdf", "filename": "document.pdf", "id": "att_123", }, @@ -106,8 +106,8 @@ describe('Attachments', () => { }, }); - const result = await resend.attachments.get({ - inboundId: '67d9bcdb-5a02-42d7-8da9-0d6feea18cff', + const result = await resend.attachments.receiving.get({ + emailId: '67d9bcdb-5a02-42d7-8da9-0d6feea18cff', id: 'att_456', }); @@ -116,9 +116,9 @@ describe('Attachments', () => { "data": { "data": { "content": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==", - "contentDisposition": "inline", - "contentId": "cid_456", - "contentType": "image/png", + "content_disposition": "inline", + "content_id": "cid_456", + "content_type": "image/png", "filename": "image.png", "id": "att_456", }, @@ -150,8 +150,8 @@ describe('Attachments', () => { }, }); - const result = await resend.attachments.get({ - inboundId: '67d9bcdb-5a02-42d7-8da9-0d6feea18cff', + const result = await resend.attachments.receiving.get({ + emailId: '67d9bcdb-5a02-42d7-8da9-0d6feea18cff', id: 'att_789', }); @@ -160,10 +160,8 @@ describe('Attachments', () => { "data": { "data": { "content": "base64content", - "contentDisposition": "attachment", - "contentId": undefined, - "contentType": "text/plain", - "filename": undefined, + "content_disposition": "attachment", + "content_type": "text/plain", "id": "att_789", }, "object": "attachment", @@ -180,7 +178,7 @@ describe('Attachments', () => { it('returns error', async () => { const response: ErrorResponse = { name: 'not_found', - message: 'Inbound email not found', + message: 'Email not found', }; fetchMock.mockOnce(JSON.stringify(response), { @@ -191,24 +189,16 @@ describe('Attachments', () => { }, }); - const result = await resend.attachments.list({ - inboundId: '61cda979-919d-4b9d-9638-c148b93ff410', + const result = await resend.attachments.receiving.list({ + emailId: '61cda979-919d-4b9d-9638-c148b93ff410', }); - expect(result).toMatchInlineSnapshot(` -{ - "data": null, - "error": { - "message": "Inbound email not found", - "name": "not_found", - }, -} -`); + expect(result).toEqual({ data: null, error: response }); }); }); describe('when attachments found', () => { - it('returns multiple attachments with transformed fields', async () => { + it('returns multiple attachments', async () => { const apiResponse = { object: 'attachment' as const, data: [ @@ -239,33 +229,11 @@ describe('Attachments', () => { }, }); - const result = await resend.attachments.list({ - inboundId: '67d9bcdb-5a02-42d7-8da9-0d6feea18cff', + const result = await resend.attachments.receiving.list({ + emailId: '67d9bcdb-5a02-42d7-8da9-0d6feea18cff', }); - expect(result).toMatchInlineSnapshot(` -{ - "data": [ - { - "content": "base64encodedcontent==", - "contentDisposition": "attachment", - "contentId": "cid_123", - "contentType": "application/pdf", - "filename": "document.pdf", - "id": "att_123", - }, - { - "content": "imagebase64==", - "contentDisposition": "inline", - "contentId": "cid_456", - "contentType": "image/png", - "filename": "image.png", - "id": "att_456", - }, - ], - "error": null, -} -`); + expect(result).toEqual({ data: apiResponse, error: null }); }); it('returns empty array when no attachments', async () => { @@ -282,16 +250,11 @@ describe('Attachments', () => { }, }); - const result = await resend.attachments.list({ - inboundId: '67d9bcdb-5a02-42d7-8da9-0d6feea18cff', + const result = await resend.attachments.receiving.list({ + emailId: '67d9bcdb-5a02-42d7-8da9-0d6feea18cff', }); - expect(result).toMatchInlineSnapshot(` -{ - "data": [], - "error": null, -} -`); + expect(result).toEqual({ data: apiResponse, error: null }); }); }); }); diff --git a/src/attachments/receiving/receiving.ts b/src/attachments/receiving/receiving.ts new file mode 100644 index 00000000..cb27b589 --- /dev/null +++ b/src/attachments/receiving/receiving.ts @@ -0,0 +1,37 @@ +import type { Resend } from '../../resend'; +import type { + GetAttachmentOptions, + GetAttachmentResponse, + GetAttachmentResponseSuccess, +} from './interfaces/get-attachment.interface'; +import type { + ListAttachmentsOptions, + ListAttachmentsResponse, + ListAttachmentsResponseSuccess, +} from './interfaces/list-attachments.interface'; + +export class Receiving { + constructor(private readonly resend: Resend) {} + + async get(options: GetAttachmentOptions): Promise { + const { emailId, id } = options; + + const data = await this.resend.get( + `/emails/inbound/${emailId}/attachments/${id}`, + ); + + return data; + } + + async list( + options: ListAttachmentsOptions, + ): Promise { + const { emailId } = options; + + const data = await this.resend.get( + `/emails/inbound/${emailId}/attachments`, + ); + + return data; + } +} diff --git a/src/index.ts b/src/index.ts index a43e4bb5..48ae9290 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,5 @@ export * from './api-keys/interfaces'; -export * from './attachments/interfaces'; +export * from './attachments/receiving/interfaces'; export * from './audiences/interfaces'; export * from './batch/interfaces'; export * from './broadcasts/interfaces';