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. وهي تقبل وتعيد السلاسل نفسها كما كانت.
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يرتّب جهات الاتصال التي لم يُراسَل أصحابها قط في الآخر لا في الأول، فلم تعد جهة اتصال أنشأتها للتو تقفز إلى رأس الدفتر.
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.