@jjlmoya/utils-streaming 1.1.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.
Files changed (46) hide show
  1. package/package.json +60 -0
  2. package/src/category/i18n/en.ts +134 -0
  3. package/src/category/i18n/es.ts +134 -0
  4. package/src/category/i18n/fr.ts +134 -0
  5. package/src/category/index.ts +12 -0
  6. package/src/category/seo.astro +14 -0
  7. package/src/components/PreviewNavSidebar.astro +116 -0
  8. package/src/components/PreviewToolbar.astro +143 -0
  9. package/src/data.ts +11 -0
  10. package/src/env.d.ts +5 -0
  11. package/src/index.ts +24 -0
  12. package/src/layouts/PreviewLayout.astro +117 -0
  13. package/src/pages/[locale]/[slug].astro +148 -0
  14. package/src/pages/[locale].astro +251 -0
  15. package/src/pages/index.astro +4 -0
  16. package/src/tests/faq_count.test.ts +19 -0
  17. package/src/tests/locale_completeness.test.ts +42 -0
  18. package/src/tests/mocks/astro_mock.js +2 -0
  19. package/src/tests/no_h1_in_components.test.ts +48 -0
  20. package/src/tests/schemas_fulfillment.test.ts +23 -0
  21. package/src/tests/seo_length.test.ts +22 -0
  22. package/src/tests/title_quality.test.ts +55 -0
  23. package/src/tests/tool_validation.test.ts +17 -0
  24. package/src/tool/sorteo/bibliography.astro +14 -0
  25. package/src/tool/sorteo/component.astro +1319 -0
  26. package/src/tool/sorteo/engine.ts +143 -0
  27. package/src/tool/sorteo/i18n/en.ts +253 -0
  28. package/src/tool/sorteo/i18n/es.ts +253 -0
  29. package/src/tool/sorteo/i18n/fr.ts +253 -0
  30. package/src/tool/sorteo/index.ts +29 -0
  31. package/src/tool/sorteo/seo.astro +14 -0
  32. package/src/tool/sorteo/ui-manager.ts +81 -0
  33. package/src/tool/sorteo/ui.ts +30 -0
  34. package/src/tool/tebasCheck/bibliography.astro +14 -0
  35. package/src/tool/tebasCheck/component.astro +587 -0
  36. package/src/tool/tebasCheck/engine.ts +116 -0
  37. package/src/tool/tebasCheck/i18n/en.ts +254 -0
  38. package/src/tool/tebasCheck/i18n/es.ts +254 -0
  39. package/src/tool/tebasCheck/i18n/fr.ts +254 -0
  40. package/src/tool/tebasCheck/index.ts +29 -0
  41. package/src/tool/tebasCheck/ips.json +31 -0
  42. package/src/tool/tebasCheck/seo.astro +14 -0
  43. package/src/tool/tebasCheck/types.ts +45 -0
  44. package/src/tool/tebasCheck/ui-manager.ts +31 -0
  45. package/src/tools.ts +8 -0
  46. package/src/types.ts +71 -0
