SDK
변경 이력
패키지의 모든 릴리스를 최신순으로 정리했습니다.
0.1.0
두 번째 릴리스입니다. 연락처를 쓰고 오디언스로 묶을 수 있게 되었고, 도메인이 자체 추적 이름과 파일 이름을 가질 수 있으며, 키가 스스로 회전할 수 있습니다. 기존 코드를 깨는 변경이 하나 있으며 아래에 정리해 두었습니다.
openemail.audiences가 새로 생겼습니다. 이름이 붙은 연락처 목록으로list,get,create,update,delete,listContacts,addContact,removeContact를 제공합니다. 모든 워크스페이스에는builtin이default인 기본 오디언스가 하나 있으며, 모든 연락처를 담고 삭제할 수 없습니다.openemail.contacts로 쓰기가 가능합니다.list와get에create,update,delete가 더해졌고, 각각 이메일 주소를 id로 받습니다.openemail.domains.update()로 도메인 자체의 추적 이름과 파일 이름을 설정하거나 해제할 수 있으며,DomainResource.tracking과DomainResource.storage가 각각의 상태를 보고합니다.openemail.me.rotate()는 호출한 키의 비밀값을 교체하고 새 키 전체로 resolve됩니다. 중첩 기간이 없으므로 호출이 반환되는 순간 이전 비밀값은 동작을 멈춥니다.KeyResource.domainAllowlist는addressAllowlist의 개별 주소와 나란히, 키를 도메인 단위로 제한합니다. 도메인은 키가 만들어진 뒤에 생긴 주소를 포함해 그 도메인의 모든 주소를 포괄합니다.- 첨부 파일을 참조로 보낼 수 있습니다. 인라인 형식과 나란히
{ fileId }를 쓸 수 있고,attachmentDelivery로 파일을 메시지 안에 담을지, 다운로드 링크로 대체할지, 크기에 따라 결정하게 할지 고를 수 있습니다. - 웹훅 이벤트가 10개 늘어 모두 20개가 되었습니다. 답장, 배달, 지연, 수신 차단, 다운로드, 그리고 도메인 이벤트 세 가지입니다.
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.hasMore가 true인 동안page.nextCursor를 따라가세요. 주소록에는 상한이 없는데, 예전 배열은 아무 말 없이 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에서 동작합니다.