Ves a la documentació
SDK

Registre de canvis

Totes les versions del paquet, de la més nova a la més antiga.

0.1.0

La segona versió. Els contactes es poden escriure i agrupar en audiències, un domini pot portar els seus propis noms de seguiment i de fitxers, i una clau es pot rotar a si mateixa. Un canvi trenca codi existent, i és a la llista de més avall.

  • openemail.audiences és nou: llistes de contactes amb nom, amb list, get, create, update, delete, listContacts, addContact i removeContact. Cada espai de treball té una audiència per defecte, la que té builtin igual a default, que conté tots els contactes i no es pot esborrar.
  • openemail.contacts ja pot escriure. create, update i delete s'afegeixen a list i get, i cadascun pren l'adreça electrònica com a id.
  • openemail.domains.update() defineix o esborra el nom de seguiment i el nom de fitxers propis d'un domini, i DomainResource.tracking i DomainResource.storage informen de com està cadascun.
  • openemail.me.rotate() substitueix el secret de la clau que fa la crida i es resol amb la clau nova sencera. No hi ha cap finestra de solapament, així que el secret antic deixa de funcionar en el moment en què la crida retorna.
  • KeyResource.domainAllowlist acota una clau a dominis sencers, al costat de les adreces individuals d'addressAllowlist. Un domini cobreix totes les seves adreces, incloses les creades després de la clau.
  • Els adjunts es poden enviar per referència. { fileId } conviu amb la forma inline, i attachmentDelivery tria entre portar els fitxers dins del missatge, substituir-los per enllaços de descàrrega o deixar que ho decideixi la seva mida.
  • Deu esdeveniments de webhook més, vint en total: respostes, lliuraments, retards, supressions, descàrregues i els tres esdeveniments de domini.
  • email.downloaded es dispara quan una persona baixa un fitxer que va sortir com a enllaç de descàrrega. Un mateix enllaç serveix per a tots els destinataris del missatge, de manera que l'esdeveniment no anomena cap destinatari.
  • Quatre scopes nous: contacts:write, audiences:read, audiences:write i keys:write.
  • Nou camps que abans eren cadenes soltes ara tenen tipus amb nom, entre ells RecipientKind, ContactSource, RuleMatchMode i WebhookDeliveryStatus. Accepten i retornen les mateixes cadenes que abans.
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è es trenca a la 0.1.0

  • contacts.list retorna Page<ContactResource> en comptes d'un array. Llegeix les files de page.items i segueix page.nextCursor mentre page.hasMore sigui cert. La llibreta d'adreces no té límit, i l'array antic s'aturava a 200 files sense dir-ho.
  • API_SCOPES, ERROR_TYPES, MESSAGE_ENCRYPTION_FORMATS, RULE_ACTIONS, RULE_FIELDS, RULE_OPERATORS i WEBHOOK_EVENTS són objectes amb claus i no pas arrays, de manera que cada membre té un nom amb què anomenar-lo. Els valors no canvien.
  • contacts.list ordena els contactes als quals mai no s'ha escrit al final i no pas al principi, de manera que un contacte que acabes de crear ja no salta al capdamunt de la llibreta.
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 codi que només feia servir els tipus derivats continua funcionant sense tocar res. ApiScope, WebhookEvent i la resta són els mateixos tipus que eren.

0.0.1

La primera versió: un mètode tipat per a cada endpoint, i cap dependència en temps d'execució.

  • Enviament: un missatge, lots, enviaments programats, una finestra per desfer i traducció a l'idioma que llegeix el destinatari.
  • Plantilles: crear, versionar, publicar, previsualitzar i enviar.
  • Seguiment: obertures, clics i un resum per a cada missatge.
  • Bústia: converses, esborranys, etiquetes, contactes i regles.
  • Espai de treball: dominis, adreces, membres, rols i configuració.
  • Webhooks, amb un verificador de signatures que funciona allà on funcioni WebCrypto.
  • Esdeveniments de calendari, amb el fitxer ICS inclòs.
  • Bústies d'un sol ús, l'única part que també funciona en un navegador.
  • Paginació per cursor a totes les llistes, mitjançant listAll i iterate.
  • Dues classes d'error, i reintents que no poden duplicar un enviament.
  • ESM i CommonJS, a Node 20+, Bun, Deno i Cloudflare Workers.