@@ -0,0 +1,254 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { TebasCheckUI } from '../types';
4
+
5
+ const slug = 'isp-blockage-detector';
6
+ const title = 'ISP Blockage Detector Tebas Check';
7
+ const description = 'Diagnostic tool to detect illegitimate blocking of shared Cloudflare IPs by Spanish ISPs.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'What is the Tebas-Check?',
12
+ answer: 'It is a diagnostic tool that attempts to connect to known Cloudflare IPs that have been judicially blocked in Spain to prevent access to pirate broadcasts. The problem is that by blocking a shared IP, thousands of legitimate websites are "broken".',
13
+ },
14
+ {
15
+ question: 'Why is my ISP blocking a Cloudflare IP?',
16
+ answer: 'Due to dynamic precautionary measures where ISPs must block IPs of servers supposedly broadcasting protected content. By using Cloudflare (CDN), many websites share the same IP, causing collateral damage to innocent users.',
17
+ },
18
+ {
19
+ question: 'How does the test work?',
20
+ answer: 'We attempt to load a small resource from the IPs flagged as blocked. If the connection fails due to "Timeout" or connection resets only on those IPs, it is a clear indicator that your ISP is applying IP filtering.',
21
+ },
22
+ {
23
+ question: 'Can I bypass this block?',
24
+ answer: 'IP blocks are difficult to bypass just by changing DNS. The solution usually involves using a VPN, the Tor browser, or waiting for Cloudflare to assign a new IP to the legitimate service you are trying to visit.',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ {
30
+ name: 'Disable VPN or Proxies',
31
+ text: 'For the test to be accurate, you must use your router\'s direct connection (Fiber or 4G/5G) without intermediate layers.',
32
+ },
33
+ {
34
+ name: 'Start the scan',
35
+ text: 'Click the diagnostic button. The tool will send test packets to the IPs under suspicion of blocking.',
36
+ },
37
+ {
38
+ name: 'Interpret the results',
39
+ text: 'If you see results in red, it means that IP is unreachable. If it is green, your traffic flows normally.',
40
+ },
41
+ {
42
+ name: 'Generate report',
43
+ text: 'You can use the results to report the incident to your ISP if they are blocking legitimate services.',
44
+ },
45
+ ];
46
+
47
+ const faqSchema: WithContext<FAQPage> = {
48
+ '@context': 'https://schema.org',
49
+ '@type': 'FAQPage',
50
+ mainEntity: faqData.map((item) => ({
51
+ '@type': 'Question',
52
+ name: item.question,
53
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
54
+ })),
55
+ };
56
+
57
+ const howToSchema: WithContext<HowTo> = {
58
+ '@context': 'https://schema.org',
59
+ '@type': 'HowTo',
60
+ name: title,
61
+ description,
62
+ step: howToData.map((step, i) => ({
63
+ '@type': 'HowToStep',
64
+ position: i + 1,
65
+ name: step.name,
66
+ text: step.text,
67
+ })),
68
+ };
69
+
70
+ const appSchema: WithContext<SoftwareApplication> = {
71
+ '@context': 'https://schema.org',
72
+ '@type': 'SoftwareApplication',
73
+ name: title,
74
+ description,
75
+ applicationCategory: 'UtilityApplication',
76
+ operatingSystem: 'All',
77
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
78
+ inLanguage: 'en',
79
+ };
80
+
81
+ export const content: ToolLocaleContent<TebasCheckUI> = {
82
+ slug,
83
+ title,
84
+ description,
85
+ faqTitle: 'Frequently Asked Questions',
86
+ faq: faqData,
87
+ bibliographyTitle: 'References and Context',
88
+ bibliography: [
89
+ {
90
+ name: 'Cloudflare: Understanding IP Blocking',
91
+ url: 'https://www.cloudflare.com/learning/network-layer/what-is-ip-blocking/',
92
+ },
93
+ {
94
+ name: 'Spanish dynamic blocking regulations',
95
+ url: 'https://www.poderjudicial.es/',
96
+ },
97
+ ],
98
+ howTo: howToData,
99
+ schemas: [faqSchema as any, howToSchema as any, appSchema as any],
100
+ seo: [
101
+ {
102
+ type: 'title',
103
+ text: 'Why has everything stopped working?',
104
+ level: 2,
105
+ },
106
+ {
107
+ type: 'paragraph',
108
+ html: 'Welcome to the wonderful world of <strong>"Preventive Justice"</strong>. If you\'re here on a Sunday afternoon and legitimate websites have stopped loading while Twitter works perfectly, you\'re probably a collateral victim of the crusade against illegal football broadcasting.',
109
+ },
110
+ {
111
+ type: 'paragraph',
112
+ html: 'In Spain, judges have given a "red button" to certain sports entities. This button allows them to block IP addresses in real time without direct judicial supervision minute by minute. The problem is that they aim with a carnival shotgun, and they often shoot at shared servers where, in addition to "illegal matches", hospitals, universities, or your favorite cooking blog live.',
113
+ },
114
+ {
115
+ type: 'title',
116
+ text: 'The Theory of the Burning Building',
117
+ level: 3,
118
+ },
119
+ {
120
+ type: 'paragraph',
121
+ html: 'Imagine an illegal stream is being broadcast from apartment 4B of a skyscraper. The logical solution would be to knock on the door of 4B and cut off its power, right?',
122
+ },
123
+ {
124
+ type: 'paragraph',
125
+ html: 'Well, no. The current solution is to <strong>blow up the foundations of the entire building</strong>.',
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'By blocking the IP of a service like Cloudflare, the internet provider not only takes down the pirate, but also the other 50,000 legitimate websites that shared that same digital address. If you were working or studying and your website used that IP: bad luck, collateral damage. File a complaint with the master gunsmith.',
130
+ },
131
+ {
132
+ type: 'title',
133
+ text: 'What does this diagnostic tool do exactly?',
134
+ level: 3,
135
+ },
136
+ {
137
+ type: 'paragraph',
138
+ html: 'This tool performs a technical analysis in three steps to identify if your ISP is applying selective IP address blocking:',
139
+ },
140
+ {
141
+ type: 'comparative',
142
+ columns: 3,
143
+ items: [
144
+ {
145
+ title: 'Ping Google',
146
+ description: 'We check if you have a pulse. If Google doesn\'t load, the problem is that you haven\'t paid your Wi-Fi bill. This is the baseline connectivity test.',
147
+ },
148
+ {
149
+ title: 'Ping Cloudflare',
150
+ description: 'We try to reach 1.1.1.1. It\'s the "canary in the coal mine" of blocking in Spain and the main target of judicial blocks.',
151
+ },
152
+ {
153
+ title: 'Verdict',
154
+ description: 'If Google works and Cloudflare fails, it\'s crystal clear: your ISP is applying selective IP blocking of Cloudflare.',
155
+ },
156
+ ],
157
+ },
158
+ {
159
+ type: 'title',
160
+ text: 'Impact of Dynamic Blocking',
161
+ level: 3,
162
+ },
163
+ {
164
+ type: 'comparative',
165
+ columns: 3,
166
+ items: [
167
+ {
168
+ title: 'False Positives',
169
+ description: 'Company websites, personal blogs, and government services can stop working if they share an IP with an unauthorized streaming server.',
170
+ },
171
+ {
172
+ title: 'IP Filtering',
173
+ description: 'Unlike DNS blocking, IP filtering prevents connection at the network level, making changing DNS insufficient to solve the problem.',
174
+ },
175
+ {
176
+ title: 'Lack of Transparency',
177
+ description: 'Often, the user only sees a "Timeout" error without knowing if the problem is their connection or an active ISP block.',
178
+ },
179
+ ],
180
+ },
181
+ {
182
+ type: 'title',
183
+ text: 'Questions no one wants to answer',
184
+ level: 3,
185
+ },
186
+ {
187
+ type: 'list',
188
+ items: [
189
+ '<strong>Is it illegal to use this?</strong> No. Pinging a server is as illegal as looking at a storefront. This tool is a passive network diagnostic. It doesn\'t break encryption, doesn\'t crack passwords, and doesn\'t access protected content. It just tells you why you can\'t access your usual websites.',
190
+ '<strong>How do I fix it?</strong> If you have an active block, changing DNS no longer helps (they know all the tricks). The only real solution today is a <strong>VPN</strong>. By encrypting your traffic, your ISP can\'t see what you\'re asking for or to whom, and therefore can\'t block you "selectively" (or by mistake).',
191
+ ],
192
+ },
193
+ {
194
+ type: 'title',
195
+ text: 'Streamer Mode / OBS Widget',
196
+ level: 3,
197
+ },
198
+ {
199
+ type: 'paragraph',
200
+ html: 'Are you a streamer and want to show the status of censorship in real-time on your stream? We\'ve created a special ultra-minimalist mode, with transparent background (chroma-ready) and auto-refresh every 5 minutes.',
201
+ },
202
+ {
203
+ type: 'list',
204
+ items: [
205
+ '<strong>Step 1:</strong> Add a new <strong>Browser</strong> source in OBS.',
206
+ '<strong>Step 2:</strong> Use this URL: <code>https://jjlmoya.es/utilidades/tebas-check/stream/</code>',
207
+ '<strong>Step 3:</strong> Done! A large icon (Green/Red) will appear indicating whether your connection is clean or under judicial attack.',
208
+ ],
209
+ },
210
+ {
211
+ type: 'tip',
212
+ title: 'Legal Notice',
213
+ html: '<p>This tool has no affiliation with any sports entity, does not facilitate access to protected content, and does not circumvent technological protection measures (DRM). It simply informs the user that their internet connection is artificially degraded.</p>',
214
+ },
215
+ ],
216
+ ui: {
217
+ scanning: 'Scanning the matrix...',
218
+ seekingBlocks: 'Searching for concrete blocks in your fiber...',
219
+ blockedTitle: 'BLOCKING...',
220
+ blockedDiagnosis: 'Diagnosis: "Selective Censorship"',
221
+ blockedReason: 'We detected interference in your ISP. Cloudflare or DNS are being manipulated.',
222
+ noInternetTitle: 'NO CONNECTION',
223
+ noInternetReason: 'It seems you have no internet access. Check your cable or the bill.',
224
+ successTitle: 'YOU ARE FREE',
225
+ successReason: 'Your connection looks clean. If there are global blocks, they are not affecting you.',
226
+ retryBtn: 'Provoke justice again',
227
+ authorNoteTitle: 'Author\'s Note:',
228
+ authorNoteText: 'I haven\'t been able to fully test this utility because I\'m not affected by Tebas\'s "black hand". If you want to help me improve the diagnosis, contact me.',
229
+ consoleHeader: 'TEBAS_OS v3.2.0',
230
+ statusNegotiating: 'Negotiating with your router...',
231
+ statusDodging: 'Dodging the court circular...',
232
+ statusCheckingPirate: 'Checking if you are a pirate (wink, wink)...',
233
+ statusPinging: 'Pinging Google to see if you exist...',
234
+ statusConsulting: 'Consulting the shared IP oracle...',
235
+ statusCheckingFee: 'Checking if Tebas paid the autonomous fee...',
236
+ statusCalculating: 'Calculating the probability of winning the lottery...',
237
+ statusDeciphering: 'Attempting to decipher your ISP contract...',
238
+ logStarted: "STARTING AUTONOMOUS PROTOCOL 'TEBAS_WATCH'...",
239
+ logDetecting: '> Detecting ISP and basic connectivity...',
240
+ logIspFound: '> ISP detected: ',
241
+ logConnError: '> Basic connection error',
242
+ logDnsCross: '> Executing DNS data cross-check (DoH vs Local)...',
243
+ logDnsGoogle: '> Real DNS (Google): ',
244
+ logDnsPoisoned: '> ALERT: Poisoned DNS detected.',
245
+ logDnsNoDoh: '> DoH unavailable, skipping DNS cross-check.',
246
+ logLaunchingProbes: '> Launching probes on critical targets...',
247
+ logIpBlocked: '> Target {ip}: NO RESPONSE (Suspect IP block)',
248
+ logIpActive: '> Target {ip}: ACTIVE',
249
+ logAlertInterference: '!!! JUDICIAL INTERFERENCE ALERT !!!',
250
+ logNoInternet: 'NO INTERNET ACCESS',
251
+ logClean: 'CLEAN CONNECTION. ENJOY.',
252
+ logDiagError: 'DIAGNOSTIC ERROR',
253
+ },
254
+ };
@@ -0,0 +1,254 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { TebasCheckUI } from '../types';
4
+
5
+ const slug = 'tebas-check';
6
+ const title = 'Detector de Bloqueos Judiciales Tebas Check';
7
+ const description = 'Herramienta de diagnóstico para detectar bloqueos ilegítimos de IPs compartidas de Cloudflare por parte de operadoras españolas.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: '¿Qué es el Tebas-Check?',
12
+ answer: 'Es una herramienta de diagnóstico que intenta conectar con IPs conocidas de Cloudflare que han sido bloqueadas judicialmente en España para impedir el acceso a retransmisiones piratas. El problema es que al bloquear una IP compartida, se "rompen" miles de sitios web legítimos.',
13
+ },
14
+ {
15
+ question: '¿Por qué mi operadora bloquea una IP de Cloudflare?',
16
+ answer: 'Debido a medidas cautelares dinámicas donde las operadoras deben bloquear IPs de servidores que supuestamente emiten contenido protegido. Al usar Cloudflare (CDN), muchas webs comparten la misma IP, causando daños colaterales a usuarios inocentes.',
17
+ },
18
+ {
19
+ question: '¿Cómo funciona el test?',
20
+ answer: 'Intentamos cargar un pequeño recurso desde las IPs señaladas como bloqueadas. Si la conexión falla por "Timeout" o reset de la conexión solo en esas IPs, es un indicador claro de que tu operadora está aplicando un filtrado por IP.',
21
+ },
22
+ {
23
+ question: '¿Puedo saltarme este bloqueo?',
24
+ answer: 'Los bloqueos por IP son difíciles de saltar solo con cambio de DNS. La solución suele pasar por usar una VPN, el navegador Tor, o esperar a que Cloudflare asigne una nueva IP al servicio legítimo que intentas visitar.',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ {
30
+ name: 'Desactivar VPN o Proxies',
31
+ text: 'Para que el test sea real, debes usar la conexión directa de tu router (Fibra o 4G/5G) sin capas intermedias.',
32
+ },
33
+ {
34
+ name: 'Iniciar el escaneo',
35
+ text: 'Pulsa el botón de diagnóstico. La herramienta enviará paquetes de prueba a las IPs bajo sospecha de bloqueo.',
36
+ },
37
+ {
38
+ name: 'Interpretar los resultados',
39
+ text: 'Si ves resultados en rojo, significa que esa IP es inalcanzable. Si es verde, tu tráfico fluye con normalidad.',
40
+ },
41
+ {
42
+ name: 'Generar reporte',
43
+ text: 'Puedes usar los resultados para reportar la incidencia a tu operadora si están bloqueando servicios legítimos.',
44
+ },
45
+ ];
46
+
47
+ const faqSchema: WithContext<FAQPage> = {
48
+ '@context': 'https://schema.org',
49
+ '@type': 'FAQPage',
50
+ mainEntity: faqData.map((item) => ({
51
+ '@type': 'Question',
52
+ name: item.question,
53
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
54
+ })),
55
+ };
56
+
57
+ const howToSchema: WithContext<HowTo> = {
58
+ '@context': 'https://schema.org',
59
+ '@type': 'HowTo',
60
+ name: title,
61
+ description,
62
+ step: howToData.map((step, i) => ({
63
+ '@type': 'HowToStep',
64
+ position: i + 1,
65
+ name: step.name,
66
+ text: step.text,
67
+ })),
68
+ };
69
+
70
+ const appSchema: WithContext<SoftwareApplication> = {
71
+ '@context': 'https://schema.org',
72
+ '@type': 'SoftwareApplication',
73
+ name: title,
74
+ description,
75
+ applicationCategory: 'UtilityApplication',
76
+ operatingSystem: 'All',
77
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
78
+ inLanguage: 'es',
79
+ };
80
+
81
+ export const content: ToolLocaleContent<TebasCheckUI> = {
82
+ slug,
83
+ title,
84
+ description,
85
+ faqTitle: 'Preguntas Frecuentes',
86
+ faq: faqData,
87
+ bibliographyTitle: 'Referencias y Contexto',
88
+ bibliography: [
89
+ {
90
+ name: 'Cloudflare: Understanding IP Blocking',
91
+ url: 'https://www.cloudflare.com/learning/network-layer/what-is-ip-blocking/',
92
+ },
93
+ {
94
+ name: 'Jurisprudencia sobre bloqueos dinámicos en España',
95
+ url: 'https://www.poderjudicial.es/',
96
+ },
97
+ ],
98
+ howTo: howToData,
99
+ schemas: [faqSchema as any, howToSchema as any, appSchema as any],
100
+ seo: [
101
+ {
102
+ type: 'title',
103
+ text: '¿Por qué ha dejado de funcionar todo?',
104
+ level: 2,
105
+ },
106
+ {
107
+ type: 'paragraph',
108
+ html: 'Bienvenido al maravilloso mundo de la <strong>"Justicia Preventiva"</strong>. Si estás aquí un domingo por la tarde y sitios web legítimos han dejado de cargar mientras Twitter funciona perfectamente, probablemente eres una víctima colateral de la cruzada contra el fútbol pirata.',
109
+ },
110
+ {
111
+ type: 'paragraph',
112
+ html: 'En España, los jueces han entregado un "botón rojo" a ciertas entidades deportivas. Este botón les permite bloquear direcciones IP en tiempo real sin supervisión judicial directa minuto a minuto. El problema es que apuntan con escopeta de feria, y a menudo disparan a servidores compartidos donde, además de "partidos ilegales", viven webs de hospitales, universidades o tu blog de cocina favorito.',
113
+ },
114
+ {
115
+ type: 'title',
116
+ text: 'La Teoría del Edificio en Llamas',
117
+ level: 3,
118
+ },
119
+ {
120
+ type: 'paragraph',
121
+ html: 'Imagina que un streaming ilegal se emite desde el piso 4ºB de un rascacielos. La solución lógica sería llamar a la puerta del 4ºB y cortarle la luz, ¿verdad?',
122
+ },
123
+ {
124
+ type: 'paragraph',
125
+ html: 'Pues no. La solución actual es <strong>dinamitar los cimientos del edificio entero</strong>.',
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'Al bloquear la IP de un servicio como Cloudflare, el proveedor de internet no solo tira al pirata, sino a las otras 50.000 webs legítimas que compartían esa misma dirección postal digital. Si estabas trabajando o estudiando y tu web usaba esa IP: mala suerte, daño colateral. Reclama al maestro armero.',
130
+ },
131
+ {
132
+ type: 'title',
133
+ text: '¿Qué hace exactamente este diagnóstico?',
134
+ level: 3,
135
+ },
136
+ {
137
+ type: 'paragraph',
138
+ html: 'Esta herramienta realiza un análisis técnico en tres pasos para identificar si tu operadora está aplicando bloqueos selectivos de IP:',
139
+ },
140
+ {
141
+ type: 'comparative',
142
+ columns: 3,
143
+ items: [
144
+ {
145
+ title: 'Ping a Google',
146
+ description: 'Comprobamos si tienes pulso. Si Google no carga, el problema es que no has pagado el Wi-Fi. Este es el test base de conectividad.',
147
+ },
148
+ {
149
+ title: 'Ping a Cloudflare',
150
+ description: 'Intentamos tocar la puerta de 1.1.1.1. Es el "canario en la mina" de los bloqueos en España y el principal objetivo de los bloqueos judiciales.',
151
+ },
152
+ {
153
+ title: 'Veredicto',
154
+ description: 'Si Google funciona y Cloudflare falla, blanco y en botella: tu operadora está aplicando un bloqueo IP selectivo de Cloudflare.',
155
+ },
156
+ ],
157
+ },
158
+ {
159
+ type: 'title',
160
+ text: 'Impacto de los bloqueos dinámicos',
161
+ level: 3,
162
+ },
163
+ {
164
+ type: 'comparative',
165
+ columns: 3,
166
+ items: [
167
+ {
168
+ title: 'Falsos Positivos',
169
+ description: 'Sitios web de empresas, blogs personales y servicios gubernamentales pueden dejar de funcionar si comparten IP con un servidor de streaming no autorizado.',
170
+ },
171
+ {
172
+ title: 'Filtrado por IP',
173
+ description: 'A diferencia del bloqueo por DNS, el filtrado por IP impide la conexión a nivel de red, lo que hace que cambiar los DNS no sea suficiente para resolver el problema.',
174
+ },
175
+ {
176
+ title: 'Falta de Transparencia',
177
+ description: 'A menudo, el usuario solo ve un error de "Timeout" sin saber si el problema es su conexión o un bloqueo activo de su ISP.',
178
+ },
179
+ ],
180
+ },
181
+ {
182
+ type: 'title',
183
+ text: 'Preguntas que nadie quiere responder',
184
+ level: 3,
185
+ },
186
+ {
187
+ type: 'list',
188
+ items: [
189
+ '<strong>¿Es ilegal usar esto?</strong> No. Hacer un "ping" a un servidor es tan ilegal como mirar un escaparate. Esta herramienta es un diagnóstico de red pasivo. No rompe encriptación, no salta contraseñas y no accede a contenido protegido. Solo te dice por qué no puedes entrar a tus webs habituales.',
190
+ '<strong>¿Cómo lo arreglo?</strong> Si tienes un bloqueo activo, cambiar las DNS ya no sirve (se las saben todas). La única solución real hoy en día es una <strong>VPN</strong>. Al encriptar tu tráfico, tu operador no puede ver qué pides ni a quién, y por tanto, no puede bloquearte "selectivamente" (ni por error).',
191
+ ],
192
+ },
193
+ {
194
+ type: 'title',
195
+ text: 'Modo Streamer / OBS Widget',
196
+ level: 3,
197
+ },
198
+ {
199
+ type: 'paragraph',
200
+ html: '¿Eres streamer y quieres mostrar el estado de la censura en tiempo real en tu directo? Hemos creado un modo especial ultra-minimalista, con fondo transparente (chroma-ready) y auto-refresco cada 5 minutos.',
201
+ },
202
+ {
203
+ type: 'list',
204
+ items: [
205
+ '<strong>Paso 1:</strong> Añade una nueva fuente de <strong>Navegador</strong> en OBS.',
206
+ '<strong>Paso 2:</strong> Usa esta URL: <code>https://jjlmoya.es/utilidades/tebas-check/stream/</code>',
207
+ '<strong>Paso 3:</strong> ¡Listo! Aparecerá un icono grande (Verde/Rojo) indicando si tu conexión está limpia o bajo ataque judicial.',
208
+ ],
209
+ },
210
+ {
211
+ type: 'tip',
212
+ title: 'Nota Legal',
213
+ html: '<p>Esta herramienta no tiene afiliación con ninguna entidad deportiva, no facilita el acceso a contenido protegido y no elude medidas tecnológicas de protección (DRM). Simplemente informa al usuario de que su conexión a internet está degradada artificialmente.</p>',
214
+ },
215
+ ],
216
+ ui: {
217
+ scanning: 'Escaneando la matrix...',
218
+ seekingBlocks: 'Buscando bloques de hormigón en tu fibra...',
219
+ blockedTitle: 'BLOQUEANDO...',
220
+ blockedDiagnosis: 'Diagnóstico: "Censura Selectiva"',
221
+ blockedReason: 'Detectamos interferencia en tu ISP. Cloudflare o los DNS están siendo manipulados.',
222
+ noInternetTitle: 'SIN CONEXIÓN',
223
+ noInternetReason: 'Parece que no tienes acceso a internet. Comprueba tu cable o el recibo.',
224
+ successTitle: 'SOIS LIBRES',
225
+ successReason: 'Tu conexión parece limpia. Si hay bloqueos globales, a ti no te están afectando.',
226
+ retryBtn: 'Provocar a la justicia otra vez',
227
+ authorNoteTitle: 'Nota del autor:',
228
+ authorNoteText: 'No he podido testear a fondo esta utilidad porque no estoy afectado por la "mano negra" de Tebas. Si quieres ayudarme a mejorar el diagnóstico, contacta conmigo.',
229
+ consoleHeader: 'TEBAS_OS v3.2.0',
230
+ statusNegotiating: 'Negociando con tu router...',
231
+ statusDodging: 'Esquivando la circular del juzgado...',
232
+ statusCheckingPirate: 'Comprobando si eres pirata (guiño, guiño)...',
233
+ statusPinging: 'Pingueando a Google para ver si existes...',
234
+ statusConsulting: 'Consultando el oráculo de la IP compartida...',
235
+ statusCheckingFee: 'Revisando si Tebas ha pagado la cuota de autónomos...',
236
+ statusCalculating: 'Calculando la probabilidad de que te toque la lotería...',
237
+ statusDeciphering: 'Intentando descifrar el contrato de tu operadora...',
238
+ logStarted: "INICIANDO PROTOCOLO AUTÓNOMO 'TEBAS_WATCH'...",
239
+ logDetecting: '> Detectando ISP y conectividad básica...',
240
+ logIspFound: '> ISP detectado: ',
241
+ logConnError: '> Error de conexión básica',
242
+ logDnsCross: '> Ejecutando cruce de datos DNS (DoH vs Local)...',
243
+ logDnsGoogle: '> DNS Real (Google): ',
244
+ logDnsPoisoned: '> ALERTA: DNS envenenado detectado.',
245
+ logDnsNoDoh: '> DoH no disponible, saltando cruce DNS.',
246
+ logLaunchingProbes: '> Lanzando sondas sobre objetivos críticos...',
247
+ logIpBlocked: '> Objetivo {ip}: NO RESPONDE (Bloqueo IP sospechoso)',
248
+ logIpActive: '> Objetivo {ip}: ACTIVO',
249
+ logAlertInterference: '!!! ALERTA DE INTERFERENCIA JUDICIAL !!!',
250
+ logNoInternet: 'SIN ACCESO A INTERNET',
251
+ logClean: 'CONEXIÓN LIMPIA. DISFRUTA.',
252
+ logDiagError: 'ERROR DE DIAGNÓSTICO',
253
+ },
254
+ };