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
package/examples/wab-sign.js
CHANGED
|
@@ -1,74 +1,74 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* wab-sign — generate Ed25519 keys and sign WAB discovery manifests.
|
|
4
|
-
*
|
|
5
|
-
* Usage:
|
|
6
|
-
* wab-sign keygen # print a new keypair (save private offline)
|
|
7
|
-
* wab-sign sign manifest.json key.priv # sign a manifest, write manifest.signed.json
|
|
8
|
-
* wab-sign txt <pubkey-b64> <endpoint> # print the matching _wab TXT line
|
|
9
|
-
*
|
|
10
|
-
* Examples:
|
|
11
|
-
* $ node wab-sign.js keygen > keys.json
|
|
12
|
-
* $ jq -r .private_key keys.json > key.priv
|
|
13
|
-
* $ node wab-sign.js sign wab.json key.priv
|
|
14
|
-
*
|
|
15
|
-
* $ node wab-sign.js txt <(jq -r .public_key keys.json) https://example.com/.well-known/wab.json
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
'use strict';
|
|
19
|
-
|
|
20
|
-
const fs = require('fs');
|
|
21
|
-
const path = require('path');
|
|
22
|
-
const { generateKeyPair, signManifest, fingerprint } = require(
|
|
23
|
-
// try the bundled service first; fall back to a local copy if invoked from a downloads/ extract
|
|
24
|
-
fs.existsSync(path.join(__dirname, '..', 'server', 'services', 'wab-crypto.js'))
|
|
25
|
-
? path.join(__dirname, '..', 'server', 'services', 'wab-crypto.js')
|
|
26
|
-
: './wab-crypto'
|
|
27
|
-
);
|
|
28
|
-
|
|
29
|
-
const [,, cmd, a1, a2] = process.argv;
|
|
30
|
-
|
|
31
|
-
function usage() {
|
|
32
|
-
console.error('Usage:');
|
|
33
|
-
console.error(' wab-sign keygen');
|
|
34
|
-
console.error(' wab-sign sign <manifest.json> <key.priv>');
|
|
35
|
-
console.error(' wab-sign txt <public-key-b64> <endpoint-url>');
|
|
36
|
-
process.exit(1);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
if (!cmd) usage();
|
|
40
|
-
|
|
41
|
-
if (cmd === 'keygen') {
|
|
42
|
-
const kp = generateKeyPair();
|
|
43
|
-
process.stdout.write(JSON.stringify(kp, null, 2) + '\n');
|
|
44
|
-
process.stderr.write('\n[!] private_key is shown ONLY here. Save it offline immediately.\n');
|
|
45
|
-
process.stderr.write('[!] Publish public_key in your _wab DNS TXT as: pk=ed25519:' + kp.public_key + '\n');
|
|
46
|
-
process.exit(0);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
if (cmd === 'sign') {
|
|
50
|
-
if (!a1 || !a2) usage();
|
|
51
|
-
const manifest = JSON.parse(fs.readFileSync(a1, 'utf8'));
|
|
52
|
-
const priv = fs.readFileSync(a2, 'utf8').trim();
|
|
53
|
-
const signed = signManifest(manifest, priv);
|
|
54
|
-
const out = a1.replace(/\.json$/, '') + '.signed.json';
|
|
55
|
-
fs.writeFileSync(out, JSON.stringify(signed, null, 2) + '\n');
|
|
56
|
-
console.log(`[OK] Signed manifest written: ${out}`);
|
|
57
|
-
console.log(`[OK] Signature key_id: ${signed.signature.key_id}`);
|
|
58
|
-
console.log(`[OK] Upload ${out} to https://${manifest.domain || '<your-domain>'}/.well-known/wab.json`);
|
|
59
|
-
process.exit(0);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
if (cmd === 'txt') {
|
|
63
|
-
if (!a1 || !a2) usage();
|
|
64
|
-
const pub = a1.trim();
|
|
65
|
-
const endpoint = a2.trim();
|
|
66
|
-
if (!/^https:\/\//i.test(endpoint)) { console.error('endpoint must be HTTPS'); process.exit(1); }
|
|
67
|
-
const fp = fingerprint(pub);
|
|
68
|
-
console.log(`# _wab.${endpoint.replace(/^https?:\/\//,'').replace(/\/.*$/,'')} TXT record:`);
|
|
69
|
-
console.log(`v=wab1; endpoint=${endpoint}; pk=ed25519:${pub}`);
|
|
70
|
-
console.log(`# key_id (fingerprint): ${fp}`);
|
|
71
|
-
process.exit(0);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
usage();
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* wab-sign — generate Ed25519 keys and sign WAB discovery manifests.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* wab-sign keygen # print a new keypair (save private offline)
|
|
7
|
+
* wab-sign sign manifest.json key.priv # sign a manifest, write manifest.signed.json
|
|
8
|
+
* wab-sign txt <pubkey-b64> <endpoint> # print the matching _wab TXT line
|
|
9
|
+
*
|
|
10
|
+
* Examples:
|
|
11
|
+
* $ node wab-sign.js keygen > keys.json
|
|
12
|
+
* $ jq -r .private_key keys.json > key.priv
|
|
13
|
+
* $ node wab-sign.js sign wab.json key.priv
|
|
14
|
+
*
|
|
15
|
+
* $ node wab-sign.js txt <(jq -r .public_key keys.json) https://example.com/.well-known/wab.json
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
'use strict';
|
|
19
|
+
|
|
20
|
+
const fs = require('fs');
|
|
21
|
+
const path = require('path');
|
|
22
|
+
const { generateKeyPair, signManifest, fingerprint } = require(
|
|
23
|
+
// try the bundled service first; fall back to a local copy if invoked from a downloads/ extract
|
|
24
|
+
fs.existsSync(path.join(__dirname, '..', 'server', 'services', 'wab-crypto.js'))
|
|
25
|
+
? path.join(__dirname, '..', 'server', 'services', 'wab-crypto.js')
|
|
26
|
+
: './wab-crypto'
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
const [,, cmd, a1, a2] = process.argv;
|
|
30
|
+
|
|
31
|
+
function usage() {
|
|
32
|
+
console.error('Usage:');
|
|
33
|
+
console.error(' wab-sign keygen');
|
|
34
|
+
console.error(' wab-sign sign <manifest.json> <key.priv>');
|
|
35
|
+
console.error(' wab-sign txt <public-key-b64> <endpoint-url>');
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (!cmd) usage();
|
|
40
|
+
|
|
41
|
+
if (cmd === 'keygen') {
|
|
42
|
+
const kp = generateKeyPair();
|
|
43
|
+
process.stdout.write(JSON.stringify(kp, null, 2) + '\n');
|
|
44
|
+
process.stderr.write('\n[!] private_key is shown ONLY here. Save it offline immediately.\n');
|
|
45
|
+
process.stderr.write('[!] Publish public_key in your _wab DNS TXT as: pk=ed25519:' + kp.public_key + '\n');
|
|
46
|
+
process.exit(0);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (cmd === 'sign') {
|
|
50
|
+
if (!a1 || !a2) usage();
|
|
51
|
+
const manifest = JSON.parse(fs.readFileSync(a1, 'utf8'));
|
|
52
|
+
const priv = fs.readFileSync(a2, 'utf8').trim();
|
|
53
|
+
const signed = signManifest(manifest, priv);
|
|
54
|
+
const out = a1.replace(/\.json$/, '') + '.signed.json';
|
|
55
|
+
fs.writeFileSync(out, JSON.stringify(signed, null, 2) + '\n');
|
|
56
|
+
console.log(`[OK] Signed manifest written: ${out}`);
|
|
57
|
+
console.log(`[OK] Signature key_id: ${signed.signature.key_id}`);
|
|
58
|
+
console.log(`[OK] Upload ${out} to https://${manifest.domain || '<your-domain>'}/.well-known/wab.json`);
|
|
59
|
+
process.exit(0);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (cmd === 'txt') {
|
|
63
|
+
if (!a1 || !a2) usage();
|
|
64
|
+
const pub = a1.trim();
|
|
65
|
+
const endpoint = a2.trim();
|
|
66
|
+
if (!/^https:\/\//i.test(endpoint)) { console.error('endpoint must be HTTPS'); process.exit(1); }
|
|
67
|
+
const fp = fingerprint(pub);
|
|
68
|
+
console.log(`# _wab.${endpoint.replace(/^https?:\/\//,'').replace(/\/.*$/,'')} TXT record:`);
|
|
69
|
+
console.log(`v=wab1; endpoint=${endpoint}; pk=ed25519:${pub}`);
|
|
70
|
+
console.log(`# key_id (fingerprint): ${fp}`);
|
|
71
|
+
process.exit(0);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
usage();
|
package/examples/wab-verify.js
CHANGED
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* wab-verify — full trust check on a domain's WAB DNS Discovery setup.
|
|
4
|
-
*
|
|
5
|
-
* Usage:
|
|
6
|
-
* wab-verify <domain> # full DNS + DNSSEC + signature trust report
|
|
7
|
-
* wab-verify --json <domain> # JSON output (for CI / scripts)
|
|
8
|
-
* wab-verify --strict <domain> # exit non-zero unless trust_score == 100
|
|
9
|
-
*
|
|
10
|
-
* Hits the public WAB Trust API at /api/discovery/trust/:domain.
|
|
11
|
-
* Override base URL with WAB_BASE_URL=https://your-instance.example.com
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
'use strict';
|
|
15
|
-
|
|
16
|
-
const fetch = (() => { try { return require('node-fetch'); } catch { return globalThis.fetch; } })();
|
|
17
|
-
|
|
18
|
-
const args = process.argv.slice(2);
|
|
19
|
-
const json = args.includes('--json');
|
|
20
|
-
const strict = args.includes('--strict');
|
|
21
|
-
const domain = args.find(a => !a.startsWith('--'));
|
|
22
|
-
const BASE = process.env.WAB_BASE_URL || 'https://www.webagentbridge.com';
|
|
23
|
-
|
|
24
|
-
if (!domain) {
|
|
25
|
-
console.error('Usage: wab-verify [--json] [--strict] <domain>');
|
|
26
|
-
process.exit(2);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
(async () => {
|
|
30
|
-
const r = await fetch(`${BASE}/api/discovery/trust/${encodeURIComponent(domain)}`);
|
|
31
|
-
if (!r.ok) { console.error(`HTTP ${r.status}`); process.exit(2); }
|
|
32
|
-
const data = await r.json();
|
|
33
|
-
|
|
34
|
-
if (json) {
|
|
35
|
-
process.stdout.write(JSON.stringify(data, null, 2) + '\n');
|
|
36
|
-
} else {
|
|
37
|
-
const c = data.checks || {};
|
|
38
|
-
const tick = (b) => b ? '✓' : '✗';
|
|
39
|
-
console.log(`\nWAB Trust Report — ${data.domain}`);
|
|
40
|
-
console.log('═'.repeat(50));
|
|
41
|
-
console.log(` Trust Score: ${data.trust_score}/100 [${data.trust_label.toUpperCase()}]`);
|
|
42
|
-
console.log(' ──────────────────────────────────────────────');
|
|
43
|
-
console.log(` ${tick(c.dns_resolved)} DNS _wab record present`);
|
|
44
|
-
console.log(` ${tick(c.dnssec_verified)} DNSSEC verified (AD flag)`);
|
|
45
|
-
console.log(` ${tick(c.has_public_key)} Public key in DNS (pk=${c.pk_algorithm || '—'})`);
|
|
46
|
-
console.log(` ${tick(c.https_endpoint && c.manifest_fetched)} HTTPS manifest reachable`);
|
|
47
|
-
console.log(` ${tick(c.signature_valid)} Manifest signature valid`);
|
|
48
|
-
console.log(' ──────────────────────────────────────────────');
|
|
49
|
-
if (data.public_key) console.log(` Key ID: ${data.public_key.fingerprint} (ed25519)`);
|
|
50
|
-
if (data.endpoint) console.log(` Endpoint: ${data.endpoint}`);
|
|
51
|
-
if (data.findings && data.findings.length) {
|
|
52
|
-
console.log('\n Findings:');
|
|
53
|
-
for (const f of data.findings) console.log(' • ' + f);
|
|
54
|
-
}
|
|
55
|
-
console.log('');
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
if (strict && data.trust_score < 100) process.exit(1);
|
|
59
|
-
process.exit(0);
|
|
60
|
-
})().catch(err => { console.error('[ERROR]', err.message); process.exit(2); });
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* wab-verify — full trust check on a domain's WAB DNS Discovery setup.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* wab-verify <domain> # full DNS + DNSSEC + signature trust report
|
|
7
|
+
* wab-verify --json <domain> # JSON output (for CI / scripts)
|
|
8
|
+
* wab-verify --strict <domain> # exit non-zero unless trust_score == 100
|
|
9
|
+
*
|
|
10
|
+
* Hits the public WAB Trust API at /api/discovery/trust/:domain.
|
|
11
|
+
* Override base URL with WAB_BASE_URL=https://your-instance.example.com
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
'use strict';
|
|
15
|
+
|
|
16
|
+
const fetch = (() => { try { return require('node-fetch'); } catch { return globalThis.fetch; } })();
|
|
17
|
+
|
|
18
|
+
const args = process.argv.slice(2);
|
|
19
|
+
const json = args.includes('--json');
|
|
20
|
+
const strict = args.includes('--strict');
|
|
21
|
+
const domain = args.find(a => !a.startsWith('--'));
|
|
22
|
+
const BASE = process.env.WAB_BASE_URL || 'https://www.webagentbridge.com';
|
|
23
|
+
|
|
24
|
+
if (!domain) {
|
|
25
|
+
console.error('Usage: wab-verify [--json] [--strict] <domain>');
|
|
26
|
+
process.exit(2);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
(async () => {
|
|
30
|
+
const r = await fetch(`${BASE}/api/discovery/trust/${encodeURIComponent(domain)}`);
|
|
31
|
+
if (!r.ok) { console.error(`HTTP ${r.status}`); process.exit(2); }
|
|
32
|
+
const data = await r.json();
|
|
33
|
+
|
|
34
|
+
if (json) {
|
|
35
|
+
process.stdout.write(JSON.stringify(data, null, 2) + '\n');
|
|
36
|
+
} else {
|
|
37
|
+
const c = data.checks || {};
|
|
38
|
+
const tick = (b) => b ? '✓' : '✗';
|
|
39
|
+
console.log(`\nWAB Trust Report — ${data.domain}`);
|
|
40
|
+
console.log('═'.repeat(50));
|
|
41
|
+
console.log(` Trust Score: ${data.trust_score}/100 [${data.trust_label.toUpperCase()}]`);
|
|
42
|
+
console.log(' ──────────────────────────────────────────────');
|
|
43
|
+
console.log(` ${tick(c.dns_resolved)} DNS _wab record present`);
|
|
44
|
+
console.log(` ${tick(c.dnssec_verified)} DNSSEC verified (AD flag)`);
|
|
45
|
+
console.log(` ${tick(c.has_public_key)} Public key in DNS (pk=${c.pk_algorithm || '—'})`);
|
|
46
|
+
console.log(` ${tick(c.https_endpoint && c.manifest_fetched)} HTTPS manifest reachable`);
|
|
47
|
+
console.log(` ${tick(c.signature_valid)} Manifest signature valid`);
|
|
48
|
+
console.log(' ──────────────────────────────────────────────');
|
|
49
|
+
if (data.public_key) console.log(` Key ID: ${data.public_key.fingerprint} (ed25519)`);
|
|
50
|
+
if (data.endpoint) console.log(` Endpoint: ${data.endpoint}`);
|
|
51
|
+
if (data.findings && data.findings.length) {
|
|
52
|
+
console.log('\n Findings:');
|
|
53
|
+
for (const f of data.findings) console.log(' • ' + f);
|
|
54
|
+
}
|
|
55
|
+
console.log('');
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (strict && data.trust_score < 100) process.exit(1);
|
|
59
|
+
process.exit(0);
|
|
60
|
+
})().catch(err => { console.error('[ERROR]', err.message); process.exit(2); });
|
|
@@ -1,77 +1,77 @@
|
|
|
1
|
-
# WordPress + Elementor + WAB
|
|
2
|
-
|
|
3
|
-
This snippet works with Elementor pages and exposes actions without changing your theme files heavily.
|
|
4
|
-
|
|
5
|
-
## 1) Add WAB scripts
|
|
6
|
-
|
|
7
|
-
In WordPress (Elementor Custom Code or theme footer):
|
|
8
|
-
|
|
9
|
-
```html
|
|
10
|
-
<script src="https://webagentbridge.com/script/wab.min.js"></script>
|
|
11
|
-
<script src="https://webagentbridge.com/script/wab-schema.js"></script>
|
|
12
|
-
<script src="/wp-content/uploads/wab-elementor.js"></script>
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## 2) Add this JS file as `wab-elementor.js`
|
|
16
|
-
|
|
17
|
-
```js
|
|
18
|
-
(function () {
|
|
19
|
-
if (!window.WAB) return;
|
|
20
|
-
|
|
21
|
-
var products = window.WABSchema ? window.WABSchema.scanJsonLd() : [];
|
|
22
|
-
var suggested = window.WABSchema ? window.WABSchema.suggestActions(products) : [];
|
|
23
|
-
|
|
24
|
-
var config = window.WABSchema
|
|
25
|
-
? window.WABSchema.mergeWithManual(
|
|
26
|
-
{
|
|
27
|
-
getHeroTitle: {
|
|
28
|
-
description: 'Read Elementor hero heading',
|
|
29
|
-
run: function () {
|
|
30
|
-
var title = document.querySelector('.elementor-heading-title');
|
|
31
|
-
return { title: title ? title.textContent.trim() : null };
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
submitVisibleElementorForm: {
|
|
35
|
-
description: 'Fill and submit the first visible Elementor form',
|
|
36
|
-
run: function (params) {
|
|
37
|
-
var form = document.querySelector('.elementor-form');
|
|
38
|
-
if (!form) return { success: false, error: 'No Elementor form found' };
|
|
39
|
-
|
|
40
|
-
var fields = form.querySelectorAll('input, textarea, select');
|
|
41
|
-
fields.forEach(function (field) {
|
|
42
|
-
var key = field.name || field.id;
|
|
43
|
-
if (!key || params[key] == null) return;
|
|
44
|
-
field.value = String(params[key]);
|
|
45
|
-
field.dispatchEvent(new Event('input', { bubbles: true }));
|
|
46
|
-
field.dispatchEvent(new Event('change', { bubbles: true }));
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
var submit = form.querySelector('[type="submit"], button');
|
|
50
|
-
if (!submit) return { success: false, error: 'No submit button found' };
|
|
51
|
-
submit.click();
|
|
52
|
-
return { success: true };
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
|
-
suggested
|
|
57
|
-
)
|
|
58
|
-
: {
|
|
59
|
-
actions: {
|
|
60
|
-
getHeroTitle: {
|
|
61
|
-
description: 'Read Elementor hero heading',
|
|
62
|
-
run: function () {
|
|
63
|
-
var title = document.querySelector('.elementor-heading-title');
|
|
64
|
-
return { title: title ? title.textContent.trim() : null };
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
window.WAB.init({
|
|
71
|
-
name: document.title,
|
|
72
|
-
actions: config.actions
|
|
73
|
-
});
|
|
74
|
-
})();
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
This gives agents discoverable actions for Elementor content + schema-derived product helpers.
|
|
1
|
+
# WordPress + Elementor + WAB
|
|
2
|
+
|
|
3
|
+
This snippet works with Elementor pages and exposes actions without changing your theme files heavily.
|
|
4
|
+
|
|
5
|
+
## 1) Add WAB scripts
|
|
6
|
+
|
|
7
|
+
In WordPress (Elementor Custom Code or theme footer):
|
|
8
|
+
|
|
9
|
+
```html
|
|
10
|
+
<script src="https://webagentbridge.com/script/wab.min.js"></script>
|
|
11
|
+
<script src="https://webagentbridge.com/script/wab-schema.js"></script>
|
|
12
|
+
<script src="/wp-content/uploads/wab-elementor.js"></script>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## 2) Add this JS file as `wab-elementor.js`
|
|
16
|
+
|
|
17
|
+
```js
|
|
18
|
+
(function () {
|
|
19
|
+
if (!window.WAB) return;
|
|
20
|
+
|
|
21
|
+
var products = window.WABSchema ? window.WABSchema.scanJsonLd() : [];
|
|
22
|
+
var suggested = window.WABSchema ? window.WABSchema.suggestActions(products) : [];
|
|
23
|
+
|
|
24
|
+
var config = window.WABSchema
|
|
25
|
+
? window.WABSchema.mergeWithManual(
|
|
26
|
+
{
|
|
27
|
+
getHeroTitle: {
|
|
28
|
+
description: 'Read Elementor hero heading',
|
|
29
|
+
run: function () {
|
|
30
|
+
var title = document.querySelector('.elementor-heading-title');
|
|
31
|
+
return { title: title ? title.textContent.trim() : null };
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
submitVisibleElementorForm: {
|
|
35
|
+
description: 'Fill and submit the first visible Elementor form',
|
|
36
|
+
run: function (params) {
|
|
37
|
+
var form = document.querySelector('.elementor-form');
|
|
38
|
+
if (!form) return { success: false, error: 'No Elementor form found' };
|
|
39
|
+
|
|
40
|
+
var fields = form.querySelectorAll('input, textarea, select');
|
|
41
|
+
fields.forEach(function (field) {
|
|
42
|
+
var key = field.name || field.id;
|
|
43
|
+
if (!key || params[key] == null) return;
|
|
44
|
+
field.value = String(params[key]);
|
|
45
|
+
field.dispatchEvent(new Event('input', { bubbles: true }));
|
|
46
|
+
field.dispatchEvent(new Event('change', { bubbles: true }));
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
var submit = form.querySelector('[type="submit"], button');
|
|
50
|
+
if (!submit) return { success: false, error: 'No submit button found' };
|
|
51
|
+
submit.click();
|
|
52
|
+
return { success: true };
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
suggested
|
|
57
|
+
)
|
|
58
|
+
: {
|
|
59
|
+
actions: {
|
|
60
|
+
getHeroTitle: {
|
|
61
|
+
description: 'Read Elementor hero heading',
|
|
62
|
+
run: function () {
|
|
63
|
+
var title = document.querySelector('.elementor-heading-title');
|
|
64
|
+
return { title: title ? title.textContent.trim() : null };
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
window.WAB.init({
|
|
71
|
+
name: document.title,
|
|
72
|
+
actions: config.actions
|
|
73
|
+
});
|
|
74
|
+
})();
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
This gives agents discoverable actions for Elementor content + schema-derived product helpers.
|
package/package.json
CHANGED
|
@@ -1,93 +1,93 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "web-agent-bridge",
|
|
3
|
-
"version": "3.
|
|
4
|
-
"description": "Open AI↔Web protocol & agent platform: standardized command interface, sovereign browser, ShieldQR trust verifier, SSL health monitor, zero-config adoption (Cloudflare/Vercel/Netlify/Next.js), DNS discovery, agent mesh, and unified API gateway for safe AI–website interaction",
|
|
5
|
-
"author": "Web Agent Bridge <dev@webagentbridge.com>",
|
|
6
|
-
"main": "server/index.js",
|
|
7
|
-
"bin": {
|
|
8
|
-
"web-agent-bridge": "./bin/cli.js",
|
|
9
|
-
"wab": "./bin/cli.js",
|
|
10
|
-
"wab-agent": "./bin/cli.js",
|
|
11
|
-
"wab-init": "./bin/wab-init.js"
|
|
12
|
-
},
|
|
13
|
-
"scripts": {
|
|
14
|
-
"start": "node server/index.js",
|
|
15
|
-
"dev": "node server/index.js",
|
|
16
|
-
"test": "jest --forceExit --detectOpenHandles",
|
|
17
|
-
"build:script": "node scripts/build.js",
|
|
18
|
-
"prepublishOnly": "npm test"
|
|
19
|
-
},
|
|
20
|
-
"keywords": [
|
|
21
|
-
"ai",
|
|
22
|
-
"agent",
|
|
23
|
-
"bridge",
|
|
24
|
-
"protocol",
|
|
25
|
-
"platform",
|
|
26
|
-
"automation",
|
|
27
|
-
"web",
|
|
28
|
-
"ai-agent",
|
|
29
|
-
"agent-mesh",
|
|
30
|
-
"sovereign-browser",
|
|
31
|
-
"phone-shield",
|
|
32
|
-
"dns-discovery",
|
|
33
|
-
"api-gateway",
|
|
34
|
-
"browser-automation",
|
|
35
|
-
"webdriver-bidi"
|
|
36
|
-
],
|
|
37
|
-
"repository": {
|
|
38
|
-
"type": "git",
|
|
39
|
-
"url": "git+https://github.com/abokenan444/web-agent-bridge.git"
|
|
40
|
-
},
|
|
41
|
-
"homepage": "https://github.com/abokenan444/web-agent-bridge#readme",
|
|
42
|
-
"bugs": {
|
|
43
|
-
"url": "https://github.com/abokenan444/web-agent-bridge/issues"
|
|
44
|
-
},
|
|
45
|
-
"files": [
|
|
46
|
-
"bin/",
|
|
47
|
-
"server/",
|
|
48
|
-
"public/*.html",
|
|
49
|
-
"public/*.txt",
|
|
50
|
-
"public/*.xml",
|
|
51
|
-
"public/*.json",
|
|
52
|
-
"public/css/",
|
|
53
|
-
"public/js/",
|
|
54
|
-
"public/script/",
|
|
55
|
-
"public/assets/",
|
|
56
|
-
"public/.well-known/",
|
|
57
|
-
"script/",
|
|
58
|
-
"sdk/",
|
|
59
|
-
"templates/",
|
|
60
|
-
"examples/",
|
|
61
|
-
"README.md",
|
|
62
|
-
"README.ar.md",
|
|
63
|
-
"LICENSE"
|
|
64
|
-
],
|
|
65
|
-
"engines": {
|
|
66
|
-
"node": ">=18.0.0"
|
|
67
|
-
},
|
|
68
|
-
"license": "MIT",
|
|
69
|
-
"dependencies": {
|
|
70
|
-
"bcryptjs": "^3.0.3",
|
|
71
|
-
"better-sqlite3": "^11.6.0",
|
|
72
|
-
"cors": "^2.8.5",
|
|
73
|
-
"dotenv": "^16.4.5",
|
|
74
|
-
"express": "^4.21.0",
|
|
75
|
-
"express-rate-limit": "^7.4.1",
|
|
76
|
-
"helmet": "^8.0.0",
|
|
77
|
-
"jsonwebtoken": "^9.0.2",
|
|
78
|
-
"nodemailer": "^8.0.7",
|
|
79
|
-
"stripe": "^20.4.1",
|
|
80
|
-
"ws": "^8.20.0"
|
|
81
|
-
},
|
|
82
|
-
"devDependencies": {
|
|
83
|
-
"all-contributors-cli": "^6.26.1",
|
|
84
|
-
"jest": "^30.3.0",
|
|
85
|
-
"supertest": "^7.2.2"
|
|
86
|
-
},
|
|
87
|
-
"jest": {
|
|
88
|
-
"testPathIgnorePatterns": [
|
|
89
|
-
"/node_modules/",
|
|
90
|
-
"/packages/"
|
|
91
|
-
]
|
|
92
|
-
}
|
|
93
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "web-agent-bridge",
|
|
3
|
+
"version": "3.8.1",
|
|
4
|
+
"description": "Open AI↔Web protocol & agent platform: standardized command interface, sovereign browser, ShieldQR trust verifier, SSL health monitor, zero-config adoption (Cloudflare/Vercel/Netlify/Next.js), DNS discovery, agent mesh, and unified API gateway for safe AI–website interaction",
|
|
5
|
+
"author": "Web Agent Bridge <dev@webagentbridge.com>",
|
|
6
|
+
"main": "server/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"web-agent-bridge": "./bin/cli.js",
|
|
9
|
+
"wab": "./bin/cli.js",
|
|
10
|
+
"wab-agent": "./bin/cli.js",
|
|
11
|
+
"wab-init": "./bin/wab-init.js"
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"start": "node server/index.js",
|
|
15
|
+
"dev": "node server/index.js",
|
|
16
|
+
"test": "jest --forceExit --detectOpenHandles",
|
|
17
|
+
"build:script": "node scripts/build.js",
|
|
18
|
+
"prepublishOnly": "npm test"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"ai",
|
|
22
|
+
"agent",
|
|
23
|
+
"bridge",
|
|
24
|
+
"protocol",
|
|
25
|
+
"platform",
|
|
26
|
+
"automation",
|
|
27
|
+
"web",
|
|
28
|
+
"ai-agent",
|
|
29
|
+
"agent-mesh",
|
|
30
|
+
"sovereign-browser",
|
|
31
|
+
"phone-shield",
|
|
32
|
+
"dns-discovery",
|
|
33
|
+
"api-gateway",
|
|
34
|
+
"browser-automation",
|
|
35
|
+
"webdriver-bidi"
|
|
36
|
+
],
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "git+https://github.com/abokenan444/web-agent-bridge.git"
|
|
40
|
+
},
|
|
41
|
+
"homepage": "https://github.com/abokenan444/web-agent-bridge#readme",
|
|
42
|
+
"bugs": {
|
|
43
|
+
"url": "https://github.com/abokenan444/web-agent-bridge/issues"
|
|
44
|
+
},
|
|
45
|
+
"files": [
|
|
46
|
+
"bin/",
|
|
47
|
+
"server/",
|
|
48
|
+
"public/*.html",
|
|
49
|
+
"public/*.txt",
|
|
50
|
+
"public/*.xml",
|
|
51
|
+
"public/*.json",
|
|
52
|
+
"public/css/",
|
|
53
|
+
"public/js/",
|
|
54
|
+
"public/script/",
|
|
55
|
+
"public/assets/",
|
|
56
|
+
"public/.well-known/",
|
|
57
|
+
"script/",
|
|
58
|
+
"sdk/",
|
|
59
|
+
"templates/",
|
|
60
|
+
"examples/",
|
|
61
|
+
"README.md",
|
|
62
|
+
"README.ar.md",
|
|
63
|
+
"LICENSE"
|
|
64
|
+
],
|
|
65
|
+
"engines": {
|
|
66
|
+
"node": ">=18.0.0"
|
|
67
|
+
},
|
|
68
|
+
"license": "MIT",
|
|
69
|
+
"dependencies": {
|
|
70
|
+
"bcryptjs": "^3.0.3",
|
|
71
|
+
"better-sqlite3": "^11.6.0",
|
|
72
|
+
"cors": "^2.8.5",
|
|
73
|
+
"dotenv": "^16.4.5",
|
|
74
|
+
"express": "^4.21.0",
|
|
75
|
+
"express-rate-limit": "^7.4.1",
|
|
76
|
+
"helmet": "^8.0.0",
|
|
77
|
+
"jsonwebtoken": "^9.0.2",
|
|
78
|
+
"nodemailer": "^8.0.7",
|
|
79
|
+
"stripe": "^20.4.1",
|
|
80
|
+
"ws": "^8.20.0"
|
|
81
|
+
},
|
|
82
|
+
"devDependencies": {
|
|
83
|
+
"all-contributors-cli": "^6.26.1",
|
|
84
|
+
"jest": "^30.3.0",
|
|
85
|
+
"supertest": "^7.2.2"
|
|
86
|
+
},
|
|
87
|
+
"jest": {
|
|
88
|
+
"testPathIgnorePatterns": [
|
|
89
|
+
"/node_modules/",
|
|
90
|
+
"/packages/"
|
|
91
|
+
]
|
|
92
|
+
}
|
|
93
|
+
}
|