Skip to content
تم إنشاء هذه الصفحة وترجمتها بمساعدة الذكاء الاصطناعي. إذا لاحظت أي أخطاء، لا تتردد في المساهمة في تحسينها. تعديل على GitHub

مكوّنات WASM

يتضمن PRX-Email مكوّن WASM يُترجم عميل البريد الإلكتروني إلى WebAssembly للتنفيذ في بيئة آمنة داخل وقت تشغيل PRX. يستخدم المكوّن WIT (أنواع واجهة WebAssembly) لتعريف واجهات استدعاء المضيف، مما يتيح للكود المستضاف بـ WASM استدعاء عمليات البريد الإلكتروني مثل sync وlist وget وsearch وsend وreply.

الهندسة المعمارية

PRX Runtime (Host)
  |
  +-- WASM Plugin (prx-email-plugin)
        |
        +-- WIT Host-Calls
        |     email.sync    --> Host IMAP sync
        |     email.list    --> Host inbox list
        |     email.get     --> Host message get
        |     email.search  --> Host inbox search
        |     email.send    --> Host SMTP send
        |     email.reply   --> Host SMTP reply
        |
        +-- email.execute   --> Dispatcher
              (forwards to host-calls above)

نموذج التنفيذ

عندما يستدعي مكوّن WASM email.execute، يوجّه المكوّن الاستدعاء إلى دالة استدعاء المضيف المناسبة. يتعامل وقت التشغيل المضيف مع عمليات IMAP/SMTP الفعلية، وتُعاد النتائج من خلال واجهة WIT.

مفتاح أمان الشبكة

تنفيذ IMAP/SMTP الحقيقي من سياق WASM معطّل بشكل افتراضي. هذا يمنع المكوّنات في البيئة الآمنة من إجراء اتصالات شبكية غير مقصودة.

تفعيل عمليات الشبكة

اضبط متغير البيئة قبل بدء وقت تشغيل PRX:

bash
export PRX_EMAIL_ENABLE_REAL_NETWORK=1

السلوك عند التعطيل

العمليةالسلوك
email.syncتعيد خطأ EMAIL_NETWORK_GUARD
email.sendتعيد خطأ EMAIL_NETWORK_GUARD
email.replyتعيد خطأ EMAIL_NETWORK_GUARD
email.listتعمل (تقرأ من SQLite المحلي)
email.getتعمل (تقرأ من SQLite المحلي)
email.searchتعمل (تقرأ من SQLite المحلي)

TIP

العمليات للقراءة فقط (list وget وsearch) تعمل دائماً لأنها تستعلم من قاعدة بيانات SQLite المحلية دون الوصول إلى الشبكة. فقط العمليات التي تتطلب اتصالات IMAP/SMTP تخضع للحراسة.

قدرة المضيف غير متاحة

عندما لا يوفر وقت التشغيل المضيف قدرة البريد الإلكتروني على الإطلاق (مسار التنفيذ غير WASM)، تعيد العمليات EMAIL_HOST_CAPABILITY_UNAVAILABLE.

هيكل المكوّن

wasm-plugin/
  Cargo.toml          # Plugin crate configuration
  plugin.toml         # Plugin manifest
  plugin.wasm         # Pre-compiled WASM binary
  src/
    lib.rs            # Plugin entry point and dispatcher
    bindings.rs       # WIT-generated bindings
  wit/                # WIT interface definitions
    deps/
      prx-host/       # Host-provided interfaces

إعداد Cargo

toml
[package]
name = "prx-email-plugin"
version = "0.1.0"
edition = "2024"

[lib]
crate-type = ["cdylib", "rlib"]

[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
wit-bindgen = { version = "0.51", features = ["macros"] }

[package.metadata.component]
package = "prx:plugin"

[package.metadata.component.target.dependencies]
"prx:host" = { path = "wit/deps/prx-host" }

بناء المكوّن

المتطلبات الأساسية

  • سلسلة أدوات Rust
  • هدف wasm32-wasip1

خطوات البناء

bash
# Add WASM target
rustup target add wasm32-wasip1

# Build the plugin
cd wasm-plugin
cargo build --release --target wasm32-wasip1

استخدام سكريبت البناء

bash
chmod +x scripts/build_wasm_plugin.sh
./scripts/build_wasm_plugin.sh

واجهة WIT

يتواصل المكوّن مع المضيف من خلال واجهات WIT المُعرَّفة. توفر حزمة prx:host دالات استدعاء المضيف التالية:

استدعاءات المضيف المتاحة

الدالةالوصفالشبكة مطلوبة
email.syncمزامنة صندوق الوارد IMAP لحساب/مجلدنعم
email.listقائمة الرسائل من قاعدة البيانات المحليةلا
email.getالحصول على رسالة محددة بالمعرفلا
email.searchالبحث في الرسائل بالاستعلاملا
email.sendإرسال بريد إلكتروني جديد عبر SMTPنعم
email.replyالرد على بريد إلكتروني موجودنعم

تنسيق الطلب/الاستجابة

تستخدم استدعاءات المضيف تسلسل JSON لحمولات الطلب والاستجابة:

rust
// Example: list messages
let request = serde_json::json!({
    "account_id": 1,
    "limit": 10
});

let response = host_call("email.list", &request)?;

سير عمل التطوير

1. تعديل كود المكوّن

حرّر wasm-plugin/src/lib.rs لإضافة منطق مخصص:

rust
// Add pre-processing before email operations
fn before_send(request: &SendRequest) -> Result<(), PluginError> {
    // Custom validation, logging, or transformation
    Ok(())
}

2. إعادة البناء

bash
cd wasm-plugin
cargo build --release --target wasm32-wasip1

3. الاختبار محلياً

الاختبار مع تعطيل مفتاح أمان الشبكة:

bash
export PRX_EMAIL_ENABLE_REAL_NETWORK=1
# Run your PRX runtime with the updated plugin

4. النشر

انسخ ملف .wasm المُترجم إلى دليل مكوّنات وقت تشغيل PRX الخاص بك.

نموذج الأمان

القيدالإنفاذ
الوصول إلى الشبكةمعطّل بشكل افتراضي؛ يتطلب PRX_EMAIL_ENABLE_REAL_NETWORK=1
الوصول إلى نظام الملفاتلا وصول مباشر لنظام الملفات من WASM
الذاكرةمحدودة بحدود الذاكرة الخطية لـ WASM
وقت التنفيذمحدود بقياس الوقود
أمان الرمزرموز OAuth تُدار من المضيف، غير مكشوفة لـ WASM

WARNING

مكوّن WASM لا يملك وصولاً مباشراً لرموز OAuth أو بيانات الاعتماد. جميع المصادقة تُعالج من وقت التشغيل المضيف. يستقبل المكوّن نتائج العمليات فقط، وليس بيانات الاعتماد الخام.

الخطوات التالية

Released under the Apache-2.0 License.