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.audienceses nuevo: listas de contactos con nombre, conlist,get,create,update,delete,listContacts,addContactyremoveContact. Cada espacio de trabajo tiene una audiencia predeterminada, aquella cuyobuiltinesdefault, que contiene todos los contactos y no se puede eliminar.openemail.contactsya puede escribir.create,updateydeletese suman alistyget, 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, yDomainResource.trackingyDomainResource.storageinforman 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.domainAllowlistrestringe una clave a dominios enteros, junto a las direcciones individuales deaddressAllowlist. 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, yattachmentDeliveryelige 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.downloadedse 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:writeykeys:write. - Nueve campos que eran strings sueltos ahora tienen tipos con nombre, entre ellos
RecipientKind,ContactSource,RuleMatchModeyWebhookDeliveryStatus. Aceptan y devuelven los mismos strings que antes.
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.listdevuelvePage<ContactResource>en lugar de un array. Lee las filas depage.itemsy siguepage.nextCursormientraspage.hasMoresea 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_OPERATORSyWEBHOOK_EVENTSson 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.listordena 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.
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
listAlleiterate. - Dos clases de error y reintentos que no pueden duplicar un envío.
- ESM y CommonJS, en Node 20+, Bun, Deno y Cloudflare Workers.