
envsec v1.0.0-rc.2
أداة CLI آمنة لإدارة أسرار البيئة باستخدام مخازن بيانات الاعتماد الأصلية لنظام التشغيل (macOS Keychain, Linux Secret Service, Windows Credential Manager)
envsec
إدارة آمنة لأسرار البيئة باستخدام مخازن بيانات الاعتماد الأصلية لنظام التشغيل.
عرض توضيحي

الميزات
- تخزين الأسرار في مخزن بيانات الاعتماد الأصلي لنظام التشغيل (وليس في ملفات نصية عادية)
- متعدد المنصات: macOS، Linux، Windows
- تنظيم الأسرار حسب السياق (مثل
myapp.dev،stripe-api.prod،work.staging) - تتبع البيانات الوصفية للأسرار (أسماء المفاتيح، الطوابع الزمنية) عبر SQLite
- البحث في السياقات والأسرار باستخدام أنماط glob
- تشغيل الأوامر مع استبدال الأسرار
- حفظ وإعادة تشغيل الأوامر باستخدام
cmd(بحث، عرض، تشغيل، حذف) - تصدير الأسرار إلى ملفات
.env(مع تتبع التوليد عبرaudit) - تصدير الأسرار كمتغيرات بيئة shell (
eval $(envsec env)) - تحميل الأسرار من ملفات
.env(مع اكتشاف التعارضات) - مشاركة الأسرار المشفرة باستخدام GPG لأعضاء الفريق
- واجهة طرفية تفاعلية (
envsec tui) لإدارة الأسرار دون حفظ الأوامر
الحزم
هذا مستودع أحادي يحتوي على الحزم التالية:
| الحزمة | الوصف | npm |
|---|---|---|
envsec | أداة سطر أوامر لإدارة الأسرار | |
@envsec/sdk | SDK لـ Node.js / Bun لتحميل الأسرار برمجياً | |
@envsec/core | المحرك الأساسي — محولات مخزن بيانات الاعتماد لنظام التشغيل + قاعدة بيانات البيانات الوصفية | |
@envsec/tui | واجهة طرفية تفاعلية لإدارة الأسرار |
البدء السريع مع SDK
للوصول البرمجي إلى الأسرار من Node.js أو Bun، استخدم @envsec/sdk:
npm install @envsec/sdk
import { loadSecrets } from "@envsec/sdk";
// Load and inject into process.env
await loadSecrets({ context: "myapp.dev", inject: true });
// Or use the client for full control
import { EnvsecClient } from "@envsec/sdk";
const client = await EnvsecClient.create({ context: "myapp.dev" });
const apiKey = await client.get("api.key");
await client.close();
راجع توثيق SDK الكامل لجميع واجهات API، ودعم السياقات المتعددة، والخيارات.
المتطلبات
- Node.js >= 22
macOS
لا توجد تبعيات إضافية. يستخدم Keychain المدمج عبر أداة security CLI.
Linux
يتطلب libsecret-tools (الذي يوفر الأمر secret-tool)، والذي يتواصل مع GNOME Keyring أو KDE Wallet أو أي مزود Secret Service API عبر D-Bus.
# Debian / Ubuntu
sudo apt install libsecret-tools
# Fedora
sudo dnf install libsecret
# Arch
sudo pacman -S libsecret
يجب أن تكون جلسة D-Bus قيد التشغيل وخدمة keyring daemon (مثل gnome-keyring-daemon) نشطة. تتعامل معظم بيئات سطح المكتب مع هذا تلقائيًا.
Windows
لا توجد تبعيات إضافية. يستخدم Windows Credential Manager المدمج عبر cmdkey و PowerShell.
التثبيت
Homebrew (macOS / Linux)
brew tap davidnussio/homebrew-tap
brew install envsec
npm
npm install -g envsec
npx (بدون تثبيت)
npx envsec
mise
mise use -g npm:envsec
الاستخدام
تتطلب معظم الأوامر سياقًا محددًا باستخدام --context (أو -c). السياق هو تسمية حرة لتجميع الأسرار — مثل myapp.dev، stripe-api.prod، work.staging.
الخيارات العامة
هذه الخيارات متاحة في جميع الأوامر:
--context،-c— اسم السياق (مثلmyapp.dev،stripe-api.prod). يقرأ أيضًا متغير البيئةENVSEC_CONTEXT--debug،-d— تفعيل تسجيل التصحيح--json— الإخراج بصيغة JSON للبرمجة النصية--db— المسار إلى ملف قاعدة بيانات SQLite (الافتراضي:~/.envsec/store.sqlite). يقرأ أيضًا متغير البيئةENVSEC_DB
مسار قاعدة بيانات مخصص
بشكل افتراضي، يتم تخزين البيانات الوصفية في ~/.envsec/store.sqlite. يمكنك تجاوز ذلك باستخدام --db أو متغير البيئة ENVSEC_DB:
# Use a project-local database
envsec --db ./local-store.sqlite -c myapp.dev list
# Or via environment variable
export ENVSEC_DB=/shared/team/envsec.sqlite
envsec -c myapp.dev list
يتقدّم العلم --db على ENVSEC_DB. تشمل حالات الاستخدام قواعد بيانات لكل مشروع، وقواعد بيانات مشتركة بين الفريق على محركات الشبكة، وCI/CD مع تخزين مؤقت.
إضافة سر
تخزين سر في مخزن بيانات الاعتماد الخاص بنظام التشغيل.
<key>— اسم مفتاح السر (مثلapi.key،db.password)--value،-v— القيمة المراد تخزينها (احذفها للحصول على مطالبة تفاعلية مقنّعة)--expires،-e— مدة الانتهاء (مثل30m،2h،7d،4w،3mo،1y)
# Store a value inline
envsec -c myapp.dev add api.key --value "sk-abc123"
# Or use the short alias
envsec -c myapp.dev add api.key -v "sk-abc123"
# Omit --value for an interactive masked prompt
envsec -c myapp.dev add api.key
# Set an expiry duration with --expires (-e)
envsec -c myapp.dev add api.key -v "sk-abc123" --expires 30d
# Supported duration units: m (minutes), h (hours), d (days), w (weeks), mo (months), y (years)
# Combinable: 1y6mo, 2w3d, 1d12h
envsec -c myapp.dev add api.key -v "sk-abc123" -e 6mo
الحصول على سر
استرجع قيمة سر من مخزن بيانات الاعتماد في نظام التشغيل.
<key>— اسم مفتاح السر المراد استرجاعه--quiet،-q— اطبع القيمة الخام فقط (بدون تحذيرات أو مخرجات إضافية)--json— الإخراج بصيغة JSON (يتضمن السياق، المفتاح، القيمة، expires_at)
envsec -c myapp.dev get api.key
# Print only the raw value (no warnings or extra output)
envsec -c myapp.dev get api.key --quiet
envsec -c myapp.dev get api.key -q
حذف سر
إزالة سر من مخزن بيانات الاعتماد في نظام التشغيل.
<key>— اسم مفتاح السر المراد حذفه (اختياري إذا تم استخدام--all)--yes,-y— تخطي مطالبة التأكيد--all— حذف جميع الأسرار في السياق
envsec -c myapp.dev delete api.key
# or use the alias
envsec -c myapp.dev del api.key
إعادة تسمية سر
إعادة تسمية مفتاح سر ضمن نفس السياق. يتم الحفاظ على القيمة وبيانات انتهاء الصلاحية الوصفية.
<old-key>— اسم مفتاح السر الحالي<new-key>— اسم مفتاح السر الجديد--force،-f— الكتابة فوق الهدف إذا كان موجودًا بالفعل
# Rename a key
envsec -c myapp.dev rename old.key new.key
# Overwrite target if it already exists
envsec -c myapp.dev rename old.key existing.key --force
عرض جميع الأسرار في سياق
عرض جميع مفاتيح الأسرار والبيانات الوصفية في سياق.
--json— الإخراج بصيغة JSON
envsec -c myapp.dev list
عرض جميع السياقات
اعرض جميع السياقات المتاحة مع عدد الأسرار.
--json— الإخراج بصيغة JSON
# Without --context, lists all available contexts with secret counts
envsec list
البحث عن الأسرار
ابحث عن الأسرار أو السياقات باستخدام أنماط glob.
<pattern>— نمط glob للبحث عنه (مثلapi.*،myapp.*)--json— الإخراج بصيغة JSON
# Search secrets within a context
envsec -c myapp.dev search "api.*"
# Search contexts by pattern (without --context)
envsec search "myapp.*"
نقل الأسرار بين السياقات
نقل الأسرار من سياق إلى آخر. تُزال الأسرار المصدر بعد النقل.
<pattern>— نمط Glob أو مفتاح محدد للنقل (اختياري إذا تم استخدام--all)--to,-t— السياق الهدف لنقل الأسرار إليه--all— نقل جميع الأسرار من السياق المصدر--force,-f— الكتابة فوق الأسرار الموجودة في السياق الهدف--yes,-y— تخطي مطالبة التأكيد
# Move a single secret
envsec -c myapp.dev move api.token --to myapp.prod
# Move secrets matching a glob pattern
envsec -c myapp.dev move "redis.*" --to myapp.prod -y