web-agent-bridge 3.4.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.
- package/LICENSE +84 -84
- package/README.ar.md +1563 -1304
- package/README.md +137 -298
- package/bin/agent-runner.js +474 -474
- package/bin/cli.js +237 -237
- package/bin/wab-init.js +244 -223
- package/bin/wab.js +80 -80
- package/examples/azure-dns-wab.js +83 -83
- package/examples/bidi-agent.js +119 -119
- package/examples/cloudflare-wab-dns.js +121 -121
- package/examples/cpanel-wab-dns.js +114 -114
- package/examples/cross-site-agent.js +91 -91
- package/examples/dns-discovery-agent.js +166 -166
- package/examples/gcp-dns-wab.js +76 -76
- package/examples/governance-agent.js +169 -169
- package/examples/mcp-agent.js +94 -94
- package/examples/next-app-router/README.md +44 -44
- package/examples/plesk-wab-dns.js +103 -103
- package/examples/puppeteer-agent.js +108 -108
- package/examples/route53-wab-dns.js +144 -144
- package/examples/saas-dashboard/README.md +55 -55
- package/examples/safe-mode-agent.js +96 -96
- package/examples/self-discovery.js +106 -0
- package/examples/shopify-hydrogen/README.md +74 -74
- package/examples/vision-agent.js +171 -171
- package/examples/wab-sign.js +74 -74
- package/examples/wab-verify.js +60 -60
- package/examples/wordpress-elementor/README.md +77 -77
- package/package.json +93 -93
- package/public/.well-known/agent-tools.json +180 -180
- package/public/.well-known/ai-assets.json +59 -59
- package/public/.well-known/security.txt +8 -8
- package/public/.well-known/wab.json +28 -28
- package/public/activate.html +448 -368
- package/public/adopt.html +236 -0
- package/public/adoption-metrics.html +188 -188
- package/public/agent-workspace.html +359 -349
- package/public/ai.html +198 -198
- package/public/api.html +397 -413
- package/public/azure-dns-integration.html +289 -289
- package/public/browser.html +486 -486
- package/public/cloudflare-integration.html +380 -380
- package/public/commander-dashboard.html +243 -243
- package/public/cookies.html +210 -210
- package/public/cpanel-integration.html +398 -398
- package/public/css/agent-workspace.css +1713 -1713
- package/public/css/premium.css +317 -317
- package/public/css/styles.css +1401 -1263
- package/public/dashboard-shieldlink.html +295 -0
- package/public/dashboard.html +711 -707
- package/public/dns.html +436 -436
- package/public/docs.html +588 -588
- package/public/enterprise-mesh.ar.html +80 -0
- package/public/enterprise-mesh.html +81 -0
- package/public/feed.xml +89 -89
- package/public/gcp-dns-integration.html +318 -318
- package/public/governance.ar.html +70 -0
- package/public/governance.html +69 -0
- package/public/growth.html +465 -465
- package/public/index.html +1372 -1266
- package/public/integrations.html +556 -556
- package/public/js/activate.js +449 -145
- package/public/js/agent-workspace.js +1740 -1740
- package/public/js/auth-nav.js +117 -65
- package/public/js/auth-redirect.js +12 -12
- package/public/js/cookie-consent.js +56 -56
- package/public/js/dns.js +438 -438
- package/public/js/wab-demo-page.js +721 -721
- package/public/js/ws-client.js +74 -74
- package/public/l-preview.html +242 -0
- package/public/llms-full.txt +360 -360
- package/public/llms.txt +125 -125
- package/public/login.html +85 -85
- package/public/mesh-dashboard.html +328 -328
- package/public/milestones.html +346 -0
- package/public/one-click.html +779 -0
- package/public/openapi.json +669 -669
- package/public/partners.ar.html +145 -0
- package/public/partners.html +143 -0
- package/public/phone-shield.html +281 -281
- package/public/plesk-integration.html +375 -375
- package/public/premium-dashboard.html +2489 -2489
- package/public/premium.html +793 -793
- package/public/privacy.html +297 -297
- package/public/provider-onboarding.html +172 -172
- package/public/provider-sandbox.html +134 -134
- package/public/providers.html +359 -359
- package/public/refusals.html +172 -0
- package/public/register.html +105 -105
- package/public/registrar-integrations.html +141 -141
- package/public/ring4.html +292 -0
- package/public/robots.txt +99 -99
- package/public/route53-integration.html +531 -531
- package/public/score.html +263 -0
- package/public/script/wab-consent.d.ts +36 -36
- package/public/script/wab-consent.js +104 -104
- package/public/script/wab-schema.js +131 -131
- package/public/script/wab.d.ts +108 -108
- package/public/script/wab.min.js +580 -580
- package/public/security.txt +8 -8
- package/public/shieldlink.html +244 -0
- package/public/shieldqr.html +231 -231
- package/public/sitemap.xml +13 -1
- package/public/terms.html +256 -256
- package/public/trust-graph-api.ar.html +92 -0
- package/public/trust-graph-api.html +91 -0
- package/public/wab-features.html +560 -0
- package/public/wab-trust.html +200 -200
- package/public/wab-truth.html +375 -0
- package/public/wab-vs-protocols.html +210 -210
- package/public/whitepaper.html +449 -449
- package/script/ai-agent-bridge.js +1754 -1754
- package/sdk/README.md +99 -99
- package/sdk/agent-mesh.js +449 -449
- package/sdk/auto-discovery.js +301 -288
- package/sdk/commander.js +262 -262
- package/sdk/governance.js +262 -262
- package/sdk/index.d.ts +464 -464
- package/sdk/index.js +649 -649
- package/sdk/multi-agent.js +318 -318
- package/sdk/safe-mode.js +221 -221
- package/sdk/safety-shield.js +219 -219
- package/sdk/schema-discovery.js +83 -83
- package/server/adapters/index.js +520 -520
- package/server/config/plans.js +412 -367
- package/server/config/secrets.js +102 -102
- package/server/control-plane/index.js +301 -301
- package/server/data-plane/index.js +354 -354
- package/server/index.js +790 -670
- package/server/llm/index.js +404 -404
- package/server/middleware/adminAuth.js +35 -35
- package/server/middleware/api-tier.js +170 -0
- package/server/middleware/auth.js +50 -50
- package/server/middleware/featureGate.js +88 -88
- package/server/middleware/rateLimits.js +100 -100
- package/server/middleware/sensitiveAction.js +157 -157
- package/server/middleware/wab-trust.js +141 -0
- package/server/migrations/001_add_analytics_indexes.sql +7 -7
- package/server/migrations/002_premium_features.sql +418 -418
- package/server/migrations/003_ads_integer_cents.sql +33 -33
- package/server/migrations/004_agent_os.sql +158 -158
- package/server/migrations/005_marketplace_metering.sql +126 -126
- package/server/migrations/006_growth_suite.sql +138 -0
- package/server/migrations/007_governance.sql +106 -106
- package/server/migrations/008_plans.sql +144 -144
- package/server/migrations/009_shieldqr.sql +30 -30
- package/server/migrations/010_extended_trust.sql +33 -33
- package/server/migrations/011_outreach.sql +47 -0
- package/server/migrations/012_shieldlink.sql +116 -0
- package/server/migrations/013_ct_monitor.sql +13 -0
- package/server/migrations/014_wab_advanced_features.sql +128 -0
- package/server/migrations/015_wab_truth_layer.sql +101 -0
- package/server/migrations/016_ring4_external_trust.sql +84 -0
- package/server/migrations/017_ring4_extensions.sql +69 -0
- package/server/migrations/018_commercial_foundations.sql +167 -0
- package/server/migrations/019_unify_tier_constraints.sql +133 -0
- package/server/models/adapters/index.js +33 -33
- package/server/models/adapters/mysql.js +183 -183
- package/server/models/adapters/postgresql.js +172 -172
- package/server/models/adapters/sqlite.js +7 -7
- package/server/models/db.js +740 -740
- package/server/observability/failure-analysis.js +337 -337
- package/server/observability/index.js +394 -394
- package/server/protocol/capabilities.js +223 -223
- package/server/protocol/index.js +243 -243
- package/server/protocol/schema.js +584 -584
- package/server/registry/certification.js +271 -271
- package/server/registry/index.js +326 -326
- package/server/routes/activate.js +478 -0
- package/server/routes/admin-outreach.js +239 -0
- package/server/routes/admin-plans.js +76 -76
- package/server/routes/admin-premium.js +674 -673
- package/server/routes/admin-shieldlink.js +137 -0
- package/server/routes/admin-shieldqr.js +90 -90
- package/server/routes/admin-trust-monitor.js +139 -83
- package/server/routes/admin.js +550 -549
- package/server/routes/adopt.js +61 -0
- package/server/routes/ads.js +130 -130
- package/server/routes/agent-workspace.js +540 -540
- package/server/routes/api-keys.js +127 -0
- package/server/routes/api.js +150 -150
- package/server/routes/auth.js +71 -71
- package/server/routes/billing.js +57 -57
- package/server/routes/commander.js +316 -316
- package/server/routes/customer-shieldlink.js +133 -0
- package/server/routes/demo-showcase.js +332 -332
- package/server/routes/demo-store.js +154 -154
- package/server/routes/diagnose.js +373 -0
- package/server/routes/discovery.js +2348 -2348
- package/server/routes/enterprise-mesh.js +170 -0
- package/server/routes/gateway.js +173 -173
- package/server/routes/governance-saas.js +203 -0
- package/server/routes/governance.js +208 -208
- package/server/routes/growth.js +1048 -0
- package/server/routes/intent.js +328 -0
- package/server/routes/license.js +251 -251
- package/server/routes/mesh.js +469 -469
- package/server/routes/noscript.js +543 -543
- package/server/routes/partners.js +201 -0
- package/server/routes/plans.js +33 -33
- package/server/routes/premium-v2.js +686 -686
- package/server/routes/premium.js +724 -724
- package/server/routes/providers.js +650 -650
- package/server/routes/reputation.js +411 -0
- package/server/routes/ring4.js +885 -0
- package/server/routes/runtime.js +2148 -2148
- package/server/routes/shieldlink.js +70 -0
- package/server/routes/shieldqr.js +88 -88
- package/server/routes/sovereign.js +465 -465
- package/server/routes/truth-layer.js +670 -0
- package/server/routes/universal.js +200 -200
- package/server/routes/unsubscribe.js +51 -0
- package/server/routes/wab-api.js +850 -850
- package/server/routes/wab-cache.js +282 -0
- package/server/runtime/container-worker.js +111 -111
- package/server/runtime/container.js +448 -448
- package/server/runtime/distributed-worker.js +362 -362
- package/server/runtime/event-bus.js +210 -210
- package/server/runtime/index.js +253 -253
- package/server/runtime/queue.js +599 -599
- package/server/runtime/replay.js +666 -666
- package/server/runtime/sandbox.js +266 -266
- package/server/runtime/scheduler.js +534 -534
- package/server/runtime/session-engine.js +293 -293
- package/server/runtime/state-manager.js +188 -188
- package/server/secrets/wab-signing-key.pem +3 -0
- package/server/secrets/wab-signing-pub.pem +3 -0
- package/server/security/cross-site-redactor.js +196 -196
- package/server/security/dry-run.js +180 -180
- package/server/security/human-gate-rate-limit.js +147 -147
- package/server/security/human-gate-transports.js +178 -178
- package/server/security/human-gate.js +281 -281
- package/server/security/index.js +368 -368
- package/server/security/intent-engine.js +245 -245
- package/server/security/reward-guard.js +171 -171
- package/server/security/rollback-store.js +239 -239
- package/server/security/token-scope.js +404 -404
- package/server/security/url-policy.js +139 -139
- package/server/services/adoption-agent.js +182 -0
- package/server/services/agent-chat.js +506 -506
- package/server/services/agent-learning.js +601 -601
- package/server/services/agent-memory.js +625 -625
- package/server/services/agent-mesh.js +555 -555
- package/server/services/agent-symphony.js +717 -717
- package/server/services/agent-tasks.js +1807 -1807
- package/server/services/api-key-engine.js +292 -292
- package/server/services/cluster.js +894 -894
- package/server/services/commander.js +738 -738
- package/server/services/edge-compute.js +440 -440
- package/server/services/email.js +233 -233
- package/server/services/fairness-engine.js +409 -0
- package/server/services/fairness.js +420 -0
- package/server/services/governance.js +466 -466
- package/server/services/hosted-runtime.js +205 -205
- package/server/services/lfd.js +635 -635
- package/server/services/local-ai.js +389 -389
- package/server/services/marketplace.js +270 -270
- package/server/services/metering.js +182 -182
- package/server/services/modules/affiliate-intelligence.js +93 -93
- package/server/services/modules/agent-firewall.js +90 -90
- package/server/services/modules/bounty.js +89 -89
- package/server/services/modules/collective-bargaining.js +92 -92
- package/server/services/modules/dark-pattern.js +66 -66
- package/server/services/modules/gov-intelligence.js +45 -45
- package/server/services/modules/neural.js +55 -55
- package/server/services/modules/notary.js +49 -49
- package/server/services/modules/price-time-machine.js +86 -86
- package/server/services/modules/protocol.js +104 -104
- package/server/services/negotiation.js +439 -439
- package/server/services/outreach-agent.js +312 -0
- package/server/services/plans.js +214 -214
- package/server/services/plugins.js +771 -771
- package/server/services/price-intelligence.js +566 -566
- package/server/services/price-shield.js +1137 -1137
- package/server/services/provider-clients.js +740 -740
- package/server/services/reputation.js +465 -465
- package/server/services/search-engine.js +357 -357
- package/server/services/security.js +513 -513
- package/server/services/self-healing.js +843 -843
- package/server/services/shieldlink.js +492 -0
- package/server/services/shieldqr.js +322 -322
- package/server/services/sovereign-shield.js +542 -542
- package/server/services/ssl-ct-monitor.js +224 -0
- package/server/services/ssl-inspector.js +42 -42
- package/server/services/ssl-monitor.js +167 -167
- package/server/services/stripe.js +206 -205
- package/server/services/swarm.js +788 -788
- package/server/services/universal-scraper.js +662 -662
- package/server/services/verification.js +481 -481
- package/server/services/vision.js +1163 -1163
- package/server/services/wab-crypto.js +178 -178
- package/server/utils/cache.js +125 -125
- package/server/utils/migrate.js +81 -81
- package/server/utils/safe-fetch.js +228 -228
- package/server/utils/secureFields.js +50 -50
- package/server/ws.js +161 -161
- package/templates/artisan-marketplace.yaml +104 -104
- package/templates/book-price-scout.yaml +98 -98
- package/templates/electronics-price-tracker.yaml +108 -108
- package/templates/flight-deal-hunter.yaml +113 -113
- package/templates/freelancer-direct.yaml +116 -116
- package/templates/grocery-price-compare.yaml +93 -93
- package/templates/hotel-direct-booking.yaml +113 -113
- package/templates/local-services.yaml +98 -98
- package/templates/olive-oil-tunisia.yaml +88 -88
- package/templates/organic-farm-fresh.yaml +101 -101
- package/templates/restaurant-direct.yaml +97 -97
- package/templates/ring4/banking-sovereign.yaml +55 -0
- package/templates/ring4/ecommerce-sovereign.yaml +58 -0
- package/templates/ring4/healthcare-sovereign.yaml +60 -0
|
@@ -1,144 +1,144 @@
|
|
|
1
|
-
-- Migration 008: Plans Management
|
|
2
|
-
-- Database-driven plans + feature catalog so admins can add/edit plans,
|
|
3
|
-
-- toggle which features each plan includes, and have changes flow live to
|
|
4
|
-
-- the landing page pricing section AND the Stripe checkout flow.
|
|
5
|
-
--
|
|
6
|
-
-- Backwards-compatible: legacy code paths that look up tiers by slug
|
|
7
|
-
-- ('free' | 'starter' | 'pro' | 'enterprise') keep working — those slugs
|
|
8
|
-
-- are seeded as plan ids below.
|
|
9
|
-
--
|
|
10
|
-
-- An older `plans` table (different schema: tier/price/etc.) may exist from
|
|
11
|
-
-- a previous admin dashboard iteration. Its rows are pure default seeds with
|
|
12
|
-
-- no FK references, so we drop it and recreate with the new schema.
|
|
13
|
-
|
|
14
|
-
DROP TABLE IF EXISTS plans;
|
|
15
|
-
|
|
16
|
-
CREATE TABLE plans (
|
|
17
|
-
id TEXT PRIMARY KEY, -- slug, lowercase, e.g. 'free' / 'pro' / 'business' / 'enterprise'
|
|
18
|
-
name TEXT NOT NULL,
|
|
19
|
-
tagline TEXT,
|
|
20
|
-
description TEXT,
|
|
21
|
-
price_cents INTEGER NOT NULL DEFAULT 0,
|
|
22
|
-
currency TEXT NOT NULL DEFAULT 'EUR',
|
|
23
|
-
billing_period TEXT NOT NULL DEFAULT 'month'
|
|
24
|
-
CHECK(billing_period IN ('month','year','one_time','custom')),
|
|
25
|
-
stripe_price_id TEXT,
|
|
26
|
-
cta_type TEXT NOT NULL DEFAULT 'checkout'
|
|
27
|
-
CHECK(cta_type IN ('checkout','register','contact','external')),
|
|
28
|
-
cta_label TEXT,
|
|
29
|
-
cta_url TEXT,
|
|
30
|
-
highlight INTEGER NOT NULL DEFAULT 0,
|
|
31
|
-
is_public INTEGER NOT NULL DEFAULT 1,
|
|
32
|
-
is_archived INTEGER NOT NULL DEFAULT 0,
|
|
33
|
-
sort_order INTEGER NOT NULL DEFAULT 100,
|
|
34
|
-
features_json TEXT NOT NULL DEFAULT '{}',
|
|
35
|
-
limits_json TEXT NOT NULL DEFAULT '{}',
|
|
36
|
-
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
37
|
-
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
38
|
-
);
|
|
39
|
-
|
|
40
|
-
CREATE INDEX IF NOT EXISTS idx_plans_public_archived ON plans(is_public, is_archived, sort_order);
|
|
41
|
-
|
|
42
|
-
CREATE TABLE IF NOT EXISTS feature_catalog (
|
|
43
|
-
feature_key TEXT PRIMARY KEY,
|
|
44
|
-
label TEXT NOT NULL,
|
|
45
|
-
description TEXT,
|
|
46
|
-
category TEXT NOT NULL DEFAULT 'general',
|
|
47
|
-
is_open_source INTEGER NOT NULL DEFAULT 0,
|
|
48
|
-
sort_order INTEGER NOT NULL DEFAULT 100,
|
|
49
|
-
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
50
|
-
);
|
|
51
|
-
|
|
52
|
-
-- Feature catalog (open-source / always-free first, then paid features)
|
|
53
|
-
INSERT OR IGNORE INTO feature_catalog (feature_key, label, description, category, is_open_source, sort_order) VALUES
|
|
54
|
-
-- Always-free / open core
|
|
55
|
-
('protocol', 'WAP Protocol Core', 'Open Web Agent Protocol — schema, discovery, permissions', 'core', 1, 10),
|
|
56
|
-
('sdk', 'SDK & Client Runtime', 'JavaScript SDK and client integrations', 'core', 1, 20),
|
|
57
|
-
('browserExecution', 'Browser Execution Layer', 'Basic browser automation primitives', 'core', 1, 30),
|
|
58
|
-
('adapters', 'MCP / REST / Browser Adapters','Adapters for MCP, REST APIs, and browser back-ends', 'core', 1, 40),
|
|
59
|
-
('registryRead', 'Public Registry (read-only)', 'Browse commands, sites and templates', 'core', 1, 50),
|
|
60
|
-
('agentRegistration', 'Agent Registration', 'Register agents and obtain credentials', 'core', 1, 60),
|
|
61
|
-
('basicAuth', 'Basic Authentication', 'API keys and basic auth flows', 'core', 1, 70),
|
|
62
|
-
('discovery', 'DNS / .well-known Discovery', 'Service discovery via DNS TXT and /.well-known/', 'core', 1, 80),
|
|
63
|
-
('capabilityNegotiation', 'Capability Negotiation', 'Capability handshake between agent and site', 'core', 1, 90),
|
|
64
|
-
('semanticActions', 'Semantic Actions', 'Built-in semantic actions catalog', 'core', 1,100),
|
|
65
|
-
('communityTemplates', 'Community Templates', 'Public template library', 'core', 1,110),
|
|
66
|
-
|
|
67
|
-
-- Workspace / orchestration
|
|
68
|
-
('workspace', 'Control Plane / Workspace', 'Web dashboard, monitoring and agent management', 'workspace', 0,200),
|
|
69
|
-
('advancedOrchestration', 'Advanced Orchestration', 'Scheduling, retries, pipelines, distributed execution', 'workspace', 0,210),
|
|
70
|
-
('observability', 'Observability', 'Tracing, metrics, logs and performance insights', 'workspace', 0,220),
|
|
71
|
-
('failureAnalysis', 'Failure Analysis', 'Debugging tools and root-cause reports', 'workspace', 0,230),
|
|
72
|
-
('replayEngine', 'Replay Engine', 'Record and replay agent runs', 'workspace', 0,240),
|
|
73
|
-
('advancedAnalytics', 'Advanced Analytics', 'Detailed analytics dashboards and exports', 'workspace', 0,250),
|
|
74
|
-
('dataExtraction', 'Data Extraction', 'Structured data extraction and export', 'workspace', 0,260),
|
|
75
|
-
('agentMemory', 'Agent Memory Engine', 'Persistent context and long-term memory for agents', 'workspace', 0,270),
|
|
76
|
-
('llmInference', 'LLM Inference', 'Built-in LLM inference via the platform', 'workspace', 0,280),
|
|
77
|
-
|
|
78
|
-
-- Premium / business
|
|
79
|
-
('hostedRuntime', 'Hosted Runtime (Cloud Exec)', 'Auto-scaling hosted execution environment', 'premium', 0,300),
|
|
80
|
-
('marketplace', 'Marketplace (Publish & Sell)','Publish agents and templates on the marketplace', 'premium', 0,310),
|
|
81
|
-
('certification', 'Agent Certification', 'Verified agent identity badge', 'premium', 0,320),
|
|
82
|
-
('trafficIntelligence', 'Traffic Intelligence', 'Agent profiling, anomaly detection and reporting', 'premium', 0,330),
|
|
83
|
-
('exploitShield', 'Exploit Shield', 'Block malicious agents at the edge', 'premium', 0,340),
|
|
84
|
-
('visionAnalysis', 'Vision Analysis', 'Visual page inspection (computer-vision pipeline)', 'premium', 0,350),
|
|
85
|
-
('swarmExecution', 'Swarm / Multi-Agent', 'Coordinated multi-agent (swarm) execution', 'premium', 0,360),
|
|
86
|
-
('auditLog', 'Audit Logs', 'Tamper-evident HMAC-chained audit history', 'premium', 0,370),
|
|
87
|
-
('customDomain', 'Custom Domain / White-label', 'Serve the workspace on your own domain', 'premium', 0,380),
|
|
88
|
-
('governanceLayer', 'Agent Governance Layer', 'Policies, approvals, kill switch and spend limits', 'premium', 0,390),
|
|
89
|
-
|
|
90
|
-
-- Enterprise
|
|
91
|
-
('enterpriseSecurity', 'Enterprise Security', 'Request signing, IP allowlists, SSO/SAML', 'enterprise', 0,400),
|
|
92
|
-
('prioritySupport', 'Priority Support', 'Dedicated SLA-backed support channel', 'enterprise', 0,410),
|
|
93
|
-
('sla', 'Uptime SLA', 'Contractual uptime SLA', 'enterprise', 0,420),
|
|
94
|
-
('customDevelopment', 'Custom Development', 'Bespoke engineering and integrations', 'enterprise', 0,430),
|
|
95
|
-
('dedicatedInfra', 'Dedicated Infrastructure', 'Isolated single-tenant deployment', 'enterprise', 0,440);
|
|
96
|
-
|
|
97
|
-
-- Seed the four canonical plans (admin can edit/add later).
|
|
98
|
-
-- features_json keys MUST match feature_catalog.feature_key.
|
|
99
|
-
INSERT OR IGNORE INTO plans
|
|
100
|
-
(id, name, tagline, description, price_cents, currency, billing_period, cta_type, cta_label, cta_url, highlight, sort_order, features_json, limits_json)
|
|
101
|
-
VALUES
|
|
102
|
-
('free',
|
|
103
|
-
'Free',
|
|
104
|
-
'Open-source core, forever free',
|
|
105
|
-
'WAP protocol, SDK, discovery and the entire open-source surface — for developers and integrators.',
|
|
106
|
-
0, 'EUR', 'month',
|
|
107
|
-
'register', 'Get started for free', '/register',
|
|
108
|
-
0, 10,
|
|
109
|
-
'{"protocol":true,"sdk":true,"browserExecution":true,"adapters":true,"registryRead":true,"agentRegistration":true,"basicAuth":true,"discovery":true,"capabilityNegotiation":true,"semanticActions":true,"communityTemplates":true}',
|
|
110
|
-
'{"agents":3,"tasksPerDay":50,"executionsPerDay":100,"sessions":5,"maxConcurrency":2,"replayRecordings":10,"computeMinutesPerDay":10,"storageMB":50,"webhooks":1,"customAgents":1,"apiCallsPerMinute":20}'
|
|
111
|
-
),
|
|
112
|
-
|
|
113
|
-
('pro',
|
|
114
|
-
'Pro',
|
|
115
|
-
'For developers shipping production agents',
|
|
116
|
-
'Everything in Free plus the workspace, observability, replay engine, advanced orchestration and analytics.',
|
|
117
|
-
1000, 'EUR', 'month',
|
|
118
|
-
'checkout', 'Start Pro', NULL,
|
|
119
|
-
1, 20,
|
|
120
|
-
'{"protocol":true,"sdk":true,"browserExecution":true,"adapters":true,"registryRead":true,"agentRegistration":true,"basicAuth":true,"discovery":true,"capabilityNegotiation":true,"semanticActions":true,"communityTemplates":true,"workspace":true,"advancedOrchestration":true,"observability":true,"failureAnalysis":true,"replayEngine":true,"advancedAnalytics":true,"dataExtraction":true,"agentMemory":true,"llmInference":true}',
|
|
121
|
-
'{"agents":25,"tasksPerDay":2000,"executionsPerDay":5000,"sessions":50,"maxConcurrency":10,"replayRecordings":500,"computeMinutesPerDay":180,"storageMB":2000,"webhooks":10,"customAgents":10,"apiCallsPerMinute":120}'
|
|
122
|
-
),
|
|
123
|
-
|
|
124
|
-
('business',
|
|
125
|
-
'Business',
|
|
126
|
-
'All paid features, ready for scale',
|
|
127
|
-
'Everything in Pro plus hosted runtime, marketplace, vision, swarm, traffic intelligence, exploit shield, audit logs, custom domain and governance.',
|
|
128
|
-
2900, 'EUR', 'month',
|
|
129
|
-
'checkout', 'Start Business', NULL,
|
|
130
|
-
0, 30,
|
|
131
|
-
'{"protocol":true,"sdk":true,"browserExecution":true,"adapters":true,"registryRead":true,"agentRegistration":true,"basicAuth":true,"discovery":true,"capabilityNegotiation":true,"semanticActions":true,"communityTemplates":true,"workspace":true,"advancedOrchestration":true,"observability":true,"failureAnalysis":true,"replayEngine":true,"advancedAnalytics":true,"dataExtraction":true,"agentMemory":true,"llmInference":true,"hostedRuntime":true,"marketplace":true,"certification":true,"trafficIntelligence":true,"exploitShield":true,"visionAnalysis":true,"swarmExecution":true,"auditLog":true,"customDomain":true,"governanceLayer":true}',
|
|
132
|
-
'{"agents":100,"tasksPerDay":20000,"executionsPerDay":50000,"sessions":250,"maxConcurrency":40,"replayRecordings":5000,"computeMinutesPerDay":600,"storageMB":10000,"webhooks":50,"customAgents":50,"apiCallsPerMinute":300}'
|
|
133
|
-
),
|
|
134
|
-
|
|
135
|
-
('enterprise',
|
|
136
|
-
'Enterprise',
|
|
137
|
-
'Custom-built for organisations',
|
|
138
|
-
'Everything in Business plus enterprise security, dedicated infrastructure, custom development, priority support and a contractual uptime SLA. Pricing is tailored to your scope.',
|
|
139
|
-
0, 'EUR', 'custom',
|
|
140
|
-
'contact', 'Contact sales', 'mailto:sales@webagentbridge.com',
|
|
141
|
-
0, 40,
|
|
142
|
-
'{"protocol":true,"sdk":true,"browserExecution":true,"adapters":true,"registryRead":true,"agentRegistration":true,"basicAuth":true,"discovery":true,"capabilityNegotiation":true,"semanticActions":true,"communityTemplates":true,"workspace":true,"advancedOrchestration":true,"observability":true,"failureAnalysis":true,"replayEngine":true,"advancedAnalytics":true,"dataExtraction":true,"agentMemory":true,"llmInference":true,"hostedRuntime":true,"marketplace":true,"certification":true,"trafficIntelligence":true,"exploitShield":true,"visionAnalysis":true,"swarmExecution":true,"auditLog":true,"customDomain":true,"governanceLayer":true,"enterpriseSecurity":true,"prioritySupport":true,"sla":true,"customDevelopment":true,"dedicatedInfra":true}',
|
|
143
|
-
'{"agents":-1,"tasksPerDay":-1,"executionsPerDay":-1,"sessions":-1,"maxConcurrency":-1,"replayRecordings":-1,"computeMinutesPerDay":-1,"storageMB":-1,"webhooks":-1,"customAgents":-1,"apiCallsPerMinute":-1}'
|
|
144
|
-
);
|
|
1
|
+
-- Migration 008: Plans Management
|
|
2
|
+
-- Database-driven plans + feature catalog so admins can add/edit plans,
|
|
3
|
+
-- toggle which features each plan includes, and have changes flow live to
|
|
4
|
+
-- the landing page pricing section AND the Stripe checkout flow.
|
|
5
|
+
--
|
|
6
|
+
-- Backwards-compatible: legacy code paths that look up tiers by slug
|
|
7
|
+
-- ('free' | 'starter' | 'pro' | 'enterprise') keep working — those slugs
|
|
8
|
+
-- are seeded as plan ids below.
|
|
9
|
+
--
|
|
10
|
+
-- An older `plans` table (different schema: tier/price/etc.) may exist from
|
|
11
|
+
-- a previous admin dashboard iteration. Its rows are pure default seeds with
|
|
12
|
+
-- no FK references, so we drop it and recreate with the new schema.
|
|
13
|
+
|
|
14
|
+
DROP TABLE IF EXISTS plans;
|
|
15
|
+
|
|
16
|
+
CREATE TABLE plans (
|
|
17
|
+
id TEXT PRIMARY KEY, -- slug, lowercase, e.g. 'free' / 'pro' / 'business' / 'enterprise'
|
|
18
|
+
name TEXT NOT NULL,
|
|
19
|
+
tagline TEXT,
|
|
20
|
+
description TEXT,
|
|
21
|
+
price_cents INTEGER NOT NULL DEFAULT 0,
|
|
22
|
+
currency TEXT NOT NULL DEFAULT 'EUR',
|
|
23
|
+
billing_period TEXT NOT NULL DEFAULT 'month'
|
|
24
|
+
CHECK(billing_period IN ('month','year','one_time','custom')),
|
|
25
|
+
stripe_price_id TEXT,
|
|
26
|
+
cta_type TEXT NOT NULL DEFAULT 'checkout'
|
|
27
|
+
CHECK(cta_type IN ('checkout','register','contact','external')),
|
|
28
|
+
cta_label TEXT,
|
|
29
|
+
cta_url TEXT,
|
|
30
|
+
highlight INTEGER NOT NULL DEFAULT 0,
|
|
31
|
+
is_public INTEGER NOT NULL DEFAULT 1,
|
|
32
|
+
is_archived INTEGER NOT NULL DEFAULT 0,
|
|
33
|
+
sort_order INTEGER NOT NULL DEFAULT 100,
|
|
34
|
+
features_json TEXT NOT NULL DEFAULT '{}',
|
|
35
|
+
limits_json TEXT NOT NULL DEFAULT '{}',
|
|
36
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
37
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
CREATE INDEX IF NOT EXISTS idx_plans_public_archived ON plans(is_public, is_archived, sort_order);
|
|
41
|
+
|
|
42
|
+
CREATE TABLE IF NOT EXISTS feature_catalog (
|
|
43
|
+
feature_key TEXT PRIMARY KEY,
|
|
44
|
+
label TEXT NOT NULL,
|
|
45
|
+
description TEXT,
|
|
46
|
+
category TEXT NOT NULL DEFAULT 'general',
|
|
47
|
+
is_open_source INTEGER NOT NULL DEFAULT 0,
|
|
48
|
+
sort_order INTEGER NOT NULL DEFAULT 100,
|
|
49
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
-- Feature catalog (open-source / always-free first, then paid features)
|
|
53
|
+
INSERT OR IGNORE INTO feature_catalog (feature_key, label, description, category, is_open_source, sort_order) VALUES
|
|
54
|
+
-- Always-free / open core
|
|
55
|
+
('protocol', 'WAP Protocol Core', 'Open Web Agent Protocol — schema, discovery, permissions', 'core', 1, 10),
|
|
56
|
+
('sdk', 'SDK & Client Runtime', 'JavaScript SDK and client integrations', 'core', 1, 20),
|
|
57
|
+
('browserExecution', 'Browser Execution Layer', 'Basic browser automation primitives', 'core', 1, 30),
|
|
58
|
+
('adapters', 'MCP / REST / Browser Adapters','Adapters for MCP, REST APIs, and browser back-ends', 'core', 1, 40),
|
|
59
|
+
('registryRead', 'Public Registry (read-only)', 'Browse commands, sites and templates', 'core', 1, 50),
|
|
60
|
+
('agentRegistration', 'Agent Registration', 'Register agents and obtain credentials', 'core', 1, 60),
|
|
61
|
+
('basicAuth', 'Basic Authentication', 'API keys and basic auth flows', 'core', 1, 70),
|
|
62
|
+
('discovery', 'DNS / .well-known Discovery', 'Service discovery via DNS TXT and /.well-known/', 'core', 1, 80),
|
|
63
|
+
('capabilityNegotiation', 'Capability Negotiation', 'Capability handshake between agent and site', 'core', 1, 90),
|
|
64
|
+
('semanticActions', 'Semantic Actions', 'Built-in semantic actions catalog', 'core', 1,100),
|
|
65
|
+
('communityTemplates', 'Community Templates', 'Public template library', 'core', 1,110),
|
|
66
|
+
|
|
67
|
+
-- Workspace / orchestration
|
|
68
|
+
('workspace', 'Control Plane / Workspace', 'Web dashboard, monitoring and agent management', 'workspace', 0,200),
|
|
69
|
+
('advancedOrchestration', 'Advanced Orchestration', 'Scheduling, retries, pipelines, distributed execution', 'workspace', 0,210),
|
|
70
|
+
('observability', 'Observability', 'Tracing, metrics, logs and performance insights', 'workspace', 0,220),
|
|
71
|
+
('failureAnalysis', 'Failure Analysis', 'Debugging tools and root-cause reports', 'workspace', 0,230),
|
|
72
|
+
('replayEngine', 'Replay Engine', 'Record and replay agent runs', 'workspace', 0,240),
|
|
73
|
+
('advancedAnalytics', 'Advanced Analytics', 'Detailed analytics dashboards and exports', 'workspace', 0,250),
|
|
74
|
+
('dataExtraction', 'Data Extraction', 'Structured data extraction and export', 'workspace', 0,260),
|
|
75
|
+
('agentMemory', 'Agent Memory Engine', 'Persistent context and long-term memory for agents', 'workspace', 0,270),
|
|
76
|
+
('llmInference', 'LLM Inference', 'Built-in LLM inference via the platform', 'workspace', 0,280),
|
|
77
|
+
|
|
78
|
+
-- Premium / business
|
|
79
|
+
('hostedRuntime', 'Hosted Runtime (Cloud Exec)', 'Auto-scaling hosted execution environment', 'premium', 0,300),
|
|
80
|
+
('marketplace', 'Marketplace (Publish & Sell)','Publish agents and templates on the marketplace', 'premium', 0,310),
|
|
81
|
+
('certification', 'Agent Certification', 'Verified agent identity badge', 'premium', 0,320),
|
|
82
|
+
('trafficIntelligence', 'Traffic Intelligence', 'Agent profiling, anomaly detection and reporting', 'premium', 0,330),
|
|
83
|
+
('exploitShield', 'Exploit Shield', 'Block malicious agents at the edge', 'premium', 0,340),
|
|
84
|
+
('visionAnalysis', 'Vision Analysis', 'Visual page inspection (computer-vision pipeline)', 'premium', 0,350),
|
|
85
|
+
('swarmExecution', 'Swarm / Multi-Agent', 'Coordinated multi-agent (swarm) execution', 'premium', 0,360),
|
|
86
|
+
('auditLog', 'Audit Logs', 'Tamper-evident HMAC-chained audit history', 'premium', 0,370),
|
|
87
|
+
('customDomain', 'Custom Domain / White-label', 'Serve the workspace on your own domain', 'premium', 0,380),
|
|
88
|
+
('governanceLayer', 'Agent Governance Layer', 'Policies, approvals, kill switch and spend limits', 'premium', 0,390),
|
|
89
|
+
|
|
90
|
+
-- Enterprise
|
|
91
|
+
('enterpriseSecurity', 'Enterprise Security', 'Request signing, IP allowlists, SSO/SAML', 'enterprise', 0,400),
|
|
92
|
+
('prioritySupport', 'Priority Support', 'Dedicated SLA-backed support channel', 'enterprise', 0,410),
|
|
93
|
+
('sla', 'Uptime SLA', 'Contractual uptime SLA', 'enterprise', 0,420),
|
|
94
|
+
('customDevelopment', 'Custom Development', 'Bespoke engineering and integrations', 'enterprise', 0,430),
|
|
95
|
+
('dedicatedInfra', 'Dedicated Infrastructure', 'Isolated single-tenant deployment', 'enterprise', 0,440);
|
|
96
|
+
|
|
97
|
+
-- Seed the four canonical plans (admin can edit/add later).
|
|
98
|
+
-- features_json keys MUST match feature_catalog.feature_key.
|
|
99
|
+
INSERT OR IGNORE INTO plans
|
|
100
|
+
(id, name, tagline, description, price_cents, currency, billing_period, cta_type, cta_label, cta_url, highlight, sort_order, features_json, limits_json)
|
|
101
|
+
VALUES
|
|
102
|
+
('free',
|
|
103
|
+
'Free',
|
|
104
|
+
'Open-source core, forever free',
|
|
105
|
+
'WAP protocol, SDK, discovery and the entire open-source surface — for developers and integrators.',
|
|
106
|
+
0, 'EUR', 'month',
|
|
107
|
+
'register', 'Get started for free', '/register',
|
|
108
|
+
0, 10,
|
|
109
|
+
'{"protocol":true,"sdk":true,"browserExecution":true,"adapters":true,"registryRead":true,"agentRegistration":true,"basicAuth":true,"discovery":true,"capabilityNegotiation":true,"semanticActions":true,"communityTemplates":true}',
|
|
110
|
+
'{"agents":3,"tasksPerDay":50,"executionsPerDay":100,"sessions":5,"maxConcurrency":2,"replayRecordings":10,"computeMinutesPerDay":10,"storageMB":50,"webhooks":1,"customAgents":1,"apiCallsPerMinute":20}'
|
|
111
|
+
),
|
|
112
|
+
|
|
113
|
+
('pro',
|
|
114
|
+
'Pro',
|
|
115
|
+
'For developers shipping production agents',
|
|
116
|
+
'Everything in Free plus the workspace, observability, replay engine, advanced orchestration and analytics.',
|
|
117
|
+
1000, 'EUR', 'month',
|
|
118
|
+
'checkout', 'Start Pro', NULL,
|
|
119
|
+
1, 20,
|
|
120
|
+
'{"protocol":true,"sdk":true,"browserExecution":true,"adapters":true,"registryRead":true,"agentRegistration":true,"basicAuth":true,"discovery":true,"capabilityNegotiation":true,"semanticActions":true,"communityTemplates":true,"workspace":true,"advancedOrchestration":true,"observability":true,"failureAnalysis":true,"replayEngine":true,"advancedAnalytics":true,"dataExtraction":true,"agentMemory":true,"llmInference":true}',
|
|
121
|
+
'{"agents":25,"tasksPerDay":2000,"executionsPerDay":5000,"sessions":50,"maxConcurrency":10,"replayRecordings":500,"computeMinutesPerDay":180,"storageMB":2000,"webhooks":10,"customAgents":10,"apiCallsPerMinute":120}'
|
|
122
|
+
),
|
|
123
|
+
|
|
124
|
+
('business',
|
|
125
|
+
'Business',
|
|
126
|
+
'All paid features, ready for scale',
|
|
127
|
+
'Everything in Pro plus hosted runtime, marketplace, vision, swarm, traffic intelligence, exploit shield, audit logs, custom domain and governance.',
|
|
128
|
+
2900, 'EUR', 'month',
|
|
129
|
+
'checkout', 'Start Business', NULL,
|
|
130
|
+
0, 30,
|
|
131
|
+
'{"protocol":true,"sdk":true,"browserExecution":true,"adapters":true,"registryRead":true,"agentRegistration":true,"basicAuth":true,"discovery":true,"capabilityNegotiation":true,"semanticActions":true,"communityTemplates":true,"workspace":true,"advancedOrchestration":true,"observability":true,"failureAnalysis":true,"replayEngine":true,"advancedAnalytics":true,"dataExtraction":true,"agentMemory":true,"llmInference":true,"hostedRuntime":true,"marketplace":true,"certification":true,"trafficIntelligence":true,"exploitShield":true,"visionAnalysis":true,"swarmExecution":true,"auditLog":true,"customDomain":true,"governanceLayer":true}',
|
|
132
|
+
'{"agents":100,"tasksPerDay":20000,"executionsPerDay":50000,"sessions":250,"maxConcurrency":40,"replayRecordings":5000,"computeMinutesPerDay":600,"storageMB":10000,"webhooks":50,"customAgents":50,"apiCallsPerMinute":300}'
|
|
133
|
+
),
|
|
134
|
+
|
|
135
|
+
('enterprise',
|
|
136
|
+
'Enterprise',
|
|
137
|
+
'Custom-built for organisations',
|
|
138
|
+
'Everything in Business plus enterprise security, dedicated infrastructure, custom development, priority support and a contractual uptime SLA. Pricing is tailored to your scope.',
|
|
139
|
+
0, 'EUR', 'custom',
|
|
140
|
+
'contact', 'Contact sales', 'mailto:sales@webagentbridge.com',
|
|
141
|
+
0, 40,
|
|
142
|
+
'{"protocol":true,"sdk":true,"browserExecution":true,"adapters":true,"registryRead":true,"agentRegistration":true,"basicAuth":true,"discovery":true,"capabilityNegotiation":true,"semanticActions":true,"communityTemplates":true,"workspace":true,"advancedOrchestration":true,"observability":true,"failureAnalysis":true,"replayEngine":true,"advancedAnalytics":true,"dataExtraction":true,"agentMemory":true,"llmInference":true,"hostedRuntime":true,"marketplace":true,"certification":true,"trafficIntelligence":true,"exploitShield":true,"visionAnalysis":true,"swarmExecution":true,"auditLog":true,"customDomain":true,"governanceLayer":true,"enterpriseSecurity":true,"prioritySupport":true,"sla":true,"customDevelopment":true,"dedicatedInfra":true}',
|
|
143
|
+
'{"agents":-1,"tasksPerDay":-1,"executionsPerDay":-1,"sessions":-1,"maxConcurrency":-1,"replayRecordings":-1,"computeMinutesPerDay":-1,"storageMB":-1,"webhooks":-1,"customAgents":-1,"apiCallsPerMinute":-1}'
|
|
144
|
+
);
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
-- Migration 009: WAB ShieldQR scan history + reports
|
|
2
|
-
CREATE TABLE IF NOT EXISTS shieldqr_scans (
|
|
3
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
4
|
-
url TEXT NOT NULL,
|
|
5
|
-
host TEXT,
|
|
6
|
-
level TEXT NOT NULL CHECK(level IN ('green','yellow','red')),
|
|
7
|
-
score INTEGER NOT NULL DEFAULT 0,
|
|
8
|
-
signals_json TEXT NOT NULL DEFAULT '[]',
|
|
9
|
-
trust_ok INTEGER NOT NULL DEFAULT 0,
|
|
10
|
-
ssl_ok INTEGER NOT NULL DEFAULT 0,
|
|
11
|
-
user_id TEXT,
|
|
12
|
-
ip TEXT,
|
|
13
|
-
user_agent TEXT,
|
|
14
|
-
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
15
|
-
);
|
|
16
|
-
CREATE INDEX IF NOT EXISTS idx_shieldqr_scans_host_created ON shieldqr_scans(host, created_at DESC);
|
|
17
|
-
CREATE INDEX IF NOT EXISTS idx_shieldqr_scans_level_created ON shieldqr_scans(level, created_at DESC);
|
|
18
|
-
|
|
19
|
-
CREATE TABLE IF NOT EXISTS shieldqr_reports (
|
|
20
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
21
|
-
scan_id INTEGER REFERENCES shieldqr_scans(id) ON DELETE SET NULL,
|
|
22
|
-
url TEXT NOT NULL,
|
|
23
|
-
reason TEXT,
|
|
24
|
-
reporter_id TEXT,
|
|
25
|
-
reporter_ip TEXT,
|
|
26
|
-
status TEXT NOT NULL DEFAULT 'open' CHECK(status IN ('open','reviewing','resolved','rejected')),
|
|
27
|
-
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
28
|
-
resolved_at DATETIME
|
|
29
|
-
);
|
|
30
|
-
CREATE INDEX IF NOT EXISTS idx_shieldqr_reports_status ON shieldqr_reports(status, created_at DESC);
|
|
1
|
+
-- Migration 009: WAB ShieldQR scan history + reports
|
|
2
|
+
CREATE TABLE IF NOT EXISTS shieldqr_scans (
|
|
3
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
4
|
+
url TEXT NOT NULL,
|
|
5
|
+
host TEXT,
|
|
6
|
+
level TEXT NOT NULL CHECK(level IN ('green','yellow','red')),
|
|
7
|
+
score INTEGER NOT NULL DEFAULT 0,
|
|
8
|
+
signals_json TEXT NOT NULL DEFAULT '[]',
|
|
9
|
+
trust_ok INTEGER NOT NULL DEFAULT 0,
|
|
10
|
+
ssl_ok INTEGER NOT NULL DEFAULT 0,
|
|
11
|
+
user_id TEXT,
|
|
12
|
+
ip TEXT,
|
|
13
|
+
user_agent TEXT,
|
|
14
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
15
|
+
);
|
|
16
|
+
CREATE INDEX IF NOT EXISTS idx_shieldqr_scans_host_created ON shieldqr_scans(host, created_at DESC);
|
|
17
|
+
CREATE INDEX IF NOT EXISTS idx_shieldqr_scans_level_created ON shieldqr_scans(level, created_at DESC);
|
|
18
|
+
|
|
19
|
+
CREATE TABLE IF NOT EXISTS shieldqr_reports (
|
|
20
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
21
|
+
scan_id INTEGER REFERENCES shieldqr_scans(id) ON DELETE SET NULL,
|
|
22
|
+
url TEXT NOT NULL,
|
|
23
|
+
reason TEXT,
|
|
24
|
+
reporter_id TEXT,
|
|
25
|
+
reporter_ip TEXT,
|
|
26
|
+
status TEXT NOT NULL DEFAULT 'open' CHECK(status IN ('open','reviewing','resolved','rejected')),
|
|
27
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
28
|
+
resolved_at DATETIME
|
|
29
|
+
);
|
|
30
|
+
CREATE INDEX IF NOT EXISTS idx_shieldqr_reports_status ON shieldqr_reports(status, created_at DESC);
|
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
-- Migration 010: WAB Extended Trust — Certificate Companion & SSL Health Monitoring
|
|
2
|
-
-- Per-domain SSL certificate history (Certificate Transparency log) +
|
|
3
|
-
-- live SSL monitoring state for the trust dashboard.
|
|
4
|
-
|
|
5
|
-
CREATE TABLE IF NOT EXISTS cert_history (
|
|
6
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
7
|
-
host TEXT NOT NULL,
|
|
8
|
-
fingerprint_sha256 TEXT NOT NULL,
|
|
9
|
-
issuer TEXT,
|
|
10
|
-
subject TEXT,
|
|
11
|
-
serial TEXT,
|
|
12
|
-
valid_from TEXT,
|
|
13
|
-
valid_to TEXT,
|
|
14
|
-
observed_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
15
|
-
source TEXT DEFAULT 'monitor' -- 'monitor' | 'shieldqr' | 'sign'
|
|
16
|
-
);
|
|
17
|
-
CREATE INDEX IF NOT EXISTS idx_cert_history_host_observed ON cert_history(host, observed_at DESC);
|
|
18
|
-
CREATE UNIQUE INDEX IF NOT EXISTS idx_cert_history_host_fp ON cert_history(host, fingerprint_sha256);
|
|
19
|
-
|
|
20
|
-
CREATE TABLE IF NOT EXISTS ssl_monitor (
|
|
21
|
-
host TEXT PRIMARY KEY,
|
|
22
|
-
fingerprint_sha256 TEXT,
|
|
23
|
-
issuer TEXT,
|
|
24
|
-
valid_to TEXT,
|
|
25
|
-
days_until_expiry INTEGER,
|
|
26
|
-
status TEXT, -- 'active' | 'expiring' | 'expired' | 'error'
|
|
27
|
-
error TEXT,
|
|
28
|
-
last_checked_at DATETIME,
|
|
29
|
-
last_alert_at DATETIME,
|
|
30
|
-
enabled INTEGER NOT NULL DEFAULT 1,
|
|
31
|
-
owner_user_id TEXT
|
|
32
|
-
);
|
|
33
|
-
CREATE INDEX IF NOT EXISTS idx_ssl_monitor_status ON ssl_monitor(status, valid_to);
|
|
1
|
+
-- Migration 010: WAB Extended Trust — Certificate Companion & SSL Health Monitoring
|
|
2
|
+
-- Per-domain SSL certificate history (Certificate Transparency log) +
|
|
3
|
+
-- live SSL monitoring state for the trust dashboard.
|
|
4
|
+
|
|
5
|
+
CREATE TABLE IF NOT EXISTS cert_history (
|
|
6
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
7
|
+
host TEXT NOT NULL,
|
|
8
|
+
fingerprint_sha256 TEXT NOT NULL,
|
|
9
|
+
issuer TEXT,
|
|
10
|
+
subject TEXT,
|
|
11
|
+
serial TEXT,
|
|
12
|
+
valid_from TEXT,
|
|
13
|
+
valid_to TEXT,
|
|
14
|
+
observed_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
15
|
+
source TEXT DEFAULT 'monitor' -- 'monitor' | 'shieldqr' | 'sign'
|
|
16
|
+
);
|
|
17
|
+
CREATE INDEX IF NOT EXISTS idx_cert_history_host_observed ON cert_history(host, observed_at DESC);
|
|
18
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_cert_history_host_fp ON cert_history(host, fingerprint_sha256);
|
|
19
|
+
|
|
20
|
+
CREATE TABLE IF NOT EXISTS ssl_monitor (
|
|
21
|
+
host TEXT PRIMARY KEY,
|
|
22
|
+
fingerprint_sha256 TEXT,
|
|
23
|
+
issuer TEXT,
|
|
24
|
+
valid_to TEXT,
|
|
25
|
+
days_until_expiry INTEGER,
|
|
26
|
+
status TEXT, -- 'active' | 'expiring' | 'expired' | 'error'
|
|
27
|
+
error TEXT,
|
|
28
|
+
last_checked_at DATETIME,
|
|
29
|
+
last_alert_at DATETIME,
|
|
30
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
31
|
+
owner_user_id TEXT
|
|
32
|
+
);
|
|
33
|
+
CREATE INDEX IF NOT EXISTS idx_ssl_monitor_status ON ssl_monitor(status, valid_to);
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
-- Outreach Agent — site analysis + email queue + suppression list
|
|
2
|
+
-- Strict human-in-the-loop: drafts default to 'pending' and require admin approval.
|
|
3
|
+
|
|
4
|
+
CREATE TABLE IF NOT EXISTS outreach_targets (
|
|
5
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
6
|
+
site_url TEXT NOT NULL,
|
|
7
|
+
host TEXT NOT NULL,
|
|
8
|
+
contact_email TEXT,
|
|
9
|
+
detected_lang TEXT,
|
|
10
|
+
site_kind TEXT,
|
|
11
|
+
signals_json TEXT,
|
|
12
|
+
suggested_features_json TEXT,
|
|
13
|
+
draft_subject TEXT,
|
|
14
|
+
draft_body_html TEXT,
|
|
15
|
+
draft_body_text TEXT,
|
|
16
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
17
|
+
-- pending | approved | sending | sent | failed | suppressed | skipped
|
|
18
|
+
unsubscribe_token TEXT,
|
|
19
|
+
error_message TEXT,
|
|
20
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
21
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
22
|
+
sent_at TEXT
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
CREATE INDEX IF NOT EXISTS idx_outreach_status ON outreach_targets(status);
|
|
26
|
+
CREATE INDEX IF NOT EXISTS idx_outreach_host ON outreach_targets(host);
|
|
27
|
+
CREATE INDEX IF NOT EXISTS idx_outreach_email ON outreach_targets(contact_email);
|
|
28
|
+
|
|
29
|
+
CREATE TABLE IF NOT EXISTS outreach_suppression (
|
|
30
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
31
|
+
email_or_host TEXT NOT NULL UNIQUE,
|
|
32
|
+
reason TEXT,
|
|
33
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
CREATE TABLE IF NOT EXISTS outreach_log (
|
|
37
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
38
|
+
target_id INTEGER,
|
|
39
|
+
event TEXT NOT NULL,
|
|
40
|
+
-- scanned | drafted | approved | sent | failed | bounced | unsubscribed | opened
|
|
41
|
+
details TEXT,
|
|
42
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
43
|
+
FOREIGN KEY (target_id) REFERENCES outreach_targets(id) ON DELETE CASCADE
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
CREATE INDEX IF NOT EXISTS idx_outreach_log_target ON outreach_log(target_id);
|
|
47
|
+
CREATE INDEX IF NOT EXISTS idx_outreach_log_event ON outreach_log(event);
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
-- Migration 012: WAB ShieldLink (Verified Links / Anti-Phishing for premium customers)
|
|
2
|
+
--
|
|
3
|
+
-- Tables:
|
|
4
|
+
-- shieldlink_brands — verified brand identities (one row per verified site)
|
|
5
|
+
-- shieldlink_keys — per-site Ed25519 signing keys (private key encrypted at rest)
|
|
6
|
+
-- shieldlink_links — issued signed links (sessions / payment / invoice)
|
|
7
|
+
-- shieldlink_link_events — open / scan / report events for issued links
|
|
8
|
+
-- shieldlink_reports — phishing reports submitted by anyone
|
|
9
|
+
-- shieldlink_name_holds — reserved/blocked brand display names
|
|
10
|
+
|
|
11
|
+
CREATE TABLE IF NOT EXISTS shieldlink_brands (
|
|
12
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
13
|
+
site_id TEXT NOT NULL, -- FK -> sites.id
|
|
14
|
+
domain TEXT NOT NULL UNIQUE,
|
|
15
|
+
display_name TEXT NOT NULL,
|
|
16
|
+
display_name_normalized TEXT NOT NULL,
|
|
17
|
+
category TEXT, -- 'bank' | 'payments' | 'gov' | 'ecommerce' | 'other'
|
|
18
|
+
country TEXT,
|
|
19
|
+
logo_url TEXT,
|
|
20
|
+
status TEXT NOT NULL DEFAULT 'pending' CHECK(status IN ('pending','verified','rejected','suspended')),
|
|
21
|
+
verified_badge INTEGER NOT NULL DEFAULT 0,
|
|
22
|
+
reputation INTEGER NOT NULL DEFAULT 100,
|
|
23
|
+
notes TEXT,
|
|
24
|
+
reviewed_by TEXT,
|
|
25
|
+
reviewed_at DATETIME,
|
|
26
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
27
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
28
|
+
);
|
|
29
|
+
CREATE INDEX IF NOT EXISTS idx_shieldlink_brands_status ON shieldlink_brands(status);
|
|
30
|
+
CREATE INDEX IF NOT EXISTS idx_shieldlink_brands_normalized ON shieldlink_brands(display_name_normalized);
|
|
31
|
+
|
|
32
|
+
CREATE TABLE IF NOT EXISTS shieldlink_keys (
|
|
33
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
34
|
+
brand_id INTEGER NOT NULL REFERENCES shieldlink_brands(id) ON DELETE CASCADE,
|
|
35
|
+
public_key TEXT NOT NULL, -- base64 raw 32-byte
|
|
36
|
+
private_key_enc TEXT NOT NULL, -- base64(AES-256-GCM(priv))
|
|
37
|
+
fingerprint TEXT NOT NULL,
|
|
38
|
+
active INTEGER NOT NULL DEFAULT 1,
|
|
39
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
40
|
+
rotated_at DATETIME
|
|
41
|
+
);
|
|
42
|
+
CREATE INDEX IF NOT EXISTS idx_shieldlink_keys_brand ON shieldlink_keys(brand_id, active);
|
|
43
|
+
|
|
44
|
+
CREATE TABLE IF NOT EXISTS shieldlink_links (
|
|
45
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
46
|
+
token TEXT NOT NULL UNIQUE, -- short opaque public id
|
|
47
|
+
brand_id INTEGER NOT NULL REFERENCES shieldlink_brands(id) ON DELETE CASCADE,
|
|
48
|
+
site_id TEXT NOT NULL,
|
|
49
|
+
target_url TEXT NOT NULL, -- the actual URL we redirect to after preview
|
|
50
|
+
purpose TEXT NOT NULL CHECK(purpose IN ('payment','invoice','login','generic')),
|
|
51
|
+
amount_cents INTEGER,
|
|
52
|
+
currency TEXT,
|
|
53
|
+
payee_name TEXT,
|
|
54
|
+
reference TEXT, -- merchant invoice/session id
|
|
55
|
+
signature TEXT NOT NULL, -- base64 ed25519 signature over canonical payload
|
|
56
|
+
key_id TEXT NOT NULL, -- fingerprint of the signing key
|
|
57
|
+
payload_json TEXT NOT NULL, -- canonical signed payload, for verifier to re-check
|
|
58
|
+
status TEXT NOT NULL DEFAULT 'active' CHECK(status IN ('active','revoked','expired')),
|
|
59
|
+
expires_at DATETIME NOT NULL,
|
|
60
|
+
created_by TEXT, -- user_id who issued
|
|
61
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
62
|
+
revoked_at DATETIME,
|
|
63
|
+
revoke_reason TEXT
|
|
64
|
+
);
|
|
65
|
+
CREATE INDEX IF NOT EXISTS idx_shieldlink_links_brand ON shieldlink_links(brand_id, created_at DESC);
|
|
66
|
+
CREATE INDEX IF NOT EXISTS idx_shieldlink_links_status ON shieldlink_links(status, expires_at);
|
|
67
|
+
|
|
68
|
+
CREATE TABLE IF NOT EXISTS shieldlink_link_events (
|
|
69
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
70
|
+
link_id INTEGER NOT NULL REFERENCES shieldlink_links(id) ON DELETE CASCADE,
|
|
71
|
+
event TEXT NOT NULL CHECK(event IN ('open','confirm','cancel','flag','verify_fail')),
|
|
72
|
+
ip TEXT,
|
|
73
|
+
user_agent TEXT,
|
|
74
|
+
ref TEXT,
|
|
75
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
76
|
+
);
|
|
77
|
+
CREATE INDEX IF NOT EXISTS idx_shieldlink_link_events_link ON shieldlink_link_events(link_id, created_at DESC);
|
|
78
|
+
|
|
79
|
+
CREATE TABLE IF NOT EXISTS shieldlink_reports (
|
|
80
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
81
|
+
link_id INTEGER REFERENCES shieldlink_links(id) ON DELETE SET NULL,
|
|
82
|
+
url TEXT NOT NULL,
|
|
83
|
+
reason TEXT,
|
|
84
|
+
reporter_ip TEXT,
|
|
85
|
+
reporter_id TEXT,
|
|
86
|
+
status TEXT NOT NULL DEFAULT 'open' CHECK(status IN ('open','reviewing','resolved','rejected')),
|
|
87
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
88
|
+
resolved_at DATETIME
|
|
89
|
+
);
|
|
90
|
+
CREATE INDEX IF NOT EXISTS idx_shieldlink_reports_status ON shieldlink_reports(status, created_at DESC);
|
|
91
|
+
|
|
92
|
+
CREATE TABLE IF NOT EXISTS shieldlink_name_holds (
|
|
93
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
94
|
+
pattern TEXT NOT NULL, -- normalized name or regex
|
|
95
|
+
pattern_kind TEXT NOT NULL DEFAULT 'literal' CHECK(pattern_kind IN ('literal','regex')),
|
|
96
|
+
reason TEXT,
|
|
97
|
+
created_by TEXT,
|
|
98
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
99
|
+
);
|
|
100
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uq_shieldlink_name_holds ON shieldlink_name_holds(pattern, pattern_kind);
|
|
101
|
+
|
|
102
|
+
-- Seed common impersonation targets (Saudi banks + payment networks).
|
|
103
|
+
-- Brands themselves can register and claim these names by proving DNS ownership.
|
|
104
|
+
INSERT OR IGNORE INTO shieldlink_name_holds (pattern, pattern_kind, reason)
|
|
105
|
+
VALUES
|
|
106
|
+
('stcpay', 'literal', 'High-value impersonation target'),
|
|
107
|
+
('stc-pay', 'literal', 'High-value impersonation target'),
|
|
108
|
+
('alrajhi', 'literal', 'High-value impersonation target'),
|
|
109
|
+
('alrajhibank', 'literal', 'High-value impersonation target'),
|
|
110
|
+
('snb', 'literal', 'High-value impersonation target'),
|
|
111
|
+
('riyadbank', 'literal', 'High-value impersonation target'),
|
|
112
|
+
('mada', 'literal', 'High-value impersonation target'),
|
|
113
|
+
('sarie', 'literal', 'High-value impersonation target'),
|
|
114
|
+
('paypal', 'literal', 'High-value impersonation target'),
|
|
115
|
+
('visa', 'literal', 'High-value impersonation target'),
|
|
116
|
+
('mastercard', 'literal', 'High-value impersonation target');
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
-- Migration 013: Certificate Transparency Monitor
|
|
2
|
+
-- Adds CT-log tracking columns to ssl_monitor so the WAB Trust Layer
|
|
3
|
+
-- can detect new certificates issued (and re-sign wab.json) automatically.
|
|
4
|
+
-- cert_history.source already exists from 010_extended_trust.sql; the
|
|
5
|
+
-- 'ct_log' value is added implicitly (column has no CHECK constraint).
|
|
6
|
+
|
|
7
|
+
ALTER TABLE ssl_monitor ADD COLUMN ct_monitor_enabled INTEGER NOT NULL DEFAULT 1;
|
|
8
|
+
ALTER TABLE ssl_monitor ADD COLUMN ct_last_checked TEXT;
|
|
9
|
+
ALTER TABLE ssl_monitor ADD COLUMN ct_pending_resign INTEGER NOT NULL DEFAULT 0;
|
|
10
|
+
ALTER TABLE ssl_monitor ADD COLUMN ct_last_thumbprint TEXT;
|
|
11
|
+
|
|
12
|
+
CREATE INDEX IF NOT EXISTS idx_ssl_monitor_ct_pending
|
|
13
|
+
ON ssl_monitor(ct_pending_resign, ct_last_checked);
|