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
@@ -0,0 +1,172 @@
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 Provider Onboarding</title>
7
+ <meta name="description" content="Integrate WAB DNS Discovery into DNS providers and registrars with one-click enable/disable flow.">
8
+ <link rel="stylesheet" href="/css/styles.css?v=3.3.0">
9
+ <style>
10
+ body { background:#0a1222; color:#e6edf8; }
11
+ .hero { padding:110px 24px 40px; text-align:center; }
12
+ .hero h1 { font-size:clamp(1.9rem,4vw,3rem); margin-bottom:10px; }
13
+ .hero p { color:#9fb1d3; max-width:820px; margin:0 auto; line-height:1.7; }
14
+ .wrap { max-width:1100px; margin:0 auto; padding:0 20px 70px; }
15
+ .grid { display:grid; gap:14px; grid-template-columns:repeat(auto-fit,minmax(280px,1fr)); }
16
+ .card { background:linear-gradient(180deg,rgba(17,24,39,.9),rgba(12,18,31,.96)); border:1px solid rgba(148,163,184,.2); border-radius:14px; padding:16px; }
17
+ .card h3 { margin:0 0 8px; color:#fcd34d; }
18
+ .card p, .card li { color:#c7d2ea; line-height:1.65; font-size:.93rem; }
19
+ .card ul { margin:6px 0 0 20px; }
20
+ .badge { display:inline-block; margin:6px 0; padding:4px 9px; border-radius:999px; font-size:.73rem; font-weight:700; color:#fde68a; border:1px solid rgba(250,204,21,.45); background:rgba(250,204,21,.12); }
21
+ pre, code { font-family:Consolas, Menlo, Monaco, monospace; }
22
+ pre { background:#020617; border:1px solid rgba(148,163,184,.25); border-radius:10px; padding:11px; color:#c4b5fd; overflow:auto; font-size:.82rem; line-height:1.5; }
23
+ .actions { display:flex; flex-wrap:wrap; gap:10px; margin-top:12px; }
24
+ .actions a { text-decoration:none; }
25
+ .btn-mini { display:inline-block; padding:8px 12px; border-radius:9px; font-size:.83rem; font-weight:700; }
26
+ .btn-primary { background:linear-gradient(135deg,#f59e0b,#b45309); color:#fff; }
27
+ .btn-secondary { background:rgba(148,163,184,.16); border:1px solid rgba(148,163,184,.35); color:#e6edf8; }
28
+ </style>
29
+ </head>
30
+ <body>
31
+ <section class="hero">
32
+ <h1>Provider Onboarding: One-Click WAB DNS Discovery</h1>
33
+ <p>
34
+ Add WAB DNS Discovery to your DNS platform or registrar panel so domain owners can enable or disable AI discoverability
35
+ with a single toggle, just like SSL activation.
36
+ </p>
37
+ </section>
38
+
39
+ <div class="wrap">
40
+ <div class="grid">
41
+ <div class="card">
42
+ <h3>1) Fetch Protocol Manifest</h3>
43
+ <span class="badge">Machine contract</span>
44
+ <pre>GET /api/discovery/provider/manifest</pre>
45
+ <p>Use this endpoint to lock integration against a stable protocol definition.</p>
46
+ </div>
47
+
48
+ <div class="card">
49
+ <h3>2) Build TXT Record Template</h3>
50
+ <span class="badge">Per-domain payload</span>
51
+ <pre>GET /api/discovery/provider/record-template?domain=example.com</pre>
52
+ <p>Returns ready-to-write values for DNS API calls in your enable-toggle flow.</p>
53
+ </div>
54
+
55
+ <div class="card">
56
+ <h3>3) Verify Status</h3>
57
+ <span class="badge">UI state source</span>
58
+ <pre>GET /api/discovery/provider/status?domain=example.com</pre>
59
+ <p>Map status to your UI toggle badges:</p>
60
+ <ul>
61
+ <li>enabled: DNS + endpoint verified</li>
62
+ <li>partial: DNS found, endpoint issue</li>
63
+ <li>disabled: no valid TXT record</li>
64
+ </ul>
65
+ </div>
66
+
67
+ <div class="card">
68
+ <h3>4) Batch Verification + Callback</h3>
69
+ <span class="badge">Registrar dashboards</span>
70
+ <pre>POST /api/discovery/provider/verify-batch
71
+ {
72
+ "domains": ["example.com", "shop.example.com"],
73
+ "include_agent_run": false,
74
+ "callback_url": "https://provider.example/webhooks/wab",
75
+ "callback_secret": "shared-secret"
76
+ }</pre>
77
+ <p>
78
+ Optional callback pushes final result to your webhook endpoint with request id and optional HMAC signature.
79
+ </p>
80
+ </div>
81
+
82
+ <div class="card">
83
+ <h3>5) Webhook Signature Verification</h3>
84
+ <span class="badge">Security</span>
85
+ <p>
86
+ Verify the <code>x-wab-signature</code> header on your callback endpoint to confirm the request came from WAB.
87
+ The signature is <code>HMAC-SHA256(requestBody, callbackSecret)</code> encoded as hex.
88
+ </p>
89
+ <p><strong>Node.js</strong></p>
90
+ <pre>const crypto = require('crypto');
91
+
92
+ function verifyWabSignature(rawBody, receivedSig, secret) {
93
+ const expected = crypto
94
+ .createHmac('sha256', secret)
95
+ .update(rawBody) // raw Buffer or string
96
+ .digest('hex');
97
+ // constant-time compare to prevent timing attacks
98
+ return crypto.timingSafeEqual(
99
+ Buffer.from(expected, 'utf8'),
100
+ Buffer.from(receivedSig, 'utf8')
101
+ );
102
+ }
103
+
104
+ // Express example
105
+ app.post('/webhooks/wab', express.raw({ type: '*/*' }), (req, res) => {
106
+ const sig = req.headers['x-wab-signature'];
107
+ if (!verifyWabSignature(req.body, sig, process.env.WAB_CALLBACK_SECRET)) {
108
+ return res.status(401).send('Invalid signature');
109
+ }
110
+ const payload = JSON.parse(req.body.toString());
111
+ // … process payload
112
+ res.sendStatus(200);
113
+ });</pre>
114
+ <p><strong>Python (Flask)</strong></p>
115
+ <pre>import hmac, hashlib
116
+ from flask import Flask, request, abort
117
+
118
+ app = Flask(__name__)
119
+ WAB_SECRET = os.environ['WAB_CALLBACK_SECRET']
120
+
121
+ @app.route('/webhooks/wab', methods=['POST'])
122
+ def wab_webhook():
123
+ sig = request.headers.get('x-wab-signature', '')
124
+ expected = hmac.new(
125
+ WAB_SECRET.encode(), request.data, hashlib.sha256
126
+ ).hexdigest()
127
+ if not hmac.compare_digest(expected, sig):
128
+ abort(401)
129
+ payload = request.get_json(force=True)
130
+ # … process payload
131
+ return '', 200</pre>
132
+ </div>
133
+
134
+ <div class="card">
135
+ <h3>Enable/Disable Flow</h3>
136
+ <span class="badge">One-click UX</span>
137
+ <ul>
138
+ <li>Enable: write TXT, verify, show enabled</li>
139
+ <li>Disable: delete TXT, verify, show disabled</li>
140
+ <li>Retry verification until propagation converges</li>
141
+ </ul>
142
+ </div>
143
+
144
+ <div class="card">
145
+ <h3>Integration Endpoints</h3>
146
+ <pre>/api/discovery/provider/manifest
147
+ /api/discovery/provider/record-template
148
+ /api/discovery/provider/enable-plan
149
+ /api/discovery/provider/status
150
+ /api/discovery/provider/verify-batch</pre>
151
+ <div class="actions">
152
+ <a class="btn-mini btn-primary" href="/api/discovery/provider/manifest" target="_blank" rel="noopener">Open Manifest</a>
153
+ <a class="btn-mini btn-secondary" href="/api/discovery/provider/record-template?domain=webagentbridge.com" target="_blank" rel="noopener">Open Template Example</a>
154
+ <a class="btn-mini btn-secondary" href="/provider-sandbox">Open Provider Sandbox</a>
155
+ <a class="btn-mini btn-primary" href="/cloudflare-integration">Cloudflare One-Click</a>
156
+ <a class="btn-mini btn-primary" href="/cpanel-integration">cPanel One-Click</a>
157
+ <a class="btn-mini btn-primary" href="/route53-integration">Route 53 One-Click</a>
158
+ <a class="btn-mini btn-primary" href="/plesk-integration">Plesk One-Click</a>
159
+ <a class="btn-mini btn-primary" href="/gcp-dns-integration">Google Cloud DNS</a>
160
+ <a class="btn-mini btn-primary" href="/azure-dns-integration">Azure DNS One-Click</a>
161
+ <a class="btn-mini btn-primary" href="/registrar-integrations">GoDaddy / Namecheap CLI</a>
162
+ <a class="btn-mini btn-secondary" href="/adoption-metrics">Adoption Metrics</a>
163
+ <a class="btn-mini btn-primary" href="/wab-trust">Trust Layer (v1.3)</a>
164
+ <a class="btn-mini btn-secondary" href="/wab-vs-protocols">WAB vs Other Protocols</a>
165
+ <a class="btn-mini btn-secondary" href="/downloads/wab-dns-provider.postman_collection.json" target="_blank" rel="noopener">Download Postman Collection</a>
166
+ <a class="btn-mini btn-secondary" href="/dns">Open DNS Page</a>
167
+ </div>
168
+ </div>
169
+ </div>
170
+ </div>
171
+ </body>
172
+ </html>
@@ -0,0 +1,134 @@
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 Provider Sandbox</title>
7
+ <meta name="description" content="Interactive sandbox for DNS providers and registrars to test WAB DNS Discovery APIs.">
8
+ <link rel="stylesheet" href="/css/styles.css?v=3.3.0">
9
+ <style>
10
+ body { background:#081123; color:#e8efff; }
11
+ .hero { padding:100px 20px 30px; text-align:center; }
12
+ .hero h1 { font-size:clamp(1.8rem,4vw,2.8rem); margin-bottom:8px; }
13
+ .hero p { color:#9eb1d8; max-width:820px; margin:0 auto; }
14
+ .wrap { max-width:1100px; margin:0 auto; padding:0 18px 70px; }
15
+ .panel { background:linear-gradient(180deg,rgba(17,24,39,.92),rgba(10,16,30,.96)); border:1px solid rgba(148,163,184,.2); border-radius:14px; padding:14px; margin-bottom:14px; }
16
+ .panel h3 { margin:0 0 8px; color:#fcd34d; }
17
+ .row { display:grid; grid-template-columns:2fr 1fr; gap:10px; }
18
+ @media (max-width:760px) { .row { grid-template-columns:1fr; } }
19
+ label { display:block; font-size:.8rem; color:#a8b7d7; margin-bottom:5px; }
20
+ input, select, textarea { width:100%; background:#0b162a; border:1px solid rgba(148,163,184,.28); color:#e8efff; border-radius:10px; padding:10px; font-family:Consolas, monospace; font-size:.85rem; }
21
+ textarea { min-height:90px; }
22
+ .actions { display:flex; gap:8px; flex-wrap:wrap; margin-top:8px; }
23
+ button { background:linear-gradient(135deg,#f59e0b,#b45309); color:#fff; border:none; border-radius:10px; padding:9px 12px; cursor:pointer; font-weight:700; font-size:.82rem; }
24
+ button.alt { background:linear-gradient(135deg,#334155,#1f2937); }
25
+ pre { background:#020617; border:1px solid rgba(148,163,184,.26); border-radius:10px; padding:12px; color:#c4b5fd; overflow:auto; min-height:180px; }
26
+ .hint { color:#9eb1d8; font-size:.84rem; }
27
+ </style>
28
+ </head>
29
+ <body>
30
+ <section class="hero">
31
+ <h1>Provider Sandbox</h1>
32
+ <p>Run provider integration APIs end-to-end: manifest, record template, status, one-click plan, and batch verify.</p>
33
+ </section>
34
+
35
+ <div class="wrap">
36
+ <div class="panel">
37
+ <h3>Request Builder</h3>
38
+ <div class="row">
39
+ <div>
40
+ <label>Domain</label>
41
+ <input id="domain" value="webagentbridge.com" placeholder="example.com">
42
+ </div>
43
+ <div>
44
+ <label>Action</label>
45
+ <select id="action">
46
+ <option value="enable">enable</option>
47
+ <option value="disable">disable</option>
48
+ </select>
49
+ </div>
50
+ </div>
51
+ <div class="row" style="margin-top:8px;">
52
+ <div>
53
+ <label>Batch Domains (comma separated)</label>
54
+ <input id="batchDomains" value="webagentbridge.com, example.com">
55
+ </div>
56
+ <div>
57
+ <label>Include Agent Run</label>
58
+ <select id="includeAgentRun">
59
+ <option value="false" selected>false</option>
60
+ <option value="true">true</option>
61
+ </select>
62
+ </div>
63
+ </div>
64
+ <div class="actions">
65
+ <button onclick="runManifest()">Manifest</button>
66
+ <button onclick="runTemplate()">Record Template</button>
67
+ <button onclick="runStatus()">Status</button>
68
+ <button onclick="runPlan()">Enable/Disable Plan</button>
69
+ <button onclick="runBatch()">Verify Batch</button>
70
+ <button class="alt" onclick="clearOut()">Clear</button>
71
+ </div>
72
+ <p class="hint">Tip: use this page during provider integration QA before shipping one-click toggle in production.</p>
73
+ </div>
74
+
75
+ <div class="panel">
76
+ <h3>Response</h3>
77
+ <pre id="out">{}</pre>
78
+ </div>
79
+ </div>
80
+
81
+ <script>
82
+ async function call(url, opts) {
83
+ const out = document.getElementById('out');
84
+ out.textContent = 'Loading ' + url + ' ...';
85
+ try {
86
+ const res = await fetch(url, opts || {});
87
+ const data = await res.json().catch(() => ({}));
88
+ out.textContent = JSON.stringify({ http_status: res.status, data: data }, null, 2);
89
+ } catch (err) {
90
+ out.textContent = JSON.stringify({ error: String(err) }, null, 2);
91
+ }
92
+ }
93
+
94
+ function getDomain() {
95
+ return (document.getElementById('domain').value || '').trim();
96
+ }
97
+
98
+ function runManifest() {
99
+ call('/api/discovery/provider/manifest');
100
+ }
101
+
102
+ function runTemplate() {
103
+ const d = getDomain();
104
+ call('/api/discovery/provider/record-template?domain=' + encodeURIComponent(d));
105
+ }
106
+
107
+ function runStatus() {
108
+ const d = getDomain();
109
+ call('/api/discovery/provider/status?domain=' + encodeURIComponent(d));
110
+ }
111
+
112
+ function runPlan() {
113
+ const d = getDomain();
114
+ const action = document.getElementById('action').value;
115
+ call('/api/discovery/provider/enable-plan?domain=' + encodeURIComponent(d) + '&action=' + encodeURIComponent(action));
116
+ }
117
+
118
+ function runBatch() {
119
+ const raw = (document.getElementById('batchDomains').value || '');
120
+ const domains = raw.split(',').map((s) => s.trim()).filter(Boolean);
121
+ const includeAgentRun = document.getElementById('includeAgentRun').value === 'true';
122
+ call('/api/discovery/provider/verify-batch', {
123
+ method: 'POST',
124
+ headers: { 'content-type': 'application/json', accept: 'application/json' },
125
+ body: JSON.stringify({ domains: domains, include_agent_run: includeAgentRun })
126
+ });
127
+ }
128
+
129
+ function clearOut() {
130
+ document.getElementById('out').textContent = '{}';
131
+ }
132
+ </script>
133
+ </body>
134
+ </html>