SDK
Журнал изменений
Каждый выпуск пакета, новые сверху.
0.1.0
Второй выпуск. Контакты можно записывать и группировать в аудитории, домен может нести собственные имена для трекинга и файлов, а ключ может себя ротировать. Одно изменение ломает существующий код, и оно перечислено ниже.
openemail.audiences— новинка: именованные списки контактов сlist,get,create,update,delete,listContacts,addContactиremoveContact. У каждого рабочего пространства есть одна аудитория по умолчанию — та, у которойbuiltinравенdefault, — она держит все контакты и не может быть удалена.openemail.contactsумеет писать.create,updateиdeleteприсоединяются кlistиget, и каждый принимает адрес электронной почты как идентификатор.openemail.domains.update()задаёт или снимает собственные имена домена для трекинга и для файлов, аDomainResource.trackingиDomainResource.storageсообщают, как обстоят дела с каждым.openemail.me.rotate()заменяет секрет вызывающего ключа и разрешается новым ключом целиком. Окна перекрытия нет, так что старый секрет перестаёт работать в момент возврата из вызова.KeyResource.domainAllowlistсужает ключ до целых доменов — рядом с отдельными адресами вaddressAllowlist. Домен покрывает все адреса на нём, включая созданные после ключа.- Вложения можно отправлять по ссылке.
{ fileId }стоит рядом со встроенной формой, аattachmentDeliveryвыбирает между переносом файлов внутри сообщения, заменой их ссылками на скачивание и решением по размеру. - Ещё десять событий вебхуков, двадцать всего: ответы, доставки, задержки, подавления, скачивания и три доменных события.
email.downloadedсрабатывает, когда человек забирает файл, ушедший ссылкой на скачивание. Одна ссылка обслуживает всех, кому ушло сообщение, поэтому событие не называет получателя.- Четыре новые области доступа:
contacts:write,audiences:read,audiences:writeиkeys:write. - Девять полей, которые были свободными строками, получили именованные типы, среди них
RecipientKind,ContactSource,RuleMatchModeиWebhookDeliveryStatus. Они принимают и возвращают те же строки, что и раньше.
const audience = await openemail.audiences.create({ name: 'Product updates' }) await openemail.contacts.create({ email: '[email protected]', name: 'Grace Hopper' })await openemail.audiences.addContact(audience.id, { email: '[email protected]' })Что ломается в 0.1.0
contacts.listвозвращаетPage<ContactResource>вместо массива. Читайте строки изpage.itemsи следуйте заpage.nextCursor, покаpage.hasMoreистинно. Адресная книга не ограничена по размеру, а старый массив молча обрывался на 200 строках.API_SCOPES,ERROR_TYPES,MESSAGE_ENCRYPTION_FORMATS,RULE_ACTIONS,RULE_FIELDS,RULE_OPERATORSиWEBHOOK_EVENTSтеперь объекты с ключами, а не массивы, так что у каждого члена есть имя, которым его можно назвать. Значения не изменились.contacts.listтеперь ставит контакты, которым никогда не писали, в конец, а не в начало, так что только что созданный контакт больше не прыгает наверх книги.
import { API_SCOPES, WEBHOOK_EVENTS } from '@openemail/sdk' const scopes = Object.values(API_SCOPES)const subscribable = new Set<string>(Object.values(WEBHOOK_EVENTS)) const page = await openemail.contacts.list()for (const contact of page.items) send(contact.email)Код, использовавший только производные типы, продолжает работать без правок. ApiScope, WebhookEvent и прочие — те же типы, что и были.
0.0.1
Первый выпуск: по одному типизированному методу на каждый эндпоинт и никаких зависимостей времени выполнения.
- Отправка: одно сообщение, пакеты, отложенные отправки, окно отмены и перевод на язык, на котором читает получатель.
- Шаблоны: создание, версионирование, публикация, предпросмотр и отправка.
- Трекинг: открытия, клики и сводка по каждому сообщению.
- Почтовый ящик: цепочки, черновики, метки, контакты и правила.
- Рабочее пространство: домены, адреса, участники, роли и настройки.
- Вебхуки с проверкой подписи, которая работает везде, где есть WebCrypto.
- События календаря, включая файл ICS.
- Одноразовые ящики — единственная часть, которая работает и в браузере.
- Курсорная постраничность в каждом списке — через
listAllиiterate. - Два класса ошибок и повторы, которые не могут продублировать отправку.
- ESM и CommonJS, на Node 20+, Bun, Deno и Cloudflare Workers.