web-agent-bridge 3.3.0 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +12 -0
- package/README.ar.md +18 -0
- package/README.md +198 -1664
- package/bin/wab-init.js +223 -0
- package/examples/azure-dns-wab.js +83 -0
- package/examples/cloudflare-wab-dns.js +121 -0
- package/examples/cpanel-wab-dns.js +114 -0
- package/examples/dns-discovery-agent.js +166 -0
- package/examples/gcp-dns-wab.js +76 -0
- package/examples/governance-agent.js +169 -0
- package/examples/plesk-wab-dns.js +103 -0
- package/examples/route53-wab-dns.js +144 -0
- package/examples/safe-mode-agent.js +96 -0
- package/examples/wab-sign.js +74 -0
- package/examples/wab-verify.js +60 -0
- package/package.json +5 -5
- package/public/.well-known/wab.json +28 -0
- package/public/activate.html +368 -0
- package/public/adoption-metrics.html +188 -0
- package/public/api.html +1 -1
- package/public/azure-dns-integration.html +289 -0
- package/public/cloudflare-integration.html +380 -0
- package/public/cpanel-integration.html +398 -0
- package/public/css/styles.css +28 -0
- package/public/dashboard.html +1 -0
- package/public/dns.html +101 -172
- package/public/docs.html +1 -0
- package/public/gcp-dns-integration.html +318 -0
- package/public/growth.html +4 -2
- package/public/index.html +227 -31
- package/public/integrations.html +1 -1
- package/public/js/activate.js +145 -0
- package/public/js/auth-nav.js +34 -0
- package/public/js/dns.js +438 -0
- package/public/openapi.json +89 -0
- package/public/plesk-integration.html +375 -0
- package/public/premium.html +1 -1
- package/public/provider-onboarding.html +172 -0
- package/public/provider-sandbox.html +134 -0
- package/public/providers.html +359 -0
- package/public/registrar-integrations.html +141 -0
- package/public/robots.txt +12 -0
- package/public/route53-integration.html +531 -0
- package/public/shieldqr.html +231 -0
- package/public/sitemap.xml +6 -0
- package/public/wab-trust.html +200 -0
- package/public/wab-vs-protocols.html +210 -0
- package/public/whitepaper.html +449 -0
- package/sdk/auto-discovery.js +288 -0
- package/sdk/governance.js +262 -0
- package/sdk/index.js +13 -0
- package/sdk/package.json +2 -2
- package/sdk/safe-mode.js +221 -0
- package/server/index.js +144 -5
- package/server/migrations/007_governance.sql +106 -0
- package/server/migrations/008_plans.sql +144 -0
- package/server/migrations/009_shieldqr.sql +30 -0
- package/server/migrations/010_extended_trust.sql +33 -0
- package/server/models/adapters/mysql.js +1 -1
- package/server/models/adapters/postgresql.js +1 -1
- package/server/models/db.js +60 -1
- package/server/routes/admin-plans.js +76 -0
- package/server/routes/admin-premium.js +4 -2
- package/server/routes/admin-shieldqr.js +90 -0
- package/server/routes/admin-trust-monitor.js +83 -0
- package/server/routes/admin.js +289 -1
- package/server/routes/billing.js +16 -4
- package/server/routes/discovery.js +1933 -2
- package/server/routes/governance.js +208 -0
- package/server/routes/plans.js +33 -0
- package/server/routes/providers.js +650 -0
- package/server/routes/shieldqr.js +88 -0
- package/server/services/email.js +29 -0
- package/server/services/governance.js +466 -0
- package/server/services/plans.js +214 -0
- package/server/services/premium.js +1 -1
- package/server/services/provider-clients.js +740 -0
- package/server/services/shieldqr.js +322 -0
- package/server/services/ssl-inspector.js +42 -0
- package/server/services/ssl-monitor.js +167 -0
- package/server/services/stripe.js +18 -5
- package/server/services/vision.js +1 -1
- package/server/services/wab-crypto.js +178 -0
|
@@ -0,0 +1,449 @@
|
|
|
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 Whitepaper — Web Agent Bridge</title>
|
|
7
|
+
<meta name="description" content="Web Agent Bridge (WAB) DNS Discovery Protocol — A Zero-Probe, Cryptographically Verified Infrastructure Layer for AI Agents. Whitepaper v1.3.0." />
|
|
8
|
+
<meta name="robots" content="index, follow, noarchive, nosnippet, noimageindex" />
|
|
9
|
+
<link rel="canonical" href="https://webagentbridge.com/whitepaper" />
|
|
10
|
+
<meta property="og:title" content="WAB DNS Discovery Whitepaper" />
|
|
11
|
+
<meta property="og:description" content="Zero-probe, cryptographically verified discovery protocol for AI agents." />
|
|
12
|
+
<meta property="og:url" content="https://webagentbridge.com/whitepaper" />
|
|
13
|
+
<meta property="og:type" content="article" />
|
|
14
|
+
|
|
15
|
+
<!-- Anti-embedding / clickjacking defense -->
|
|
16
|
+
<meta http-equiv="X-Content-Type-Options" content="nosniff" />
|
|
17
|
+
<meta http-equiv="Referrer-Policy" content="strict-origin-when-cross-origin" />
|
|
18
|
+
<meta name="copyright" content="© 2026 Web Agent Bridge — All Rights Reserved" />
|
|
19
|
+
<meta name="rights" content="All Rights Reserved. Reproduction prohibited without written consent." />
|
|
20
|
+
|
|
21
|
+
<link rel="icon" type="image/svg+xml" href="/assets/logo.svg" />
|
|
22
|
+
<style>
|
|
23
|
+
/* === RESET / BASE === */
|
|
24
|
+
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
|
25
|
+
html, body {
|
|
26
|
+
background: #0b1020;
|
|
27
|
+
color: #e7ecf5;
|
|
28
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
|
29
|
+
line-height: 1.7;
|
|
30
|
+
min-height: 100vh;
|
|
31
|
+
overflow-x: hidden;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* === ANTI-COPY DEFENSE LAYER === */
|
|
35
|
+
/* Disable text selection across the document (best-effort browser deterrent) */
|
|
36
|
+
.wp-protect, .wp-protect * {
|
|
37
|
+
-webkit-user-select: none !important;
|
|
38
|
+
-moz-user-select: none !important;
|
|
39
|
+
-ms-user-select: none !important;
|
|
40
|
+
user-select: none !important;
|
|
41
|
+
-webkit-touch-callout: none !important;
|
|
42
|
+
-webkit-tap-highlight-color: transparent;
|
|
43
|
+
}
|
|
44
|
+
/* Block image dragging */
|
|
45
|
+
.wp-protect img { -webkit-user-drag: none; user-drag: none; pointer-events: none; }
|
|
46
|
+
|
|
47
|
+
/* === LAYOUT === */
|
|
48
|
+
.topbar {
|
|
49
|
+
position: sticky; top: 0; z-index: 50;
|
|
50
|
+
background: rgba(11, 16, 32, 0.92);
|
|
51
|
+
backdrop-filter: blur(10px);
|
|
52
|
+
border-bottom: 1px solid rgba(255,255,255,0.08);
|
|
53
|
+
padding: 14px 24px;
|
|
54
|
+
display: flex; align-items: center; justify-content: space-between;
|
|
55
|
+
}
|
|
56
|
+
.topbar a.brand { color: #4ea3ff; text-decoration: none; font-weight: 600; font-size: 1rem; }
|
|
57
|
+
.topbar .meta { font-size: 0.8rem; color: #8b96ad; }
|
|
58
|
+
.topbar .badge {
|
|
59
|
+
display: inline-block;
|
|
60
|
+
background: linear-gradient(135deg, #f97316, #ef4444);
|
|
61
|
+
color: white;
|
|
62
|
+
padding: 3px 10px;
|
|
63
|
+
border-radius: 999px;
|
|
64
|
+
font-size: 0.72rem;
|
|
65
|
+
font-weight: 600;
|
|
66
|
+
letter-spacing: 0.5px;
|
|
67
|
+
margin-left: 8px;
|
|
68
|
+
vertical-align: middle;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.container {
|
|
72
|
+
max-width: 820px;
|
|
73
|
+
margin: 0 auto;
|
|
74
|
+
padding: 48px 28px 96px;
|
|
75
|
+
position: relative;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/* === DIAGONAL WATERMARK === */
|
|
79
|
+
.watermark {
|
|
80
|
+
position: fixed;
|
|
81
|
+
top: 0; left: 0; right: 0; bottom: 0;
|
|
82
|
+
pointer-events: none;
|
|
83
|
+
z-index: 1;
|
|
84
|
+
opacity: 0.06;
|
|
85
|
+
background-image:
|
|
86
|
+
repeating-linear-gradient(
|
|
87
|
+
-45deg,
|
|
88
|
+
transparent 0,
|
|
89
|
+
transparent 180px,
|
|
90
|
+
rgba(78, 163, 255, 0.0) 180px,
|
|
91
|
+
rgba(78, 163, 255, 0.0) 200px
|
|
92
|
+
);
|
|
93
|
+
overflow: hidden;
|
|
94
|
+
}
|
|
95
|
+
.watermark::before {
|
|
96
|
+
content: "WEBAGENTBRIDGE.COM • © 2026 • CONFIDENTIAL READ-ONLY • WEBAGENTBRIDGE.COM • © 2026 • CONFIDENTIAL READ-ONLY • WEBAGENTBRIDGE.COM • © 2026";
|
|
97
|
+
position: absolute;
|
|
98
|
+
top: -50%; left: -50%; right: -50%; bottom: -50%;
|
|
99
|
+
transform: rotate(-30deg);
|
|
100
|
+
font-size: 28px;
|
|
101
|
+
font-weight: 700;
|
|
102
|
+
color: #4ea3ff;
|
|
103
|
+
white-space: pre-wrap;
|
|
104
|
+
word-spacing: 18px;
|
|
105
|
+
line-height: 220px;
|
|
106
|
+
letter-spacing: 4px;
|
|
107
|
+
text-align: center;
|
|
108
|
+
opacity: 0.65;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/* === CONTENT === */
|
|
112
|
+
.doc { position: relative; z-index: 2; }
|
|
113
|
+
h1 {
|
|
114
|
+
font-size: 2.1rem;
|
|
115
|
+
line-height: 1.3;
|
|
116
|
+
margin-bottom: 8px;
|
|
117
|
+
background: linear-gradient(135deg, #4ea3ff, #8b5cf6);
|
|
118
|
+
-webkit-background-clip: text;
|
|
119
|
+
background-clip: text;
|
|
120
|
+
-webkit-text-fill-color: transparent;
|
|
121
|
+
letter-spacing: -0.5px;
|
|
122
|
+
}
|
|
123
|
+
h2 {
|
|
124
|
+
font-size: 1.5rem;
|
|
125
|
+
margin: 36px 0 14px;
|
|
126
|
+
color: #ffffff;
|
|
127
|
+
border-left: 3px solid #4ea3ff;
|
|
128
|
+
padding-left: 12px;
|
|
129
|
+
}
|
|
130
|
+
h3 {
|
|
131
|
+
font-size: 1.15rem;
|
|
132
|
+
margin: 26px 0 10px;
|
|
133
|
+
color: #cdd6e3;
|
|
134
|
+
}
|
|
135
|
+
p { margin: 0 0 14px; color: #cdd6e3; }
|
|
136
|
+
ul, ol { margin: 0 0 16px 22px; color: #cdd6e3; }
|
|
137
|
+
li { margin-bottom: 6px; }
|
|
138
|
+
code, pre {
|
|
139
|
+
font-family: "JetBrains Mono", "SF Mono", Menlo, Consolas, monospace;
|
|
140
|
+
font-size: 0.88rem;
|
|
141
|
+
}
|
|
142
|
+
code {
|
|
143
|
+
background: rgba(78, 163, 255, 0.12);
|
|
144
|
+
color: #b8d4ff;
|
|
145
|
+
padding: 2px 6px;
|
|
146
|
+
border-radius: 4px;
|
|
147
|
+
}
|
|
148
|
+
pre {
|
|
149
|
+
background: #060914;
|
|
150
|
+
border: 1px solid rgba(255,255,255,0.08);
|
|
151
|
+
border-radius: 8px;
|
|
152
|
+
padding: 16px 18px;
|
|
153
|
+
overflow-x: auto;
|
|
154
|
+
margin: 12px 0 18px;
|
|
155
|
+
}
|
|
156
|
+
pre code { background: transparent; padding: 0; color: #b8d4ff; }
|
|
157
|
+
blockquote {
|
|
158
|
+
border-left: 3px solid #f97316;
|
|
159
|
+
background: rgba(249, 115, 22, 0.08);
|
|
160
|
+
padding: 14px 18px;
|
|
161
|
+
margin: 18px 0;
|
|
162
|
+
border-radius: 0 6px 6px 0;
|
|
163
|
+
font-size: 0.95rem;
|
|
164
|
+
}
|
|
165
|
+
table {
|
|
166
|
+
width: 100%; border-collapse: collapse;
|
|
167
|
+
margin: 14px 0;
|
|
168
|
+
background: rgba(255,255,255,0.02);
|
|
169
|
+
border-radius: 6px;
|
|
170
|
+
overflow: hidden;
|
|
171
|
+
}
|
|
172
|
+
th, td {
|
|
173
|
+
padding: 10px 14px;
|
|
174
|
+
text-align: left;
|
|
175
|
+
border-bottom: 1px solid rgba(255,255,255,0.06);
|
|
176
|
+
font-size: 0.92rem;
|
|
177
|
+
}
|
|
178
|
+
th { background: rgba(78,163,255,0.08); color: #ffffff; font-weight: 600; }
|
|
179
|
+
hr {
|
|
180
|
+
border: none;
|
|
181
|
+
height: 1px;
|
|
182
|
+
background: linear-gradient(90deg, transparent, rgba(255,255,255,0.15), transparent);
|
|
183
|
+
margin: 32px 0;
|
|
184
|
+
}
|
|
185
|
+
.lead-card {
|
|
186
|
+
background: linear-gradient(135deg, rgba(78,163,255,0.08), rgba(139,92,246,0.06));
|
|
187
|
+
border: 1px solid rgba(78,163,255,0.2);
|
|
188
|
+
border-radius: 12px;
|
|
189
|
+
padding: 22px 26px;
|
|
190
|
+
margin: 24px 0;
|
|
191
|
+
}
|
|
192
|
+
.lead-card .meta-grid {
|
|
193
|
+
display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
|
|
194
|
+
gap: 12px;
|
|
195
|
+
margin-top: 12px;
|
|
196
|
+
font-size: 0.86rem;
|
|
197
|
+
}
|
|
198
|
+
.lead-card .meta-grid div { color: #8b96ad; }
|
|
199
|
+
.lead-card .meta-grid b { color: #ffffff; }
|
|
200
|
+
.footnote {
|
|
201
|
+
margin-top: 48px;
|
|
202
|
+
padding-top: 24px;
|
|
203
|
+
border-top: 1px solid rgba(255,255,255,0.08);
|
|
204
|
+
font-size: 0.82rem;
|
|
205
|
+
color: #8b96ad;
|
|
206
|
+
text-align: center;
|
|
207
|
+
}
|
|
208
|
+
.footnote a { color: #4ea3ff; text-decoration: none; }
|
|
209
|
+
|
|
210
|
+
/* Print suppression */
|
|
211
|
+
@media print {
|
|
212
|
+
html, body { display: none !important; visibility: hidden !important; }
|
|
213
|
+
body::after {
|
|
214
|
+
content: "Printing of this document is not authorized. Visit https://webagentbridge.com/whitepaper to view.";
|
|
215
|
+
display: block !important;
|
|
216
|
+
visibility: visible !important;
|
|
217
|
+
position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%);
|
|
218
|
+
font-size: 18px; color: #000;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
</style>
|
|
222
|
+
</head>
|
|
223
|
+
<body class="wp-protect" oncontextmenu="return false;" oncopy="return false;" oncut="return false;" onpaste="return false;" ondragstart="return false;" onselectstart="return false;">
|
|
224
|
+
|
|
225
|
+
<div class="watermark" aria-hidden="true"></div>
|
|
226
|
+
|
|
227
|
+
<header class="topbar">
|
|
228
|
+
<a href="/" class="brand">← Web Agent Bridge</a>
|
|
229
|
+
<div class="meta">
|
|
230
|
+
Whitepaper v1.3.0 <span class="badge">READ-ONLY</span>
|
|
231
|
+
</div>
|
|
232
|
+
</header>
|
|
233
|
+
|
|
234
|
+
<main class="container">
|
|
235
|
+
<article class="doc" id="whitepaper">
|
|
236
|
+
|
|
237
|
+
<h1>Web Agent Bridge (WAB) DNS Discovery Protocol</h1>
|
|
238
|
+
<p style="font-size: 1.1rem; color: #cdd6e3; margin-top: 6px;">
|
|
239
|
+
A Zero-Probe, Cryptographically Verified Infrastructure Layer for AI Agents
|
|
240
|
+
</p>
|
|
241
|
+
|
|
242
|
+
<div class="lead-card">
|
|
243
|
+
<div><b>© 2026 Web Agent Bridge.</b> All Rights Reserved.</div>
|
|
244
|
+
<p style="margin: 8px 0 0; font-size: 0.9rem;">
|
|
245
|
+
This whitepaper is the intellectual property of the Web Agent Bridge project.
|
|
246
|
+
Reproduction, redistribution, or modification — in whole or in part — is <b>prohibited</b>
|
|
247
|
+
without prior written permission. The canonical, authoritative version is published at
|
|
248
|
+
<code>webagentbridge.com/whitepaper</code>.
|
|
249
|
+
</p>
|
|
250
|
+
<div class="meta-grid">
|
|
251
|
+
<div><b>Version</b><br>1.3.0</div>
|
|
252
|
+
<div><b>Status</b><br>Published</div>
|
|
253
|
+
<div><b>Date</b><br>May 2026</div>
|
|
254
|
+
<div><b>License</b><br>All Rights Reserved</div>
|
|
255
|
+
</div>
|
|
256
|
+
</div>
|
|
257
|
+
|
|
258
|
+
<h2>Abstract</h2>
|
|
259
|
+
<p>As artificial intelligence agents transition from isolated chatbots to autonomous web navigators, the absence of a standardized, machine-readable discovery mechanism creates significant friction. Agents currently rely on heuristic DOM scraping, trial-and-error HTTP probing, and reverse-engineered APIs, leading to excessive server load, brittle integrations, and privacy risks. This paper introduces the <b>Web Agent Bridge (WAB) DNS Discovery Protocol</b>, a lightweight, infrastructure-first mechanism that allows AI agents to instantly discover a domain's AI capabilities and cryptographic trust attestations without prior HTTP interaction. Modeled after email authentication standards like SPF, DKIM, and DMARC, the WAB DNS Discovery Protocol utilizes DNS TXT records resolved over DNS over HTTPS (DoH) to advertise protocol support and endpoint locations. Furthermore, we detail the <b>WAB Cryptographic Trust Layer (v1.3)</b>, which employs Ed25519 signatures to ensure the integrity and authenticity of the discovery document, mitigating man-in-the-middle attacks and establishing a robust foundation for autonomous agent-web interactions.</p>
|
|
260
|
+
|
|
261
|
+
<h2>1. Introduction</h2>
|
|
262
|
+
<p>The proliferation of Large Language Models (LLMs) and autonomous AI agents has fundamentally altered how digital information is accessed and processed. Unlike human users who rely on visual interfaces and HTML/CSS rendering, AI agents require structured, deterministic access to web capabilities. However, the current web architecture lacks a native discovery layer for machine-to-machine interactions.</p>
|
|
263
|
+
<p>Currently, agents attempting to interact with a website face a "blind fetch" problem. They must either parse complex HTML structures, guess API endpoints, or probe for well-known files (e.g., <code>/.well-known/ai-plugin.json</code>), often resulting in HTTP 404 errors, increased latency, and unnecessary server overhead. Furthermore, the rise of "cookie-wall taxes" and aggressive bot mitigation strategies disproportionately penalize legitimate, beneficial AI traffic.</p>
|
|
264
|
+
<p>To address these challenges, we propose the <b>Web Agent Bridge (WAB) DNS Discovery Protocol</b>. By shifting the discovery phase to the Domain Name System (DNS) infrastructure, WAB enables <b>zero-probe discovery</b>. Agents can resolve a single DNS record to ascertain AI readiness, locate the capabilities document (<code>wab.json</code>), and verify the cryptographic signature of the provider, all before initiating an HTTP connection.</p>
|
|
265
|
+
|
|
266
|
+
<h2>2. The WAB DNS Discovery Protocol (DDP)</h2>
|
|
267
|
+
<p>The DNS Discovery Protocol (DDP) is an infrastructure-layer mechanism that allows domains to advertise their WAB endpoint and trust parameters. It is designed to be highly cacheable, universally supported, and easily verifiable.</p>
|
|
268
|
+
|
|
269
|
+
<h3>2.1 Protocol Mechanics</h3>
|
|
270
|
+
<p>The core of the DDP is a DNS TXT record placed at the <code>_wab</code> subdomain of the apex domain (e.g., <code>_wab.example.com</code>). This approach mirrors established email authentication protocols such as the Sender Policy Framework (SPF) [1] and DomainKeys Identified Mail (DKIM) [2].</p>
|
|
271
|
+
<p>When an AI agent intends to interact with a domain, it MUST first query the <code>_wab.{apex}</code> TXT record. If the DNS query returns <code>NXDOMAIN</code>, the agent concludes that the domain does not explicitly support the WAB protocol and falls back to traditional, heuristic methods. If the record exists, the agent parses the key-value pairs to locate the discovery document.</p>
|
|
272
|
+
|
|
273
|
+
<h3>2.2 Record Format and Syntax</h3>
|
|
274
|
+
<p>The WAB TXT record utilizes a semicolon-separated key-value format. The primary fields are defined as follows:</p>
|
|
275
|
+
<table>
|
|
276
|
+
<thead>
|
|
277
|
+
<tr><th>Field</th><th>Value Type</th><th>Requirement</th><th>Description</th></tr>
|
|
278
|
+
</thead>
|
|
279
|
+
<tbody>
|
|
280
|
+
<tr><td><code>v</code></td><td>string</td><td>REQUIRED</td><td>Protocol version identifier. Current standard is <code>wab1</code>.</td></tr>
|
|
281
|
+
<tr><td><code>endpoint</code></td><td>URL</td><td>REQUIRED</td><td>The absolute HTTPS URL of the <code>wab.json</code> discovery document.</td></tr>
|
|
282
|
+
<tr><td><code>pk</code></td><td>string</td><td>OPTIONAL</td><td>The public key for cryptographic verification, prefixed with the algorithm (e.g., <code>ed25519:<base64></code>).</td></tr>
|
|
283
|
+
</tbody>
|
|
284
|
+
</table>
|
|
285
|
+
<p><b>Example TXT Record:</b></p>
|
|
286
|
+
<pre><code>_wab.example.com. 3600 IN TXT "v=wab1; endpoint=https://example.com/.well-known/wab.json; pk=ed25519:PkQ7aq1E3jvMI2oL0rvYtTgOplWd+USw26Y/D4JzPxo="</code></pre>
|
|
287
|
+
|
|
288
|
+
<h3>2.3 DNS over HTTPS (DoH) Requirement</h3>
|
|
289
|
+
<p>To prevent ISP-level interception, manipulation, and tracking of discovery queries, WAB-aware agents SHOULD resolve the <code>_wab</code> records using DNS over HTTPS (DoH) [3]. DoH encrypts the DNS query, shifting the trust boundary from the local network to a trusted DoH resolver (e.g., Cloudflare 1.1.1.1 or Google 8.8.8.8).</p>
|
|
290
|
+
|
|
291
|
+
<h2>3. The Discovery Document (<code>wab.json</code>)</h2>
|
|
292
|
+
<p>The discovery document, typically hosted at <code>/.well-known/wab.json</code>, is a structured JSON file that defines the domain's capabilities, permitted actions, and transport mechanisms.</p>
|
|
293
|
+
|
|
294
|
+
<h3>3.1 Schema Overview (v1.3)</h3>
|
|
295
|
+
<p>The <code>wab.json</code> schema is designed for extensibility and strict typing. Key components include:</p>
|
|
296
|
+
<ul>
|
|
297
|
+
<li><code>wab_version</code> — Specifies the schema version (e.g., <code>"1.3.0"</code>).</li>
|
|
298
|
+
<li><code>provider</code> — Metadata regarding the domain owner, including name, category, and URL.</li>
|
|
299
|
+
<li><code>capabilities</code> — Defines the permitted actions (<code>commands</code>) and granular access rights (<code>permissions</code>).</li>
|
|
300
|
+
<li><code>endpoints</code> — Specifies the API endpoints for agent interaction (e.g., <code>/api/wab/discover</code>, <code>/api/wab/ping</code>).</li>
|
|
301
|
+
<li><code>signature</code> — The cryptographic signature block (detailed in Section 4).</li>
|
|
302
|
+
</ul>
|
|
303
|
+
|
|
304
|
+
<h3>3.2 Action Definitions</h3>
|
|
305
|
+
<p>Actions (or commands) are explicitly defined within the <code>capabilities.commands</code> array. This eliminates the need for agents to infer functionality. Each command specifies its trigger mechanism (e.g., <code>api</code>, <code>navigate</code>), required parameters, and authentication prerequisites, providing a deterministic execution path.</p>
|
|
306
|
+
|
|
307
|
+
<h2>4. Cryptographic Trust Layer (v1.3)</h2>
|
|
308
|
+
<p>While DNS discovery provides routing, it does not inherently guarantee the integrity of the fetched <code>wab.json</code> document, especially if the HTTPS connection is compromised or misconfigured. To establish a robust chain of trust, WAB v1.3 introduces a <b>Cryptographic Trust Layer</b> based on Ed25519 signatures.</p>
|
|
309
|
+
|
|
310
|
+
<h3>4.1 Ed25519 Signatures</h3>
|
|
311
|
+
<p>Ed25519 [4] is a public-key signature system utilizing the Edwards-curve Digital Signature Algorithm (EdDSA). It was selected for WAB due to its high performance, small key size (32 bytes), and resilience against side-channel attacks.</p>
|
|
312
|
+
|
|
313
|
+
<h3>4.2 Signature Generation and Verification</h3>
|
|
314
|
+
<p>The trust layer operates through a deterministic canonicalization and signing process:</p>
|
|
315
|
+
<ol>
|
|
316
|
+
<li><b>Key Generation</b> — The domain owner generates an Ed25519 keypair. The private key is securely stored offline or within a secure enclave.</li>
|
|
317
|
+
<li><b>DNS Publication</b> — The public key is published in the <code>_wab</code> DNS TXT record using the <code>pk=</code> parameter (e.g., <code>pk=ed25519:<base64_public_key></code>).</li>
|
|
318
|
+
<li><b>Canonicalization</b> — Before signing, the <code>wab.json</code> document undergoes RFC 8785-style JSON canonicalization [5]. This process sorts object keys lexicographically, removes insignificant whitespace, and excludes the top-level <code>signature</code> field to ensure a consistent byte representation.</li>
|
|
319
|
+
<li><b>Signing</b> — The canonicalized JSON string is signed using the Ed25519 private key.</li>
|
|
320
|
+
<li><b>Manifest Embedding</b> — The resulting signature is embedded back into the <code>wab.json</code> document under the <code>signature</code> object.</li>
|
|
321
|
+
</ol>
|
|
322
|
+
<p><b>Signature Block Example:</b></p>
|
|
323
|
+
<pre><code>"signature": {
|
|
324
|
+
"algorithm": "ed25519",
|
|
325
|
+
"value": "base64_encoded_signature_string...",
|
|
326
|
+
"key_id": "pYu7X5PF/HoE2yDx",
|
|
327
|
+
"signed_at": "2026-05-02T10:00:00Z"
|
|
328
|
+
}</code></pre>
|
|
329
|
+
|
|
330
|
+
<h3>4.3 Agent Verification Flow</h3>
|
|
331
|
+
<p>Upon fetching the <code>wab.json</code> document, a WAB-compliant agent performs the following verification steps:</p>
|
|
332
|
+
<ol>
|
|
333
|
+
<li>Extracts the <code>pk</code> value from the previously resolved <code>_wab</code> DNS TXT record.</li>
|
|
334
|
+
<li>Extracts the <code>signature</code> object from the <code>wab.json</code> document.</li>
|
|
335
|
+
<li>Verifies that <code>signature.algorithm</code> is <code>ed25519</code>.</li>
|
|
336
|
+
<li>Canonicalizes the <code>wab.json</code> document (excluding the <code>signature</code> field).</li>
|
|
337
|
+
<li>Verifies the canonicalized string against the <code>signature.value</code> using the extracted public key.</li>
|
|
338
|
+
</ol>
|
|
339
|
+
<p>If the verification succeeds, the agent possesses cryptographic proof that the capabilities document was authorized by the entity controlling the domain's DNS records, effectively neutralizing unauthorized modifications.</p>
|
|
340
|
+
|
|
341
|
+
<h2>5. Implementation and Adoption</h2>
|
|
342
|
+
<p>The WAB protocol is designed for frictionless adoption by both site owners and agent developers.</p>
|
|
343
|
+
|
|
344
|
+
<h3>5.1 Zero-Code Infrastructure Onboarding</h3>
|
|
345
|
+
<p>Site owners can enable WAB discovery without deploying new code. By simply adding the <code>_wab</code> TXT record and hosting a static <code>wab.json</code> file, a domain becomes "Agent-Ready." This infrastructure-first approach lowers the barrier to entry compared to complex API integrations.</p>
|
|
346
|
+
|
|
347
|
+
<h3>5.2 The Proof Lab and Live Verification</h3>
|
|
348
|
+
<p>To facilitate adoption and ensure compliance, the Web Agent Bridge provides a <b>"Proof Lab."</b> This tool performs a live, end-to-end verification of the integration:</p>
|
|
349
|
+
<ol>
|
|
350
|
+
<li><b>DNS Resolution</b> — Verifies the presence and syntax of the <code>_wab</code> TXT record via DoH.</li>
|
|
351
|
+
<li><b>Document Fetch</b> — Retrieves and parses the <code>wab.json</code> file.</li>
|
|
352
|
+
<li><b>Agent Execution</b> — Simulates an agent flow by calling the defined endpoints (e.g., <code>/api/wab/discover</code>, <code>/api/wab/ping</code>) to confirm execution readiness (<code>execution_ok=true</code>).</li>
|
|
353
|
+
</ol>
|
|
354
|
+
|
|
355
|
+
<h2>6. Conclusion</h2>
|
|
356
|
+
<p>The Web Agent Bridge (WAB) DNS Discovery Protocol and its Cryptographic Trust Layer provide a critical missing piece in the architecture of the autonomous web. By leveraging proven DNS infrastructure and Ed25519 cryptography, WAB enables zero-probe, secure, and deterministic discovery of AI capabilities. This protocol reduces server overhead, enhances privacy through DoH, and establishes a verifiable chain of trust, paving the way for scalable and secure machine-to-machine interactions on the internet.</p>
|
|
357
|
+
|
|
358
|
+
<h2>References</h2>
|
|
359
|
+
<ol>
|
|
360
|
+
<li>S. Kitterman, <i>"Sender Policy Framework (SPF) for Authorizing Use of Domains in Email, Version 1,"</i> RFC 7208, April 2014.</li>
|
|
361
|
+
<li>D. Crocker, T. Hansen, and M. Kucherawy, <i>"DomainKeys Identified Mail (DKIM) Signatures,"</i> RFC 6376, September 2011.</li>
|
|
362
|
+
<li>P. Hoffman and P. McManus, <i>"DNS Queries over HTTPS (DoH),"</i> RFC 8484, October 2018.</li>
|
|
363
|
+
<li>S. Josefsson and I. Liusvaara, <i>"Edwards-Curve Digital Signature Algorithm (EdDSA),"</i> RFC 8032, January 2017.</li>
|
|
364
|
+
<li>A. Rundgren, B. Jordan, and S. Erdtman, <i>"JSON Canonicalization Scheme (JCS),"</i> RFC 8785, June 2020.</li>
|
|
365
|
+
</ol>
|
|
366
|
+
|
|
367
|
+
<hr />
|
|
368
|
+
|
|
369
|
+
<div class="footnote">
|
|
370
|
+
<p>This document is read-only reference material.<br>
|
|
371
|
+
The canonical version lives at <a href="https://webagentbridge.com/whitepaper">webagentbridge.com/whitepaper</a>.<br>
|
|
372
|
+
<b>All rights reserved © 2026 Web Agent Bridge.</b> Reproduction, redistribution, or modification — in whole or in part — is prohibited without prior written permission.</p>
|
|
373
|
+
</div>
|
|
374
|
+
|
|
375
|
+
</article>
|
|
376
|
+
</main>
|
|
377
|
+
|
|
378
|
+
<script>
|
|
379
|
+
/* === Anti-copy / anti-extraction defense ===
|
|
380
|
+
Browser-side defenses are deterrents; they cannot defeat a determined attacker.
|
|
381
|
+
Combined with server-side rights notice, this discourages casual copying. */
|
|
382
|
+
(function () {
|
|
383
|
+
var doc = document;
|
|
384
|
+
|
|
385
|
+
// Block context menu
|
|
386
|
+
doc.addEventListener('contextmenu', function (e) { e.preventDefault(); return false; }, { capture: true });
|
|
387
|
+
|
|
388
|
+
// Block copy / cut / paste / select-all
|
|
389
|
+
['copy', 'cut', 'paste'].forEach(function (evt) {
|
|
390
|
+
doc.addEventListener(evt, function (e) {
|
|
391
|
+
e.preventDefault();
|
|
392
|
+
if (e.clipboardData) {
|
|
393
|
+
try { e.clipboardData.setData('text/plain', '© Web Agent Bridge — copying this whitepaper is not permitted. See https://webagentbridge.com/whitepaper'); } catch (_) {}
|
|
394
|
+
}
|
|
395
|
+
return false;
|
|
396
|
+
}, { capture: true });
|
|
397
|
+
});
|
|
398
|
+
|
|
399
|
+
// Block drag and selection
|
|
400
|
+
doc.addEventListener('dragstart', function (e) { e.preventDefault(); return false; }, { capture: true });
|
|
401
|
+
doc.addEventListener('selectstart', function (e) { e.preventDefault(); return false; }, { capture: true });
|
|
402
|
+
|
|
403
|
+
// Block common keyboard shortcuts: Ctrl+C/X/A/S/P/U, F12, Ctrl+Shift+I/J/C, Cmd equivalents
|
|
404
|
+
doc.addEventListener('keydown', function (e) {
|
|
405
|
+
var k = (e.key || '').toLowerCase();
|
|
406
|
+
var meta = e.ctrlKey || e.metaKey;
|
|
407
|
+
if (e.key === 'F12') { e.preventDefault(); return false; }
|
|
408
|
+
if (meta && e.shiftKey && (k === 'i' || k === 'j' || k === 'c')) { e.preventDefault(); return false; }
|
|
409
|
+
if (meta && (k === 'c' || k === 'x' || k === 'a' || k === 's' || k === 'p' || k === 'u')) {
|
|
410
|
+
e.preventDefault();
|
|
411
|
+
return false;
|
|
412
|
+
}
|
|
413
|
+
}, { capture: true });
|
|
414
|
+
|
|
415
|
+
// Detect and discourage devtools (best effort — shows a notice; cannot truly block)
|
|
416
|
+
var devtoolsOpen = false;
|
|
417
|
+
var threshold = 160;
|
|
418
|
+
setInterval(function () {
|
|
419
|
+
var widthDelta = window.outerWidth - window.innerWidth;
|
|
420
|
+
var heightDelta = window.outerHeight - window.innerHeight;
|
|
421
|
+
if (widthDelta > threshold || heightDelta > threshold) {
|
|
422
|
+
if (!devtoolsOpen) {
|
|
423
|
+
devtoolsOpen = true;
|
|
424
|
+
console.clear && console.clear();
|
|
425
|
+
console.log('%c⚠ Web Agent Bridge — Read-Only Whitepaper',
|
|
426
|
+
'color:#f97316;font-size:18px;font-weight:bold;');
|
|
427
|
+
console.log('%cThis document is © 2026 Web Agent Bridge. Reproduction prohibited.\nSee https://webagentbridge.com/whitepaper for the canonical version.',
|
|
428
|
+
'color:#cdd6e3;font-size:12px;');
|
|
429
|
+
}
|
|
430
|
+
} else {
|
|
431
|
+
devtoolsOpen = false;
|
|
432
|
+
}
|
|
433
|
+
}, 1000);
|
|
434
|
+
|
|
435
|
+
// Block iframe embedding (frame-busting)
|
|
436
|
+
try {
|
|
437
|
+
if (window.top !== window.self) {
|
|
438
|
+
window.top.location = window.self.location;
|
|
439
|
+
}
|
|
440
|
+
} catch (_) {
|
|
441
|
+
document.body.innerHTML = '<p style="padding:40px;text-align:center;color:#fff;background:#0b1020;">This whitepaper cannot be embedded. Visit <a style="color:#4ea3ff" href="https://webagentbridge.com/whitepaper">webagentbridge.com/whitepaper</a>.</p>';
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
// Sign-of-life log
|
|
445
|
+
console.log('%cWAB Whitepaper v1.3.0 — Read-Only', 'color:#4ea3ff;font-weight:bold;');
|
|
446
|
+
})();
|
|
447
|
+
</script>
|
|
448
|
+
</body>
|
|
449
|
+
</html>
|