web-agent-bridge 3.3.0 → 3.8.1

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 (312) hide show
  1. package/LICENSE +84 -72
  2. package/README.ar.md +1563 -1286
  3. package/README.md +137 -1764
  4. package/bin/agent-runner.js +474 -474
  5. package/bin/cli.js +237 -237
  6. package/bin/wab-init.js +244 -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/self-discovery.js +106 -0
  24. package/examples/shopify-hydrogen/README.md +74 -74
  25. package/examples/vision-agent.js +171 -171
  26. package/examples/wab-sign.js +74 -0
  27. package/examples/wab-verify.js +60 -0
  28. package/examples/wordpress-elementor/README.md +77 -77
  29. package/package.json +93 -93
  30. package/public/.well-known/agent-tools.json +180 -180
  31. package/public/.well-known/ai-assets.json +59 -59
  32. package/public/.well-known/security.txt +8 -8
  33. package/public/.well-known/wab.json +28 -0
  34. package/public/activate.html +448 -0
  35. package/public/adopt.html +236 -0
  36. package/public/adoption-metrics.html +188 -0
  37. package/public/agent-workspace.html +359 -349
  38. package/public/ai.html +198 -198
  39. package/public/api.html +397 -413
  40. package/public/azure-dns-integration.html +289 -0
  41. package/public/browser.html +486 -486
  42. package/public/cloudflare-integration.html +380 -0
  43. package/public/commander-dashboard.html +243 -243
  44. package/public/cookies.html +210 -210
  45. package/public/cpanel-integration.html +398 -0
  46. package/public/css/agent-workspace.css +1713 -1713
  47. package/public/css/premium.css +317 -317
  48. package/public/css/styles.css +1401 -1235
  49. package/public/dashboard-shieldlink.html +295 -0
  50. package/public/dashboard.html +711 -706
  51. package/public/dns.html +436 -507
  52. package/public/docs.html +588 -587
  53. package/public/enterprise-mesh.ar.html +80 -0
  54. package/public/enterprise-mesh.html +81 -0
  55. package/public/feed.xml +89 -89
  56. package/public/gcp-dns-integration.html +318 -0
  57. package/public/governance.ar.html +70 -0
  58. package/public/governance.html +69 -0
  59. package/public/growth.html +465 -463
  60. package/public/index.html +1372 -1070
  61. package/public/integrations.html +556 -556
  62. package/public/js/activate.js +449 -0
  63. package/public/js/agent-workspace.js +1740 -1740
  64. package/public/js/auth-nav.js +117 -31
  65. package/public/js/auth-redirect.js +12 -12
  66. package/public/js/cookie-consent.js +56 -56
  67. package/public/js/dns.js +438 -0
  68. package/public/js/wab-demo-page.js +721 -721
  69. package/public/js/ws-client.js +74 -74
  70. package/public/l-preview.html +242 -0
  71. package/public/llms-full.txt +360 -360
  72. package/public/llms.txt +125 -125
  73. package/public/login.html +85 -85
  74. package/public/mesh-dashboard.html +328 -328
  75. package/public/milestones.html +346 -0
  76. package/public/one-click.html +779 -0
  77. package/public/openapi.json +669 -580
  78. package/public/partners.ar.html +145 -0
  79. package/public/partners.html +143 -0
  80. package/public/phone-shield.html +281 -281
  81. package/public/plesk-integration.html +375 -0
  82. package/public/premium-dashboard.html +2489 -2489
  83. package/public/premium.html +793 -793
  84. package/public/privacy.html +297 -297
  85. package/public/provider-onboarding.html +172 -0
  86. package/public/provider-sandbox.html +134 -0
  87. package/public/providers.html +359 -0
  88. package/public/refusals.html +172 -0
  89. package/public/register.html +105 -105
  90. package/public/registrar-integrations.html +141 -0
  91. package/public/ring4.html +292 -0
  92. package/public/robots.txt +99 -87
  93. package/public/route53-integration.html +531 -0
  94. package/public/score.html +263 -0
  95. package/public/script/wab-consent.d.ts +36 -36
  96. package/public/script/wab-consent.js +104 -104
  97. package/public/script/wab-schema.js +131 -131
  98. package/public/script/wab.d.ts +108 -108
  99. package/public/script/wab.min.js +580 -580
  100. package/public/security.txt +8 -8
  101. package/public/shieldlink.html +244 -0
  102. package/public/shieldqr.html +231 -0
  103. package/public/sitemap.xml +19 -1
  104. package/public/terms.html +256 -256
  105. package/public/trust-graph-api.ar.html +92 -0
  106. package/public/trust-graph-api.html +91 -0
  107. package/public/wab-features.html +560 -0
  108. package/public/wab-trust.html +200 -0
  109. package/public/wab-truth.html +375 -0
  110. package/public/wab-vs-protocols.html +210 -0
  111. package/public/whitepaper.html +449 -0
  112. package/script/ai-agent-bridge.js +1754 -1754
  113. package/sdk/README.md +99 -99
  114. package/sdk/agent-mesh.js +449 -449
  115. package/sdk/auto-discovery.js +301 -0
  116. package/sdk/commander.js +262 -262
  117. package/sdk/governance.js +262 -0
  118. package/sdk/index.d.ts +464 -464
  119. package/sdk/index.js +649 -636
  120. package/sdk/multi-agent.js +318 -318
  121. package/sdk/package.json +2 -2
  122. package/sdk/safe-mode.js +221 -0
  123. package/sdk/safety-shield.js +219 -219
  124. package/sdk/schema-discovery.js +83 -83
  125. package/server/adapters/index.js +520 -520
  126. package/server/config/plans.js +412 -367
  127. package/server/config/secrets.js +102 -102
  128. package/server/control-plane/index.js +301 -301
  129. package/server/data-plane/index.js +354 -354
  130. package/server/index.js +790 -531
  131. package/server/llm/index.js +404 -404
  132. package/server/middleware/adminAuth.js +35 -35
  133. package/server/middleware/api-tier.js +170 -0
  134. package/server/middleware/auth.js +50 -50
  135. package/server/middleware/featureGate.js +88 -88
  136. package/server/middleware/rateLimits.js +100 -100
  137. package/server/middleware/sensitiveAction.js +157 -157
  138. package/server/middleware/wab-trust.js +141 -0
  139. package/server/migrations/001_add_analytics_indexes.sql +7 -7
  140. package/server/migrations/002_premium_features.sql +418 -418
  141. package/server/migrations/003_ads_integer_cents.sql +33 -33
  142. package/server/migrations/004_agent_os.sql +158 -158
  143. package/server/migrations/005_marketplace_metering.sql +126 -126
  144. package/server/migrations/006_growth_suite.sql +138 -0
  145. package/server/migrations/007_governance.sql +106 -0
  146. package/server/migrations/008_plans.sql +144 -0
  147. package/server/migrations/009_shieldqr.sql +30 -0
  148. package/server/migrations/010_extended_trust.sql +33 -0
  149. package/server/migrations/011_outreach.sql +47 -0
  150. package/server/migrations/012_shieldlink.sql +116 -0
  151. package/server/migrations/013_ct_monitor.sql +13 -0
  152. package/server/migrations/014_wab_advanced_features.sql +128 -0
  153. package/server/migrations/015_wab_truth_layer.sql +101 -0
  154. package/server/migrations/016_ring4_external_trust.sql +84 -0
  155. package/server/migrations/017_ring4_extensions.sql +69 -0
  156. package/server/migrations/018_commercial_foundations.sql +167 -0
  157. package/server/migrations/019_unify_tier_constraints.sql +133 -0
  158. package/server/models/adapters/index.js +33 -33
  159. package/server/models/adapters/mysql.js +183 -183
  160. package/server/models/adapters/postgresql.js +172 -172
  161. package/server/models/adapters/sqlite.js +7 -7
  162. package/server/models/db.js +740 -681
  163. package/server/observability/failure-analysis.js +337 -337
  164. package/server/observability/index.js +394 -394
  165. package/server/protocol/capabilities.js +223 -223
  166. package/server/protocol/index.js +243 -243
  167. package/server/protocol/schema.js +584 -584
  168. package/server/registry/certification.js +271 -271
  169. package/server/registry/index.js +326 -326
  170. package/server/routes/activate.js +478 -0
  171. package/server/routes/admin-outreach.js +239 -0
  172. package/server/routes/admin-plans.js +76 -0
  173. package/server/routes/admin-premium.js +674 -671
  174. package/server/routes/admin-shieldlink.js +137 -0
  175. package/server/routes/admin-shieldqr.js +90 -0
  176. package/server/routes/admin-trust-monitor.js +139 -0
  177. package/server/routes/admin.js +550 -261
  178. package/server/routes/adopt.js +61 -0
  179. package/server/routes/ads.js +130 -130
  180. package/server/routes/agent-workspace.js +540 -540
  181. package/server/routes/api-keys.js +127 -0
  182. package/server/routes/api.js +150 -150
  183. package/server/routes/auth.js +71 -71
  184. package/server/routes/billing.js +57 -45
  185. package/server/routes/commander.js +316 -316
  186. package/server/routes/customer-shieldlink.js +133 -0
  187. package/server/routes/demo-showcase.js +332 -332
  188. package/server/routes/demo-store.js +154 -154
  189. package/server/routes/diagnose.js +373 -0
  190. package/server/routes/discovery.js +2348 -417
  191. package/server/routes/enterprise-mesh.js +170 -0
  192. package/server/routes/gateway.js +173 -173
  193. package/server/routes/governance-saas.js +203 -0
  194. package/server/routes/governance.js +208 -0
  195. package/server/routes/growth.js +1048 -0
  196. package/server/routes/intent.js +328 -0
  197. package/server/routes/license.js +251 -251
  198. package/server/routes/mesh.js +469 -469
  199. package/server/routes/noscript.js +543 -543
  200. package/server/routes/partners.js +201 -0
  201. package/server/routes/plans.js +33 -0
  202. package/server/routes/premium-v2.js +686 -686
  203. package/server/routes/premium.js +724 -724
  204. package/server/routes/providers.js +650 -0
  205. package/server/routes/reputation.js +411 -0
  206. package/server/routes/ring4.js +885 -0
  207. package/server/routes/runtime.js +2148 -2148
  208. package/server/routes/shieldlink.js +70 -0
  209. package/server/routes/shieldqr.js +88 -0
  210. package/server/routes/sovereign.js +465 -465
  211. package/server/routes/truth-layer.js +670 -0
  212. package/server/routes/universal.js +200 -200
  213. package/server/routes/unsubscribe.js +51 -0
  214. package/server/routes/wab-api.js +850 -850
  215. package/server/routes/wab-cache.js +282 -0
  216. package/server/runtime/container-worker.js +111 -111
  217. package/server/runtime/container.js +448 -448
  218. package/server/runtime/distributed-worker.js +362 -362
  219. package/server/runtime/event-bus.js +210 -210
  220. package/server/runtime/index.js +253 -253
  221. package/server/runtime/queue.js +599 -599
  222. package/server/runtime/replay.js +666 -666
  223. package/server/runtime/sandbox.js +266 -266
  224. package/server/runtime/scheduler.js +534 -534
  225. package/server/runtime/session-engine.js +293 -293
  226. package/server/runtime/state-manager.js +188 -188
  227. package/server/secrets/wab-signing-key.pem +3 -0
  228. package/server/secrets/wab-signing-pub.pem +3 -0
  229. package/server/security/cross-site-redactor.js +196 -196
  230. package/server/security/dry-run.js +180 -180
  231. package/server/security/human-gate-rate-limit.js +147 -147
  232. package/server/security/human-gate-transports.js +178 -178
  233. package/server/security/human-gate.js +281 -281
  234. package/server/security/index.js +368 -368
  235. package/server/security/intent-engine.js +245 -245
  236. package/server/security/reward-guard.js +171 -171
  237. package/server/security/rollback-store.js +239 -239
  238. package/server/security/token-scope.js +404 -404
  239. package/server/security/url-policy.js +139 -139
  240. package/server/services/adoption-agent.js +182 -0
  241. package/server/services/agent-chat.js +506 -506
  242. package/server/services/agent-learning.js +601 -601
  243. package/server/services/agent-memory.js +625 -625
  244. package/server/services/agent-mesh.js +555 -555
  245. package/server/services/agent-symphony.js +717 -717
  246. package/server/services/agent-tasks.js +1807 -1807
  247. package/server/services/api-key-engine.js +292 -292
  248. package/server/services/cluster.js +894 -894
  249. package/server/services/commander.js +738 -738
  250. package/server/services/edge-compute.js +440 -440
  251. package/server/services/email.js +233 -204
  252. package/server/services/fairness-engine.js +409 -0
  253. package/server/services/fairness.js +420 -0
  254. package/server/services/governance.js +466 -0
  255. package/server/services/hosted-runtime.js +205 -205
  256. package/server/services/lfd.js +635 -635
  257. package/server/services/local-ai.js +389 -389
  258. package/server/services/marketplace.js +270 -270
  259. package/server/services/metering.js +182 -182
  260. package/server/services/modules/affiliate-intelligence.js +93 -93
  261. package/server/services/modules/agent-firewall.js +90 -90
  262. package/server/services/modules/bounty.js +89 -89
  263. package/server/services/modules/collective-bargaining.js +92 -92
  264. package/server/services/modules/dark-pattern.js +66 -66
  265. package/server/services/modules/gov-intelligence.js +45 -45
  266. package/server/services/modules/neural.js +55 -55
  267. package/server/services/modules/notary.js +49 -49
  268. package/server/services/modules/price-time-machine.js +86 -86
  269. package/server/services/modules/protocol.js +104 -104
  270. package/server/services/negotiation.js +439 -439
  271. package/server/services/outreach-agent.js +312 -0
  272. package/server/services/plans.js +214 -0
  273. package/server/services/plugins.js +771 -771
  274. package/server/services/premium.js +1 -1
  275. package/server/services/price-intelligence.js +566 -566
  276. package/server/services/price-shield.js +1137 -1137
  277. package/server/services/provider-clients.js +740 -0
  278. package/server/services/reputation.js +465 -465
  279. package/server/services/search-engine.js +357 -357
  280. package/server/services/security.js +513 -513
  281. package/server/services/self-healing.js +843 -843
  282. package/server/services/shieldlink.js +492 -0
  283. package/server/services/shieldqr.js +322 -0
  284. package/server/services/sovereign-shield.js +542 -542
  285. package/server/services/ssl-ct-monitor.js +224 -0
  286. package/server/services/ssl-inspector.js +42 -0
  287. package/server/services/ssl-monitor.js +167 -0
  288. package/server/services/stripe.js +206 -192
  289. package/server/services/swarm.js +788 -788
  290. package/server/services/universal-scraper.js +662 -662
  291. package/server/services/verification.js +481 -481
  292. package/server/services/vision.js +1163 -1163
  293. package/server/services/wab-crypto.js +178 -0
  294. package/server/utils/cache.js +125 -125
  295. package/server/utils/migrate.js +81 -81
  296. package/server/utils/safe-fetch.js +228 -228
  297. package/server/utils/secureFields.js +50 -50
  298. package/server/ws.js +161 -161
  299. package/templates/artisan-marketplace.yaml +104 -104
  300. package/templates/book-price-scout.yaml +98 -98
  301. package/templates/electronics-price-tracker.yaml +108 -108
  302. package/templates/flight-deal-hunter.yaml +113 -113
  303. package/templates/freelancer-direct.yaml +116 -116
  304. package/templates/grocery-price-compare.yaml +93 -93
  305. package/templates/hotel-direct-booking.yaml +113 -113
  306. package/templates/local-services.yaml +98 -98
  307. package/templates/olive-oil-tunisia.yaml +88 -88
  308. package/templates/organic-farm-fresh.yaml +101 -101
  309. package/templates/restaurant-direct.yaml +97 -97
  310. package/templates/ring4/banking-sovereign.yaml +55 -0
  311. package/templates/ring4/ecommerce-sovereign.yaml +58 -0
  312. package/templates/ring4/healthcare-sovereign.yaml +60 -0
