Przejdź do dokumentacji
SDK

Lista zmian

Każde wydanie pakietu, od najnowszego.

0.1.0

Drugie wydanie. Kontakty można zapisywać i grupować w grupy odbiorców, domena może mieć własne nazwy dla śledzenia i plików, a klucz może sam się rotować. Jedna zmiana psuje istniejący kod i jest wymieniona osobno.

  • openemail.audiences jest nowe: nazwane listy kontaktów, z list, get, create, update, delete, listContacts, addContact i removeContact. Każda przestrzeń robocza ma jedną domyślną grupę odbiorców, tę, której builtin to default, która trzyma każdy kontakt i nie może zostać usunięta.
  • openemail.contacts potrafi zapisywać. create, update i delete dołączają do list i get, a każda z nich przyjmuje adres e-mail jako identyfikator.
  • openemail.domains.update() ustawia lub czyści własną nazwę śledzenia i nazwę plików domeny, a DomainResource.tracking i DomainResource.storage raportują stan każdej z nich.
  • openemail.me.rotate() zastępuje sekret wywołującego klucza i rozwiązuje się pełnym nowym kluczem. Nie ma okna nakładania się, więc stary sekret przestaje działać w chwili, gdy wywołanie zwraca wynik.
  • KeyResource.domainAllowlist zawęża klucz do całych domen, obok pojedynczych adresów w addressAllowlist. Domena obejmuje każdy adres w niej, w tym utworzone po kluczu.
  • Załączniki można wysyłać przez referencję. { fileId } stoi obok formy inline, a attachmentDelivery wybiera między niesieniem plików wewnątrz wiadomości, zastąpieniem ich linkami do pobrania a pozostawieniem decyzji ich rozmiarowi.
  • Dziesięć kolejnych zdarzeń webhooków, w sumie dwadzieścia: odpowiedzi, doręczenia, opóźnienia, wykluczenia, pobrania i trzy zdarzenia domenowe.
  • email.downloaded uruchamia się, gdy ktoś pobierze plik, który wyszedł jako link do pobrania. Jeden link obsługuje wszystkich, do których poszła wiadomość, więc zdarzenie nie nazywa żadnego odbiorcy.
  • Cztery nowe zakresy: contacts:write, audiences:read, audiences:write i keys:write.
  • Dziewięć pól, które były luźnymi ciągami znaków, ma teraz nazwane typy, wśród nich RecipientKind, ContactSource, RuleMatchMode i WebhookDeliveryStatus. Przyjmują i zwracają te same ciągi co wcześniej.
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]' })

Co psuje się w 0.1.0

  • contacts.list zwraca Page<ContactResource> zamiast tablicy. Odczytuj wiersze z page.items i podążaj za page.nextCursor, dopóki page.hasMore jest true. Książka adresowa jest nieograniczona, a stara tablica zatrzymywała się na 200 wierszach, nic o tym nie mówiąc.
  • API_SCOPES, ERROR_TYPES, MESSAGE_ENCRYPTION_FORMATS, RULE_ACTIONS, RULE_FIELDS, RULE_OPERATORS i WEBHOOK_EVENTS są obiektami z kluczami, a nie tablicami, więc każdy element ma nazwę, którą można go przywołać. Wartości są bez zmian.
  • contacts.list sortuje kontakty, do których nigdy nie pisano, na końcu, a nie na początku, więc dopiero co utworzony kontakt nie wskakuje już na górę książki.
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)

Kod, który używał wyłącznie typów pochodnych, działa dalej bez zmian. ApiScope, WebhookEvent i reszta to te same typy co wcześniej.

0.0.1

Pierwsze wydanie: jedna typowana metoda na każdy endpoint i zero zależności czasu wykonania.

  • Wysyłka: pojedyncza wiadomość, partie, wysyłki zaplanowane, okno cofnięcia i tłumaczenie na język, w którym czyta odbiorca.
  • Szablony: tworzenie, wersjonowanie, publikowanie, podgląd i wysyłka.
  • Śledzenie: otwarcia, kliknięcia i podsumowanie dla każdej wiadomości.
  • Skrzynka: wątki, wersje robocze, etykiety, kontakty i reguły.
  • Przestrzeń robocza: domeny, adresy, członkowie, role i ustawienia.
  • Webhooki, z weryfikatorem podpisu działającym wszędzie tam, gdzie działa WebCrypto.
  • Wydarzenia kalendarza, wraz z plikiem ICS.
  • Jednorazowe skrzynki, jedyna część działająca także w przeglądarce.
  • Stronicowanie kursorem na każdej liście, przez listAll i iterate.
  • Dwie klasy błędów i ponowienia, które nie mogą zduplikować wysyłki.
  • ESM i CommonJS, na Node 20+, Bun, Deno i Cloudflare Workers.