Ir a la documentación
SDK

Registro de cambios

Todas las versiones del paquete, de la más reciente a la más antigua.

0.1.0

La segunda versión. Los contactos se pueden escribir y agrupar en audiencias, un dominio puede llevar sus propios nombres de seguimiento y de archivos, y una clave puede rotarse a sí misma. Un cambio rompe el código existente, y está listado debajo.

  • openemail.audiences es nuevo: listas de contactos con nombre, con list, get, create, update, delete, listContacts, addContact y removeContact. Cada espacio de trabajo tiene una audiencia predeterminada, aquella cuyo builtin es default, que contiene todos los contactos y no se puede eliminar.
  • openemail.contacts ya puede escribir. create, update y delete se suman a list y get, y cada uno toma la dirección de correo como id.
  • openemail.domains.update() establece o borra el nombre de seguimiento y el nombre de archivos propios de un dominio, y DomainResource.tracking y DomainResource.storage informan del estado de cada uno.
  • openemail.me.rotate() reemplaza el secreto de la clave que llama y se resuelve con la clave nueva completa. No hay ventana de solapamiento, así que el secreto antiguo deja de funcionar en el momento en que la llamada devuelve.
  • KeyResource.domainAllowlist restringe una clave a dominios enteros, junto a las direcciones individuales de addressAllowlist. Un dominio cubre todas sus direcciones, incluidas las creadas después que la clave.
  • Los adjuntos se pueden enviar por referencia. { fileId } convive con la forma en línea, y attachmentDelivery elige entre llevar los archivos dentro del mensaje, sustituirlos por enlaces de descarga o dejar que decida su tamaño.
  • Diez eventos de webhook más, veinte en total: respuestas, entregas, retrasos, supresiones, descargas y los tres eventos de dominio.
  • email.downloaded se dispara cuando una persona descarga un archivo que salió como enlace de descarga. Un mismo enlace sirve a todos los destinatarios del mensaje, así que el evento no nombra a ningún destinatario.
  • Cuatro ámbitos nuevos: contacts:write, audiences:read, audiences:write y keys:write.
  • Nueve campos que eran strings sueltos ahora tienen tipos con nombre, entre ellos RecipientKind, ContactSource, RuleMatchMode y WebhookDeliveryStatus. Aceptan y devuelven los mismos strings que antes.
audiences.ts
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]' })

Qué se rompe en 0.1.0

  • contacts.list devuelve Page<ContactResource> en lugar de un array. Lee las filas de page.items y sigue page.nextCursor mientras page.hasMore sea true. La libreta de direcciones no tiene límite, y el array antiguo se detenía en 200 filas sin decirlo.
  • API_SCOPES, ERROR_TYPES, MESSAGE_ENCRYPTION_FORMATS, RULE_ACTIONS, RULE_FIELDS, RULE_OPERATORS y WEBHOOK_EVENTS son objetos con claves en lugar de arrays, de modo que cada miembro tiene un nombre con el que referirse a él. Los valores no cambian.
  • contacts.list ordena al final, y ya no al principio, los contactos a los que nunca se ha escrito, de modo que un contacto que acabas de crear ya no salta al principio de la libreta.
migrate.ts
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)

El código que solo usaba los tipos derivados sigue funcionando sin tocar nada. ApiScope, WebhookEvent y los demás son los mismos tipos que eran.

0.0.1

La primera versión: un método tipado para cada endpoint, y sin dependencias en tiempo de ejecución.

  • Envío: un mensaje, lotes, envíos programados, una ventana para deshacer y traducción al idioma que lee el destinatario.
  • Plantillas: crear, versionar, publicar, previsualizar y enviar.
  • Seguimiento: aperturas, clics y un resumen de cada mensaje.
  • Buzón: hilos, borradores, etiquetas, contactos y reglas.
  • Espacio de trabajo: dominios, direcciones, miembros, roles y ajustes.
  • Webhooks, con un verificador de firmas que funciona en cualquier lugar donde funcione WebCrypto.
  • Eventos de calendario, incluido el archivo ICS.
  • Buzones desechables, la única parte que también funciona en un navegador.
  • Paginación por cursor en todas las listas, mediante listAll e iterate.
  • Dos clases de error y reintentos que no pueden duplicar un envío.
  • ESM y CommonJS, en Node 20+, Bun, Deno y Cloudflare Workers.