ax-audit 5.0.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/README.md +33 -24
- package/dist/baseline.js +1 -1
- package/dist/baseline.js.map +1 -1
- package/dist/check-ids.js +1 -1
- package/dist/check-ids.js.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/constants.d.ts +1 -85
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +0 -135
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/license.d.ts +3 -2
- package/dist/license.d.ts.map +1 -1
- package/dist/license.js +5 -58
- package/dist/license.js.map +1 -1
- package/dist/metadata.d.ts +6 -0
- package/dist/metadata.d.ts.map +1 -0
- package/dist/metadata.js +205 -0
- package/dist/metadata.js.map +1 -0
- package/dist/orchestrator.d.ts +1 -0
- package/dist/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator.js +134 -63
- package/dist/orchestrator.js.map +1 -1
- package/dist/scorer.js +2 -2
- package/dist/scorer.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/docs/api.md +12 -4
- package/docs/architecture.md +9 -98
- package/docs/ci.md +7 -3
- package/docs/cli.md +7 -3
- package/docs/faq.md +18 -0
- package/docs/getting-started.md +32 -26
- package/package.json +5 -5
- package/dist/checks/agent-access.d.ts +0 -33
- package/dist/checks/agent-access.d.ts.map +0 -1
- package/dist/checks/agent-access.js +0 -256
- package/dist/checks/agent-access.js.map +0 -1
- package/dist/checks/agent-card.d.ts +0 -37
- package/dist/checks/agent-card.d.ts.map +0 -1
- package/dist/checks/agent-card.js +0 -352
- package/dist/checks/agent-card.js.map +0 -1
- package/dist/checks/agent-operability.d.ts +0 -66
- package/dist/checks/agent-operability.d.ts.map +0 -1
- package/dist/checks/agent-operability.js +0 -383
- package/dist/checks/agent-operability.js.map +0 -1
- package/dist/checks/agent-skills.d.ts +0 -24
- package/dist/checks/agent-skills.d.ts.map +0 -1
- package/dist/checks/agent-skills.js +0 -316
- package/dist/checks/agent-skills.js.map +0 -1
- package/dist/checks/ai-catalog.d.ts +0 -28
- package/dist/checks/ai-catalog.d.ts.map +0 -1
- package/dist/checks/ai-catalog.js +0 -254
- package/dist/checks/ai-catalog.js.map +0 -1
- package/dist/checks/ai-directives.d.ts +0 -57
- package/dist/checks/ai-directives.d.ts.map +0 -1
- package/dist/checks/ai-directives.js +0 -263
- package/dist/checks/ai-directives.js.map +0 -1
- package/dist/checks/api-discovery.d.ts +0 -26
- package/dist/checks/api-discovery.d.ts.map +0 -1
- package/dist/checks/api-discovery.js +0 -432
- package/dist/checks/api-discovery.js.map +0 -1
- package/dist/checks/auth-discovery.d.ts +0 -28
- package/dist/checks/auth-discovery.d.ts.map +0 -1
- package/dist/checks/auth-discovery.js +0 -302
- package/dist/checks/auth-discovery.js.map +0 -1
- package/dist/checks/commerce-discovery.d.ts +0 -40
- package/dist/checks/commerce-discovery.d.ts.map +0 -1
- package/dist/checks/commerce-discovery.js +0 -295
- package/dist/checks/commerce-discovery.js.map +0 -1
- package/dist/checks/content-negotiation.d.ts +0 -4
- package/dist/checks/content-negotiation.d.ts.map +0 -1
- package/dist/checks/content-negotiation.js +0 -253
- package/dist/checks/content-negotiation.js.map +0 -1
- package/dist/checks/crawl-efficiency.d.ts +0 -16
- package/dist/checks/crawl-efficiency.d.ts.map +0 -1
- package/dist/checks/crawl-efficiency.js +0 -186
- package/dist/checks/crawl-efficiency.js.map +0 -1
- package/dist/checks/frontmatter.d.ts +0 -34
- package/dist/checks/frontmatter.d.ts.map +0 -1
- package/dist/checks/frontmatter.js +0 -100
- package/dist/checks/frontmatter.js.map +0 -1
- package/dist/checks/html-rendering.d.ts +0 -21
- package/dist/checks/html-rendering.d.ts.map +0 -1
- package/dist/checks/html-rendering.js +0 -221
- package/dist/checks/html-rendering.js.map +0 -1
- package/dist/checks/html-utils.d.ts +0 -66
- package/dist/checks/html-utils.d.ts.map +0 -1
- package/dist/checks/html-utils.js +0 -139
- package/dist/checks/html-utils.js.map +0 -1
- package/dist/checks/http-headers.d.ts +0 -11
- package/dist/checks/http-headers.d.ts.map +0 -1
- package/dist/checks/http-headers.js +0 -249
- package/dist/checks/http-headers.js.map +0 -1
- package/dist/checks/http-hygiene.d.ts +0 -26
- package/dist/checks/http-hygiene.d.ts.map +0 -1
- package/dist/checks/http-hygiene.js +0 -257
- package/dist/checks/http-hygiene.js.map +0 -1
- package/dist/checks/index.d.ts +0 -3
- package/dist/checks/index.d.ts.map +0 -1
- package/dist/checks/index.js +0 -55
- package/dist/checks/index.js.map +0 -1
- package/dist/checks/llms-txt.d.ts +0 -19
- package/dist/checks/llms-txt.d.ts.map +0 -1
- package/dist/checks/llms-txt.js +0 -281
- package/dist/checks/llms-txt.js.map +0 -1
- package/dist/checks/mcp-discovery.d.ts +0 -30
- package/dist/checks/mcp-discovery.d.ts.map +0 -1
- package/dist/checks/mcp-discovery.js +0 -523
- package/dist/checks/mcp-discovery.js.map +0 -1
- package/dist/checks/meta-tags.d.ts +0 -17
- package/dist/checks/meta-tags.d.ts.map +0 -1
- package/dist/checks/meta-tags.js +0 -188
- package/dist/checks/meta-tags.js.map +0 -1
- package/dist/checks/robots-parser.d.ts +0 -110
- package/dist/checks/robots-parser.d.ts.map +0 -1
- package/dist/checks/robots-parser.js +0 -277
- package/dist/checks/robots-parser.js.map +0 -1
- package/dist/checks/robots-txt.d.ts +0 -6
- package/dist/checks/robots-txt.d.ts.map +0 -1
- package/dist/checks/robots-txt.js +0 -367
- package/dist/checks/robots-txt.js.map +0 -1
- package/dist/checks/rsl.d.ts +0 -4
- package/dist/checks/rsl.d.ts.map +0 -1
- package/dist/checks/rsl.js +0 -242
- package/dist/checks/rsl.js.map +0 -1
- package/dist/checks/security-txt.d.ts +0 -4
- package/dist/checks/security-txt.d.ts.map +0 -1
- package/dist/checks/security-txt.js +0 -81
- package/dist/checks/security-txt.js.map +0 -1
- package/dist/checks/seo-basics.d.ts +0 -13
- package/dist/checks/seo-basics.d.ts.map +0 -1
- package/dist/checks/seo-basics.js +0 -221
- package/dist/checks/seo-basics.js.map +0 -1
- package/dist/checks/sitemap.d.ts +0 -12
- package/dist/checks/sitemap.d.ts.map +0 -1
- package/dist/checks/sitemap.js +0 -240
- package/dist/checks/sitemap.js.map +0 -1
- package/dist/checks/structured-data.d.ts +0 -4
- package/dist/checks/structured-data.d.ts.map +0 -1
- package/dist/checks/structured-data.js +0 -408
- package/dist/checks/structured-data.js.map +0 -1
- package/dist/checks/structured-fields.d.ts +0 -46
- package/dist/checks/structured-fields.d.ts.map +0 -1
- package/dist/checks/structured-fields.js +0 -112
- package/dist/checks/structured-fields.js.map +0 -1
- package/dist/checks/surface.d.ts +0 -59
- package/dist/checks/surface.d.ts.map +0 -1
- package/dist/checks/surface.js +0 -106
- package/dist/checks/surface.js.map +0 -1
- package/dist/checks/tls-https.d.ts +0 -13
- package/dist/checks/tls-https.d.ts.map +0 -1
- package/dist/checks/tls-https.js +0 -163
- package/dist/checks/tls-https.js.map +0 -1
- package/dist/checks/usage-policy.d.ts +0 -53
- package/dist/checks/usage-policy.d.ts.map +0 -1
- package/dist/checks/usage-policy.js +0 -339
- package/dist/checks/usage-policy.js.map +0 -1
- package/dist/checks/utils.d.ts +0 -40
- package/dist/checks/utils.d.ts.map +0 -1
- package/dist/checks/utils.js +0 -74
- package/dist/checks/utils.js.map +0 -1
- package/dist/checks/waf.d.ts +0 -75
- package/dist/checks/waf.d.ts.map +0 -1
- package/dist/checks/waf.js +0 -203
- package/dist/checks/waf.js.map +0 -1
- package/dist/checks/webmcp.d.ts +0 -55
- package/dist/checks/webmcp.d.ts.map +0 -1
- package/dist/checks/webmcp.js +0 -209
- package/dist/checks/webmcp.js.map +0 -1
- package/dist/checks/well-known.d.ts +0 -38
- package/dist/checks/well-known.d.ts.map +0 -1
- package/dist/checks/well-known.js +0 -202
- package/dist/checks/well-known.js.map +0 -1
- package/dist/fetcher.d.ts +0 -15
- package/dist/fetcher.d.ts.map +0 -1
- package/dist/fetcher.js +0 -127
- package/dist/fetcher.js.map +0 -1
- package/dist/guide-urls.d.ts +0 -2
- package/dist/guide-urls.d.ts.map +0 -1
- package/dist/guide-urls.js +0 -5
- package/dist/guide-urls.js.map +0 -1
- package/dist/licensed-checks.d.ts +0 -4
- package/dist/licensed-checks.d.ts.map +0 -1
- package/dist/licensed-checks.js +0 -11
- package/dist/licensed-checks.js.map +0 -1
- package/docs/roadmap.md +0 -367
package/dist/license.js
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/** License checks carry only the account key, never the target URL or report. */
|
|
2
|
-
const ENDPOINT = 'https://axrush.com/api/v1/engine/license';
|
|
3
|
-
const ACCOUNT = 'https://axrush.com/account/api';
|
|
4
1
|
export class LicenseError extends Error {
|
|
5
2
|
code;
|
|
6
3
|
constructor(code, message) {
|
|
@@ -9,63 +6,13 @@ export class LicenseError extends Error {
|
|
|
9
6
|
this.name = 'LicenseError';
|
|
10
7
|
}
|
|
11
8
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const pending = new Map();
|
|
15
|
-
async function validate(key) {
|
|
16
|
-
const controller = new AbortController();
|
|
17
|
-
const timer = setTimeout(() => controller.abort(), 10_000);
|
|
18
|
-
try {
|
|
19
|
-
const response = await fetch(ENDPOINT, {
|
|
20
|
-
method: 'POST',
|
|
21
|
-
headers: { authorization: `Bearer ${key}`, accept: 'application/json' },
|
|
22
|
-
redirect: 'error',
|
|
23
|
-
signal: controller.signal,
|
|
24
|
-
cache: 'no-store',
|
|
25
|
-
});
|
|
26
|
-
if (response.status === 401)
|
|
27
|
-
throw new LicenseError('INVALID_KEY', `Your AX Rush key is invalid or revoked. Create a key at ${ACCOUNT}.`);
|
|
28
|
-
if (response.status === 403)
|
|
29
|
-
throw new LicenseError('PLAN_REQUIRED', 'An active paid AX Rush plan is required. Manage your subscription at https://axrush.com/account/billing.');
|
|
30
|
-
if (!response.ok)
|
|
31
|
-
throw new Error('License service unavailable');
|
|
32
|
-
const result = await response.json();
|
|
33
|
-
if (!result ||
|
|
34
|
-
typeof result !== 'object' ||
|
|
35
|
-
!('licensed' in result) ||
|
|
36
|
-
result.licensed !== true ||
|
|
37
|
-
!('product' in result) ||
|
|
38
|
-
result.product !== 'ax-audit') {
|
|
39
|
-
throw new Error('Invalid license response');
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
catch (error) {
|
|
43
|
-
if (error instanceof LicenseError)
|
|
44
|
-
throw error;
|
|
45
|
-
// Network errors can include URLs or headers. Never copy them into an error
|
|
46
|
-
// printed by the CLI, and never fall through to an unlicensed audit.
|
|
47
|
-
throw new LicenseError('VALIDATION_UNAVAILABLE', 'AX Rush could not validate your key. Check your connection and try again; no audit was started.');
|
|
48
|
-
}
|
|
49
|
-
finally {
|
|
50
|
-
clearTimeout(timer);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
export async function requireLicense(apiKey) {
|
|
9
|
+
/** Client-side checks improve errors. The server independently enforces access. */
|
|
10
|
+
export function accountKey(apiKey) {
|
|
54
11
|
const key = (apiKey ?? process.env.AXRUSH_API_KEY)?.trim();
|
|
55
12
|
if (!key)
|
|
56
|
-
throw new LicenseError('MISSING_KEY',
|
|
13
|
+
throw new LicenseError('MISSING_KEY', 'Set AXRUSH_API_KEY to a key generated at https://axrush.com/account/api. An active paid AX Rush subscription is required.');
|
|
57
14
|
if (!/^axr_[A-Za-z0-9_-]{43}$/.test(key))
|
|
58
|
-
throw new LicenseError('INVALID_KEY',
|
|
59
|
-
|
|
60
|
-
if (existing)
|
|
61
|
-
return existing;
|
|
62
|
-
const validation = validate(key);
|
|
63
|
-
pending.set(key, validation);
|
|
64
|
-
try {
|
|
65
|
-
await validation;
|
|
66
|
-
}
|
|
67
|
-
finally {
|
|
68
|
-
pending.delete(key);
|
|
69
|
-
}
|
|
15
|
+
throw new LicenseError('INVALID_KEY', 'Invalid AX Rush key format. Create a key at https://axrush.com/account/api.');
|
|
16
|
+
return key;
|
|
70
17
|
}
|
|
71
18
|
//# sourceMappingURL=license.js.map
|
package/dist/license.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"license.js","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"license.js","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,YAAa,SAAQ,KAAK;IAEnB;IADlB,YACkB,IAAsB,EACtC,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAkB;QAItC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,mFAAmF;AACnF,MAAM,UAAU,UAAU,CAAC,MAAe;IACxC,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC;IAC3D,IAAI,CAAC,GAAG;QACN,MAAM,IAAI,YAAY,CACpB,aAAa,EACb,2HAA2H,CAC5H,CAAC;IACJ,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC;QACtC,MAAM,IAAI,YAAY,CACpB,aAAa,EACb,6EAA6E,CAC9E,CAAC;IACJ,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,gEAAgE;AAChE,eAAO,MAAM,MAAM,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,EA0MvC,CAAC"}
|
package/dist/metadata.js
ADDED
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/** Descriptions only. Check execution is private to AX Rush. */
|
|
2
|
+
export const checks = [
|
|
3
|
+
{
|
|
4
|
+
meta: {
|
|
5
|
+
id: 'llms-txt',
|
|
6
|
+
name: 'LLMs.txt',
|
|
7
|
+
description: 'Checks /llms.txt presence, spec compliance, and link health',
|
|
8
|
+
category: 'discovery',
|
|
9
|
+
},
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
meta: {
|
|
13
|
+
id: 'robots-txt',
|
|
14
|
+
name: 'Robots.txt',
|
|
15
|
+
description: 'Checks AI crawler configuration in robots.txt',
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
meta: {
|
|
20
|
+
id: 'agent-card',
|
|
21
|
+
name: 'Agent Card (A2A)',
|
|
22
|
+
description: 'Checks the A2A Agent Card at /.well-known/agent-card.json',
|
|
23
|
+
category: 'protocols',
|
|
24
|
+
aliases: ['agent-json'],
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
meta: {
|
|
29
|
+
id: 'security-txt',
|
|
30
|
+
name: 'Security.txt',
|
|
31
|
+
description: 'Checks /.well-known/security.txt RFC 9116 compliance',
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
meta: {
|
|
36
|
+
id: 'structured-data',
|
|
37
|
+
name: 'Structured Data',
|
|
38
|
+
description: 'Checks JSON-LD structured data on homepage',
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
meta: {
|
|
43
|
+
id: 'meta-tags',
|
|
44
|
+
name: 'Meta Tags',
|
|
45
|
+
description: 'Checks AI meta tags, rel="alternate", rel="me", and Open Graph / Twitter Card completeness',
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
meta: {
|
|
50
|
+
id: 'api-discovery',
|
|
51
|
+
name: 'API Discovery',
|
|
52
|
+
description: 'Checks how agents discover an API description (RFC 9727 catalog, service-desc links, OpenAPI)',
|
|
53
|
+
category: 'protocols',
|
|
54
|
+
aliases: ['openapi'],
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
meta: {
|
|
59
|
+
id: 'http-headers',
|
|
60
|
+
name: 'HTTP Headers',
|
|
61
|
+
description: 'Checks security headers, AI discovery Link headers, and CORS',
|
|
62
|
+
category: 'discovery',
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
meta: {
|
|
67
|
+
id: 'mcp-discovery',
|
|
68
|
+
name: 'MCP Discovery',
|
|
69
|
+
description: 'Checks how AI agents discover this site’s Model Context Protocol server',
|
|
70
|
+
category: 'protocols',
|
|
71
|
+
aliases: ['mcp'],
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
meta: {
|
|
76
|
+
id: 'html-rendering',
|
|
77
|
+
name: 'HTML Rendering',
|
|
78
|
+
description: 'Checks server-rendered content, semantic landmarks, and SPA-shell heuristics',
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
meta: {
|
|
83
|
+
id: 'sitemap',
|
|
84
|
+
name: 'Sitemap',
|
|
85
|
+
description: 'Checks sitemap.xml presence, structure, and freshness',
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
meta: {
|
|
90
|
+
id: 'seo-basics',
|
|
91
|
+
name: 'SEO Basics',
|
|
92
|
+
description: 'Checks <title>, meta description, canonical, lang, charset, viewport, hreflang',
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
meta: {
|
|
97
|
+
id: 'tls-https',
|
|
98
|
+
name: 'TLS / HTTPS',
|
|
99
|
+
description: 'Checks HTTPS, HTTP→HTTPS redirect, and HSTS configuration',
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
meta: {
|
|
104
|
+
id: 'content-negotiation',
|
|
105
|
+
name: 'Content Negotiation',
|
|
106
|
+
description: 'Checks whether the homepage serves Markdown to AI agents via Accept: text/markdown',
|
|
107
|
+
category: 'content',
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
meta: {
|
|
112
|
+
id: 'rsl',
|
|
113
|
+
name: 'RSL License',
|
|
114
|
+
description: 'Checks Really Simple Licensing (RSL) discovery and license document validity',
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
meta: {
|
|
119
|
+
id: 'agent-access',
|
|
120
|
+
name: 'Agent Access',
|
|
121
|
+
description: 'Checks that AI crawler user-agents are not blocked or served reduced content (cloaking)',
|
|
122
|
+
category: 'access',
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
meta: {
|
|
127
|
+
id: 'crawl-efficiency',
|
|
128
|
+
name: 'Crawl Efficiency',
|
|
129
|
+
description: 'Checks compression, conditional GET (ETag / Last-Modified), and response size',
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
meta: {
|
|
134
|
+
id: 'ai-directives',
|
|
135
|
+
name: 'AI Directives',
|
|
136
|
+
description: 'Checks page-level robots directives that govern AI answers and summaries',
|
|
137
|
+
category: 'access',
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
meta: {
|
|
142
|
+
id: 'usage-policy',
|
|
143
|
+
name: 'Usage Policy',
|
|
144
|
+
description: 'Checks machine-readable AI usage signals for coverage and internal consistency',
|
|
145
|
+
category: 'policy',
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
meta: {
|
|
150
|
+
id: 'http-hygiene',
|
|
151
|
+
name: 'HTTP Hygiene',
|
|
152
|
+
description: 'Checks status-code honesty, redirect depth, rate-limit headers and content typing',
|
|
153
|
+
category: 'access',
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
meta: {
|
|
158
|
+
id: 'ai-catalog',
|
|
159
|
+
name: 'AI Catalog',
|
|
160
|
+
description: 'Checks the agent resource catalog (ai-catalog.json / ard.json) and whether its entries resolve',
|
|
161
|
+
category: 'protocols',
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
meta: {
|
|
166
|
+
id: 'agent-skills',
|
|
167
|
+
name: 'Agent Skills',
|
|
168
|
+
description: 'Checks discoverable Agent Skills (SKILL.md) and their frontmatter',
|
|
169
|
+
category: 'protocols',
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
meta: {
|
|
174
|
+
id: 'webmcp',
|
|
175
|
+
name: 'WebMCP',
|
|
176
|
+
description: 'Checks declarative WebMCP tool annotations on forms',
|
|
177
|
+
category: 'protocols',
|
|
178
|
+
},
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
meta: {
|
|
182
|
+
id: 'commerce-discovery',
|
|
183
|
+
name: 'Commerce Discovery',
|
|
184
|
+
description: 'Checks the Universal Commerce Protocol profile for agent-driven purchasing',
|
|
185
|
+
category: 'protocols',
|
|
186
|
+
},
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
meta: {
|
|
190
|
+
id: 'auth-discovery',
|
|
191
|
+
name: 'Auth Discovery',
|
|
192
|
+
description: 'Checks OAuth metadata (RFC 9728 / RFC 8414) so agents can authenticate without documentation',
|
|
193
|
+
category: 'protocols',
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
meta: {
|
|
198
|
+
id: 'agent-operability',
|
|
199
|
+
name: 'Agent Operability',
|
|
200
|
+
description: 'Checks whether interactive elements are nameable and operable by a browser agent',
|
|
201
|
+
category: 'content',
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
];
|
|
205
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"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"}
|
package/dist/orchestrator.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AuditOptions, AuditReport, BatchAuditReport, BatchOptions } from './types.js';
|
|
2
|
+
/** Send a URL to AX Rush. No check implementation or local fallback ships in npm. */
|
|
2
3
|
export declare function audit(options: AuditOptions): Promise<AuditReport>;
|
|
3
4
|
export declare function batchAudit(urls: string[], options?: BatchOptions): Promise<BatchAuditReport>;
|
|
4
5
|
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA6F5F,qFAAqF;AACrF,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CA4CvE;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwCtG"}
|
package/dist/orchestrator.js
CHANGED
|
@@ -1,74 +1,145 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
if (s.status === 'fulfilled') {
|
|
31
|
-
log(`${checksToRun[i].meta.id}: score=${s.value.score} (${s.value.duration}ms)`);
|
|
32
|
-
return s.value;
|
|
33
|
-
}
|
|
34
|
-
log(`${checksToRun[i].meta.id}: CRASHED — ${s.reason?.message || 'Unknown error'}`);
|
|
1
|
+
import { accountKey, LicenseError } from './license.js';
|
|
2
|
+
import { getGrade } from './scorer.js';
|
|
3
|
+
import { allSelectableIds } from './check-ids.js';
|
|
4
|
+
const ENDPOINT = 'https://axrush.com/api/v1/engine/audit';
|
|
5
|
+
const PROFILES = new Set(['auto', 'api', 'mcp', 'agent', 'docs', 'commerce', 'all']);
|
|
6
|
+
const CHECKS = new Set(allSelectableIds().map((id) => id.toLowerCase()));
|
|
7
|
+
function payload(options) {
|
|
8
|
+
try {
|
|
9
|
+
const url = new URL(options.url);
|
|
10
|
+
if (!['http:', 'https:'].includes(url.protocol) ||
|
|
11
|
+
url.username ||
|
|
12
|
+
url.password ||
|
|
13
|
+
(url.port && !['80', '443'].includes(url.port)) ||
|
|
14
|
+
options.url.length > 2048)
|
|
15
|
+
throw new Error();
|
|
16
|
+
if (options.profile !== undefined && !PROFILES.has(options.profile))
|
|
17
|
+
throw new Error();
|
|
18
|
+
if (options.checks !== undefined &&
|
|
19
|
+
(!Array.isArray(options.checks) ||
|
|
20
|
+
!options.checks.length ||
|
|
21
|
+
options.checks.length > 26 ||
|
|
22
|
+
options.checks.some((id) => typeof id !== 'string' || !CHECKS.has(id.toLowerCase()))))
|
|
23
|
+
throw new Error();
|
|
24
|
+
if (options.timeout !== undefined &&
|
|
25
|
+
(!Number.isInteger(options.timeout) || options.timeout < 100 || options.timeout > 10_000))
|
|
26
|
+
throw new Error();
|
|
27
|
+
if (options.retries !== undefined &&
|
|
28
|
+
(!Number.isInteger(options.retries) || options.retries < 0 || options.retries > 2))
|
|
29
|
+
throw new Error();
|
|
35
30
|
return {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
duration: 0,
|
|
31
|
+
url: url.toString(),
|
|
32
|
+
checks: options.checks,
|
|
33
|
+
profile: options.profile,
|
|
34
|
+
timeout: options.timeout,
|
|
35
|
+
retries: options.retries,
|
|
42
36
|
};
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
throw new LicenseError('INVALID_INPUT', 'Use a public HTTP(S) URL without credentials, supported checks/profile, timeout 100–10000 ms and retries 0–2.');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function validReport(value) {
|
|
43
|
+
if (!value || typeof value !== 'object')
|
|
44
|
+
return false;
|
|
45
|
+
const r = value;
|
|
46
|
+
return (typeof r.url === 'string' &&
|
|
47
|
+
typeof r.timestamp === 'string' &&
|
|
48
|
+
Number.isFinite(Date.parse(r.timestamp)) &&
|
|
49
|
+
typeof r.overallScore === 'number' &&
|
|
50
|
+
Number.isFinite(r.overallScore) &&
|
|
51
|
+
r.overallScore >= 0 &&
|
|
52
|
+
r.overallScore <= 100 &&
|
|
53
|
+
typeof r.duration === 'number' &&
|
|
54
|
+
Number.isFinite(r.duration) &&
|
|
55
|
+
r.duration >= 0 &&
|
|
56
|
+
typeof r.engine === 'string' &&
|
|
57
|
+
!!r.engine &&
|
|
58
|
+
!!r.grade &&
|
|
59
|
+
typeof r.grade.min === 'number' &&
|
|
60
|
+
typeof r.grade.label === 'string' &&
|
|
61
|
+
typeof r.grade.color === 'string' &&
|
|
62
|
+
Array.isArray(r.results) &&
|
|
63
|
+
r.results.length > 0 &&
|
|
64
|
+
r.results.every((result) => result &&
|
|
65
|
+
typeof result.id === 'string' &&
|
|
66
|
+
typeof result.name === 'string' &&
|
|
67
|
+
typeof result.description === 'string' &&
|
|
68
|
+
typeof result.score === 'number' &&
|
|
69
|
+
Number.isFinite(result.score) &&
|
|
70
|
+
result.score >= 0 &&
|
|
71
|
+
result.score <= 100 &&
|
|
72
|
+
typeof result.duration === 'number' &&
|
|
73
|
+
Array.isArray(result.findings) &&
|
|
74
|
+
result.findings.every((finding) => finding && ['pass', 'warn', 'fail'].includes(finding.status) && typeof finding.message === 'string')));
|
|
75
|
+
}
|
|
76
|
+
/** Send a URL to AX Rush. No check implementation or local fallback ships in npm. */
|
|
77
|
+
export async function audit(options) {
|
|
78
|
+
const key = accountKey(options.apiKey);
|
|
79
|
+
const body = payload(options);
|
|
80
|
+
const controller = new AbortController();
|
|
81
|
+
const timer = setTimeout(() => controller.abort(), 65_000);
|
|
82
|
+
try {
|
|
83
|
+
const response = await fetch(ENDPOINT, {
|
|
84
|
+
method: 'POST',
|
|
85
|
+
headers: { authorization: `Bearer ${key}`, accept: 'application/json', 'content-type': 'application/json' },
|
|
86
|
+
body: JSON.stringify(body),
|
|
87
|
+
redirect: 'error',
|
|
88
|
+
signal: controller.signal,
|
|
89
|
+
cache: 'no-store',
|
|
90
|
+
});
|
|
91
|
+
if (response.status === 401)
|
|
92
|
+
throw new LicenseError('INVALID_KEY', 'Your AX Rush key is invalid or revoked. Create a key at https://axrush.com/account/api.');
|
|
93
|
+
if (response.status === 403)
|
|
94
|
+
throw new LicenseError('PLAN_REQUIRED', 'An active paid AX Rush subscription is required. Manage it at https://axrush.com/account/billing.');
|
|
95
|
+
if (response.status === 429)
|
|
96
|
+
throw new LicenseError('RATE_LIMITED', 'Too many audits for this organization or target. Try again later.');
|
|
97
|
+
if (response.status === 400 || response.status === 413)
|
|
98
|
+
throw new LicenseError('INVALID_INPUT', 'AX Rush rejected the audit input. Use a publicly reachable HTTP(S) URL and supported options. Local/private networks are not supported.');
|
|
99
|
+
if (!response.ok)
|
|
100
|
+
throw new Error();
|
|
101
|
+
const result = await response.json();
|
|
102
|
+
if (!validReport(result))
|
|
103
|
+
throw new Error();
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
if (error instanceof LicenseError)
|
|
108
|
+
throw error;
|
|
109
|
+
throw new LicenseError('VALIDATION_UNAVAILABLE', 'AX Rush could not complete the audit request. Check your connection and try again. No local audit was performed.');
|
|
110
|
+
}
|
|
111
|
+
finally {
|
|
112
|
+
clearTimeout(timer);
|
|
113
|
+
}
|
|
54
114
|
}
|
|
55
115
|
export async function batchAudit(urls, options = {}) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
116
|
+
accountKey(options.apiKey);
|
|
117
|
+
if (!Array.isArray(urls) ||
|
|
118
|
+
!urls.length ||
|
|
119
|
+
urls.length > 100 ||
|
|
120
|
+
(options.concurrency !== undefined &&
|
|
121
|
+
(!Number.isInteger(options.concurrency) || options.concurrency < 1 || options.concurrency > 4))) {
|
|
122
|
+
throw new LicenseError('INVALID_INPUT', 'Provide 1–100 URLs and a concurrency between 1 and 4.');
|
|
123
|
+
}
|
|
124
|
+
urls.forEach((url) => payload({ ...options, url }));
|
|
125
|
+
const started = performance.now();
|
|
61
126
|
const reports = new Array(urls.length);
|
|
62
127
|
let next = 0;
|
|
128
|
+
let failed = false;
|
|
63
129
|
async function worker() {
|
|
64
|
-
while (next < urls.length) {
|
|
65
|
-
const
|
|
66
|
-
|
|
130
|
+
while (!failed && next < urls.length) {
|
|
131
|
+
const index = next++;
|
|
132
|
+
try {
|
|
133
|
+
reports[index] = await audit({ ...options, url: urls[index] });
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
failed = true;
|
|
137
|
+
throw error;
|
|
138
|
+
}
|
|
67
139
|
}
|
|
68
140
|
}
|
|
69
|
-
await Promise.all(Array.from({ length: Math.min(concurrency, urls.length) }, worker));
|
|
70
|
-
const
|
|
71
|
-
const averageScore = Math.round(scores.reduce((a, b) => a + b, 0) / scores.length);
|
|
141
|
+
await Promise.all(Array.from({ length: Math.min(options.concurrency ?? 1, urls.length) }, worker));
|
|
142
|
+
const averageScore = Math.round(reports.reduce((sum, report) => sum + report.overallScore, 0) / reports.length);
|
|
72
143
|
return {
|
|
73
144
|
reports,
|
|
74
145
|
summary: {
|
|
@@ -78,7 +149,7 @@ export async function batchAudit(urls, options = {}) {
|
|
|
78
149
|
averageScore,
|
|
79
150
|
grade: getGrade(averageScore),
|
|
80
151
|
},
|
|
81
|
-
duration: Math.round(performance.now() -
|
|
152
|
+
duration: Math.round(performance.now() - started),
|
|
82
153
|
};
|
|
83
154
|
}
|
|
84
155
|
//# sourceMappingURL=orchestrator.js.map
|
package/dist/orchestrator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"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"}
|
package/dist/scorer.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CHECK_CATEGORIES, CHECK_WEIGHTS, GRADES } from './constants.js';
|
|
2
|
-
import { checks as allChecks } from './
|
|
3
|
-
|
|
2
|
+
import { checks as allChecks } from './metadata.js';
|
|
3
|
+
const clampScore = (score) => Math.max(0, Math.min(100, score));
|
|
4
4
|
/**
|
|
5
5
|
* Weighted average across the checks that ran and apply.
|
|
6
6
|
*
|
package/dist/scorer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scorer.js","sourceRoot":"","sources":["../src/scorer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"scorer.js","sourceRoot":"","sources":["../src/scorer.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED