Saltar para a documentação
SDK

Registo de alterações

Todas as versões do pacote, da mais recente para a mais antiga.

0.1.0

A segunda versão. Os contactos podem ser escritos e agrupados em audiências, um domínio pode ter os seus próprios nomes de rastreio e de ficheiros, e uma chave pode fazer a sua própria rotação. Uma alteração quebra código existente e está descrita abaixo.

  • openemail.audiences é novo: listas de contactos com nome, com list, get, create, update, delete, listContacts, addContact e removeContact. Cada espaço de trabalho tem uma audiência predefinida, aquela cujo builtin é default, que contém todos os contactos e não pode ser eliminada.
  • openemail.contacts passa a poder escrever. create, update e delete juntam-se a list e get, e cada um recebe o endereço de email como id.
  • openemail.domains.update() define ou limpa o nome de rastreio e o nome de ficheiros próprios de um domínio, e DomainResource.tracking e DomainResource.storage indicam o estado de cada um.
  • openemail.me.rotate() substitui o segredo da chave que faz a chamada e resolve com a nova chave completa. Não há período de sobreposição, pelo que o segredo antigo deixa de funcionar no momento em que a chamada retorna.
  • KeyResource.domainAllowlist restringe uma chave a domínios inteiros, além dos endereços individuais em addressAllowlist. Um domínio abrange todos os seus endereços, incluindo os criados depois da chave.
  • Os anexos podem ser enviados por referência. { fileId } junta-se à forma inline, e attachmentDelivery escolhe entre levar os ficheiros dentro da mensagem, substituí-los por ligações de transferência ou deixar que o tamanho decida.
  • Mais dez eventos de webhook, vinte no total: respostas, entregas, atrasos, supressões, transferências e os três eventos de domínio.
  • email.downloaded é disparado quando uma pessoa obtém um ficheiro enviado como ligação de transferência. Uma única ligação serve todos os destinatários da mensagem, pelo que o evento não identifica nenhum destinatário.
  • Quatro novos âmbitos: contacts:write, audiences:read, audiences:write e keys:write.
  • Nove campos que eram strings soltas têm agora tipos com nome, entre eles RecipientKind, ContactSource, RuleMatchMode e WebhookDeliveryStatus. Aceitam e devolvem as mesmas strings de 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]' })

O que deixa de funcionar na 0.1.0

  • contacts.list devolve Page<ContactResource> em vez de um array. Leia as linhas de page.items e siga page.nextCursor enquanto page.hasMore for true. O livro de endereços não tem limite, e o array antigo parava nas 200 linhas sem o indicar.
  • API_SCOPES, ERROR_TYPES, MESSAGE_ENCRYPTION_FORMATS, RULE_ACTIONS, RULE_FIELDS, RULE_OPERATORS e WEBHOOK_EVENTS são objetos com chaves em vez de arrays, pelo que cada membro tem um nome pelo qual pode ser referido. Os valores não mudam.
  • contacts.list ordena os contactos que nunca receberam email em último lugar em vez de primeiro, pelo que um contacto acabado de criar já não salta para o topo do livro de endereços.
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)

O código que só usava os tipos derivados continua a funcionar sem alterações. ApiScope, WebhookEvent e os restantes são os mesmos tipos que eram.

0.0.1

A primeira versão: um método tipado para cada endpoint e nenhuma dependência em tempo de execução.

  • Envio: uma mensagem, lotes, envios agendados, uma janela para anular e tradução para a língua que o destinatário lê.
  • Modelos: criar, versionar, publicar, pré-visualizar e enviar.
  • Rastreio: aberturas, cliques e um resumo para cada mensagem.
  • Caixa de correio: conversas, rascunhos, etiquetas, contactos e regras.
  • Espaço de trabalho: domínios, endereços, membros, funções e definições.
  • Webhooks, com um verificador de assinaturas que funciona em qualquer ambiente onde o WebCrypto funcione.
  • Eventos de calendário, incluindo o ficheiro ICS.
  • Caixas de entrada descartáveis, a única parte que também funciona num navegador.
  • Paginação por cursor em todas as listas, através de listAll e iterate.
  • Duas classes de erro e novas tentativas que não podem duplicar um envio.
  • ESM e CommonJS, em Node 20+, Bun, Deno e Cloudflare Workers.