web-agent-bridge 3.2.0 → 3.4.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.
Files changed (256) hide show
  1. package/LICENSE +84 -72
  2. package/README.ar.md +1304 -1152
  3. package/README.md +298 -1635
  4. package/bin/agent-runner.js +474 -474
  5. package/bin/cli.js +237 -138
  6. package/bin/wab-init.js +223 -0
  7. package/bin/wab.js +80 -80
  8. package/examples/azure-dns-wab.js +83 -0
  9. package/examples/bidi-agent.js +119 -119
  10. package/examples/cloudflare-wab-dns.js +121 -0
  11. package/examples/cpanel-wab-dns.js +114 -0
  12. package/examples/cross-site-agent.js +91 -91
  13. package/examples/dns-discovery-agent.js +166 -0
  14. package/examples/gcp-dns-wab.js +76 -0
  15. package/examples/governance-agent.js +169 -0
  16. package/examples/mcp-agent.js +94 -94
  17. package/examples/next-app-router/README.md +44 -44
  18. package/examples/plesk-wab-dns.js +103 -0
  19. package/examples/puppeteer-agent.js +108 -108
  20. package/examples/route53-wab-dns.js +144 -0
  21. package/examples/saas-dashboard/README.md +55 -55
  22. package/examples/safe-mode-agent.js +96 -0
  23. package/examples/shopify-hydrogen/README.md +74 -74
  24. package/examples/vision-agent.js +171 -171
  25. package/examples/wab-sign.js +74 -0
  26. package/examples/wab-verify.js +60 -0
  27. package/examples/wordpress-elementor/README.md +77 -77
  28. package/package.json +19 -6
  29. package/public/.well-known/agent-tools.json +180 -180
  30. package/public/.well-known/ai-assets.json +59 -59
  31. package/public/.well-known/security.txt +8 -0
  32. package/public/.well-known/wab.json +28 -0
  33. package/public/activate.html +368 -0
  34. package/public/adoption-metrics.html +188 -0
  35. package/public/agent-workspace.html +349 -349
  36. package/public/ai.html +198 -198
  37. package/public/api.html +413 -412
  38. package/public/azure-dns-integration.html +289 -0
  39. package/public/browser.html +486 -486
  40. package/public/cloudflare-integration.html +380 -0
  41. package/public/commander-dashboard.html +243 -243
  42. package/public/cookies.html +210 -210
  43. package/public/cpanel-integration.html +398 -0
  44. package/public/css/agent-workspace.css +1713 -1713
  45. package/public/css/premium.css +317 -317
  46. package/public/css/styles.css +1263 -1235
  47. package/public/dashboard.html +707 -706
  48. package/public/dns.html +436 -0
  49. package/public/docs.html +588 -587
  50. package/public/feed.xml +89 -89
  51. package/public/gcp-dns-integration.html +318 -0
  52. package/public/growth.html +465 -463
  53. package/public/index.html +1266 -982
  54. package/public/integrations.html +556 -0
  55. package/public/js/activate.js +145 -0
  56. package/public/js/agent-workspace.js +1740 -1740
  57. package/public/js/auth-nav.js +65 -31
  58. package/public/js/auth-redirect.js +12 -12
  59. package/public/js/cookie-consent.js +56 -56
  60. package/public/js/dns.js +438 -0
  61. package/public/js/wab-demo-page.js +721 -721
  62. package/public/js/ws-client.js +74 -74
  63. package/public/llms-full.txt +360 -360
  64. package/public/llms.txt +125 -125
  65. package/public/login.html +85 -85
  66. package/public/mesh-dashboard.html +328 -328
  67. package/public/openapi.json +669 -580
  68. package/public/phone-shield.html +281 -0
  69. package/public/plesk-integration.html +375 -0
  70. package/public/premium-dashboard.html +2489 -2489
  71. package/public/premium.html +793 -793
  72. package/public/privacy.html +297 -297
  73. package/public/provider-onboarding.html +172 -0
  74. package/public/provider-sandbox.html +134 -0
  75. package/public/providers.html +359 -0
  76. package/public/register.html +105 -105
  77. package/public/registrar-integrations.html +141 -0
  78. package/public/robots.txt +99 -87
  79. package/public/route53-integration.html +531 -0
  80. package/public/script/wab-consent.d.ts +36 -36
  81. package/public/script/wab-consent.js +104 -104
  82. package/public/script/wab-schema.js +131 -131
  83. package/public/script/wab.d.ts +108 -108
  84. package/public/script/wab.min.js +580 -580
  85. package/public/security.txt +8 -0
  86. package/public/shieldqr.html +231 -0
  87. package/public/sitemap.xml +6 -0
  88. package/public/terms.html +256 -256
  89. package/public/wab-trust.html +200 -0
  90. package/public/wab-vs-protocols.html +210 -0
  91. package/public/whitepaper.html +449 -0
  92. package/script/ai-agent-bridge.js +1754 -1754
  93. package/sdk/README.md +99 -99
  94. package/sdk/agent-mesh.js +449 -449
  95. package/sdk/auto-discovery.js +288 -0
  96. package/sdk/commander.js +262 -262
  97. package/sdk/governance.js +262 -0
  98. package/sdk/index.d.ts +464 -464
  99. package/sdk/index.js +25 -1
  100. package/sdk/multi-agent.js +318 -318
  101. package/sdk/package.json +2 -2
  102. package/sdk/safe-mode.js +221 -0
  103. package/sdk/safety-shield.js +219 -0
  104. package/sdk/schema-discovery.js +83 -83
  105. package/server/adapters/index.js +520 -520
  106. package/server/config/plans.js +367 -367
  107. package/server/config/secrets.js +102 -102
  108. package/server/control-plane/index.js +301 -301
  109. package/server/data-plane/index.js +354 -354
  110. package/server/index.js +670 -427
  111. package/server/llm/index.js +404 -404
  112. package/server/middleware/adminAuth.js +35 -35
  113. package/server/middleware/auth.js +50 -50
  114. package/server/middleware/featureGate.js +88 -88
  115. package/server/middleware/rateLimits.js +100 -100
  116. package/server/middleware/sensitiveAction.js +157 -0
  117. package/server/migrations/001_add_analytics_indexes.sql +7 -7
  118. package/server/migrations/002_premium_features.sql +418 -418
  119. package/server/migrations/003_ads_integer_cents.sql +33 -33
  120. package/server/migrations/004_agent_os.sql +158 -158
  121. package/server/migrations/005_marketplace_metering.sql +126 -126
  122. package/server/migrations/007_governance.sql +106 -0
  123. package/server/migrations/008_plans.sql +144 -0
  124. package/server/migrations/009_shieldqr.sql +30 -0
  125. package/server/migrations/010_extended_trust.sql +33 -0
  126. package/server/models/adapters/index.js +33 -33
  127. package/server/models/adapters/mysql.js +183 -183
  128. package/server/models/adapters/postgresql.js +172 -172
  129. package/server/models/adapters/sqlite.js +7 -7
  130. package/server/models/db.js +740 -681
  131. package/server/observability/failure-analysis.js +337 -337
  132. package/server/observability/index.js +394 -394
  133. package/server/protocol/capabilities.js +223 -223
  134. package/server/protocol/index.js +243 -243
  135. package/server/protocol/schema.js +584 -584
  136. package/server/registry/certification.js +271 -271
  137. package/server/registry/index.js +326 -326
  138. package/server/routes/admin-plans.js +76 -0
  139. package/server/routes/admin-premium.js +673 -671
  140. package/server/routes/admin-shieldqr.js +90 -0
  141. package/server/routes/admin-trust-monitor.js +83 -0
  142. package/server/routes/admin.js +549 -261
  143. package/server/routes/ads.js +130 -130
  144. package/server/routes/agent-workspace.js +540 -540
  145. package/server/routes/api.js +150 -150
  146. package/server/routes/auth.js +71 -71
  147. package/server/routes/billing.js +57 -45
  148. package/server/routes/commander.js +316 -316
  149. package/server/routes/demo-showcase.js +332 -332
  150. package/server/routes/demo-store.js +154 -0
  151. package/server/routes/discovery.js +2348 -417
  152. package/server/routes/gateway.js +173 -157
  153. package/server/routes/governance.js +208 -0
  154. package/server/routes/license.js +251 -240
  155. package/server/routes/mesh.js +469 -469
  156. package/server/routes/noscript.js +543 -543
  157. package/server/routes/plans.js +33 -0
  158. package/server/routes/premium-v2.js +686 -686
  159. package/server/routes/premium.js +724 -724
  160. package/server/routes/providers.js +650 -0
  161. package/server/routes/runtime.js +2148 -2147
  162. package/server/routes/shieldqr.js +88 -0
  163. package/server/routes/sovereign.js +465 -385
  164. package/server/routes/universal.js +200 -185
  165. package/server/routes/wab-api.js +850 -501
  166. package/server/runtime/container-worker.js +111 -111
  167. package/server/runtime/container.js +448 -448
  168. package/server/runtime/distributed-worker.js +362 -362
  169. package/server/runtime/event-bus.js +210 -210
  170. package/server/runtime/index.js +253 -253
  171. package/server/runtime/queue.js +599 -599
  172. package/server/runtime/replay.js +666 -666
  173. package/server/runtime/sandbox.js +266 -266
  174. package/server/runtime/scheduler.js +534 -534
  175. package/server/runtime/session-engine.js +293 -293
  176. package/server/runtime/state-manager.js +188 -188
  177. package/server/security/cross-site-redactor.js +196 -0
  178. package/server/security/dry-run.js +180 -0
  179. package/server/security/human-gate-rate-limit.js +147 -0
  180. package/server/security/human-gate-transports.js +178 -0
  181. package/server/security/human-gate.js +281 -0
  182. package/server/security/index.js +368 -368
  183. package/server/security/intent-engine.js +245 -0
  184. package/server/security/reward-guard.js +171 -0
  185. package/server/security/rollback-store.js +239 -0
  186. package/server/security/token-scope.js +404 -0
  187. package/server/security/url-policy.js +139 -0
  188. package/server/services/agent-chat.js +506 -506
  189. package/server/services/agent-learning.js +601 -575
  190. package/server/services/agent-memory.js +625 -625
  191. package/server/services/agent-mesh.js +555 -539
  192. package/server/services/agent-symphony.js +717 -717
  193. package/server/services/agent-tasks.js +1807 -1807
  194. package/server/services/api-key-engine.js +292 -261
  195. package/server/services/cluster.js +894 -894
  196. package/server/services/commander.js +738 -738
  197. package/server/services/edge-compute.js +440 -440
  198. package/server/services/email.js +233 -204
  199. package/server/services/governance.js +466 -0
  200. package/server/services/hosted-runtime.js +205 -205
  201. package/server/services/lfd.js +635 -635
  202. package/server/services/local-ai.js +389 -389
  203. package/server/services/marketplace.js +270 -270
  204. package/server/services/metering.js +182 -182
  205. package/server/services/modules/affiliate-intelligence.js +93 -93
  206. package/server/services/modules/agent-firewall.js +90 -90
  207. package/server/services/modules/bounty.js +89 -89
  208. package/server/services/modules/collective-bargaining.js +92 -92
  209. package/server/services/modules/dark-pattern.js +66 -66
  210. package/server/services/modules/gov-intelligence.js +45 -45
  211. package/server/services/modules/neural.js +55 -55
  212. package/server/services/modules/notary.js +49 -49
  213. package/server/services/modules/price-time-machine.js +86 -86
  214. package/server/services/modules/protocol.js +104 -104
  215. package/server/services/negotiation.js +439 -439
  216. package/server/services/plans.js +214 -0
  217. package/server/services/plugins.js +771 -771
  218. package/server/services/premium.js +1 -1
  219. package/server/services/price-intelligence.js +566 -566
  220. package/server/services/price-shield.js +1137 -1137
  221. package/server/services/provider-clients.js +740 -0
  222. package/server/services/reputation.js +465 -465
  223. package/server/services/search-engine.js +357 -357
  224. package/server/services/security.js +513 -513
  225. package/server/services/self-healing.js +843 -843
  226. package/server/services/shieldqr.js +322 -0
  227. package/server/services/sovereign-shield.js +542 -0
  228. package/server/services/ssl-inspector.js +42 -0
  229. package/server/services/ssl-monitor.js +167 -0
  230. package/server/services/stripe.js +205 -192
  231. package/server/services/swarm.js +788 -788
  232. package/server/services/universal-scraper.js +662 -661
  233. package/server/services/verification.js +481 -481
  234. package/server/services/vision.js +1163 -1163
  235. package/server/services/wab-crypto.js +178 -0
  236. package/server/utils/cache.js +125 -125
  237. package/server/utils/migrate.js +81 -81
  238. package/server/utils/safe-fetch.js +228 -0
  239. package/server/utils/secureFields.js +50 -50
  240. package/server/ws.js +161 -161
  241. package/templates/artisan-marketplace.yaml +104 -104
  242. package/templates/book-price-scout.yaml +98 -98
  243. package/templates/electronics-price-tracker.yaml +108 -108
  244. package/templates/flight-deal-hunter.yaml +113 -113
  245. package/templates/freelancer-direct.yaml +116 -116
  246. package/templates/grocery-price-compare.yaml +93 -93
  247. package/templates/hotel-direct-booking.yaml +113 -113
  248. package/templates/local-services.yaml +98 -98
  249. package/templates/olive-oil-tunisia.yaml +88 -88
  250. package/templates/organic-farm-fresh.yaml +101 -101
  251. package/templates/restaurant-direct.yaml +97 -97
  252. package/public/score.html +0 -263
  253. package/server/migrations/006_growth_suite.sql +0 -138
  254. package/server/routes/growth.js +0 -962
  255. package/server/services/fairness-engine.js +0 -409
  256. package/server/services/fairness.js +0 -420
