-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathregistry.ts
More file actions
149 lines (145 loc) · 4.75 KB
/
Copy pathregistry.ts
File metadata and controls
149 lines (145 loc) · 4.75 KB
1
2
3
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
// Canonical registry of the seven free tools deployed under `{{TOOLS_HOST}}`.
// One source of truth used by:
// - `og.spec.ts` to render OG images
// - `<slug>.spec.ts` for per-tool SEO + functional assertions
// - `registry.spec.ts` to validate `llms.txt` and the index page list
// - `make tools-check` (via `scripts/tools-check.ts`) to assert that the
// promo home strip stays in sync with `promote: true`.
//
// Adding a new tool: drop a row here, add a `<slug>.spec.ts`, regenerate OG
// (`make tools-og`), and add the env-var responder ID. See dev/tools/AGENTS.md.
export const TOOLS_HOST = process.env.SECUTILS_TOOLS_PUBLIC_HOST?.trim() || 'tools.secutils.dev';
export interface Tool {
/** Slug used in OG image filenames (`og-<slug>.png`) and inside the spec
* filename (`<slug>.spec.ts`). Path-derived so URLs stay self-evident. */
slug: string;
/** Source HTML filename in `dev/tools/`. */
source: string;
/** Human-readable name (matches `<meta name="su-tool-name">`). */
name: string;
/** URL path under the tools host (matches `<meta name="su-tool-path">`). */
path: string;
/** One-line description used in OG images, footer cards, llms.txt. */
description: string;
/** schema.org applicationCategory used in the WebApplication JSON-LD. */
applicationCategory: 'SecurityApplication' | 'DeveloperApplication';
/** Promoted on the marketing home page (chip strip, free-tools card). */
promote: boolean;
/** Per-tool accent color for OG images. Hex, lowercase. */
accent: string;
/** Symbolic icon id understood by `dev/tools/og-template.html`. */
icon: 'key' | 'shield' | 'cert' | 'doc' | 'bolt' | 'id' | 'grid' | 'pdf' | 'chart';
}
export const TOOLS: readonly Tool[] = [
{
slug: 'jwt',
source: 'jwt-debugger.html',
name: 'JWT Debugger',
path: '/jwt',
description: 'Decode, verify, and sign HMAC JSON Web Tokens.',
applicationCategory: 'SecurityApplication',
promote: true,
accent: '#7b6ff7',
icon: 'key',
},
{
slug: 'saml',
source: 'saml-decoder.html',
name: 'SAML Decoder',
path: '/saml',
description: 'Inspect SAML responses, requests, and metadata.',
applicationCategory: 'SecurityApplication',
promote: true,
accent: '#2bb3bf',
icon: 'shield',
},
{
slug: 'pem',
source: 'certificate-decoder.html',
name: 'PEM Certificate Decoder',
path: '/pem',
description: 'Inspect PEM-encoded X.509 certificate chains.',
applicationCategory: 'SecurityApplication',
promote: true,
accent: '#00bfb3',
icon: 'cert',
},
{
slug: 'md',
source: 'md.html',
name: 'Markdown Preview',
path: '/md',
description: 'Reading-first Markdown preview with Mermaid, math, alerts, and HTML/PDF export.',
applicationCategory: 'DeveloperApplication',
promote: true,
accent: '#a371f7',
icon: 'doc',
},
{
slug: 'pdf',
source: 'pdf-extractor.html',
name: 'PDF Extractor',
path: '/pdf',
description: 'Extract spatial text and structured JSON from PDFs, in-browser.',
applicationCategory: 'DeveloperApplication',
promote: true,
accent: '#e94f64',
icon: 'pdf',
},
{
slug: 'echo',
source: 'echo.html',
name: 'HTTP Echo / Mock Response',
path: '/echo',
description: 'Build a customizable HTTP response, served as a shareable URL.',
applicationCategory: 'DeveloperApplication',
promote: true,
accent: '#fed047',
icon: 'bolt',
},
{
slug: 'webhook',
source: 'webhook.html',
name: 'Webhook Inspector',
path: '/webhook',
description: 'Ephemeral webhook URL that captures and decrypts incoming HTTP requests live.',
applicationCategory: 'DeveloperApplication',
promote: true,
accent: '#34d399',
icon: 'grid',
},
{
slug: 'forecast',
source: 'forecast.html',
name: 'Forecast',
path: '/forecast',
description: 'Fit trendlines, forecast future values, and spot anomalies in numeric series.',
applicationCategory: 'DeveloperApplication',
promote: true,
accent: '#3aa3ff',
icon: 'chart',
},
{
slug: 'mock-saml-idp',
source: 'mock-saml-idp.html',
name: 'Mock SAML IdP',
path: '/elastic/saml/idp-login',
description: 'Signed SAML responses for Elasticsearch and Kibana SSO testing.',
applicationCategory: 'SecurityApplication',
promote: false,
accent: '#00b39b',
icon: 'id',
},
{
slug: 'index',
source: 'index.html',
name: 'Free Developer and Security Tools',
path: '/',
description: 'Index of free, no-signup single-page tools by Secutils.dev.',
applicationCategory: 'DeveloperApplication',
promote: false,
accent: '#fed047',
icon: 'grid',
},
];
export const PROMOTED_TOOLS = TOOLS.filter((t) => t.promote);