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, comlist,get,create,update,delete,listContacts,addContacteremoveContact. Cada espaço de trabalho tem uma audiência predefinida, aquela cujobuiltinédefault, que contém todos os contactos e não pode ser eliminada.openemail.contactspassa a poder escrever.create,updateedeletejuntam-se alisteget, 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, eDomainResource.trackingeDomainResource.storageindicam 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.domainAllowlistrestringe uma chave a domínios inteiros, além dos endereços individuais emaddressAllowlist. 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, eattachmentDeliveryescolhe 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:writeekeys:write. - Nove campos que eram strings soltas têm agora tipos com nome, entre eles
RecipientKind,ContactSource,RuleMatchModeeWebhookDeliveryStatus. Aceitam e devolvem as mesmas strings de 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]' })O que deixa de funcionar na 0.1.0
contacts.listdevolvePage<ContactResource>em vez de um array. Leia as linhas depage.itemse sigapage.nextCursorenquantopage.hasMorefor 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_OPERATORSeWEBHOOK_EVENTSsã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.listordena 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.
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
listAlleiterate. - 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.