console-self-xss-warning 1.0.3 → 2.0.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/README.md CHANGED
@@ -3,6 +3,17 @@
3
3
  Show a self-XSS warning in the browser console to protect users from social
4
4
  engineering.
5
5
 
6
+ ![Console warning preview](preview.png)
7
+
8
+ ### Features
9
+
10
+ - Runs only in the browser and is safe for SSR.
11
+ - Default language is auto-detected via `navigator.language` with `en` fallback.
12
+ - Language tags use [BCP 47](https://developer.mozilla.org/en-US/docs/Glossary/BCP_47_language_tag) with normalization and primary subtag fallback (e.g. `en-US` -> `en`).
13
+ - Built-in translations for 40+ languages.
14
+ - `\\n` in translations is converted to a real line break in console output.
15
+ - No external dependencies.
16
+
6
17
  ## Install
7
18
 
8
19
  ```
@@ -17,44 +28,23 @@ import { showConsoleWarning } from "console-self-xss-warning";
17
28
  showConsoleWarning();
18
29
  ```
19
30
 
20
- ## Next.js (App Router)
21
-
22
- Call it in a client component so it runs only in the browser.
23
-
24
- ```tsx
25
- "use client";
26
-
27
- import { useEffect } from "react";
28
- import { showConsoleWarning } from "console-self-xss-warning";
29
-
30
- export function ConsoleWarning() {
31
- useEffect(() => {
32
- showConsoleWarning({ productionOnly: true });
33
- }, []);
34
-
35
- return null;
36
- }
37
- ```
38
-
39
- Re-log on route changes:
40
-
41
- ```tsx
42
- "use client";
31
+ ## Framework examples
43
32
 
44
- import { useEffect } from "react";
45
- import { usePathname } from "next/navigation";
46
- import { showConsoleWarning } from "console-self-xss-warning";
47
-
48
- export function ConsoleWarning() {
49
- const pathname = usePathname();
50
-
51
- useEffect(() => {
52
- showConsoleWarning({ once: false, clearConsole: false, productionOnly: true });
53
- }, [pathname]);
33
+ Full examples for popular frameworks and Vanilla JS are in [`examples/`](https://github.com/hksm-app/console-self-xss-warning/tree/main/examples).
54
34
 
55
- return null;
56
- }
57
- ```
35
+ - Vanilla JS: [`examples/vanilla/README.md`](https://github.com/hksm-app/console-self-xss-warning/tree/main/examples/vanilla/README.md)
36
+ - React: [`examples/react/README.md`](https://github.com/hksm-app/console-self-xss-warning/tree/main/examples/react/README.md)
37
+ - Next.js: [`examples/nextjs/README.md`](https://github.com/hksm-app/console-self-xss-warning/tree/main/examples/nextjs/README.md)
38
+ - Vue: [`examples/vue/README.md`](https://github.com/hksm-app/console-self-xss-warning/tree/main/examples/vue/README.md)
39
+ - Nuxt: [`examples/nuxt/README.md`](https://github.com/hksm-app/console-self-xss-warning/tree/main/examples/nuxt/README.md)
40
+ - Svelte/SvelteKit: [`examples/svetle/README.md`](https://github.com/hksm-app/console-self-xss-warning/tree/main/examples/svetle/README.md)
41
+ - Vite: [`examples/vite/README.md`](https://github.com/hksm-app/console-self-xss-warning/tree/main/examples/vite/README.md)
42
+ - Angular: [`examples/angular/README.md`](https://github.com/hksm-app/console-self-xss-warning/tree/main/examples/angular/README.md)
43
+ - Astro: [`examples/astro/README.md`](https://github.com/hksm-app/console-self-xss-warning/tree/main/examples/astro/README.md)
44
+ - Remix: [`examples/remix/README.md`](https://github.com/hksm-app/console-self-xss-warning/tree/main/examples/remix/README.md)
45
+ - Gatsby: [`examples/gatsby/README.md`](https://github.com/hksm-app/console-self-xss-warning/tree/main/examples/gatsby/README.md)
46
+ - Solid: [`examples/solid/README.md`](https://github.com/hksm-app/console-self-xss-warning/tree/main/examples/solid/README.md)
47
+ - Qwik: [`examples/qwik/README.md`](https://github.com/hksm-app/console-self-xss-warning/tree/main/examples/qwik/README.md)
58
48
 
59
49
  ## Configuration
60
50
 
@@ -66,6 +56,13 @@ export function ConsoleWarning() {
66
56
  | `productionOnly` | `false` | no | show only in production mode |
67
57
  | `clearConsole` | `false` | no | clear the console before logging |
68
58
  | `productionOnlyEnvKey` | default key list | no | read `productionOnly` from an env variable |
59
+ | `config` | default warning config | no | override styles and behavior defaults |
60
+
61
+ ### Language tags (BCP 47)
62
+
63
+ Language keys and `forceLang` accept [BCP 47 language tags](https://developer.mozilla.org/en-US/docs/Glossary/BCP_47_language_tag) (e.g. `en`, `en-US`, `pt-BR`).
64
+ Tags are normalized to lowercase with `-`, and if a region-specific tag is not
65
+ found the primary subtag is used as a fallback (e.g. `en-US` -> `en`).
69
66
 
70
67
  ### Common options
71
68
 
@@ -114,6 +111,16 @@ showConsoleWarning({
114
111
  });
115
112
  ```
116
113
 
114
+ ### Config overrides
115
+
116
+ | key | default | description |
117
+ | --- | --- | --- |
118
+ | `defaultTitleStyle` | `color:red;font-size:48px;font-weight:bold;` | default title style |
119
+ | `defaultMessageStyle` | `font-size:16px;` | default message style |
120
+ | `defaultSpamIntervalMs` | `2000` | repeat interval for the warning in ms |
121
+ | `devtoolsSizeThresholdPx` | `160` | threshold used to detect open devtools |
122
+
123
+
117
124
  ## Environment config for productionOnly
118
125
 
119
126
  If you want `productionOnly` to be driven by an environment variable, pass
@@ -158,14 +165,13 @@ type Options = {
158
165
  productionOnly?: boolean
159
166
  clearConsole?: boolean
160
167
  productionOnlyEnvKey?: string | string[]
168
+ config?: {
169
+ defaultTitleStyle?: string
170
+ defaultMessageStyle?: string
171
+ defaultSpamIntervalMs?: number
172
+ devtoolsSizeThresholdPx?: number
173
+ }
161
174
  }
162
175
 
163
176
  showConsoleWarning(options?)
164
177
  ```
165
-
166
- ## Notes
167
-
168
- - Runs only in the browser and is safe for SSR.
169
- - Default language is auto-detected via `navigator.language` with `en` fallback.
170
- - `\\n` in translations is converted to a real line break in console output.
171
- - No external dependencies.
@@ -1 +1,2 @@
1
+ export declare function normalizeLanguageTag(tag: string): string;
1
2
  export declare function detectLanguage(fallback?: string): string;
@@ -1,13 +1,16 @@
1
+ export function normalizeLanguageTag(tag) {
2
+ return tag.trim().toLowerCase().replace(/_/g, "-");
3
+ }
1
4
  export function detectLanguage(fallback = "en") {
2
5
  if (typeof navigator === "undefined") {
3
- return fallback;
6
+ return normalizeLanguageTag(fallback);
4
7
  }
5
8
  const raw = (Array.isArray(navigator.languages) && navigator.languages[0]) ||
6
9
  navigator.language ||
7
10
  fallback;
8
11
  if (!raw) {
9
- return fallback;
12
+ return normalizeLanguageTag(fallback);
10
13
  }
11
- const normalized = raw.toLowerCase().replace("_", "-");
12
- return normalized.split("-")[0] || fallback;
14
+ const normalized = normalizeLanguageTag(raw);
15
+ return normalized || normalizeLanguageTag(fallback);
13
16
  }
package/dist/index.d.ts CHANGED
@@ -4,12 +4,112 @@ export type Translation = {
4
4
  titleStyle?: string;
5
5
  messageStyle?: string;
6
6
  };
7
+ declare const BUILT_IN_LANGUAGES: readonly ["en", "es", "fr", "de", "it", "pt", "nl", "sv", "no", "nb", "da", "fi", "ru", "uk", "pl", "cs", "sk", "hu", "ro", "bg", "tr", "el", "ar", "he", "hi", "th", "vi", "id", "ms", "zh", "ja", "ko", "et", "lt", "lv", "hr", "sl", "sr", "mk", "sq", "is", "ga", "fa", "ur", "bn"];
8
+ export type BuiltInLanguage = (typeof BUILT_IN_LANGUAGES)[number];
9
+ export type ForceLanguage = BuiltInLanguage | (string & {});
10
+ /**
11
+ * Options for `showConsoleWarning`.
12
+ */
7
13
  export type Options = {
14
+ /**
15
+ * Override built-in translations per language.
16
+ */
8
17
  translations?: Record<string, Translation>;
9
- forceLang?: string;
18
+ /**
19
+ * Force a specific {@link https://developer.mozilla.org/en-US/docs/Glossary/BCP_47_language_tag BCP 47 language tag}
20
+ * @example `en`, `en-US`, `fr`
21
+ */
22
+ forceLang?: ForceLanguage;
23
+ /**
24
+ * Show only once per page load.
25
+ *
26
+ * @default true
27
+ */
10
28
  once?: boolean;
29
+ /**
30
+ * Show only in production mode.
31
+ *
32
+ * @default false
33
+ */
11
34
  productionOnly?: boolean;
35
+ /**
36
+ * Clear the console before logging.
37
+ *
38
+ * @default false
39
+ */
12
40
  clearConsole?: boolean;
41
+ /**
42
+ * Env key(s) that control `productionOnly` with boolean values.
43
+ *
44
+ * @default ["CONSOLE_SELF_XSS_WARNING_PRODUCTION_ONLY", "VITE_CONSOLE_SELF_XSS_WARNING_PRODUCTION_ONLY", "NEXT_PUBLIC_CONSOLE_SELF_XSS_WARNING_PRODUCTION_ONLY"]
45
+ */
13
46
  productionOnlyEnvKey?: string | string[];
47
+ /**
48
+ * Override warning behavior and styling defaults.
49
+ *
50
+ * @default {@link DEFAULT_WARNING_CONFIG}
51
+ */
52
+ config?: Partial<WarningConfig>;
14
53
  };
54
+ export type WarningConfig = {
55
+ /**
56
+ * Default title style.
57
+ *
58
+ * @default "color:red;font-size:48px;font-weight:bold;"
59
+ */
60
+ defaultTitleStyle: string;
61
+ /**
62
+ * Default message style.
63
+ *
64
+ * @default "font-size:16px;"
65
+ */
66
+ defaultMessageStyle: string;
67
+ /**
68
+ * Default spam interval in ms.
69
+ *
70
+ * @default 2000
71
+ */
72
+ defaultSpamIntervalMs: number;
73
+ /**
74
+ * Threshold used to detect open devtools.
75
+ *
76
+ * @default 160
77
+ */
78
+ devtoolsSizeThresholdPx: number;
79
+ };
80
+ /**
81
+ * Default warning configuration.
82
+ *
83
+ * @default
84
+ * ```ts
85
+ * {
86
+ * defaultTitleStyle: "color:red;font-size:48px;font-weight:bold;",
87
+ * defaultMessageStyle: "font-size:16px;",
88
+ * defaultSpamIntervalMs: 2000,
89
+ * devtoolsSizeThresholdPx: 160
90
+ * }
91
+ * ```
92
+ */
93
+ export declare const DEFAULT_WARNING_CONFIG: WarningConfig;
94
+ /**
95
+ * Log a self-XSS warning into the browser console.
96
+ *
97
+ * @example
98
+ * showConsoleWarning();
99
+ *
100
+ * @example
101
+ * showConsoleWarning({ forceLang: "fr", clearConsole: true });
102
+ *
103
+ * @example
104
+ * showConsoleWarning({
105
+ * translations: {
106
+ * en: {
107
+ * title: "STOP!",
108
+ * message: "This is a developer-only feature.\\nDo not paste anything here."
109
+ * }
110
+ * },
111
+ * once: false
112
+ * });
113
+ */
15
114
  export declare function showConsoleWarning(options?: Options): void;
115
+ export {};
package/dist/index.js CHANGED
@@ -1,9 +1,71 @@
1
1
  import defaultTranslations from "./translations.default.json";
2
- import { detectLanguage } from "./detectLanguage";
3
- const DEFAULT_TITLE_STYLE = "color:red;font-size:48px;font-weight:bold;";
4
- const DEFAULT_MESSAGE_STYLE = "font-size:16px;";
5
- const DEFAULT_SPAM_INTERVAL_MS = 2000;
6
- const DEVTOOLS_SIZE_THRESHOLD_PX = 160;
2
+ import { detectLanguage, normalizeLanguageTag } from "./detectLanguage";
3
+ const BUILT_IN_LANGUAGES = [
4
+ "en",
5
+ "es",
6
+ "fr",
7
+ "de",
8
+ "it",
9
+ "pt",
10
+ "nl",
11
+ "sv",
12
+ "no",
13
+ "nb",
14
+ "da",
15
+ "fi",
16
+ "ru",
17
+ "uk",
18
+ "pl",
19
+ "cs",
20
+ "sk",
21
+ "hu",
22
+ "ro",
23
+ "bg",
24
+ "tr",
25
+ "el",
26
+ "ar",
27
+ "he",
28
+ "hi",
29
+ "th",
30
+ "vi",
31
+ "id",
32
+ "ms",
33
+ "zh",
34
+ "ja",
35
+ "ko",
36
+ "et",
37
+ "lt",
38
+ "lv",
39
+ "hr",
40
+ "sl",
41
+ "sr",
42
+ "mk",
43
+ "sq",
44
+ "is",
45
+ "ga",
46
+ "fa",
47
+ "ur",
48
+ "bn"
49
+ ];
50
+ /**
51
+ * Default warning configuration.
52
+ *
53
+ * @default
54
+ * ```ts
55
+ * {
56
+ * defaultTitleStyle: "color:red;font-size:48px;font-weight:bold;",
57
+ * defaultMessageStyle: "font-size:16px;",
58
+ * defaultSpamIntervalMs: 2000,
59
+ * devtoolsSizeThresholdPx: 160
60
+ * }
61
+ * ```
62
+ */
63
+ export const DEFAULT_WARNING_CONFIG = {
64
+ defaultTitleStyle: "color:red;font-size:48px;font-weight:bold;",
65
+ defaultMessageStyle: "font-size:16px;",
66
+ defaultSpamIntervalMs: 2000,
67
+ devtoolsSizeThresholdPx: 160
68
+ };
7
69
  const GLOBAL_ONCE_FLAG = "__consoleSelfXssWarningShown__";
8
70
  let hasShown = false;
9
71
  let spamIntervalId;
@@ -23,12 +85,12 @@ function setHasShown() {
23
85
  globalThis[GLOBAL_ONCE_FLAG] = true;
24
86
  }
25
87
  }
26
- function isDevtoolsLikelyOpen() {
88
+ function isDevtoolsLikelyOpen(config) {
27
89
  if (typeof window === "undefined") {
28
90
  return false;
29
91
  }
30
- return (window.outerWidth - window.innerWidth > DEVTOOLS_SIZE_THRESHOLD_PX ||
31
- window.outerHeight - window.innerHeight > DEVTOOLS_SIZE_THRESHOLD_PX);
92
+ return (window.outerWidth - window.innerWidth > config.devtoolsSizeThresholdPx ||
93
+ window.outerHeight - window.innerHeight > config.devtoolsSizeThresholdPx);
32
94
  }
33
95
  function isBrowser() {
34
96
  return typeof window !== "undefined" && typeof console !== "undefined";
@@ -118,14 +180,23 @@ function resolveTranslation(translations, lang) {
118
180
  const fallback = translations.en ||
119
181
  defaultTranslations.en || {
120
182
  title: "STOP!",
121
- message: "This is a browser feature for developers.\nIf someone asks you to paste something here it is a scam."
183
+ message: "This is a developer-only browser feature.\\nIf someone told you to paste code here, it is a scam.\\nPasting code can give attackers access to your account."
184
+ };
185
+ const normalizedFallback = {
186
+ ...fallback,
187
+ title: fallback.title ? fallback.title.replace(/\\n/g, "\n") : fallback.title,
188
+ message: fallback.message
189
+ ? fallback.message.replace(/\\n/g, "\n")
190
+ : fallback.message
122
191
  };
123
- const selected = translations[lang] || translations[lang.toLowerCase()];
192
+ const normalized = normalizeLanguageTag(lang);
193
+ const primary = normalized.split("-")[0] || normalized;
194
+ const selected = translations[normalized] || translations[primary];
124
195
  if (!selected) {
125
- return fallback;
196
+ return normalizedFallback;
126
197
  }
127
- const rawTitle = selected.title || fallback.title;
128
- const rawMessage = selected.message || fallback.message;
198
+ const rawTitle = selected.title || normalizedFallback.title;
199
+ const rawMessage = selected.message || normalizedFallback.message;
129
200
  return {
130
201
  title: rawTitle.replace(/\\n/g, "\n"),
131
202
  message: rawMessage.replace(/\\n/g, "\n"),
@@ -133,14 +204,14 @@ function resolveTranslation(translations, lang) {
133
204
  messageStyle: selected.messageStyle
134
205
  };
135
206
  }
136
- function logWarning(payload) {
207
+ function logWarning(payload, config) {
137
208
  if (payload.clearConsole && typeof console.clear === "function") {
138
209
  console.clear();
139
210
  }
140
- console.log(`%c${payload.title}`, payload.titleStyle || DEFAULT_TITLE_STYLE);
141
- console.log(`%c${payload.message}`, payload.messageStyle || DEFAULT_MESSAGE_STYLE);
211
+ console.log(`%c${payload.title}`, payload.titleStyle || config.defaultTitleStyle);
212
+ console.log(`%c${payload.message}`, payload.messageStyle || config.defaultMessageStyle);
142
213
  }
143
- function startSpam(payload) {
214
+ function startSpam(payload, config) {
144
215
  spamPayload = payload;
145
216
  if (typeof window === "undefined") {
146
217
  return;
@@ -148,24 +219,49 @@ function startSpam(payload) {
148
219
  if (spamIntervalId !== undefined) {
149
220
  return;
150
221
  }
151
- if (isDevtoolsLikelyOpen()) {
152
- logWarning(payload);
222
+ if (isDevtoolsLikelyOpen(config)) {
223
+ logWarning(payload, config);
153
224
  setHasShown();
154
225
  }
155
226
  spamIntervalId = window.setInterval(() => {
156
- if (!spamPayload || !isDevtoolsLikelyOpen()) {
227
+ if (!spamPayload || !isDevtoolsLikelyOpen(config)) {
157
228
  return;
158
229
  }
159
- logWarning(spamPayload);
230
+ logWarning(spamPayload, config);
160
231
  setHasShown();
161
- }, DEFAULT_SPAM_INTERVAL_MS);
232
+ }, config.defaultSpamIntervalMs);
162
233
  }
234
+ /**
235
+ * Log a self-XSS warning into the browser console.
236
+ *
237
+ * @example
238
+ * showConsoleWarning();
239
+ *
240
+ * @example
241
+ * showConsoleWarning({ forceLang: "fr", clearConsole: true });
242
+ *
243
+ * @example
244
+ * showConsoleWarning({
245
+ * translations: {
246
+ * en: {
247
+ * title: "STOP!",
248
+ * message: "This is a developer-only feature.\\nDo not paste anything here."
249
+ * }
250
+ * },
251
+ * once: false
252
+ * });
253
+ */
163
254
  export function showConsoleWarning(options = {}) {
164
255
  var _a;
165
256
  if (!isBrowser()) {
166
257
  return;
167
258
  }
168
- const { translations: translationOverrides, forceLang, once = true, productionOnly, clearConsole = false, productionOnlyEnvKey } = options;
259
+ const { translations: translationOverrides, forceLang, once = true, productionOnly, clearConsole = false, productionOnlyEnvKey, config: configOverrides } = options;
260
+ // Merge defaults with user-provided overrides.
261
+ const resolvedConfig = {
262
+ ...DEFAULT_WARNING_CONFIG,
263
+ ...configOverrides
264
+ };
169
265
  const resolvedProductionOnly = (_a = productionOnly !== null && productionOnly !== void 0 ? productionOnly : getConfigProductionOnly(productionOnlyEnvKey)) !== null && _a !== void 0 ? _a : false;
170
266
  if (resolvedProductionOnly && !isProduction()) {
171
267
  return;
@@ -174,7 +270,7 @@ export function showConsoleWarning(options = {}) {
174
270
  return;
175
271
  }
176
272
  const translations = mergeTranslations(translationOverrides);
177
- const lang = (forceLang || detectLanguage("en")).toLowerCase();
273
+ const lang = normalizeLanguageTag(forceLang || detectLanguage("en"));
178
274
  const { title, message, titleStyle, messageStyle } = resolveTranslation(translations, lang);
179
275
  const payload = {
180
276
  title,
@@ -184,9 +280,9 @@ export function showConsoleWarning(options = {}) {
184
280
  clearConsole
185
281
  };
186
282
  if (!once) {
187
- startSpam(payload);
283
+ startSpam(payload, resolvedConfig);
188
284
  return;
189
285
  }
190
- logWarning(payload);
286
+ logWarning(payload, resolvedConfig);
191
287
  setHasShown();
192
288
  }
@@ -1,126 +1,182 @@
1
1
  {
2
2
  "en": {
3
3
  "title": "STOP!",
4
- "message": "This is a browser feature for developers.\\nIf someone asks you to paste something here it is a scam."
4
+ "message": "This is a developer-only browser feature.\\nIf someone told you to paste code here, it is a scam.\\nPasting code can give attackers access to your account."
5
5
  },
6
6
  "es": {
7
7
  "title": "¡ALTO!",
8
- "message": "Esta es una función del navegador para desarrolladores.\\nSi alguien te pide que pegues algo aquí, es una estafa."
8
+ "message": "Esta es una función del navegador para desarrolladores.\\nSi alguien te pide que pegues algo aquí, es una estafa.\\nPegar código puede dar a los atacantes acceso a tu cuenta."
9
9
  },
10
10
  "fr": {
11
11
  "title": "STOP !",
12
- "message": "Ceci est une fonctionnalité du navigateur pour les développeurs.\\nSi quelqu'un vous demande de coller quelque chose ici, c'est une arnaque."
12
+ "message": "Ceci est une fonctionnalité du navigateur pour les développeurs.\\nSi quelqu'un vous demande de coller quelque chose ici, c'est une arnaque.\\nColler du code peut donner aux attaquants l'accès à votre compte."
13
13
  },
14
14
  "de": {
15
15
  "title": "STOPP!",
16
- "message": "Dies ist eine Browserfunktion für Entwickler.\\nWenn dich jemand bittet, hier etwas einzufügen, ist das Betrug."
16
+ "message": "Dies ist eine Browserfunktion für Entwickler.\\nWenn dich jemand bittet, hier etwas einzufügen, ist das Betrug.\\nDas Einfügen von Code kann Angreifern Zugriff auf dein Konto geben."
17
17
  },
18
18
  "it": {
19
19
  "title": "STOP!",
20
- "message": "Questa è una funzione del browser per sviluppatori.\\nSe qualcuno ti chiede di incollare qualcosa qui, è una truffa."
20
+ "message": "Questa è una funzione del browser per sviluppatori.\\nSe qualcuno ti chiede di incollare qualcosa qui, è una truffa.\\nIncollare codice può dare agli aggressori accesso al tuo account."
21
21
  },
22
22
  "pt": {
23
23
  "title": "PARE!",
24
- "message": "Este é um recurso do navegador para desenvolvedores.\\nSe alguém pedir para você colar algo aqui, é um golpe."
24
+ "message": "Este é um recurso do navegador para desenvolvedores.\\nSe alguém pedir para você colar algo aqui, é um golpe.\\nColar código pode dar aos atacantes acesso à sua conta."
25
25
  },
26
26
  "nl": {
27
27
  "title": "STOP!",
28
- "message": "Dit is een browserfunctie voor ontwikkelaars.\\nAls iemand je vraagt hier iets te plakken, is dat oplichting."
28
+ "message": "Dit is een browserfunctie voor ontwikkelaars.\\nAls iemand je vraagt hier iets te plakken, is dat oplichting.\\nCode plakken kan aanvallers toegang geven tot je account."
29
29
  },
30
30
  "sv": {
31
31
  "title": "STOPP!",
32
- "message": "Det här är en webbläsarfunktion för utvecklare.\\nOm någon ber dig klistra in något här är det en bluff."
32
+ "message": "Det här är en webbläsarfunktion för utvecklare.\\nOm någon ber dig klistra in något här är det en bluff.\\nAtt klistra in kod kan ge angripare åtkomst till ditt konto."
33
33
  },
34
34
  "no": {
35
35
  "title": "STOPP!",
36
- "message": "Dette er en nettleserfunksjon for utviklere.\\nHvis noen ber deg lime inn noe her, er det svindel."
36
+ "message": "Dette er en nettleserfunksjon for utviklere.\\nHvis noen ber deg lime inn noe her, er det svindel.\\nÅ lime inn kode kan gi angripere tilgang til kontoen din."
37
+ },
38
+ "nb": {
39
+ "title": "STOPP!",
40
+ "message": "Dette er en nettleserfunksjon for utviklere.\\nHvis noen ber deg lime inn noe her, er det svindel.\\nÅ lime inn kode kan gi angripere tilgang til kontoen din."
37
41
  },
38
42
  "da": {
39
43
  "title": "STOP!",
40
- "message": "Dette er en browserfunktion for udviklere.\\nHvis nogen beder dig om at indsætte noget her, er det snyd."
44
+ "message": "Dette er en browserfunktion for udviklere.\\nHvis nogen beder dig om at indsætte noget her, er det snyd.\\nAt indsætte kode kan give angribere adgang til din konto."
41
45
  },
42
46
  "fi": {
43
47
  "title": "SEIS!",
44
- "message": "Tämä on selaimen ominaisuus kehittäjille.\\nJos joku pyytää sinua liittämään jotain tähän, se on huijaus."
48
+ "message": "Tämä on selaimen ominaisuus kehittäjille.\\nJos joku pyytää sinua liittämään jotain tähän, se on huijaus.\\nKoodin liittäminen voi antaa hyökkääjille pääsyn tiliisi."
45
49
  },
46
50
  "ru": {
47
51
  "title": "СТОП!",
48
- "message": "Это функция браузера для разработчиков.\\nЕсли кто-то просит вставить сюда что-то — это мошенничество."
52
+ "message": "Это функция браузера для разработчиков.\\nЕсли кто-то просит вставить сюда что-то — это мошенничество.\\nВставка кода может дать злоумышленникам доступ к вашему аккаунту."
49
53
  },
50
54
  "uk": {
51
55
  "title": "СТОП!",
52
- "message": "Це функція браузера для розробників.\\nЯкщо хтось просить вставити щось сюди — це шахрайство."
56
+ "message": "Це функція браузера для розробників.\\nЯкщо хтось просить вставити щось сюди — це шахрайство.\\nВставлення коду може надати зловмисникам доступ до вашого облікового запису."
53
57
  },
54
58
  "pl": {
55
59
  "title": "STOP!",
56
- "message": "To funkcja przeglądarki dla deweloperów.\\nJeśli ktoś prosi, abyś wkleił coś tutaj, to oszustwo."
60
+ "message": "To funkcja przeglądarki dla deweloperów.\\nJeśli ktoś prosi, abyś wkleił coś tutaj, to oszustwo.\\nWklejenie kodu może dać atakującym dostęp do Twojego konta."
57
61
  },
58
62
  "cs": {
59
63
  "title": "STOP!",
60
- "message": "Toto je funkce prohlížeče pro vývojáře.\\nPokud vás někdo požádá, abyste sem něco vložili, je to podvod."
64
+ "message": "Toto je funkce prohlížeče pro vývojáře.\\nPokud vás někdo požádá, abyste sem něco vložili, je to podvod.\\nVložení kódu může dát útočníkům přístup k vašemu účtu."
61
65
  },
62
66
  "sk": {
63
67
  "title": "STOP!",
64
- "message": "Toto je funkcia prehliadača pre vývojárov.\\nAk vás niekto požiada, aby ste sem niečo vložili, je to podvod."
68
+ "message": "Toto je funkcia prehliadača pre vývojárov.\\nAk vás niekto požiada, aby ste sem niečo vložili, je to podvod.\\nVloženie kódu môže dať útočníkom prístup k vášmu účtu."
65
69
  },
66
70
  "hu": {
67
71
  "title": "ÁLLJ!",
68
- "message": "Ez egy böngészőfunkció fejlesztőknek.\\nHa valaki arra kér, hogy ide másolj valamit, az átverés."
72
+ "message": "Ez egy böngészőfunkció fejlesztőknek.\\nHa valaki arra kér, hogy ide másolj valamit, az átverés.\\nKód beillesztése hozzáférést adhat a támadóknak a fiókodhoz."
69
73
  },
70
74
  "ro": {
71
75
  "title": "STOP!",
72
- "message": "Aceasta este o funcție a browserului pentru dezvoltatori.\\nDacă cineva îți cere să lipești ceva aici, este o înșelătorie."
76
+ "message": "Aceasta este o funcție a browserului pentru dezvoltatori.\\nDacă cineva îți cere să lipești ceva aici, este o înșelătorie.\\nLipirea codului poate oferi atacatorilor acces la contul tău."
73
77
  },
74
78
  "bg": {
75
79
  "title": "СТОП!",
76
- "message": "Това е функция на браузъра за разработчици.\\nАко някой ви помоли да поставите нещо тук, това е измама."
80
+ "message": "Това е функция на браузъра за разработчици.\\nАко някой ви помоли да поставите нещо тук, това е измама.\\nПоставянето на код може да даде на нападатели достъп до вашия акаунт."
77
81
  },
78
82
  "tr": {
79
83
  "title": "DUR!",
80
- "message": "Bu, geliştiriciler için bir tarayıcı özelliğidir.\\nBirisi buraya bir şey yapıştırmanı isterse, bu bir dolandırıcılıktır."
84
+ "message": "Bu, geliştiriciler için bir tarayıcı özelliğidir.\\nBirisi buraya bir şey yapıştırmanı isterse, bu bir dolandırıcılıktır.\\nKod yapıştırmak, saldırganların hesabınıza erişmesine neden olabilir."
81
85
  },
82
86
  "el": {
83
87
  "title": "ΣΤΟΠ!",
84
- "message": "Αυτή είναι μια λειτουργία του προγράμματος περιήγησης για προγραμματιστές.\\nΑν κάποιος σας ζητήσει να επικολλήσετε κάτι εδώ, είναι απάτη."
88
+ "message": "Αυτή είναι μια λειτουργία του προγράμματος περιήγησης για προγραμματιστές.\\nΑν κάποιος σας ζητήσει να επικολλήσετε κάτι εδώ, είναι απάτη.\\nΗ επικόλληση κώδικα μπορεί να δώσει στους επιτιθέμενους πρόσβαση στον λογαριασμό σας."
85
89
  },
86
90
  "ar": {
87
91
  "title": "توقف!",
88
- "message": "هذه ميزة في المتصفح للمطورين.\\nإذا طلب منك أحد لصق شيء هنا، فهذه عملية احتيال."
92
+ "message": "هذه ميزة في المتصفح للمطورين.\\nإذا طلب منك أحد لصق شيء هنا، فهذه عملية احتيال.\\nلصق الشفرة يمكن أن يمنح المهاجمين إمكانية الوصول إلى حسابك."
89
93
  },
90
94
  "he": {
91
95
  "title": "עצור!",
92
- "message": "זו תכונת דפדפן למפתחים.\\nאם מישהו מבקש ממך להדביק משהו כאן, זו הונאה."
96
+ "message": "זו תכונת דפדפן למפתחים.\\nאם מישהו מבקש ממך להדביק משהו כאן, זו הונאה.\\nהדבקת קוד יכולה לתת לתוקפים גישה לחשבון שלך."
93
97
  },
94
98
  "hi": {
95
99
  "title": "रुको!",
96
- "message": "यह डेवलपर्स के लिए ब्राउज़र की सुविधा है।\\nयदि कोई आपसे यहां कुछ पेस्ट करने को कहे, तो यह धोखाधड़ी है।"
100
+ "message": "यह डेवलपर्स के लिए ब्राउज़र की सुविधा है।\\nयदि कोई आपसे यहां कुछ पेस्ट करने को कहे, तो यह धोखाधड़ी है।\\nकोड पेस्ट करने से हमलावरों को आपके खाते तक पहुंच मिल सकती है।"
97
101
  },
98
102
  "th": {
99
103
  "title": "หยุด!",
100
- "message": "นี่เป็นฟีเจอร์ของเบราว์เซอร์สำหรับนักพัฒนา\\nหากมีคนขอให้คุณวางบางอย่างที่นี่ นี่คือการหลอกลวง"
104
+ "message": "นี่เป็นฟีเจอร์ของเบราว์เซอร์สำหรับนักพัฒนา\\nหากมีคนขอให้คุณวางบางอย่างที่นี่ นี่คือการหลอกลวง\\nการวางโค้ดอาจทำให้ผู้โจมตีเข้าถึงบัญชีของคุณได้"
101
105
  },
102
106
  "vi": {
103
107
  "title": "DỪNG!",
104
- "message": "Đây là một tính năng của trình duyệt dành cho lập trình viên.\\nNếu ai đó yêu cầu bạn dán thứ gì đó vào đây, đó là lừa đảo."
108
+ "message": "Đây là một tính năng của trình duyệt dành cho lập trình viên.\\nNếu ai đó yêu cầu bạn dán thứ gì đó vào đây, đó là lừa đảo.\\nViệc dán mã có thể cho kẻ tấn công quyền truy cập vào tài khoản của bạn."
105
109
  },
106
110
  "id": {
107
111
  "title": "BERHENTI!",
108
- "message": "Ini adalah fitur browser untuk pengembang.\\nJika seseorang meminta Anda menempelkan sesuatu di sini, itu penipuan."
112
+ "message": "Ini adalah fitur browser untuk pengembang.\\nJika seseorang meminta Anda menempelkan sesuatu di sini, itu penipuan.\\nMenempelkan kode dapat memberi penyerang akses ke akun Anda."
109
113
  },
110
114
  "ms": {
111
115
  "title": "BERHENTI!",
112
- "message": "Ini adalah ciri pelayar untuk pembangun.\\nJika seseorang meminta anda menampal sesuatu di sini, itu penipuan."
116
+ "message": "Ini adalah ciri pelayar untuk pembangun.\\nJika seseorang meminta anda menampal sesuatu di sini, itu penipuan.\\nMenampal kod boleh memberi penyerang akses kepada akaun anda."
113
117
  },
114
118
  "zh": {
115
119
  "title": "停止!",
116
- "message": "这是给开发者使用的浏览器功能。\\n如果有人让你在这里粘贴内容,那是诈骗。"
120
+ "message": "这是给开发者使用的浏览器功能。\\n如果有人让你在这里粘贴内容,那是诈骗。\\n粘贴代码可能会让攻击者访问你的账户。"
117
121
  },
118
122
  "ja": {
119
123
  "title": "停止!",
120
- "message": "これは開発者向けのブラウザー機能です。\\nここに何かを貼り付けるよう求められたら、それは詐欺です。"
124
+ "message": "これは開発者向けのブラウザー機能です。\\nここに何かを貼り付けるよう求められたら、それは詐欺です。\\nコードを貼り付けると、攻撃者があなたのアカウントにアクセスできる可能性があります。"
121
125
  },
122
126
  "ko": {
123
127
  "title": "멈춰!",
124
- "message": "이것은 개발자를 위한 브라우저 기능입니다.\\n여기에 무언가를 붙여 넣으라고 요청받으면 사기입니다."
128
+ "message": "이것은 개발자를 위한 브라우저 기능입니다.\\n여기에 무언가를 붙여 넣으라고 요청받으면 사기입니다.\\n코드를 붙여 넣으면 공격자가 계정에 접근할 수 있습니다."
129
+ },
130
+ "et": {
131
+ "title": "STOPP!",
132
+ "message": "See on arendajatele mõeldud brauserifunktsioon.\\nKui keegi palub sul siia midagi kleepida, on see pettus.\\nKoodi kleepimine võib anda ründajatele ligipääsu sinu kontole."
133
+ },
134
+ "lt": {
135
+ "title": "STOP!",
136
+ "message": "Tai naršyklės funkcija, skirta kūrėjams.\\nJei kas nors prašo čia ką nors įklijuoti, tai apgaulė.\\nKodo įklijavimas gali suteikti užpuolikams prieigą prie jūsų paskyros."
137
+ },
138
+ "lv": {
139
+ "title": "STOP!",
140
+ "message": "Šī ir pārlūka funkcija izstrādātājiem.\\nJa kāds lūdz šeit kaut ko ielīmēt, tā ir krāpšana.\\nKoda ielīmēšana var dot uzbrucējiem piekļuvi jūsu kontam."
141
+ },
142
+ "hr": {
143
+ "title": "STOP!",
144
+ "message": "Ovo je značajka preglednika namijenjena razvojnim programerima.\\nAko vas netko traži da ovdje zalijepite nešto, to je prijevara.\\nLijepljenje koda može napadačima dati pristup vašem računu."
145
+ },
146
+ "sl": {
147
+ "title": "STOP!",
148
+ "message": "To je funkcija brskalnika za razvijalce.\\nČe vas kdo prosi, da sem prilepite nekaj, je to prevara.\\nLepljenje kode lahko napadalcem omogoči dostop do vašega računa."
149
+ },
150
+ "sr": {
151
+ "title": "СТОП!",
152
+ "message": "Ово је функција прегледача за програмере.\\nАко вам неко тражи да овде налепите нешто, то је превара.\\nЛепљење кода може омогућити нападачима приступ вашем налогу."
153
+ },
154
+ "mk": {
155
+ "title": "СТОП!",
156
+ "message": "Ова е функција на прелистувачот за програмери.\\nАко некој бара да залепите нешто тука, тоа е измама.\\nЛепењето код може да им даде пристап на напаѓачите до вашата сметка."
157
+ },
158
+ "sq": {
159
+ "title": "NDALO!",
160
+ "message": "Kjo është një veçori e shfletuesit për zhvilluesit.\\nNëse dikush ju kërkon të ngjitni diçka këtu, është mashtrim.\\nNgjitja e kodit mund t'u japë sulmuesve qasje në llogarinë tuaj."
161
+ },
162
+ "is": {
163
+ "title": "STOPP!",
164
+ "message": "Þetta er vafraeiginleiki fyrir forritara.\\nEf einhver biður þig um að líma eitthvað hér, þá er það svindl.\\nAð líma inn kóða getur veitt árásaraðilum aðgang að reikningnum þínum."
165
+ },
166
+ "ga": {
167
+ "title": "STOP!",
168
+ "message": "Gné de bhrabhsálaí do fhorbróirí atá anseo.\\nMá iarrann duine ort rud éigin a ghreamú anseo, is camscéim é.\\nIs féidir le cód a ghreamú rochtain a thabhairt d'ionsaitheoirí ar do chuntas."
169
+ },
170
+ "fa": {
171
+ "title": "توقف!",
172
+ "message": "این یک قابلیت مرورگر برای توسعه‌دهندگان است.\\nاگر کسی از شما خواست چیزی را اینجا جای‌گذاری کنید، این یک کلاهبرداری است.\\nجای‌گذاری کد می‌تواند به مهاجمان امکان دسترسی به حساب شما را بدهد."
173
+ },
174
+ "ur": {
175
+ "title": "رکیں!",
176
+ "message": "یہ ڈویلپرز کے لیے براؤزر کی ایک خصوصیت ہے۔\\nاگر کوئی آپ سے یہاں کچھ پیسٹ کرنے کو کہے، تو یہ دھوکہ ہے۔\\nکوڈ پیسٹ کرنا حملہ آوروں کو آپ کے اکاؤنٹ تک رسائی دے سکتا ہے۔"
177
+ },
178
+ "bn": {
179
+ "title": "থামুন!",
180
+ "message": "এটি ডেভেলপারদের জন্য একটি ব্রাউজার ফিচার।\\nযদি কেউ আপনাকে এখানে কিছু পেস্ট করতে বলে, এটি প্রতারণা।\\nকোড পেস্ট করা আক্রমণকারীদের আপনার অ্যাকাউন্টে প্রবেশাধিকার দিতে পারে।"
125
181
  }
126
182
  }
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "console-self-xss-warning",
3
- "version": "1.0.3",
3
+ "version": "2.0.1",
4
4
  "description": "Show a self-XSS warning in the browser console.",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
8
  "license": "MIT",
9
- "author": "Hikasami",
9
+ "author": "Nikita Kononenko <nick@knko.me> (https://github.com/jadnast)",
10
+ "publisher": "Hikasami",
10
11
  "repository": {
11
12
  "type": "git",
12
13
  "url": "git+https://github.com/hksm-app/console-self-xss-warning.git"