package/public/dns.html CHANGED
@@ -1,507 +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:110px 24px 32px;text-align:center}
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:10px;justify-content:center;margin:0 0 22px}
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
- </style>
47
- </head>
48
- <body>
49
- <nav class="navbar" id="navbar">
50
- <div class="container">
51
- <a href="/" class="navbar-brand"><div class="brand-icon">⚡</div><span>WAB</span></a>
52
- <ul class="navbar-links">
53
- <li><a href="/">Home</a></li>
54
- <li><a href="/integrations">Integrations</a></li>
55
- <li><a href="/dns" class="active">DNS Discovery</a></li>
56
- <li><a href="/phone-shield">Phone Shield</a></li>
57
- <li><a href="/sovereign">Sovereign</a></li>
58
- <li><a href="/docs">Docs</a></li>
59
- </ul>
60
- </div>
61
- </nav>
62
-
63
- <section class="hero">
64
- <div class="lang">
65
- <button id="enBtn" class="active" onclick="setLang('en')">English</button>
66
- <button id="arBtn" onclick="setLang('ar')">العربية</button>
67
- </div>
68
- <h1 data-en="WAB DNS Discovery" data-ar="اكتشاف WAB عبر DNS">WAB DNS Discovery</h1>
69
- <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>
70
- <div class="toc">
71
- <a href="#what-is">What & Why</a>
72
- <a href="#format">Record Format</a>
73
- <a href="#verifier">Live Verifier</a>
74
- <a href="#setup">Setup Guides</a>
75
- <a href="#troubleshoot">Troubleshooting</a>
76
- <a href="#repo-links">Repo & Docs</a>
77
- </div>
78
- </section>
79
-
80
- <div class="wrap">
81
-
82
- <!-- ═══════════════ WHAT & WHY ═══════════════ -->
83
- <div class="card" id="what-is">
84
- <h3 data-en="What is WAB DNS Discovery?" data-ar="ما هو اكتشاف WAB عبر DNS؟">What is WAB DNS Discovery?</h3>
85
- <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>
86
- <h4 data-en="Why use it?" data-ar="لماذا تستخدمها؟">Why use it?</h4>
87
- <ul>
88
- <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>
89
- <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>
90
- <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>
91
- <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>
92
- </ul>
93
- <span class="badge" data-en="MIT-licensed open protocol" data-ar="بروتوكول مفتوح برخصة MIT">MIT-licensed open protocol</span>
94
- </div>
95
-
96
- <!-- ═══════════════ HOW IT WORKS ═══════════════ -->
97
- <div class="card">
98
- <h3 data-en="How it works (under the hood)" data-ar="كيف يعمل (الآلية الداخلية)">How it works (under the hood)</h3>
99
- <ol>
100
- <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>
101
- <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>
102
- <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>
103
- <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>
104
- </ol>
105
- </div>
106
-
107
- <!-- ═══════════════ FORMAT ═══════════════ -->
108
- <div class="card" id="format">
109
- <h3 data-en="The TXT Record Format" data-ar="صيغة سجل TXT">The TXT Record Format</h3>
110
- <table>
111
- <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>
112
- <tr><td>Type</td><td><code>TXT</code></td><td data-en="Plain text record" data-ar="سجل نصي">Plain text record</td></tr>
113
- <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>
114
- <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>
115
- <tr><td>TTL</td><td><code>3600</code> / Auto</td><td data-en="Standard cache lifetime" data-ar="مدة التخزين الافتراضية">Standard cache lifetime</td></tr>
116
- </table>
117
- <pre>_wab.yourdomain.com. 3600 IN TXT "v=wab1; endpoint=https://yourdomain.com/.well-known/wab.json"</pre>
118
- </div>
119
-
120
- <!-- ═══════════════ RECORDS FOR webagentbridge.com ═══════════════ -->
121
- <div class="card" id="records">
122
- <h3 data-en="DNS Records for webagentbridge.com (canonical)" data-ar="سجلات DNS لـ webagentbridge.com (المرجعية)">DNS Records for webagentbridge.com (canonical)</h3>
123
- <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>
124
- <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>
125
- <table class="table" id="recordsTable">
126
- <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>
127
- <tbody>
128
- <tr data-record="_wab.webagentbridge.com" data-rtype="TXT" data-match="v=wab1">
129
- <td class="live-cell"><span class="warn">…</span></td>
130
- <td><code>_wab</code></td>
131
- <td><code>TXT</code></td>
132
- <td><code>"v=wab1; endpoint=https://www.webagentbridge.com/.well-known/wab.json"</code></td>
133
- <td>3600</td>
134
- </tr>
135
- <tr data-record="_wab-agent.webagentbridge.com" data-rtype="TXT" data-match="v=wab1">
136
- <td class="live-cell"><span class="warn">…</span></td>
137
- <td><code>_wab-agent</code></td>
138
- <td><code>TXT</code></td>
139
- <td><code>"v=wab1; mcp=https://www.webagentbridge.com/api/v1/protocol; gateway=https://www.webagentbridge.com/api/v1"</code></td>
140
- <td>3600</td>
141
- </tr>
142
- <tr data-record="_wab-trust.webagentbridge.com" data-rtype="TXT" data-match="v=wab1">
143
- <td class="live-cell"><span class="warn">…</span></td>
144
- <td><code>_wab-trust</code></td>
145
- <td><code>TXT</code></td>
146
- <td><code>"v=wab1; trust=https://www.webagentbridge.com/.well-known/wab.json; security=https://www.webagentbridge.com/.well-known/security.txt"</code></td>
147
- <td>3600</td>
148
- </tr>
149
- <tr data-record="_dmarc.webagentbridge.com" data-rtype="TXT" data-match="v=DMARC1; p=quarantine">
150
- <td class="live-cell"><span class="warn">…</span></td>
151
- <td><code>_dmarc</code></td>
152
- <td><code>TXT</code></td>
153
- <td><code>"v=DMARC1; p=quarantine; rua=mailto:dmarc@webagentbridge.com; ruf=mailto:dmarc@webagentbridge.com; adkim=s; aspf=s; pct=100"</code></td>
154
- <td>3600</td>
155
- </tr>
156
- <tr data-record="webagentbridge.com" data-rtype="TXT" data-match="v=spf1">
157
- <td class="live-cell"><span class="warn">…</span></td>
158
- <td><code>@</code> (apex)</td>
159
- <td><code>TXT</code></td>
160
- <td><code>"v=spf1 -all"</code></td>
161
- <td>3600</td>
162
- </tr>
163
- <tr data-record="webagentbridge.com" data-rtype="CAA" data-match="letsencrypt.org">
164
- <td class="live-cell"><span class="warn">…</span></td>
165
- <td><code>@</code> (apex)</td>
166
- <td><code>CAA</code></td>
167
- <td><code>0 issue "letsencrypt.org"</code></td>
168
- <td>3600</td>
169
- </tr>
170
- <tr data-record="webagentbridge.com" data-rtype="CAA" data-match="iodef">
171
- <td class="live-cell"><span class="warn">…</span></td>
172
- <td><code>@</code> (apex)</td>
173
- <td><code>CAA</code></td>
174
- <td><code>0 iodef "mailto:security@webagentbridge.com"</code></td>
175
- <td>3600</td>
176
- </tr>
177
- </tbody>
178
- </table>
179
- <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>
180
- </div>
181
-
182
- <!-- ═══════════════ LIVE VERIFIER ═══════════════ -->
183
- <div class="card" id="verifier">
184
- <h3 data-en="Live Verifier (DNS over HTTPS)" data-ar="مدقق مباشر (DNS عبر HTTPS)">Live Verifier (DNS over HTTPS)</h3>
185
- <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>
186
- <div class="verifier">
187
- <div class="row">
188
- <div>
189
- <label data-en="Domain" data-ar="النطاق">Domain</label>
190
- <input id="dnsDomain" placeholder="example.com" value="webagentbridge.com">
191
- </div>
192
- <div>
193
- <label data-en="Resolver" data-ar="المحلل">Resolver</label>
194
- <select id="dnsResolver">
195
- <option value="https://cloudflare-dns.com/dns-query">Cloudflare (1.1.1.1)</option>
196
- <option value="https://dns.google/resolve">Google (8.8.8.8)</option>
197
- </select>
198
- </div>
199
- </div>
200
- <button class="btn" onclick="verifyDns()" data-en="Verify _wab Record" data-ar="تحقق من سجل _wab">Verify _wab Record</button>
201
- <button class="btn secondary" onclick="copyExample()" data-en="Copy Example Record" data-ar="انسخ سجلاً نموذجياً">Copy Example Record</button>
202
- <div id="dnsStatus" style="margin-top:10px;font-size:.92rem"></div>
203
- <pre id="dnsOut">{}</pre>
204
- </div>
205
- </div>
206
-
207
- <!-- ═══════════════ PRIVACY MODEL ═══════════════ -->
208
- <div class="card" id="privacy">
209
- <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>
210
- <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>
211
- <table class="table">
212
- <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>
213
- <tbody>
214
- <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>
215
- <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>
216
- <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>
217
- <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>
218
- <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>
219
- </tbody>
220
- </table>
221
- <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>
222
- <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>
223
- </div>
224
-
225
- <!-- ═══════════════ SILENT HANDSHAKE ═══════════════ -->
226
- <div class="card" id="silent-handshake">
227
- <h3 data-en="Silent Handshake agent-aware sites, zero cookie banners" data-ar="المصافحة الصامتة — مواقع تفهم الوكلاء بدون نوافذ كوكيز">Silent Handshake — agent-aware sites, zero cookie banners</h3>
228
- <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>
229
- <ol>
230
- <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>
231
- <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>
232
- <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>
233
- <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>
234
- </ol>
235
- <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>
236
- </div>
237
-
238
- <!-- ═══════════════ SETUP GUIDES ═══════════════ -->
239
- <div class="grid" id="setup">
240
- <div class="card">
241
- <h3>1. Cloudflare</h3>
242
- <ol>
243
- <li data-en="Open Cloudflare dashboard and select your domain." data-ar="افتح لوحة Cloudflare واختر نطاقك.">Open Cloudflare dashboard and select your domain.</li>
244
- <li data-en="Go to DNS → Records → Add record." data-ar="انتقل إلى DNS → Records → Add record.">Go to <b>DNS → Records → Add record</b>.</li>
245
- <li data-en="Type: TXT, Name: _wab" data-ar="النوع: TXT، الاسم: _wab">Type: <code>TXT</code>, Name: <code>_wab</code></li>
246
- <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>
247
- <li data-en="Leave TTL on Auto and Save." data-ar="اترك TTL على Auto واحفظ.">Leave TTL on <b>Auto</b> and Save.</li>
248
- </ol>
249
- </div>
250
-
251
- <div class="card">
252
- <h3>2. cPanel (Shared Hosting)</h3>
253
- <ol>
254
- <li data-en="cPanel → Domains → Zone Editor → Manage." data-ar="cPanel → Domains → Zone Editor → Manage.">cPanel → <b>Domains → Zone Editor → Manage</b>.</li>
255
- <li data-en="Add Record → Add 'TXT' Record." data-ar="Add Record → Add 'TXT' Record."><b>Add Record → Add "TXT" Record</b>.</li>
256
- <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>
257
- <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>
258
- <li data-en="Click Save Record." data-ar="انقر Save Record.">Click <b>Save Record</b>.</li>
259
- </ol>
260
- </div>
261
-
262
- <div class="card">
263
- <h3>3. GoDaddy</h3>
264
- <ol>
265
- <li data-en="Domain Portfolio → click your domain." data-ar="Domain Portfolio → اضغط نطاقك.">Domain Portfolio → click your domain.</li>
266
- <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>
267
- <li>Type: <code>TXT</code>, Name: <code>_wab</code></li>
268
- <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>
269
- <li data-en="Save (TTL default = 1 Hour is fine)." data-ar="احفظ (الإعداد الافتراضي 1 Hour مناسب).">Save (TTL default = 1 Hour is fine).</li>
270
- </ol>
271
- </div>
272
-
273
- <div class="card">
274
- <h3>4. Namecheap</h3>
275
- <ol>
276
- <li data-en="Domain List → Manage → Advanced DNS." data-ar="Domain List → Manage → Advanced DNS.">Domain List → <b>Manage → Advanced DNS</b>.</li>
277
- <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>
278
- <li>Host: <code>_wab</code></li>
279
- <li>Value: <code>v=wab1; endpoint=https://yourdomain.com/.well-known/wab.json</code></li>
280
- <li data-en="Save with the green checkmark." data-ar="احفظ بأيقونة الصح الخضراء.">Save with the green checkmark.</li>
281
- </ol>
282
- </div>
283
-
284
- <div class="card">
285
- <h3>5. AWS Route 53</h3>
286
- <ol>
287
- <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>
288
- <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>
289
- <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>
290
- <li>TTL: <code>300</code>–<code>3600</code></li>
291
- <li data-en="Click Create records." data-ar="انقر Create records.">Click <b>Create records</b>.</li>
292
- </ol>
293
- </div>
294
-
295
- <div class="card">
296
- <h3>6. Google Domains / Squarespace, OVH, etc.</h3>
297
- <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>
298
- </div>
299
- </div>
300
-
301
- <!-- ═══════════════ VERIFY CLI ═══════════════ -->
302
- <div class="card">
303
- <h3 data-en="Verify from the command line" data-ar="التحقق من سطر الأوامر">Verify from the command line</h3>
304
- <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>
305
- <pre># macOS / Linux
306
- dig TXT _wab.yourdomain.com +short
307
-
308
- # Windows
309
- nslookup -type=TXT _wab.yourdomain.com
310
-
311
- # Anywhere (DoH via curl)
312
- curl -s -H 'accept: application/dns-json' \
313
- 'https://cloudflare-dns.com/dns-query?name=_wab.yourdomain.com&type=TXT'</pre>
314
- <p data-en="Expected output:" data-ar="الناتج المتوقع:">Expected output:</p>
315
- <pre>"v=wab1; endpoint=https://yourdomain.com/.well-known/wab.json"</pre>
316
- </div>
317
-
318
- <!-- ═══════════════ TROUBLESHOOTING ═══════════════ -->
319
- <div class="card" id="troubleshoot">
320
- <h3 data-en="Troubleshooting" data-ar="حل المشاكل">Troubleshooting</h3>
321
- <ul>
322
- <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>
323
- <li data-en="Some panels wrap the value in extra quotesthat is fine. Resolvers strip them." data-ar="بعض اللوحات تضيف علامات اقتباس إضافيةلا مشكلة. المحللات تزيلها.">Some panels wrap the value in extra quotesthat is fine. Resolvers strip them.</li>
324
- <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>
325
- <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>
326
- <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>
327
- </ul>
328
- </div>
329
-
330
- <!-- ═══════════════ REPO LINKS ═══════════════ -->
331
- <div class="card" id="repo-links">
332
- <h3 data-en="Full documentation in the repo" data-ar="التوثيق الكامل في الريبو">Full documentation in the repo</h3>
333
- <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>
334
- <ul>
335
- <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>
336
- <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>
337
- <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>
338
- <li><a href="/.well-known/wab.json" target="_blank">/.well-known/wab.json (this site's capabilities)</a></li>
339
- </ul>
340
- </div>
341
-
342
- </div>
343
-
344
- <script>
345
- // ═══════════ Bilingual toggle ═══════════
346
- function setLang(lang){
347
- const isAr = lang === 'ar';
348
- document.documentElement.lang = isAr ? 'ar' : 'en';
349
- document.documentElement.dir = isAr ? 'rtl' : 'ltr';
350
- document.getElementById('enBtn').classList.toggle('active', !isAr);
351
- document.getElementById('arBtn').classList.toggle('active', isAr);
352
- document.querySelectorAll('[data-en]').forEach(el=>{
353
- el.textContent = isAr ? (el.getAttribute('data-ar') || el.textContent) : (el.getAttribute('data-en') || el.textContent);
354
- });
355
- }
356
-
357
- // ═══════════ Live DoH Verifier ═══════════
358
- async function verifyDns(){
359
- const domain = (document.getElementById('dnsDomain').value || '').trim().replace(/^https?:\/\//,'').replace(/\/.*$/,'');
360
- const resolver = document.getElementById('dnsResolver').value;
361
- const status = document.getElementById('dnsStatus');
362
- const out = document.getElementById('dnsOut');
363
- if(!domain){ status.innerHTML = '<span class="danger">Please enter a domain.</span>'; return; }
364
- const fqdn = '_wab.' + domain;
365
- status.innerHTML = '<span class="warn">Querying ' + fqdn + ' …</span>';
366
- out.textContent = '';
367
- try {
368
- const url = resolver + '?name=' + encodeURIComponent(fqdn) + '&type=TXT';
369
- const res = await fetch(url, { headers: { 'accept': 'application/dns-json' } });
370
- const data = await res.json();
371
- out.textContent = JSON.stringify(data, null, 2);
372
- const answers = (data.Answer || []).filter(a => a.type === 16);
373
- if (!answers.length) {
374
- status.innerHTML = '<span class="danger">No _wab TXT record found for <b>' + domain + '</b>. The domain has not enabled WAB DNS Discovery (yet).</span>';
375
- return;
376
- }
377
- const value = answers.map(a => (a.data || '').replace(/^"|"$/g,'').replace(/" "/g,'')).join(' ');
378
- const versionMatch = /v=([^;\s]+)/.exec(value);
379
- const endpointMatch = /endpoint=([^;\s]+)/.exec(value);
380
- if (versionMatch && endpointMatch && versionMatch[1].startsWith('wab')) {
381
- status.innerHTML = '<span class="ok">✓ Valid WAB record found. Version: <b>' + versionMatch[1] + '</b> · Endpoint: <a href="' + endpointMatch[1] + '" target="_blank" style="color:#7dd3fc">' + endpointMatch[1] + '</a></span>';
382
- } else {
383
- status.innerHTML = '<span class="warn">TXT record found but it does not match the WAB format (v=wab1; endpoint=…).</span>';
384
- }
385
- } catch (err) {
386
- status.innerHTML = '<span class="danger">Lookup failed: ' + (err && err.message || err) + '</span>';
387
- }
388
- }
389
-
390
- function copyExample(){
391
- const txt = 'v=wab1; endpoint=https://yourdomain.com/.well-known/wab.json';
392
- navigator.clipboard.writeText(txt).then(()=>{
393
- const s = document.getElementById('dnsStatus');
394
- s.innerHTML = '<span class="ok">✓ Example record copied to clipboard.</span>';
395
- });
396
- }
397
-
398
- // ═══════════ Canonical records — live status ═══════════
399
- const RR_TYPE = { TXT: 16, CAA: 257, A: 1, AAAA: 28, CNAME: 5 };
400
-
401
- function _decodeCAARdata(hex){
402
- // RFC 8659: 1 byte flags, 1 byte tag-length, tag, value (rest)
403
- try {
404
- const bytes = hex.replace(/\\#\s*\d+\s*/, '').replace(/\s+/g, '');
405
- const buf = bytes.match(/.{1,2}/g).map(b => parseInt(b, 16));
406
- const tagLen = buf[1];
407
- let tag = '', val = '';
408
- for (let i = 0; i < tagLen; i++) tag += String.fromCharCode(buf[2 + i]);
409
- for (let i = 2 + tagLen; i < buf.length; i++) val += String.fromCharCode(buf[i]);
410
- return { tag, value: val };
411
- } catch { return null; }
412
- }
413
-
414
- function _normalizeAnswer(answer, type){
415
- const data = answer.data || '';
416
- if (type === 'CAA') {
417
- const decoded = _decodeCAARdata(data);
418
- if (decoded) return decoded.tag + ' ' + decoded.value;
419
- // Some resolvers return the parsed form already (e.g. '0 issue "letsencrypt.org"')
420
- return data;
421
- }
422
- return data.replace(/^"|"$/g, '').replace(/"\s*"/g, '');
423
- }
424
-
425
- async function _doh(name, type){
426
- // do=1 asks Cloudflare to set the AD flag when the answer is DNSSEC-validated.
427
- const url = 'https://cloudflare-dns.com/dns-query?name=' +
428
- encodeURIComponent(name) + '&type=' + encodeURIComponent(type) + '&do=1';
429
- const res = await fetch(url, { headers: { 'accept': 'application/dns-json' } });
430
- const data = await res.json();
431
- const want = RR_TYPE[type];
432
- const answers = (data.Answer || []).filter(a => a.type === want)
433
- .map(a => _normalizeAnswer(a, type));
434
- // Attach AD flag (DNSSEC validated) as a non-enumerable property
435
- Object.defineProperty(answers, '_ad', { value: !!data.AD, enumerable: false });
436
- return answers;
437
- }
438
-
439
- async function checkDnssecForWab(){
440
- const el = document.getElementById('dnssecLiveStatus');
441
- const rowState = document.getElementById('dnssecRowState');
442
- if (!el) return;
443
- try {
444
- const ans = await _doh('_wab.webagentbridge.com', 'TXT');
445
- if (ans._ad) {
446
- el.className = 'ok';
447
- el.textContent = '✓ DNSSEC validated (AD=1) at resolver';
448
- if (rowState) { rowState.className = 'ok'; rowState.textContent = '✓ DNSSEC validated'; }
449
- } else {
450
- el.className = 'warn';
451
- el.textContent = '⚠ DNSSEC not yet enabled on this zone (AD=0). Roadmap: enable DS at registrar.';
452
- }
453
- } catch {
454
- el.className = 'warn';
455
- el.textContent = '… could not verify (DoH unreachable)';
456
- }
457
- }
458
-
459
- async function checkCanonicalRecords(){
460
- const rows = document.querySelectorAll('#recordsTable tr[data-record]');
461
- const summary = document.getElementById('recordsLiveStatus');
462
- let pass = 0, fail = 0;
463
- const tasks = Array.from(rows).map(async (row) => {
464
- const cell = row.querySelector('.live-cell');
465
- const name = row.dataset.record;
466
- const type = row.dataset.rtype;
467
- const match = row.dataset.match;
468
- try {
469
- const answers = await _doh(name, type);
470
- const hit = answers.some(a => a.toLowerCase().includes(match.toLowerCase()));
471
- if (hit) {
472
- cell.innerHTML = '<span class="ok" title="Verified live via Cloudflare DoH">✓ live</span>';
473
- pass++;
474
- } else {
475
- cell.innerHTML = '<span class="danger" title="Record not yet propagated or missing">✗ missing</span>';
476
- fail++;
477
- }
478
- } catch (err) {
479
- cell.innerHTML = '<span class="warn" title="Lookup failed">… error</span>';
480
- }
481
- });
482
- await Promise.allSettled(tasks);
483
- const total = pass + fail;
484
- summary.innerHTML = '<span class="' + (fail === 0 ? 'ok' : 'warn') + '">' +
485
- (fail === 0 ? '✓ All ' + total + ' canonical records verified live (Cloudflare DoH).'
486
- : '⚠ ' + pass + '/' + total + ' records live — ' + fail + ' missing or propagating.') + '</span>';
487
- }
488
-
489
- document.addEventListener('DOMContentLoaded', () => {
490
- // Don't block the page; run the live checks in the background.
491
- checkCanonicalRecords().catch(()=>{});
492
- checkDnssecForWab().catch(()=>{});
493
- });
494
- </script>
495
-
496
- <script>
497
- // navbar scroll background (consistent with other pages)
498
- const navbar = document.getElementById('navbar');
499
- window.addEventListener('scroll', () => {
500
- if (!navbar) return;
501
- navbar.style.background = window.scrollY > 50
502
- ? 'rgba(7, 13, 25, 0.92)'
503
- : 'rgba(7, 13, 25, 0.78)';
504
- });
505
- </script>
506
- </body>
507
- </html>
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>