@@ -0,0 +1,436 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en" dir="ltr">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>WAB DNS Discovery — Setup & Live Verifier</title>
7
+ <meta name="description" content="Complete guide to WAB DNS Discovery: TXT record format, step-by-step setup for Cloudflare, cPanel, GoDaddy, Namecheap, Route 53, and a live DoH-based verifier.">
8
+ <link rel="preconnect" href="https://fonts.googleapis.com">
9
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10
+ <link rel="preload" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap" as="style" onload="this.onload=null;this.rel='stylesheet'">
11
+ <noscript><link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet"></noscript>
12
+ <link rel="stylesheet" href="/css/styles.css?v=3.2.0">
13
+ <style>
14
+ body{background:#070d19;color:#e5edff}
15
+ .hero{padding:120px 24px 32px !important;text-align:center;flex-direction:column;justify-content:center;align-items:center;min-height:auto !important}
16
+ .hero h1{font-size:clamp(2rem,4vw,3rem);margin-bottom:10px}
17
+ .hero p{max-width:880px;margin:0 auto;color:#99a8c7;line-height:1.7}
18
+ .lang{display:flex;gap:8px;align-items:center}
19
+ .lang button{border:1px solid rgba(255,255,255,.15);background:rgba(255,255,255,.04);color:#e5edff;padding:8px 14px;border-radius:10px;cursor:pointer}
20
+ .lang button.active{background:linear-gradient(135deg,#f59e0b,#b45309);border-color:transparent}
21
+ .wrap{max-width:1100px;margin:0 auto;padding:0 22px 60px}
22
+ .grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:18px;margin:18px 0}
23
+ .card{background:linear-gradient(180deg,rgba(17,24,39,.92),rgba(12,18,31,.96));border:1px solid rgba(148,163,184,.18);border-radius:16px;padding:18px}
24
+ .card h3{margin:0 0 8px;font-size:1.07rem;color:#fcd34d}
25
+ .card h4{margin:14px 0 6px;color:#fde68a;font-size:.98rem}
26
+ .card p,.card li{color:#bcc7e0;line-height:1.7;font-size:.94rem}
27
+ .card ol,.card ul{margin:6px 0 8px 22px}
28
+ .badge{display:inline-block;background:rgba(245,158,11,.14);border:1px solid rgba(245,158,11,.4);color:#fbbf24;padding:4px 9px;border-radius:999px;font-size:.73rem;font-weight:700;margin:6px 0}
29
+ code,pre{font-family:'JetBrains Mono',monospace}
30
+ code{background:rgba(2,6,23,.7);border:1px solid rgba(148,163,184,.2);padding:2px 6px;border-radius:6px;font-size:.85rem;color:#fcd34d}
31
+ pre{background:#020617;border:1px solid rgba(148,163,184,.25);padding:12px;border-radius:10px;font-size:.82rem;color:#a5b4fc;overflow:auto;line-height:1.55}
32
+ table{width:100%;border-collapse:collapse;margin:8px 0}
33
+ th,td{border:1px solid rgba(148,163,184,.18);padding:8px 10px;text-align:left;font-size:.9rem;color:#dbe4f5}
34
+ th{background:rgba(245,158,11,.1);color:#fcd34d}
35
+ .verifier{background:rgba(2,6,23,.7);border:1px solid rgba(245,158,11,.3);border-radius:14px;padding:16px;margin-top:12px}
36
+ .verifier label{display:block;font-size:.78rem;color:#9fb0ce;margin-bottom:4px}
37
+ .verifier input,.verifier select{width:100%;background:#0a1324;border:1px solid rgba(148,163,184,.27);border-radius:10px;color:#e2e8f0;padding:10px;font-family:Inter,sans-serif}
38
+ .row{display:grid;grid-template-columns:2fr 1fr;gap:10px}
39
+ @media (max-width:640px){.row{grid-template-columns:1fr}}
40
+ .btn{margin-top:10px;background:linear-gradient(135deg,#f59e0b,#b45309);color:#fff;border:none;padding:10px 14px;border-radius:10px;cursor:pointer;font-weight:700}
41
+ .btn.secondary{background:linear-gradient(135deg,#334155,#1e293b)}
42
+ .ok{color:#4ade80}.warn{color:#facc15}.danger{color:#f87171}
43
+ .toc{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin:0 0 14px}
44
+ .toc a{background:rgba(255,255,255,.04);border:1px solid rgba(148,163,184,.22);color:#e5edff;padding:6px 12px;border-radius:999px;font-size:.85rem;text-decoration:none}
45
+ .toc a:hover{border-color:#fbbf24;color:#fcd34d}
46
+ .advanced-block{display:none}
47
+ .live-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px;margin-top:12px}
48
+ .live-item{background:rgba(2,6,23,.6);border:1px solid rgba(148,163,184,.2);border-radius:12px;padding:12px}
49
+ .live-item h4{margin:0 0 6px;color:#fef3c7;font-size:.98rem}
50
+ .live-item p{margin:0 0 8px;color:#cbd5e1;font-size:.88rem;line-height:1.55}
51
+ .live-meta{font-size:.78rem;color:#93c5fd}
52
+ </style>
53
+ </head>
54
+ <body>
55
+ <nav class="navbar" id="navbar">
56
+ <div class="container">
57
+ <a href="/" class="navbar-brand"><div class="brand-icon">⚡</div><span>WAB</span></a>
58
+ <ul class="navbar-links">
59
+ <li><a href="/">Home</a></li>
60
+ <li><a href="/integrations">Integrations</a></li>
61
+ <li><a href="/dns" class="active">DNS Discovery</a></li>
62
+ <li><a href="/phone-shield">Phone Shield</a></li>
63
+ <li><a href="/sovereign">Sovereign</a></li>
64
+ <li><a href="/docs">Docs</a></li>
65
+ </ul>
66
+ <div class="lang" style="display:flex;gap:8px;align-items:center;margin-left:16px">
67
+ <button id="enBtn" class="active" style="border:1px solid rgba(255,255,255,.2);background:rgba(255,255,255,.06);color:#e5edff;padding:5px 12px;border-radius:8px;cursor:pointer;font-size:.82rem;font-weight:600">English</button>
68
+ <button id="arBtn" style="border:1px solid rgba(255,255,255,.2);background:rgba(255,255,255,.06);color:#e5edff;padding:5px 12px;border-radius:8px;cursor:pointer;font-size:.82rem;font-weight:600">العربية</button>
69
+ </div>
70
+ </div>
71
+ </nav>
72
+
73
+ <section class="hero">
74
+ <h1 data-en="WAB DNS Discovery" data-ar="اكتشاف WAB عبر DNS">WAB DNS Discovery</h1>
75
+ <p data-en="Announce your AI-readiness at the infrastructure level. Add a single DNS TXT record at _wab.yourdomain.com and any compatible AI agent will instantly find your wab.json capabilities — no HTTP probe required." data-ar="أعلن عن جاهزية موقعك للذكاء الاصطناعي على مستوى البنية التحتية. أضف سجل TXT واحد في _wab.yourdomain.com وسيجد أي وكيل ذكاء اصطناعي متوافق ملف القدرات wab.json فوراً — دون الحاجة لأي طلب HTTP أولي.">Announce your AI-readiness at the infrastructure level. Add a single DNS TXT record at <code>_wab.yourdomain.com</code> and any compatible AI agent will instantly find your <code>wab.json</code> capabilities — no HTTP probe required.</p>
76
+ <div class="toc">
77
+ <a href="#what-is">What & Why</a>
78
+ <a href="#quickstart">3 Steps</a>
79
+ <a href="#format">Record Format</a>
80
+ <a href="#verifier">Live Verifier</a>
81
+ <a href="#proof-lab">Proof Lab</a>
82
+ <a href="#setup">Setup Guides</a>
83
+ <a href="#troubleshoot">Troubleshooting</a>
84
+ <a href="#repo-links">Repo & Docs</a>
85
+ </div>
86
+ </section>
87
+
88
+ <div class="wrap">
89
+
90
+ <!-- ═══════════════ WHAT & WHY ═══════════════ -->
91
+ <div class="card" id="what-is">
92
+ <h3 data-en="What is WAB DNS Discovery?" data-ar="ما هو اكتشاف WAB عبر DNS؟">What is WAB DNS Discovery?</h3>
93
+ <p data-en="WAB DNS Discovery is a lightweight protocol that lets AI agents instantly know whether a domain supports WAB and where to fetch its capabilities document. It works exactly like SPF, DKIM, or DMARC for email — a single TXT record at a well-known subdomain advertises your protocol support." data-ar="اكتشاف WAB عبر DNS هو بروتوكول خفيف يسمح لوكلاء الذكاء الاصطناعي بمعرفة فورية ما إذا كان النطاق يدعم WAB وأين يجد ملف القدرات الخاص به. يعمل تماماً مثل SPF و DKIM و DMARC للبريد الإلكتروني — سجل TXT واحد في نطاق فرعي معروف يعلن دعم البروتوكول.">WAB DNS Discovery is a lightweight protocol that lets AI agents instantly know whether a domain supports WAB and where to fetch its capabilities document. It works exactly like SPF, DKIM, or DMARC for email — a single TXT record at a well-known subdomain advertises your protocol support.</p>
94
+ <h4 data-en="Why use it?" data-ar="لماذا تستخدمها؟">Why use it?</h4>
95
+ <ul>
96
+ <li data-en="Zero HTTP probing — agents resolve DNS once and skip the trial-and-error of fetching /.well-known/wab.json blindly." data-ar="بدون أي طلب HTTP استكشافي — يقوم الوكيل بحل DNS مرة واحدة بدلاً من محاولة جلب /.well-known/wab.json بشكل أعمى.">Zero HTTP probing — agents resolve DNS once and skip the trial-and-error of fetching <code>/.well-known/wab.json</code> blindly.</li>
97
+ <li data-en="Infrastructure-first onboarding — works even before your site has any code change. Pure DNS." data-ar="إعداد عبر البنية التحتية — يعمل قبل أي تعديل برمجي على موقعك. DNS فقط.">Infrastructure-first onboarding — works even before your site has any code change. Pure DNS.</li>
98
+ <li data-en="Cacheable, fast, and globally propagated by every recursive resolver in the world." data-ar="قابل للتخزين المؤقت، سريع، ومنتشر عالمياً عبر كل خوادم DNS التكرارية.">Cacheable, fast, and globally propagated by every recursive resolver in the world.</li>
99
+ <li data-en="Versionable — the v=wab1 prefix lets the protocol evolve without breaking older agents." data-ar="قابل للترقية — البادئة v=wab1 تسمح بتطوير البروتوكول دون كسر الوكلاء القدامى.">Versionable — the <code>v=wab1</code> prefix lets the protocol evolve without breaking older agents.</li>
100
+ </ul>
101
+ <span class="badge" data-en="MIT-licensed open protocol" data-ar="بروتوكول مفتوح برخصة MIT">MIT-licensed open protocol</span>
102
+ </div>
103
+
104
+ <!-- ═══════════════ QUICKSTART ═══════════════ -->
105
+ <div class="card" id="quickstart">
106
+ <h3 data-en="The whole thing in 3 steps" data-ar="كل العملية في 3 خطوات">The whole thing in 3 steps</h3>
107
+ <ol>
108
+ <li data-en="Add TXT at _wab.yourdomain.com" data-ar="أضف TXT في _wab.yourdomain.com">Add TXT at <code>_wab.yourdomain.com</code></li>
109
+ <li data-en="Serve /.well-known/wab.json" data-ar="وفّر /.well-known/wab.json">Serve <code>/.well-known/wab.json</code></li>
110
+ <li data-en="Run Verify Live + Test with Agent" data-ar="شغّل Verify Live + Test with Agent">Run <b>Verify Live</b> + <b>Test with Agent</b></li>
111
+ </ol>
112
+ <p data-en="No appId required for protocol verification. DNS + wab.json are sufficient." data-ar="لا يلزم appId للتحقق البروتوكولي. DNS + wab.json كافيان.">No appId required for protocol verification. DNS + wab.json are sufficient.</p>
113
+ <button id="dnsAdvancedToggleBtn" class="btn secondary" style="margin-top:4px" data-en="Show Advanced Trust/Privacy Layer" data-ar="إظهار طبقة الثقة/الخصوصية المتقدمة">Show Advanced Trust/Privacy Layer</button>
114
+ </div>
115
+
116
+ <!-- ═══════════════ HOW IT WORKS ═══════════════ -->
117
+ <div class="card">
118
+ <h3 data-en="How it works (under the hood)" data-ar="كيف يعمل (الآلية الداخلية)">How it works (under the hood)</h3>
119
+ <ol>
120
+ <li data-en="The AI agent resolves a TXT query on _wab.example.com." data-ar="يقوم الوكيل بحل استعلام TXT على _wab.example.com.">The AI agent resolves a TXT query on <code>_wab.example.com</code>.</li>
121
+ <li data-en="Your authoritative DNS returns: v=wab1; endpoint=https://example.com/.well-known/wab.json" data-ar="يعيد DNS الموثوق: v=wab1; endpoint=https://example.com/.well-known/wab.json">Your authoritative DNS returns: <code>v=wab1; endpoint=https://example.com/.well-known/wab.json</code></li>
122
+ <li data-en="The agent parses the v= and endpoint= parameters, validates the version, then fetches the capabilities document directly." data-ar="يحلل الوكيل المعاملات v= و endpoint=، يتحقق من الإصدار، ثم يجلب ملف القدرات مباشرة.">The agent parses the <code>v=</code> and <code>endpoint=</code> parameters, validates the version, then fetches the capabilities document directly.</li>
123
+ <li data-en="Optional fields can be added later: feat=, sig=, ttl=, etc." data-ar="حقول اختيارية يمكن إضافتها لاحقاً: feat=, sig=, ttl=, إلخ.">Optional fields can be added later: <code>feat=</code>, <code>sig=</code>, <code>ttl=</code>, etc.</li>
124
+ </ol>
125
+ </div>
126
+
127
+ <!-- ═══════════════ FORMAT ═══════════════ -->
128
+ <div class="card" id="format">
129
+ <h3 data-en="The TXT Record Format" data-ar="صيغة سجل TXT">The TXT Record Format</h3>
130
+ <table>
131
+ <tr><th data-en="Field" data-ar="الحقل">Field</th><th data-en="Value" data-ar="القيمة">Value</th><th data-en="Description" data-ar="الوصف">Description</th></tr>
132
+ <tr><td>Type</td><td><code>TXT</code></td><td data-en="Plain text record" data-ar="سجل نصي">Plain text record</td></tr>
133
+ <tr><td>Name / Host</td><td><code>_wab</code></td><td data-en="Subdomain prefix → _wab.yourdomain.com" data-ar="بادئة نطاق فرعي → _wab.yourdomain.com">Subdomain prefix → <code>_wab.yourdomain.com</code></td></tr>
134
+ <tr><td>Value</td><td><code>v=wab1; endpoint=https://yourdomain.com/.well-known/wab.json</code></td><td data-en="Protocol version + capabilities URL" data-ar="إصدار البروتوكول + رابط ملف القدرات">Protocol version + capabilities URL</td></tr>
135
+ <tr><td>TTL</td><td><code>3600</code> / Auto</td><td data-en="Standard cache lifetime" data-ar="مدة التخزين الافتراضية">Standard cache lifetime</td></tr>
136
+ </table>
137
+ <pre>_wab.yourdomain.com. 3600 IN TXT "v=wab1; endpoint=https://yourdomain.com/.well-known/wab.json"</pre>
138
+ </div>
139
+
140
+ <!-- ═══════════════ RECORDS FOR webagentbridge.com ═══════════════ -->
141
+ <div class="card" id="records">
142
+ <h3 data-en="DNS Records for webagentbridge.com (canonical)" data-ar="سجلات DNS لـ webagentbridge.com (المرجعية)">DNS Records for webagentbridge.com (canonical)</h3>
143
+ <p data-en="The exact records the WAB site itself publishes. Each row is verified live against Cloudflare DoH (1.1.1.1) when this page loads. Add the equivalents under your own domain to advertise WAB protocol support, agent endpoints, and trust." data-ar="السجلات التي يستخدمها موقع WAB نفسه. يتم التحقق من كل سطر مباشرة عبر Cloudflare DoH عند تحميل هذه الصفحة. أضف ما يعادلها تحت نطاقك للإعلان عن دعم بروتوكول WAB ونقاط النهاية والثقة.">The exact records the WAB site itself publishes. Each row is verified live against Cloudflare DoH (1.1.1.1) when this page loads.</p>
144
+ <div id="recordsLiveStatus" style="margin:8px 0 14px;font-size:.92rem"><span class="warn" data-en="Querying live DNS…" data-ar="جارٍ الاستعلام المباشر عن DNS…">Querying live DNS…</span></div>
145
+ <table class="table" id="recordsTable">
146
+ <thead><tr><th data-en="Live" data-ar="مباشر">Live</th><th>Name / Host</th><th>Type</th><th>Value</th><th>TTL</th></tr></thead>
147
+ <tbody>
148
+ <tr data-record="_wab.webagentbridge.com" data-rtype="TXT" data-match="v=wab1">
149
+ <td class="live-cell"><span class="warn">…</span></td>
150
+ <td><code>_wab</code></td>
151
+ <td><code>TXT</code></td>
152
+ <td><code>"v=wab1; endpoint=https://www.webagentbridge.com/.well-known/wab.json"</code></td>
153
+ <td>3600</td>
154
+ </tr>
155
+ <tr data-record="_wab-agent.webagentbridge.com" data-rtype="TXT" data-match="v=wab1">
156
+ <td class="live-cell"><span class="warn">…</span></td>
157
+ <td><code>_wab-agent</code></td>
158
+ <td><code>TXT</code></td>
159
+ <td><code>"v=wab1; mcp=https://www.webagentbridge.com/api/v1/protocol; gateway=https://www.webagentbridge.com/api/v1"</code></td>
160
+ <td>3600</td>
161
+ </tr>
162
+ <tr data-record="_wab-trust.webagentbridge.com" data-rtype="TXT" data-match="v=wab1">
163
+ <td class="live-cell"><span class="warn">…</span></td>
164
+ <td><code>_wab-trust</code></td>
165
+ <td><code>TXT</code></td>
166
+ <td><code>"v=wab1; trust=https://www.webagentbridge.com/.well-known/wab.json; security=https://www.webagentbridge.com/.well-known/security.txt"</code></td>
167
+ <td>3600</td>
168
+ </tr>
169
+ <tr data-record="_dmarc.webagentbridge.com" data-rtype="TXT" data-match="v=DMARC1; p=quarantine">
170
+ <td class="live-cell"><span class="warn">…</span></td>
171
+ <td><code>_dmarc</code></td>
172
+ <td><code>TXT</code></td>
173
+ <td><code>"v=DMARC1; p=quarantine; rua=mailto:dmarc@webagentbridge.com; ruf=mailto:dmarc@webagentbridge.com; adkim=s; aspf=s; pct=100"</code></td>
174
+ <td>3600</td>
175
+ </tr>
176
+ <tr data-record="webagentbridge.com" data-rtype="TXT" data-match="v=spf1">
177
+ <td class="live-cell"><span class="warn">…</span></td>
178
+ <td><code>@</code> (apex)</td>
179
+ <td><code>TXT</code></td>
180
+ <td><code>"v=spf1 -all"</code></td>
181
+ <td>3600</td>
182
+ </tr>
183
+ <tr data-record="webagentbridge.com" data-rtype="CAA" data-match="letsencrypt.org">
184
+ <td class="live-cell"><span class="warn">…</span></td>
185
+ <td><code>@</code> (apex)</td>
186
+ <td><code>CAA</code></td>
187
+ <td><code>0 issue "letsencrypt.org"</code></td>
188
+ <td>3600</td>
189
+ </tr>
190
+ <tr data-record="webagentbridge.com" data-rtype="CAA" data-match="iodef">
191
+ <td class="live-cell"><span class="warn">…</span></td>
192
+ <td><code>@</code> (apex)</td>
193
+ <td><code>CAA</code></td>
194
+ <td><code>0 iodef "mailto:security@webagentbridge.com"</code></td>
195
+ <td>3600</td>
196
+ </tr>
197
+ </tbody>
198
+ </table>
199
+ <p style="margin-top:12px"><strong data-en="Verify after propagation:" data-ar="للتحقق بعد الانتشار:">Verify after propagation:</strong> <a href="#verifier" data-en="open the live verifier above" data-ar="استخدم المدقق المباشر بالأعلى">open the live verifier above</a> <span data-en="or run" data-ar="أو نفّذ"></span> <code>dig _wab.webagentbridge.com TXT +short</code></p>
200
+ </div>
201
+
202
+ <!-- ═══════════════ LIVE VERIFIER ═══════════════ -->
203
+ <div class="card" id="verifier">
204
+ <h3 data-en="Live Verifier (DNS over HTTPS)" data-ar="مدقق مباشر (DNS عبر HTTPS)">Live Verifier (DNS over HTTPS)</h3>
205
+ <p data-en="Enter any domain to query its _wab TXT record live from a public DoH resolver. This runs entirely in your browser — no data is sent to our servers." data-ar="أدخل أي نطاق لاستعلام سجل _wab TXT الخاص به مباشرة من خادم DoH عام. يعمل كاملاً في متصفحك — لا تُرسل أي بيانات إلى خوادمنا.">Enter any domain to query its <code>_wab</code> TXT record live from a public DoH resolver. This runs entirely in your browser — no data is sent to our servers.</p>
206
+ <div class="verifier">
207
+ <div class="row">
208
+ <div>
209
+ <label data-en="Domain" data-ar="النطاق">Domain</label>
210
+ <input id="dnsDomain" placeholder="example.com" value="webagentbridge.com">
211
+ </div>
212
+ <div>
213
+ <label data-en="Resolver" data-ar="المحلل">Resolver</label>
214
+ <select id="dnsResolver">
215
+ <option value="https://cloudflare-dns.com/dns-query">Cloudflare (1.1.1.1)</option>
216
+ <option value="https://dns.google/resolve">Google (8.8.8.8)</option>
217
+ </select>
218
+ </div>
219
+ </div>
220
+ <button id="dnsVerifyBtn" class="btn" data-en="Verify _wab Record" data-ar="تحقق من سجل _wab">Verify _wab Record</button>
221
+ <button id="dnsCopyBtn" class="btn secondary" data-en="Copy Example Record" data-ar="انسخ سجلاً نموذجياً">Copy Example Record</button>
222
+ <div id="dnsStatus" style="margin-top:10px;font-size:.92rem"></div>
223
+ <pre id="dnsOut">{}</pre>
224
+ </div>
225
+ </div>
226
+
227
+ <!-- ═══════════════ PROOF LAB ═══════════════ -->
228
+ <div class="card" id="proof-lab">
229
+ <h3 data-en="Proof Lab — verify and execute live" data-ar="مختبر الإثبات — تحقق ونفّذ مباشرة">Proof Lab — verify and execute live</h3>
230
+ <p data-en="This section proves real activation and real usage. For each domain: DNS TXT, wab.json URL, live verify, and agent test flow (discover → ping)." data-ar="هذا القسم يثبت التفعيل الحقيقي والاستخدام الحقيقي. لكل نطاق: DNS TXT، رابط wab.json، تحقق مباشر، وتدفق اختبار الوكيل (discover → ping).">This section proves real activation and real usage.</p>
231
+ <div class="verifier">
232
+ <button id="dnsProofVerifyBtn" class="btn" data-en="Verify Live" data-ar="تحقق مباشر">Verify Live</button>
233
+ <button id="dnsProofAgentBtn" class="btn secondary" data-en="Test with Agent" data-ar="اختبر مع وكيل">Test with Agent</button>
234
+ <div style="margin-top:10px" class="row">
235
+ <div>
236
+ <label data-en="API Key (optional, for real execution proof)" data-ar="مفتاح API (اختياري لإثبات تنفيذ فعلي)">API Key (optional, for real execution proof)</label>
237
+ <input id="dnsUsageApiKey" type="password" placeholder="wab_xxxxx">
238
+ </div>
239
+ <div>
240
+ <label data-en="Preferred use-case" data-ar="الاستخدام المفضل">Preferred use-case</label>
241
+ <select id="dnsUsageUseCase">
242
+ <option value="">Auto</option>
243
+ <option value="booking">booking</option>
244
+ <option value="messaging">messaging</option>
245
+ <option value="payment">payment</option>
246
+ <option value="checkout">checkout</option>
247
+ <option value="search">search</option>
248
+ </select>
249
+ </div>
250
+ </div>
251
+ <button id="dnsUsageProofBtn" class="btn" data-en="Run Usage Proof" data-ar="شغّل إثبات الاستخدام">Run Usage Proof</button>
252
+ <a href="/downloads/wab-dns-provider.postman_collection.json" download class="btn secondary" style="margin-left:8px;font-size:.87rem;padding:6px 14px" data-en="Download Postman Collection" data-ar="تحميل مجموعة Postman">⬇ Download Postman Collection</a>
253
+ <div id="proofStatus" style="margin-top:10px;font-size:.92rem"></div>
254
+ <div id="proofDiscoverPathBadge" style="display:none;margin-top:8px"></div>
255
+ </div>
256
+ <div class="grid" style="grid-template-columns:repeat(auto-fit,minmax(220px,1fr));margin-top:10px">
257
+ <div class="card" style="padding:12px">
258
+ <h4 style="margin:0 0 6px">State</h4>
259
+ <div id="stateBadges" style="font-size:.9rem;color:#cbd5e1"></div>
260
+ </div>
261
+ <div class="card" style="padding:12px">
262
+ <h4 style="margin:0 0 6px">Use-case</h4>
263
+ <div id="useCaseValue" style="font-size:.9rem;color:#cbd5e1">—</div>
264
+ </div>
265
+ <div class="card" style="padding:12px">
266
+ <h4 style="margin:0 0 6px">DNS TXT</h4>
267
+ <div id="proofTxt" style="font-size:.84rem;color:#cbd5e1;word-break:break-word">—</div>
268
+ </div>
269
+ <div class="card" style="padding:12px">
270
+ <h4 style="margin:0 0 6px">wab.json</h4>
271
+ <div id="proofWabJson" style="font-size:.84rem;color:#cbd5e1;word-break:break-word">—</div>
272
+ </div>
273
+ </div>
274
+ <div class="card" style="padding:12px;margin-top:10px">
275
+ <h4 style="margin:0 0 6px">Usage KPI</h4>
276
+ <div id="usageKpiValue" style="font-size:.9rem;color:#cbd5e1">—</div>
277
+ </div>
278
+ <div class="card" style="padding:12px;margin-top:10px">
279
+ <h4 style="margin:0 0 6px">Usage Trend (Last 20 Runs)</h4>
280
+ <div id="usageTrendSummary" style="font-size:.9rem;color:#cbd5e1">—</div>
281
+ <div id="usageTrendList" style="margin-top:8px;font-size:.82rem;color:#aab6d3;line-height:1.6">—</div>
282
+ </div>
283
+ <pre id="proofOut">{}</pre>
284
+ </div>
285
+ </div>
286
+
287
+ <!-- ═══════════════ LIVE ADOPTION ═══════════════ -->
288
+ <div class="card" id="live-adoption">
289
+ <h3 data-en="Businesses Using WAB DNS Discovery (Live)" data-ar="الشركات التي تستخدم WAB DNS Discovery (مباشر)">Businesses Using WAB DNS Discovery (Live)</h3>
290
+ <p data-en="Auto-listed from real registrations only. No static or manually seeded entries." data-ar="قائمة تلقائية من التسجيلات الحقيقية فقط. لا توجد بيانات ثابتة أو مزروعة يدويًا.">Auto-listed from real registrations only. No static or manually seeded entries.</p>
291
+ <div id="liveAdoptionStatus" style="margin-top:8px;font-size:.9rem;color:#94a3b8">Loading live registry…</div>
292
+ <div id="liveAdoptionList" class="live-grid" style="display:none"></div>
293
+ </div>
294
+
295
+ <!-- ═══════════════ PRIVACY MODEL ═══════════════ -->
296
+ <div class="card advanced-block" id="privacy">
297
+ <h3 data-en="DNS Privacy Model — what DoH does and does not protect" data-ar="نموذج خصوصية DNS — ما الذي يحميه DoH وما لا يحميه">DNS Privacy Model — what DoH does and does not protect</h3>
298
+ <p data-en="WAB Discovery never uses plain UDP DNS. Every lookup of _wab.example.com uses DNS over HTTPS (DoH), so the query is encrypted between the agent and the resolver. This is a real privacy upgrade — but it is not perfect, and we want you to understand the exact threat model." data-ar="لا يستخدم اكتشاف WAB أبداً DNS التقليدي عبر UDP. كل استعلام لـ _wab.example.com يتم عبر DNS over HTTPS (DoH)، فيكون مشفراً بين الوكيل والمحلل. هذه تحسين خصوصية حقيقي — لكنه ليس مثالياً، ونريد أن تفهم نموذج التهديد بدقة.">WAB Discovery never uses plain UDP DNS. Every lookup of <code>_wab.example.com</code> uses DNS over HTTPS (DoH), so the query is encrypted between the agent and the resolver.</p>
299
+ <table class="table">
300
+ <thead><tr><th data-en="Threat" data-ar="التهديد">Threat</th><th data-en="Plain DNS (UDP/53)" data-ar="DNS عادي (UDP/53)">Plain DNS</th><th>WAB DoH</th></tr></thead>
301
+ <tbody>
302
+ <tr><td data-en="ISP / network observer sees lookup" data-ar="مزود الإنترنت يرى الاستعلام">ISP / network observer sees lookup</td><td><span class="danger">✗ visible cleartext</span></td><td><span class="ok">✓ encrypted (TLS 1.3)</span></td></tr>
303
+ <tr><td data-en="DoH provider sees lookup" data-ar="مزود DoH يرى الاستعلام">DoH provider sees lookup</td><td><span class="warn">— (not used)</span></td><td><span class="warn">⚠ visible to chosen resolver</span></td></tr>
304
+ <tr><td data-en="Reply tampered in transit (cache poisoning)" data-ar="تلاعب بالرد أثناء النقل">Reply tampered in transit</td><td><span class="danger">✗ trivial on-path</span></td><td><span class="ok">✓ TLS prevents on-path tamper</span></td></tr>
305
+ <tr><td data-en="Authoritative record forged at zone level" data-ar="تزوير السجل عند الخادم الرسمي">Authoritative record forged at zone</td><td><span class="danger">✗ no signature</span></td><td><span class="warn" id="dnssecRowState">⚠ DNSSEC recommended</span></td></tr>
306
+ <tr><td data-en="Provider link leaks via certificate" data-ar="تسرب الهوية عبر الشهادة">Provider link leaks via certificate</td><td>—</td><td><span class="ok">✓ certificate pinning roadmap</span></td></tr>
307
+ </tbody>
308
+ </table>
309
+ <p style="margin-top:12px"><strong data-en="Bottom line:" data-ar="الخلاصة:">Bottom line:</strong> <span data-en="DoH moves the trust point from your ISP to your DoH resolver. That is a strict improvement for most users, but you still pick whom to trust. Combine DoH with DNSSEC and certificate pinning for the strongest privacy posture." data-ar="ينقل DoH نقطة الثقة من مزود الإنترنت إلى مزود DoH. هذا تحسين صارم لمعظم المستخدمين، لكنك ما زلت تختار من تثق به. اجمع DoH مع DNSSEC وتثبيت الشهادات للحصول على أقوى وضعية خصوصية.">DoH moves the trust point from your ISP to your DoH resolver — a strict improvement, but you still pick whom to trust. Combine DoH with DNSSEC and certificate pinning for the strongest posture.</span></p>
310
+ <p><strong data-en="DNSSEC live status for webagentbridge.com:" data-ar="حالة DNSSEC المباشرة لـ webagentbridge.com:">DNSSEC live status for webagentbridge.com:</strong> <span id="dnssecLiveStatus" class="warn">…</span></p>
311
+ </div>
312
+
313
+ <!-- ═══════════════ SILENT HANDSHAKE ═══════════════ -->
314
+ <div class="card advanced-block" id="silent-handshake">
315
+ <h3 data-en="Silent Handshake — agent-aware sites, zero cookie banners" data-ar="المصافحة الصامتة — مواقع تفهم الوكلاء بدون نوافذ كوكيز">Silent Handshake — agent-aware sites, zero cookie banners</h3>
316
+ <p data-en="When a WAB-aware site advertises _wab and _wab-trust over DNS, the visiting agent and the site can negotiate intent in the background — no privacy popup, no cookie banner, no consent click-fest. The site declares 'I respect your agent, here is the contract' once, in DNS, signed and cacheable." data-ar="عندما يعلن موقع متوافق مع WAB عن _wab و _wab-trust في DNS، يمكن للوكيل الزائر والموقع أن يتفاوضا في الخلفية — بدون نوافذ خصوصية ولا بانر كوكيز ولا نقرات موافقة. يعلن الموقع مرة واحدة في DNS: «أنا أحترم وكيلك، هذا هو العقد».">When a WAB-aware site advertises <code>_wab</code> and <code>_wab-trust</code> over DNS, the agent and site negotiate intent in the background — no privacy popup, no cookie banner, no consent click-fest.</p>
317
+ <ol>
318
+ <li data-en="Agent resolves _wab.{site} over DoH → discovers wab.json endpoint." data-ar="يستعلم الوكيل عن _wab.{site} عبر DoH → يكتشف نقطة wab.json.">Agent resolves <code>_wab.{site}</code> over DoH → discovers <code>wab.json</code> endpoint.</li>
319
+ <li data-en="Agent resolves _wab-trust.{site} → reads contract: data scope, rate limits, complaint channel." data-ar="يستعلم عن _wab-trust.{site} → يقرأ العقد: نطاق البيانات، الحدود، قناة الشكوى.">Agent resolves <code>_wab-trust.{site}</code> → reads contract: data scope, rate limits, complaint channel.</li>
320
+ <li data-en="Agent fetches wab.json, signs request with its key, site responds with structured commands." data-ar="يجلب الوكيل wab.json ويوقّع الطلب بمفتاحه، فيرد الموقع بأوامر بنيوية.">Agent fetches <code>wab.json</code>, signs request with its key, site responds with structured commands.</li>
321
+ <li data-en="Both sides record outcome to their audit ledger. No human pixels harmed." data-ar="يسجّل الطرفان النتيجة في سجل التدقيق. بدون أي نوافذ مزعجة للمستخدم.">Both sides record outcome to their audit ledger. No human pixels harmed.</li>
322
+ </ol>
323
+ <p style="margin-top:10px"><strong data-en="SEO upside:" data-ar="مكسب السيو:">SEO upside:</strong> <span data-en="WAB-discoverable sites get prioritized by agent traffic, return data faster (less scraping overhead), and reduce server load. Sites that opt in are surfaced first in agent search results — the opposite of the cookie-wall tax." data-ar="المواقع المُكتشَفة عبر WAB تحصل على أولوية في زيارات الوكلاء، وترد بالبيانات أسرع (دون عبء الكشط)، وتخفف حمل السيرفر. المواقع التي تنضم تظهر أولاً في نتائج الوكلاء — عكس ضريبة جدار الكوكيز.">WAB-discoverable sites get prioritized by agent traffic, return data faster (less scraping overhead), and reduce server load. Opt-in sites surface first in agent search results — the opposite of the cookie-wall tax.</span></p>
324
+ </div>
325
+
326
+ <!-- ═══════════════ SETUP GUIDES ═══════════════ -->
327
+ <div class="grid" id="setup">
328
+ <div class="card">
329
+ <h3>1. Cloudflare</h3>
330
+ <ol>
331
+ <li data-en="Open Cloudflare dashboard and select your domain." data-ar="افتح لوحة Cloudflare واختر نطاقك.">Open Cloudflare dashboard and select your domain.</li>
332
+ <li data-en="Go to DNS → Records → Add record." data-ar="انتقل إلى DNS → Records → Add record.">Go to <b>DNS → Records → Add record</b>.</li>
333
+ <li data-en="Type: TXT, Name: _wab" data-ar="النوع: TXT، الاسم: _wab">Type: <code>TXT</code>, Name: <code>_wab</code></li>
334
+ <li data-en="Content: v=wab1; endpoint=https://yourdomain.com/.well-known/wab.json" data-ar="المحتوى: v=wab1; endpoint=https://yourdomain.com/.well-known/wab.json">Content: <code>v=wab1; endpoint=https://yourdomain.com/.well-known/wab.json</code></li>
335
+ <li data-en="Leave TTL on Auto and Save." data-ar="اترك TTL على Auto واحفظ.">Leave TTL on <b>Auto</b> and Save.</li>
336
+ </ol>
337
+ </div>
338
+
339
+ <div class="card">
340
+ <h3>2. cPanel (Shared Hosting)</h3>
341
+ <ol>
342
+ <li data-en="cPanel → Domains → Zone Editor → Manage." data-ar="cPanel → Domains → Zone Editor → Manage.">cPanel → <b>Domains → Zone Editor → Manage</b>.</li>
343
+ <li data-en="Add Record → Add 'TXT' Record." data-ar="Add Record → Add 'TXT' Record."><b>Add Record → Add "TXT" Record</b>.</li>
344
+ <li data-en="Name: _wab (cPanel appends your domain automatically)." data-ar="Name: _wab (سيلحق cPanel نطاقك تلقائياً).">Name: <code>_wab</code> (cPanel appends your domain automatically).</li>
345
+ <li data-en="Record: v=wab1; endpoint=https://yourdomain.com/.well-known/wab.json" data-ar="Record: v=wab1; endpoint=https://yourdomain.com/.well-known/wab.json">Record: <code>v=wab1; endpoint=https://yourdomain.com/.well-known/wab.json</code></li>
346
+ <li data-en="Click Save Record." data-ar="انقر Save Record.">Click <b>Save Record</b>.</li>
347
+ </ol>
348
+ </div>
349
+
350
+ <div class="card">
351
+ <h3>3. GoDaddy</h3>
352
+ <ol>
353
+ <li data-en="Domain Portfolio → click your domain." data-ar="Domain Portfolio → اضغط نطاقك.">Domain Portfolio → click your domain.</li>
354
+ <li data-en="DNS tab → DNS Records → Add New Record." data-ar="تبويب DNS → DNS Records → Add New Record.">DNS tab → <b>DNS Records → Add New Record</b>.</li>
355
+ <li>Type: <code>TXT</code>, Name: <code>_wab</code></li>
356
+ <li data-en="Value: v=wab1; endpoint=https://yourdomain.com/.well-known/wab.json" data-ar="Value: v=wab1; endpoint=https://yourdomain.com/.well-known/wab.json">Value: <code>v=wab1; endpoint=https://yourdomain.com/.well-known/wab.json</code></li>
357
+ <li data-en="Save (TTL default = 1 Hour is fine)." data-ar="احفظ (الإعداد الافتراضي 1 Hour مناسب).">Save (TTL default = 1 Hour is fine).</li>
358
+ </ol>
359
+ </div>
360
+
361
+ <div class="card">
362
+ <h3>4. Namecheap</h3>
363
+ <ol>
364
+ <li data-en="Domain List → Manage → Advanced DNS." data-ar="Domain List → Manage → Advanced DNS.">Domain List → <b>Manage → Advanced DNS</b>.</li>
365
+ <li data-en="Host Records → Add New Record → TXT Record." data-ar="Host Records → Add New Record → TXT Record.">Host Records → <b>Add New Record → TXT Record</b>.</li>
366
+ <li>Host: <code>_wab</code></li>
367
+ <li>Value: <code>v=wab1; endpoint=https://yourdomain.com/.well-known/wab.json</code></li>
368
+ <li data-en="Save with the green checkmark." data-ar="احفظ بأيقونة الصح الخضراء.">Save with the green checkmark.</li>
369
+ </ol>
370
+ </div>
371
+
372
+ <div class="card">
373
+ <h3>5. AWS Route 53</h3>
374
+ <ol>
375
+ <li data-en="Route 53 → Hosted zones → your domain → Create record." data-ar="Route 53 → Hosted zones → نطاقك → Create record.">Route 53 → <b>Hosted zones → your domain → Create record</b>.</li>
376
+ <li data-en="Record name: _wab — Record type: TXT" data-ar="Record name: _wab — Record type: TXT">Record name: <code>_wab</code> — Record type: <code>TXT</code></li>
377
+ <li data-en='Value (with quotes): "v=wab1; endpoint=https://yourdomain.com/.well-known/wab.json"' data-ar='Value (مع علامات الاقتباس): "v=wab1; endpoint=https://yourdomain.com/.well-known/wab.json"'>Value (with quotes): <code>"v=wab1; endpoint=https://yourdomain.com/.well-known/wab.json"</code></li>
378
+ <li>TTL: <code>300</code>–<code>3600</code></li>
379
+ <li data-en="Click Create records." data-ar="انقر Create records.">Click <b>Create records</b>.</li>
380
+ </ol>
381
+ </div>
382
+
383
+ <div class="card">
384
+ <h3>6. Google Domains / Squarespace, OVH, etc.</h3>
385
+ <p data-en="The pattern is identical across all providers: create a TXT record with host _wab and the v=wab1; endpoint=… value. If your provider asks for the FQDN, use _wab.yourdomain.com. Some panels strip the trailing dot — that is OK." data-ar="النمط متطابق لدى جميع المزودين: أنشئ سجل TXT بالمضيف _wab والقيمة v=wab1; endpoint=… . إذا طلب المزود الاسم الكامل FQDN، اكتب _wab.yourdomain.com. بعض اللوحات تحذف النقطة الأخيرة وهذا أمر طبيعي.">The pattern is identical across all providers: create a TXT record with host <code>_wab</code> and the <code>v=wab1; endpoint=…</code> value. If your provider asks for the FQDN, use <code>_wab.yourdomain.com</code>. Some panels strip the trailing dot — that is OK.</p>
386
+ </div>
387
+ </div>
388
+
389
+ <!-- ═══════════════ VERIFY CLI ═══════════════ -->
390
+ <div class="card">
391
+ <h3 data-en="Verify from the command line" data-ar="التحقق من سطر الأوامر">Verify from the command line</h3>
392
+ <p data-en="DNS propagation can take a few minutes up to 48 hours. Verify with:" data-ar="قد يستغرق انتشار DNS من بضع دقائق إلى 48 ساعة. تحقق بما يلي:">DNS propagation can take a few minutes up to 48 hours. Verify with:</p>
393
+ <pre># macOS / Linux
394
+ dig TXT _wab.yourdomain.com +short
395
+
396
+ # Windows
397
+ nslookup -type=TXT _wab.yourdomain.com
398
+
399
+ # Anywhere (DoH via curl)
400
+ curl -s -H 'accept: application/dns-json' \
401
+ 'https://cloudflare-dns.com/dns-query?name=_wab.yourdomain.com&type=TXT'</pre>
402
+ <p data-en="Expected output:" data-ar="الناتج المتوقع:">Expected output:</p>
403
+ <pre>"v=wab1; endpoint=https://yourdomain.com/.well-known/wab.json"</pre>
404
+ </div>
405
+
406
+ <!-- ═══════════════ TROUBLESHOOTING ═══════════════ -->
407
+ <div class="card" id="troubleshoot">
408
+ <h3 data-en="Troubleshooting" data-ar="حل المشاكل">Troubleshooting</h3>
409
+ <ul>
410
+ <li data-en="Got an empty answer? Wait 5–30 minutes for propagation, or flush your local DNS cache." data-ar="إجابة فارغة؟ انتظر 5 إلى 30 دقيقة للانتشار، أو امسح ذاكرة DNS المحلية.">Got an empty answer? Wait 5–30 minutes for propagation, or flush your local DNS cache.</li>
411
+ <li data-en="Some panels wrap the value in extra quotes — that is fine. Resolvers strip them." data-ar="بعض اللوحات تضيف علامات اقتباس إضافية — لا مشكلة. المحللات تزيلها.">Some panels wrap the value in extra quotes — that is fine. Resolvers strip them.</li>
412
+ <li data-en="Make sure the endpoint URL is HTTPS and returns a valid wab.json (Content-Type: application/json)." data-ar="تأكد أن endpoint يبدأ بـ HTTPS ويعيد ملف wab.json صالح بنوع application/json.">Make sure the <code>endpoint</code> URL is HTTPS and returns a valid <code>wab.json</code> (Content-Type: <code>application/json</code>).</li>
413
+ <li data-en="Do not put the full domain in the Name field unless your panel explicitly requires FQDN — that creates _wab.yourdomain.com.yourdomain.com." data-ar="لا تكتب النطاق الكامل في حقل Name إلا إذا طلب المزود ذلك صراحة — وإلا ستحصل على _wab.yourdomain.com.yourdomain.com.">Do not put the full domain in the Name field unless your panel explicitly requires FQDN — that creates <code>_wab.yourdomain.com.yourdomain.com</code>.</li>
414
+ <li data-en="If using DNSSEC, no extra step is required — TXT records are protected automatically." data-ar="إذا كنت تستخدم DNSSEC، لا حاجة لخطوة إضافية — سجلات TXT محمية تلقائياً.">If using DNSSEC, no extra step is required — TXT records are protected automatically.</li>
415
+ </ul>
416
+ </div>
417
+
418
+ <!-- ═══════════════ REPO LINKS ═══════════════ -->
419
+ <div class="card" id="repo-links">
420
+ <h3 data-en="Full documentation in the repo" data-ar="التوثيق الكامل في الريبو">Full documentation in the repo</h3>
421
+ <p data-en="The most extensive guides, including provider-specific edge cases and the full discovery protocol spec, live in the GitHub repository:" data-ar="أكثر الأدلة تفصيلاً، بما في ذلك حالات خاصة لكل مزود والمواصفات الكاملة للبروتوكول، موجودة في مستودع GitHub:">The most extensive guides, including provider-specific edge cases and the full discovery protocol spec, live in the GitHub repository:</p>
422
+ <ul>
423
+ <li><a href="https://github.com/abokenan444/web-agent-bridge/blob/master/DNS-DISCOVERY.md" target="_blank" rel="noopener">DNS-DISCOVERY.md (English)</a></li>
424
+ <li><a href="https://github.com/abokenan444/web-agent-bridge/blob/master/DNS-DISCOVERY.ar.md" target="_blank" rel="noopener">DNS-DISCOVERY.ar.md (العربية)</a></li>
425
+ <li><a href="/provider-onboarding">Provider Onboarding (DNS providers & registrars)</a></li>
426
+ <li><a href="https://github.com/abokenan444/web-agent-bridge/blob/master/docs/SPEC.md#4-discovery-protocol" target="_blank" rel="noopener">docs/SPEC.md — Discovery Protocol §4</a></li>
427
+ <li><a href="/.well-known/wab.json" target="_blank">/.well-known/wab.json (this site's capabilities)</a></li>
428
+ </ul>
429
+ </div>
430
+
431
+ </div>
432
+
433
+
434
+ <script src="/js/dns.js"></script>
435
+ </body>
436
+ </html>