web-agent-bridge 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.ar.md +446 -0
- package/README.md +544 -0
- package/bin/cli.js +80 -0
- package/bin/wab.js +80 -0
- package/examples/bidi-agent.js +119 -0
- package/examples/puppeteer-agent.js +108 -0
- package/examples/vision-agent.js +159 -0
- package/package.json +67 -0
- package/public/css/styles.css +1235 -0
- package/public/dashboard.html +566 -0
- package/public/docs.html +582 -0
- package/public/index.html +306 -0
- package/public/login.html +81 -0
- package/public/register.html +94 -0
- package/script/ai-agent-bridge.js +1282 -0
- package/sdk/README.md +55 -0
- package/sdk/index.js +167 -0
- package/sdk/package.json +14 -0
- package/server/index.js +105 -0
- package/server/middleware/auth.js +44 -0
- package/server/models/adapters/index.js +33 -0
- package/server/models/adapters/mysql.js +183 -0
- package/server/models/adapters/postgresql.js +172 -0
- package/server/models/adapters/sqlite.js +7 -0
- package/server/models/db.js +205 -0
- package/server/routes/api.js +121 -0
- package/server/routes/auth.js +51 -0
- package/server/routes/license.js +51 -0
- package/server/ws.js +81 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Web Agent Bridge Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.ar.md
ADDED
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
<div dir="rtl" align="right">
|
|
2
|
+
|
|
3
|
+
# Web Agent Bridge (WAB) — جسر الوكيل الذكي
|
|
4
|
+
|
|
5
|
+
[](https://github.com/abokenan444/web-agent-bridge/actions/workflows/ci.yml)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
7
|
+
[](https://nodejs.org/)
|
|
8
|
+
[](https://hub.docker.com/)
|
|
9
|
+
|
|
10
|
+
**برمجية وسيطة مفتوحة المصدر تربط وكلاء الذكاء الاصطناعي بالمواقع الإلكترونية — توفر واجهة أوامر موحدة للأتمتة الذكية.**
|
|
11
|
+
|
|
12
|
+
يتيح WAB لأصحاب المواقع إضافة سكريبت يكشف واجهة `window.AICommands` لوكلاء الذكاء الاصطناعي. بدلاً من تحليل شيفرة HTML المعقدة، يقرأ الوكيل قائمة الإجراءات المتاحة وينفذها بدقة وأمان.
|
|
13
|
+
|
|
14
|
+
**[English Documentation](README.md)** | **العربية**
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## ✨ المميزات
|
|
19
|
+
|
|
20
|
+
- **اكتشاف تلقائي** — يكتشف الأزرار والنماذج وروابط التنقل تلقائياً
|
|
21
|
+
- **نظام صلاحيات** — تحكم دقيق بما يمكن لوكلاء الذكاء الاصطناعي فعله
|
|
22
|
+
- **واجهة موحدة** — كائن `window.AICommands` موحد يستخدمه أي وكيل
|
|
23
|
+
- **تحديد معدل الاستخدام** — حماية مدمجة ضد الإساءة
|
|
24
|
+
- **لوحة تحليلات** — تتبع تفاعل وكلاء الذكاء الاصطناعي مع موقعك
|
|
25
|
+
- **إجراءات مخصصة** — سجّل إجراءاتك الخاصة مع معالجات مخصصة
|
|
26
|
+
- **تحليلات فورية** — عبر WebSocket لمراقبة النشاط لحظياً
|
|
27
|
+
- **توافق WebDriver BiDi** — دعم البروتوكولات المعيارية للمتصفحات
|
|
28
|
+
- **مستويات اشتراك** — نواة مجانية + ميزات متقدمة مدفوعة
|
|
29
|
+
- **نظام أحداث** — اشترك في أحداث الجسر للمراقبة
|
|
30
|
+
- **صندوق حماية أمني** — عزل كامل مع توكنات جلسة، تحقق من الأصل، تأمين تلقائي
|
|
31
|
+
- **محددات ذاتية الإصلاح** — مقاومة لتغييرات DOM في المواقع الديناميكية (SPA)
|
|
32
|
+
- **وضع التخفي** — محاكاة سلوك بشري (حركة فأرة، كتابة طبيعية، تمرير تدريجي)
|
|
33
|
+
- **قواعد بيانات متعددة** — SQLite + PostgreSQL + MySQL عبر محوّلات قابلة للتبديل
|
|
34
|
+
- **SDK للوكلاء** — حزمة أدوات جاهزة لبناء وكلاء ذكاء اصطناعي
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 🚀 البدء السريع
|
|
39
|
+
|
|
40
|
+
### ١. التثبيت والتشغيل
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# الطريقة أ: استنساخ وتشغيل
|
|
44
|
+
git clone https://github.com/abokenan444/web-agent-bridge.git
|
|
45
|
+
cd web-agent-bridge
|
|
46
|
+
npm install
|
|
47
|
+
cp .env.example .env
|
|
48
|
+
npm start
|
|
49
|
+
|
|
50
|
+
# الطريقة ب: npx (أمر واحد)
|
|
51
|
+
npx web-agent-bridge start
|
|
52
|
+
|
|
53
|
+
# الطريقة ج: Docker
|
|
54
|
+
docker compose up -d
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### ٢. إنشاء حساب
|
|
58
|
+
|
|
59
|
+
زُر `http://localhost:3000/register` وأنشئ حساباً، ثم أضف موقعك من لوحة التحكم.
|
|
60
|
+
|
|
61
|
+
### ٣. إضافة السكريبت لموقعك
|
|
62
|
+
|
|
63
|
+
```html
|
|
64
|
+
<script>
|
|
65
|
+
window.AIBridgeConfig = {
|
|
66
|
+
licenseKey: "WAB-XXXXX-XXXXX-XXXXX-XXXXX",
|
|
67
|
+
agentPermissions: {
|
|
68
|
+
readContent: true,
|
|
69
|
+
click: true,
|
|
70
|
+
fillForms: true,
|
|
71
|
+
scroll: true
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
</script>
|
|
75
|
+
<script src="http://localhost:3000/script/ai-agent-bridge.js"></script>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### ٤. الآن يمكن لوكلاء الذكاء الاصطناعي التفاعل
|
|
79
|
+
|
|
80
|
+
```javascript
|
|
81
|
+
// من جانب وكيل الذكاء الاصطناعي
|
|
82
|
+
const bridge = window.AICommands;
|
|
83
|
+
const actions = bridge.getActions(); // اكتشاف الإجراءات
|
|
84
|
+
await bridge.execute("signup"); // تنفيذ إجراء
|
|
85
|
+
const info = bridge.getPageInfo(); // معلومات الصفحة
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 📁 هيكل المشروع
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
web-agent-bridge/
|
|
94
|
+
├── server/ # خادم Express.js
|
|
95
|
+
│ ├── index.js # نقطة البداية
|
|
96
|
+
│ ├── ws.js # WebSocket للتحليلات الفورية
|
|
97
|
+
│ ├── routes/
|
|
98
|
+
│ │ ├── auth.js # المصادقة (تسجيل/دخول)
|
|
99
|
+
│ │ ├── api.js # واجهة المواقع والتحليلات
|
|
100
|
+
│ │ └── license.js # التحقق من التراخيص والتتبع
|
|
101
|
+
│ ├── middleware/
|
|
102
|
+
│ │ └── auth.js # وسيط JWT
|
|
103
|
+
│ └── models/
|
|
104
|
+
│ └── db.js # قاعدة بيانات SQLite
|
|
105
|
+
├── public/ # الواجهة الأمامية
|
|
106
|
+
│ ├── index.html # الصفحة الرئيسية
|
|
107
|
+
│ ├── dashboard.html # لوحة التحكم
|
|
108
|
+
│ ├── docs.html # التوثيق
|
|
109
|
+
│ ├── login.html # تسجيل الدخول
|
|
110
|
+
│ └── register.html # التسجيل
|
|
111
|
+
├── script/
|
|
112
|
+
│ └── ai-agent-bridge.js # سكريبت الجسر
|
|
113
|
+
├── tests/ # الاختبارات
|
|
114
|
+
├── Dockerfile # حاوية Docker
|
|
115
|
+
├── docker-compose.yml # تشغيل Docker
|
|
116
|
+
└── package.json
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## 🔌 واجهات API
|
|
122
|
+
|
|
123
|
+
### المصادقة
|
|
124
|
+
| النقطة | الطريقة | الوصف |
|
|
125
|
+
|---|---|---|
|
|
126
|
+
| `/api/auth/register` | POST | إنشاء حساب |
|
|
127
|
+
| `/api/auth/login` | POST | تسجيل الدخول |
|
|
128
|
+
| `/api/auth/me` | GET | بيانات المستخدم الحالي |
|
|
129
|
+
|
|
130
|
+
### المواقع
|
|
131
|
+
| النقطة | الطريقة | الوصف |
|
|
132
|
+
|---|---|---|
|
|
133
|
+
| `/api/sites` | GET | قائمة مواقعك |
|
|
134
|
+
| `/api/sites` | POST | إضافة موقع جديد |
|
|
135
|
+
| `/api/sites/:id` | GET | تفاصيل الموقع |
|
|
136
|
+
| `/api/sites/:id/config` | PUT | تحديث الإعدادات |
|
|
137
|
+
| `/api/sites/:id/tier` | PUT | تغيير مستوى الاشتراك |
|
|
138
|
+
| `/api/sites/:id` | DELETE | حذف الموقع |
|
|
139
|
+
| `/api/sites/:id/snippet` | GET | كود التضمين |
|
|
140
|
+
| `/api/sites/:id/analytics` | GET | بيانات التحليلات |
|
|
141
|
+
|
|
142
|
+
### التراخيص (عامة)
|
|
143
|
+
| النقطة | الطريقة | الوصف |
|
|
144
|
+
|---|---|---|
|
|
145
|
+
| `/api/license/verify` | POST | التحقق من مفتاح الترخيص |
|
|
146
|
+
| `/api/license/track` | POST | تسجيل حدث تحليلي |
|
|
147
|
+
|
|
148
|
+
### WebSocket
|
|
149
|
+
| النقطة | الوصف |
|
|
150
|
+
|---|---|
|
|
151
|
+
| `ws://localhost:3000/ws/analytics` | تحليلات فورية لحظية |
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## ⚙️ واجهة سكريبت الجسر
|
|
156
|
+
|
|
157
|
+
عند التحميل، يكشف `window.AICommands` الطرق التالية:
|
|
158
|
+
|
|
159
|
+
| الطريقة | الوصف |
|
|
160
|
+
|---|---|
|
|
161
|
+
| `getActions(category?)` | قائمة الإجراءات المتاحة |
|
|
162
|
+
| `getAction(name)` | الحصول على إجراء محدد |
|
|
163
|
+
| `execute(name, params?)` | تنفيذ إجراء |
|
|
164
|
+
| `readContent(selector)` | قراءة محتوى عنصر |
|
|
165
|
+
| `getPageInfo()` | معلومات الصفحة والجسر |
|
|
166
|
+
| `waitForElement(selector, timeout?)` | انتظار ظهور عنصر DOM |
|
|
167
|
+
| `waitForNavigation(timeout?)` | انتظار تغيير العنوان |
|
|
168
|
+
| `registerAction(def)` | تسجيل إجراء مخصص |
|
|
169
|
+
| `authenticate(key, meta?)` | مصادقة الوكيل |
|
|
170
|
+
| `refresh()` | إعادة مسح الصفحة |
|
|
171
|
+
| `toBiDi()` | الحصول على سياق WebDriver BiDi |
|
|
172
|
+
| `executeBiDi(command)` | تنفيذ أمر بصيغة BiDi |
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## 🔧 الإعدادات
|
|
177
|
+
|
|
178
|
+
```javascript
|
|
179
|
+
window.AIBridgeConfig = {
|
|
180
|
+
licenseKey: "WAB-XXXXX-XXXXX-XXXXX-XXXXX",
|
|
181
|
+
agentPermissions: {
|
|
182
|
+
readContent: true, // قراءة النص
|
|
183
|
+
click: true, // النقر على العناصر
|
|
184
|
+
fillForms: false, // ملء/إرسال النماذج
|
|
185
|
+
scroll: true, // تمرير الصفحة
|
|
186
|
+
navigate: false, // التنقل بين الصفحات
|
|
187
|
+
apiAccess: false, // استدعاء API داخلي (Pro+)
|
|
188
|
+
automatedLogin: false, // تسجيل دخول تلقائي (Starter+)
|
|
189
|
+
extractData: false // استخراج البيانات (Pro+)
|
|
190
|
+
},
|
|
191
|
+
restrictions: {
|
|
192
|
+
allowedSelectors: [],
|
|
193
|
+
blockedSelectors: [".private", "[data-private]"],
|
|
194
|
+
requireLoginForActions: ["apiAccess"],
|
|
195
|
+
rateLimit: { maxCallsPerMinute: 60 }
|
|
196
|
+
},
|
|
197
|
+
logging: { enabled: false, level: "basic" }
|
|
198
|
+
};
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## 🔄 توافق WebDriver BiDi
|
|
204
|
+
|
|
205
|
+
يدعم السكريبت بروتوكول WebDriver BiDi للتواصل مع الوكلاء عبر معايير موحدة:
|
|
206
|
+
|
|
207
|
+
```javascript
|
|
208
|
+
// الحصول على سياق BiDi
|
|
209
|
+
const context = window.__wab_bidi.getContext();
|
|
210
|
+
|
|
211
|
+
// إرسال أمر BiDi
|
|
212
|
+
const result = await window.__wab_bidi.send({
|
|
213
|
+
id: 1,
|
|
214
|
+
method: 'wab.executeAction',
|
|
215
|
+
params: { name: 'signup', data: {} }
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
// الأوامر المدعومة:
|
|
219
|
+
// wab.getContext — سياق الصفحة والقدرات
|
|
220
|
+
// wab.getActions — قائمة الإجراءات
|
|
221
|
+
// wab.executeAction — تنفيذ إجراء
|
|
222
|
+
// wab.readContent — قراءة محتوى
|
|
223
|
+
// wab.getPageInfo — معلومات الصفحة
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## 📊 التحليلات الفورية (WebSocket)
|
|
229
|
+
|
|
230
|
+
اتصل بنقطة WebSocket لتلقي إشعارات فورية:
|
|
231
|
+
|
|
232
|
+
```javascript
|
|
233
|
+
const ws = new WebSocket('ws://localhost:3000/ws/analytics');
|
|
234
|
+
|
|
235
|
+
// المصادقة
|
|
236
|
+
ws.onopen = () => {
|
|
237
|
+
ws.send(JSON.stringify({
|
|
238
|
+
type: 'auth',
|
|
239
|
+
token: 'your-jwt-token',
|
|
240
|
+
siteId: 'your-site-id'
|
|
241
|
+
}));
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
// تلقي الأحداث
|
|
245
|
+
ws.onmessage = (event) => {
|
|
246
|
+
const data = JSON.parse(event.data);
|
|
247
|
+
console.log('حدث جديد:', data);
|
|
248
|
+
// { type: 'analytic', actionName: '...', agentId: '...', success: true }
|
|
249
|
+
};
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## 💰 مستويات الاشتراك
|
|
255
|
+
|
|
256
|
+
| الميزة | مجاني | Starter | Pro | Enterprise |
|
|
257
|
+
|---|:---:|:---:|:---:|:---:|
|
|
258
|
+
| اكتشاف تلقائي | ✓ | ✓ | ✓ | ✓ |
|
|
259
|
+
| نقر/تمرير | ✓ | ✓ | ✓ | ✓ |
|
|
260
|
+
| ملء النماذج | ✓ | ✓ | ✓ | ✓ |
|
|
261
|
+
| تسجيل أساسي | ✓ | ✓ | ✓ | ✓ |
|
|
262
|
+
| تسجيل دخول تلقائي | ✗ | ✓ | ✓ | ✓ |
|
|
263
|
+
| لوحة تحليلات | ✗ | ✓ | ✓ | ✓ |
|
|
264
|
+
| وصول API | ✗ | ✗ | ✓ | ✓ |
|
|
265
|
+
| استخراج البيانات | ✗ | ✗ | ✓ | ✓ |
|
|
266
|
+
| تحديد معدل مخصص | ✗ | ✗ | ✗ | ✓ |
|
|
267
|
+
| Webhooks | ✗ | ✗ | ✗ | ✓ |
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## 🐳 تشغيل باستخدام Docker
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
# بناء وتشغيل
|
|
275
|
+
docker compose up -d
|
|
276
|
+
|
|
277
|
+
# أو البناء يدوياً
|
|
278
|
+
docker build -t web-agent-bridge .
|
|
279
|
+
docker run -p 3000:3000 -e JWT_SECRET=your-secret web-agent-bridge
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
## 🧪 الاختبارات
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
npm test
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
تشمل الاختبارات:
|
|
291
|
+
- واجهات المصادقة (تسجيل، دخول، التحقق من التوكن)
|
|
292
|
+
- واجهات إدارة المواقع (CRUD، الإعدادات، المستويات)
|
|
293
|
+
- واجهات التراخيص (التحقق، التتبع)
|
|
294
|
+
- خدمة الصفحات الثابتة
|
|
295
|
+
|
|
296
|
+
---
|
|
297
|
+
|
|
298
|
+
## 🤖 Agent SDK — حزمة أدوات الوكيل
|
|
299
|
+
|
|
300
|
+
يضم WAB حزمة SDK جاهزة لبناء وكلاء ذكاء اصطناعي. راجع [`sdk/README.md`](sdk/README.md) للتوثيق الكامل.
|
|
301
|
+
|
|
302
|
+
```javascript
|
|
303
|
+
const puppeteer = require('puppeteer');
|
|
304
|
+
const { WABAgent } = require('web-agent-bridge/sdk');
|
|
305
|
+
|
|
306
|
+
const browser = await puppeteer.launch();
|
|
307
|
+
const page = await browser.newPage();
|
|
308
|
+
const agent = new WABAgent(page);
|
|
309
|
+
|
|
310
|
+
await agent.navigateAndWait('https://example.com');
|
|
311
|
+
const actions = await agent.getActions();
|
|
312
|
+
await agent.execute('signup', { email: 'user@test.com' });
|
|
313
|
+
await browser.close();
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
---
|
|
317
|
+
|
|
318
|
+
## 📚 أمثلة الوكلاء
|
|
319
|
+
|
|
320
|
+
أمثلة جاهزة للتشغيل في مجلد [`examples/`](examples/):
|
|
321
|
+
|
|
322
|
+
| الملف | الوصف |
|
|
323
|
+
|---|---|
|
|
324
|
+
| `puppeteer-agent.js` | وكيل أساسي باستخدام Puppeteer و `window.AICommands` |
|
|
325
|
+
| `bidi-agent.js` | وكيل يستخدم بروتوكول WebDriver BiDi عبر `window.__wab_bidi` |
|
|
326
|
+
| `vision-agent.js` | وكيل رؤية — يحل أوصاف اللغة الطبيعية إلى إجراءات WAB |
|
|
327
|
+
|
|
328
|
+
```bash
|
|
329
|
+
node examples/puppeteer-agent.js http://localhost:3000
|
|
330
|
+
node examples/bidi-agent.js http://localhost:3000
|
|
331
|
+
node examples/vision-agent.js http://localhost:3000
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
336
|
+
## 🗄️ دعم قواعد بيانات متعددة
|
|
337
|
+
|
|
338
|
+
يستخدم WAB قاعدة SQLite افتراضياً ويدعم PostgreSQL و MySQL عبر محوّلات قاعدة البيانات.
|
|
339
|
+
|
|
340
|
+
```bash
|
|
341
|
+
# SQLite (افتراضي — لا حاجة لإعداد)
|
|
342
|
+
npm start
|
|
343
|
+
|
|
344
|
+
# PostgreSQL
|
|
345
|
+
npm install pg
|
|
346
|
+
DB_ADAPTER=postgresql DATABASE_URL=postgres://user:pass@localhost:5432/wab npm start
|
|
347
|
+
|
|
348
|
+
# MySQL
|
|
349
|
+
npm install mysql2
|
|
350
|
+
DB_ADAPTER=mysql DATABASE_URL=mysql://user:pass@localhost:3306/wab npm start
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
---
|
|
354
|
+
|
|
355
|
+
## 💻 واجهة سطر الأوامر (CLI)
|
|
356
|
+
|
|
357
|
+
```bash
|
|
358
|
+
# تشغيل الخادم
|
|
359
|
+
npx web-agent-bridge start
|
|
360
|
+
npx web-agent-bridge start --port 8080
|
|
361
|
+
|
|
362
|
+
# تهيئة مشروع جديد
|
|
363
|
+
npx web-agent-bridge init
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
---
|
|
367
|
+
|
|
368
|
+
## 🔒 الأمان
|
|
369
|
+
|
|
370
|
+
### صندوق الحماية الأمني (Security Sandbox)
|
|
371
|
+
|
|
372
|
+
كل نسخة من الجسر تعمل داخل صندوق حماية يوفر:
|
|
373
|
+
|
|
374
|
+
- **توكنات جلسة** — توكن تشفيري فريد لكل جلسة يمنع هجمات الإعادة (Replay Attacks)
|
|
375
|
+
- **التحقق من الأصل** — فقط الأصول المصرح بها يمكنها التفاعل مع الجسر
|
|
376
|
+
- **تحقق من الأوامر** — كل أمر يُفحص من حيث الصيغة والطول وقائمة الحظر
|
|
377
|
+
- **سجل تدقيق** — كل إجراء يُسجّل بالتوقيت وبصمة الوكيل والحالة
|
|
378
|
+
- **حماية التصعيد** — محاولات الوصول لميزات أعلى تؤدي لتأمين تلقائي بعد 5 مخالفات
|
|
379
|
+
- **القفل التلقائي** — الجسر يصبح للقراءة فقط عند اكتشاف انتهاكات أمنية
|
|
380
|
+
|
|
381
|
+
### حماية الخادم
|
|
382
|
+
|
|
383
|
+
- **CSP (سياسة أمان المحتوى)** — حماية ضد XSS وحقن السكريبت
|
|
384
|
+
- **حماية iframe** — `frame-ancestors: 'none'` يمنع تحميل الموقع في إطارات غير موثوقة
|
|
385
|
+
- **تشفير كلمات المرور** — bcrypt بتكلفة 12
|
|
386
|
+
- **JWT** — توكن مؤقت ينتهي بعد 7 أيام
|
|
387
|
+
- **Rate Limiting** — تحديد معدل الطلبات
|
|
388
|
+
- **Helmet** — حماية رؤوس HTTP
|
|
389
|
+
- **حظر المحددات** — تقييد وصول الوكيل لعناصر محددة
|
|
390
|
+
|
|
391
|
+
---
|
|
392
|
+
|
|
393
|
+
## 🔄 المحددات ذاتية الإصلاح (Self-Healing Selectors)
|
|
394
|
+
|
|
395
|
+
المواقع الحديثة (SPAs) تتغير باستمرار. نظام الإصلاح الذاتي يضمن استمرار عمل المحددات:
|
|
396
|
+
|
|
397
|
+
1. **البصمات** — عند اكتشاف الإجراءات، يُخزن WAB بصمة غنية لكل عنصر
|
|
398
|
+
2. **7 استراتيجيات** — عند تعطل محدد، يجرب WAB: `data-wab-id`، `data-testid`، ID، `aria-label`، `name`، مطابقة نصية ضبابية، موضع + دور
|
|
399
|
+
3. **مراقب SPA** — `MutationObserver` يرصد تغييرات DOM ويعيد اكتشاف الإجراءات تلقائياً
|
|
400
|
+
|
|
401
|
+
```javascript
|
|
402
|
+
// أضف هذا للاستقرار الأقصى
|
|
403
|
+
<button data-wab-id="signup-btn">إنشاء حساب</button>
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
---
|
|
407
|
+
|
|
408
|
+
## 🥷 وضع التخفي (Stealth Mode)
|
|
409
|
+
|
|
410
|
+
لمواجهة أنظمة الحماية من البوتات:
|
|
411
|
+
|
|
412
|
+
```javascript
|
|
413
|
+
window.AIBridgeConfig = { stealth: { enabled: true } };
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
| الميزة | الوصف |
|
|
417
|
+
|---|---|
|
|
418
|
+
| سلسلة أحداث الفأرة | `mouseover → mouseenter → mousemove → mousedown → mouseup → click` |
|
|
419
|
+
| محاكاة الكتابة | حرف بحرف مع تأخير 30-120 مللي ثانية |
|
|
420
|
+
| تمرير تدريجي | خطوات متعددة بسرعة متغيرة |
|
|
421
|
+
| تأخيرات عشوائية | 50-400 مللي ثانية بين الإجراءات |
|
|
422
|
+
|
|
423
|
+
---
|
|
424
|
+
|
|
425
|
+
## 🛠️ التقنيات
|
|
426
|
+
|
|
427
|
+
- **الخلفية**: Node.js + Express + WebSocket
|
|
428
|
+
- **قاعدة البيانات**: SQLite / PostgreSQL / MySQL
|
|
429
|
+
- **المصادقة**: JWT + bcrypt
|
|
430
|
+
- **الواجهة**: HTML/CSS/JS بدون أطر عمل
|
|
431
|
+
- **الأمان**: Helmet, CORS, CSP, Rate Limiting, Security Sandbox
|
|
432
|
+
- **الحاويات**: Docker + Docker Compose
|
|
433
|
+
|
|
434
|
+
---
|
|
435
|
+
|
|
436
|
+
## 🤝 المساهمة
|
|
437
|
+
|
|
438
|
+
نرحب بالمساهمات! اقرأ [دليل المساهمة](CONTRIBUTING.md) للبدء.
|
|
439
|
+
|
|
440
|
+
---
|
|
441
|
+
|
|
442
|
+
## 📄 الرخصة
|
|
443
|
+
|
|
444
|
+
MIT — مجاني للاستخدام والتعديل والتوزيع.
|
|
445
|
+
|
|
446
|
+
</div>
|