تخطَّ إلى المستندات
SDK

سجل التغييرات

كل إصدار من الحزمة، الأحدث أولاً.

0.1.0

الإصدار الثاني. صار بالإمكان كتابة جهات الاتصال وتجميعها في جماهير، وصار النطاق يحمل اسمي التتبع والملفات الخاصين به، وصار المفتاح يدوّر نفسه. وثمة تغيير واحد يكسر شيفرة قائمة، وهو مدرج تحته.

  • الوحدة openemail.audiences جديدة: قوائم مسمّاة من جهات الاتصال، مع list وget وcreate وupdate وdelete وlistContacts وaddContact وremoveContact. ولكل مساحة عمل جمهور افتراضي واحد، وهو الذي قيمة builtin فيه default، يحمل كل جهات الاتصال ولا يمكن حذفه.
  • صار openemail.contacts يكتب. فانضم create وupdate وdelete إلى list وget، ويأخذ كل منها عنوان البريد بوصفه المعرّف.
  • تضبط openemail.domains.update() اسم التتبع واسم الملفات الخاصين بالنطاق أو تمسحهما، ويبلّغ DomainResource.tracking وDomainResource.storage عن حال كل منهما.
  • تستبدل openemail.me.rotate() سرّ المفتاح المستدعي وتُرجع المفتاح الجديد كاملاً. ولا توجد نافذة تداخل، فيتوقف السرّ القديم عن العمل لحظة عودة الاستدعاء.
  • يضيّق KeyResource.domainAllowlist المفتاح إلى نطاقات كاملة، إلى جانب العناوين المفردة في addressAllowlist. والنطاق يغطي كل عنوان عليه، بما في ذلك ما أُنشئ منها بعد المفتاح.
  • صار بالإمكان إرسال المرفقات بالإشارة. فيقف { fileId } إلى جانب الصيغة المضمَّنة، ويختار attachmentDelivery بين حمل الملفات داخل الرسالة، أو استبدالها بروابط تنزيل، أو ترك حجمها يقرّر.
  • عشرة أحداث webhook إضافية، عشرون في المجموع: الردود والتسليمات والتأخيرات والكتم والتنزيلات، وأحداث النطاق الثلاثة.
  • ينطلق email.downloaded حين يجلب شخص ملفاً خرج كرابط تنزيل. ورابط واحد يخدم كل من ذهبت إليهم الرسالة، فلا يسمّي الحدث أي مستلم.
  • أربعة نطاقات جديدة: contacts:write وaudiences:read وaudiences:write وkeys:write.
  • تسعة حقول كانت سلاسل نصية حرة صارت لها أنواع مسمّاة، منها RecipientKind وContactSource وRuleMatchMode وWebhookDeliveryStatus. وهي تقبل وتعيد السلاسل نفسها كما كانت.
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]' })

ما الذي يُكسر في 0.1.0

  • صار contacts.list يعيد Page<ContactResource> بدل مصفوفة. اقرأ الصفوف من page.items وتابع page.nextCursor ما دام page.hasMore بقيمة true. فدفتر العناوين غير محدود، والمصفوفة القديمة كانت تتوقف عند 200 صف دون أن تقول ذلك.
  • صارت API_SCOPES وERROR_TYPES وMESSAGE_ENCRYPTION_FORMATS وRULE_ACTIONS وRULE_FIELDS وRULE_OPERATORS وWEBHOOK_EVENTS كائنات ذات مفاتيح بدل مصفوفات، فصار لكل عضو اسم يُنادى به. والقيم كما هي.
  • صار contacts.list يرتّب جهات الاتصال التي لم يُراسَل أصحابها قط في الآخر لا في الأول، فلم تعد جهة اتصال أنشأتها للتو تقفز إلى رأس الدفتر.
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)

الشيفرة التي استعملت الأنواع المشتقة فقط تظل تعمل بلا مساس. فـ ApiScope وWebhookEvent وسائرها هي الأنواع نفسها كما كانت.

0.0.1

الإصدار الأول: طريقة واحدة ذات أنواع لكل نقطة نهاية، وبلا اعتماديات وقت تشغيل.

  • الإرسال: رسالة واحدة، ودفعات، وإرسالات مجدولة، ونافذة تراجع، وترجمة إلى اللغة التي يقرأها المستلم.
  • القوالب: إنشاء وإصدار ونشر ومعاينة وإرسال.
  • التتبع: عمليات الفتح والنقر، وملخّص لكل رسالة.
  • صندوق البريد: المحادثات والمسوّدات والتسميات وجهات الاتصال والقواعد.
  • مساحة العمل: النطاقات والعناوين والأعضاء والأدوار والإعدادات.
  • خطافات الويب (webhooks)، مع مدقّق توقيع يعمل حيثما عمل WebCrypto.
  • أحداث التقويم، بما في ذلك ملف ICS.
  • صناديق الوارد المؤقتة، وهي الجزء الوحيد الذي يعمل في المتصفح أيضاً.
  • ترقيم صفحات بالمؤشر في كل قائمة، عبر listAll وiterate.
  • صنفا أخطاء، وإعادات محاولة لا يمكنها تكرار إرسال.
  • ESM وCommonJS، على Node 20+ وBun وDeno وCloudflare Workers.