@nuxt/scripts 2.0.0-beta.4 → 2.0.0-beta.6

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 (84) hide show
  1. package/LICENSE.md +9 -0
  2. package/dist/devtools-client/200.html +1 -1
  3. package/dist/devtools-client/404.html +1 -1
  4. package/dist/devtools-client/_nuxt/Bagqfgzu.js +179 -0
  5. package/dist/devtools-client/_nuxt/CIwvJvFr.js +1 -0
  6. package/dist/devtools-client/_nuxt/CP6K2Qm6.js +1 -0
  7. package/dist/devtools-client/_nuxt/CWci3Eb_.js +1 -0
  8. package/dist/devtools-client/_nuxt/Car86Ubo.js +3 -0
  9. package/dist/devtools-client/_nuxt/{Dat651Oh.js → ClT2ZYzs.js} +1 -1
  10. package/dist/devtools-client/_nuxt/D4iN56En.js +1 -0
  11. package/dist/devtools-client/_nuxt/DXDqMNFL.js +1 -0
  12. package/dist/devtools-client/_nuxt/DZ6h2v9A.js +1 -0
  13. package/dist/devtools-client/_nuxt/D_hceTm9.js +1 -0
  14. package/dist/devtools-client/_nuxt/QMsSHdby.js +6 -0
  15. package/dist/devtools-client/_nuxt/WbNXtEed.js +2 -0
  16. package/dist/devtools-client/_nuxt/builds/latest.json +1 -1
  17. package/dist/devtools-client/_nuxt/builds/meta/8bf6d5ed-9af4-4b18-be50-90e3f19066d5.json +1 -0
  18. package/dist/devtools-client/_nuxt/entry.CuI_2OaG.css +2 -0
  19. package/dist/devtools-client/_nuxt/error-404.Bn3cR6N7.css +1 -0
  20. package/dist/devtools-client/_nuxt/error-500.ClHmgt9z.css +1 -0
  21. package/dist/devtools-client/_nuxt/{pages.aU4WirOM.css → pages.BTJrCFzE.css} +1 -1
  22. package/dist/devtools-client/_nuxt/utTTwIIR.js +8 -0
  23. package/dist/devtools-client/docs/index.html +1 -1
  24. package/dist/devtools-client/first-party/index.html +1 -1
  25. package/dist/devtools-client/index.html +1 -1
  26. package/dist/devtools-client/registry/index.html +1 -1
  27. package/dist/module.d.mts +23 -1
  28. package/dist/module.d.ts +23 -1
  29. package/dist/module.json +1 -1
  30. package/dist/module.mjs +38 -13
  31. package/dist/runtime/components/MapLibre/ScriptMapLibreMap.vue +3 -2
  32. package/dist/runtime/components/MapLibre/ScriptMapLibreMarker.d.vue.ts +6 -6
  33. package/dist/runtime/components/MapLibre/ScriptMapLibreMarker.vue.d.ts +6 -6
  34. package/dist/runtime/components/MapLibre/ScriptMapLibrePopup.d.vue.ts +4 -4
  35. package/dist/runtime/components/MapLibre/ScriptMapLibrePopup.vue.d.ts +4 -4
  36. package/dist/runtime/components/ScriptCarbonAds.vue +3 -1
  37. package/dist/runtime/components/ScriptGoogleAdsense.d.vue.ts +1 -1
  38. package/dist/runtime/components/ScriptGoogleAdsense.vue.d.ts +1 -1
  39. package/dist/runtime/registry/ahrefs-analytics.d.ts +2 -1
  40. package/dist/runtime/registry/calendly.d.ts +2 -1
  41. package/dist/runtime/registry/clarity.d.ts +2 -1
  42. package/dist/runtime/registry/cloudflare-web-analytics.d.ts +2 -1
  43. package/dist/runtime/registry/google-adsense.d.ts +2 -1
  44. package/dist/runtime/registry/google-recaptcha.d.ts +2 -1
  45. package/dist/runtime/registry/google-tag-manager.d.ts +2 -1
  46. package/dist/runtime/registry/hotjar.d.ts +2 -1
  47. package/dist/runtime/registry/intercom.d.ts +2 -1
  48. package/dist/runtime/registry/leaflet.d.ts +2 -1
  49. package/dist/runtime/registry/linkedin-insight.d.ts +2 -1
  50. package/dist/runtime/registry/matomo-analytics.d.ts +2 -1
  51. package/dist/runtime/registry/meta-pixel.d.ts +4 -1
  52. package/dist/runtime/registry/paypal.d.ts +2 -1
  53. package/dist/runtime/registry/reddit-pixel.d.ts +2 -1
  54. package/dist/runtime/registry/segment.d.ts +7 -1
  55. package/dist/runtime/registry/snapchat-pixel.d.ts +4 -1
  56. package/dist/runtime/registry/vimeo-player.d.ts +2 -1
  57. package/dist/runtime/registry/x-pixel.d.ts +2 -1
  58. package/dist/runtime/registry/youtube-player.d.ts +2 -1
  59. package/dist/runtime/server/proxy-handler.d.ts +0 -4
  60. package/dist/runtime/server/proxy-handler.js +109 -38
  61. package/dist/runtime/server/utils/network-dispatcher.platform.d.ts +2 -2
  62. package/dist/runtime/server/utils/network-dispatcher.platform.js +4 -1
  63. package/dist/types-source.mjs +2 -2
  64. package/dist/types.d.mts +1 -1
  65. package/package.json +22 -22
  66. package/dist/devtools-client/_nuxt/2p1_IuX2.js +0 -1
  67. package/dist/devtools-client/_nuxt/9elIQxwW.js +0 -1
  68. package/dist/devtools-client/_nuxt/B-kTnbRv.js +0 -1
  69. package/dist/devtools-client/_nuxt/BDNMzG2s.js +0 -1
  70. package/dist/devtools-client/_nuxt/BNPn63Jz.js +0 -1
  71. package/dist/devtools-client/_nuxt/BuTlAAeI.js +0 -152
  72. package/dist/devtools-client/_nuxt/C41E8Pp1.js +0 -8
  73. package/dist/devtools-client/_nuxt/CDDBpkXG.js +0 -3
  74. package/dist/devtools-client/_nuxt/Cbmw_5H5.js +0 -1
  75. package/dist/devtools-client/_nuxt/DAsiyhPm.js +0 -6
  76. package/dist/devtools-client/_nuxt/DabLKy7M.js +0 -1
  77. package/dist/devtools-client/_nuxt/DiZU_C4m.js +0 -1
  78. package/dist/devtools-client/_nuxt/KsX6Az5B.js +0 -1
  79. package/dist/devtools-client/_nuxt/UmWNrBO5.js +0 -2
  80. package/dist/devtools-client/_nuxt/builds/meta/f0a54c15-eb5b-4885-b712-6bf1d071dca8.json +0 -1
  81. package/dist/devtools-client/_nuxt/entry.9HJPJ6Hp.css +0 -2
  82. package/dist/devtools-client/_nuxt/error-404.DnwL1N6v.css +0 -1
  83. package/dist/devtools-client/_nuxt/error-500.DEbXRLdm.css +0 -1
  84. package/dist/devtools-client/_nuxt/tYzzi6ZH.js +0 -28
@@ -35,7 +35,10 @@ export interface SnapPixelApi {
35
35
  handleRequest?: SnapTrFns;
36
36
  }
37
37
  declare global {
38
- interface Window extends SnapPixelApi {
38
+ interface Window {
39
+ snaptr: SnapPixelApi['snaptr'];
40
+ _snaptr: SnapPixelApi['_snaptr'];
41
+ handleRequest?: SnapPixelApi['handleRequest'];
39
42
  }
40
43
  }
41
44
  export type SnapTrPixelInput = RegistryScriptInput<typeof SnapTrPixelOptions, true, false>;
@@ -8,7 +8,8 @@ export interface VimeoPlayerApi {
8
8
  }
9
9
  export type VimeoPlayerInput = RegistryScriptInput;
10
10
  declare global {
11
- interface Window extends VimeoPlayerApi {
11
+ interface Window {
12
+ Vimeo: VimeoPlayerApi['Vimeo'];
12
13
  }
13
14
  }
14
15
  export declare function useScriptVimeoPlayer<T extends VimeoPlayerApi>(_options?: VimeoPlayerInput): UseScriptContext<T>;
@@ -25,7 +25,8 @@ export interface XPixelApi {
25
25
  };
26
26
  }
27
27
  declare global {
28
- interface Window extends XPixelApi {
28
+ interface Window {
29
+ twq: XPixelApi['twq'];
29
30
  }
30
31
  }
31
32
  export { XPixelOptions };
@@ -14,7 +14,8 @@ export interface YouTubePlayerApi {
14
14
  };
15
15
  }
16
16
  declare global {
17
- interface Window extends YouTubePlayerApi {
17
+ interface Window {
18
+ YT: YouTubePlayerApi['YT'];
18
19
  onYouTubeIframeAPIReady?: () => void;
19
20
  }
20
21
  }
@@ -1,8 +1,4 @@
1
1
  export declare const SKIP_REQUEST_HEADERS: Set<string>;
2
2
  export declare function withResponseBodyIdleTimeout(body: ReadableStream<Uint8Array>, timeoutMs: number, onTimeout: () => void): ReadableStream<Uint8Array>;
3
- /**
4
- * Privacy-aware proxy handler for first-party script collection endpoints.
5
- * Routes requests to third-party analytics while protecting user privacy.
6
- */
7
3
  declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<void | null>>;
8
4
  export default _default;
@@ -15,6 +15,9 @@ const COMPRESSION_RE = /gzip|deflate|br|compress|base64/i;
15
15
  const CLIENT_HINT_VERSION_RE = /;v="(\d+)\.[^"]*"/g;
16
16
  const MAX_TRANSFORM_BODY_SIZE = 2 * 1024 * 1024;
17
17
  const UPSTREAM_TIMEOUT_MS = 15e3;
18
+ const MAX_UPSTREAM_REDIRECTS = 5;
19
+ const REDIRECT_STATUSES = /* @__PURE__ */ new Set([301, 302, 303, 307, 308]);
20
+ const REQUEST_BODY_HEADERS = ["content-encoding", "content-language", "content-length", "content-location", "content-type"];
18
21
  const SKIP_RESPONSE_HEADERS = /* @__PURE__ */ new Set([
19
22
  "alt-svc",
20
23
  "clear-site-data",
@@ -46,7 +49,7 @@ export const SKIP_REQUEST_HEADERS = /* @__PURE__ */ new Set([
46
49
  "transfer-encoding",
47
50
  "upgrade"
48
51
  ]);
49
- async function readTransformBody(event) {
52
+ async function readBodyBytes(event) {
50
53
  const contentLength = Number(getHeaders(event)["content-length"] || 0);
51
54
  if (Number.isFinite(contentLength) && contentLength > MAX_TRANSFORM_BODY_SIZE) {
52
55
  throw createError({ statusCode: 413, statusMessage: "Proxy request body too large" });
@@ -83,7 +86,7 @@ async function readTransformBody(event) {
83
86
  body.set(chunk, offset);
84
87
  offset += chunk.byteLength;
85
88
  }
86
- return new TextDecoder().decode(body);
89
+ return body;
87
90
  }
88
91
  export function withResponseBodyIdleTimeout(body, timeoutMs, onTimeout) {
89
92
  const reader = body.getReader();
@@ -145,6 +148,64 @@ function stripQueryFingerprinting(query, privacy) {
145
148
  }
146
149
  return { queryString: params.toString(), stripped };
147
150
  }
151
+ function isUpstreamRedirect(status) {
152
+ return REDIRECT_STATUSES.has(status);
153
+ }
154
+ function upstreamFetchError(err, timedOut) {
155
+ const blockedPrivateNetwork = isPrivateNetworkResolutionError(err);
156
+ return createError({
157
+ statusCode: blockedPrivateNetwork ? 403 : timedOut ? 504 : 502,
158
+ statusMessage: blockedPrivateNetwork ? "Local network targets are not allowed" : timedOut ? "Gateway Timeout" : "Bad Gateway",
159
+ message: "Proxy upstream request failed",
160
+ cause: err,
161
+ data: {
162
+ errorName: err?.name,
163
+ errorCode: timedOut ? "TIMEOUT" : err?.code
164
+ }
165
+ });
166
+ }
167
+ function resolveProxyRedirect(response, state, redirectCount, urlAllowed) {
168
+ const location = response.headers.get("location");
169
+ if (!location) {
170
+ throw createError({
171
+ statusCode: 502,
172
+ statusMessage: "Invalid upstream redirect",
173
+ message: "Upstream redirect has no Location header"
174
+ });
175
+ }
176
+ if (redirectCount >= MAX_UPSTREAM_REDIRECTS) {
177
+ throw createError({
178
+ statusCode: 502,
179
+ statusMessage: "Too many upstream redirects",
180
+ message: "Upstream redirect limit exceeded"
181
+ });
182
+ }
183
+ let nextUrl;
184
+ try {
185
+ nextUrl = new URL(location, state.url);
186
+ } catch (cause) {
187
+ throw createError({
188
+ statusCode: 502,
189
+ statusMessage: "Invalid upstream redirect",
190
+ message: "Upstream redirect URL is invalid",
191
+ cause
192
+ });
193
+ }
194
+ if (!urlAllowed(nextUrl)) {
195
+ throw createError({
196
+ statusCode: 502,
197
+ statusMessage: "Unsafe upstream redirect",
198
+ message: `Upstream redirect target is not allowed: ${nextUrl.origin}`
199
+ });
200
+ }
201
+ const switchToGet = response.status === 303 && state.method !== "GET" && state.method !== "HEAD" || (response.status === 301 || response.status === 302) && state.method === "POST";
202
+ if (!switchToGet)
203
+ return { ...state, url: nextUrl };
204
+ const headers = { ...state.headers };
205
+ for (const header of REQUEST_BODY_HEADERS)
206
+ delete headers[header];
207
+ return { url: nextUrl, method: "GET", body: void 0, headers };
208
+ }
148
209
  export default defineEventHandler(async (event) => {
149
210
  const config = useRuntimeConfig();
150
211
  const proxyConfig = config["nuxt-scripts-proxy"];
@@ -282,12 +343,14 @@ export default defineEventHandler(async (event) => {
282
343
  }
283
344
  let body;
284
345
  let rawBody;
346
+ let rawBodyBytes;
285
347
  let passthroughBody = false;
286
348
  if (isWriteMethod) {
349
+ rawBodyBytes = await readBodyBytes(event);
287
350
  if (!shouldTransformBody) {
288
351
  passthroughBody = true;
289
352
  } else if (transformableBodyType === "form") {
290
- const formBody = await readTransformBody(event);
353
+ const formBody = rawBodyBytes === void 0 ? void 0 : new TextDecoder().decode(rawBodyBytes);
291
354
  rawBody = formBody;
292
355
  if (formBody != null) {
293
356
  const params = new URLSearchParams(formBody);
@@ -315,7 +378,7 @@ export default defineEventHandler(async (event) => {
315
378
  body = transformed.toString();
316
379
  }
317
380
  } else {
318
- const jsonBody = await readTransformBody(event);
381
+ const jsonBody = rawBodyBytes === void 0 ? void 0 : new TextDecoder().decode(rawBodyBytes);
319
382
  if (jsonBody !== void 0) {
320
383
  try {
321
384
  rawBody = JSON.parse(jsonBody);
@@ -365,55 +428,63 @@ export default defineEventHandler(async (event) => {
365
428
  controller.abort();
366
429
  }, UPSTREAM_TIMEOUT_MS);
367
430
  let fetchBody;
368
- if (passthroughBody && originalHeaders["content-length"] !== "0") {
369
- fetchBody = getRequestWebStream(event);
431
+ if (passthroughBody) {
432
+ if (rawBodyBytes && rawBodyBytes.byteLength > 0)
433
+ fetchBody = rawBodyBytes;
370
434
  } else if (body !== void 0) {
371
435
  fetchBody = transformableBodyType === "json" ? JSON.stringify(body) : String(body);
372
436
  }
437
+ const hopAllowed = (url) => url.protocol === "https:" && !url.username && !url.password && (!url.port || url.port === "443") && isPublicNetworkHostname(url.hostname) && Object.keys(domainPrivacy).some((configDomain) => matchDomain(url.hostname, configDomain));
373
438
  let response;
374
439
  let network;
375
440
  try {
376
441
  network = await createPublicNetworkDispatcher();
377
- const requestInit = {
442
+ let state = {
443
+ url: new URL(targetUrl),
378
444
  method: method || "GET",
379
- headers,
380
445
  body: fetchBody,
381
- credentials: "omit",
382
- // Don't send cookies to third parties
383
- signal: controller.signal,
384
- redirect: "manual",
385
- duplex: fetchBody instanceof ReadableStream ? "half" : void 0
446
+ headers
386
447
  };
387
- response = await network.fetch(targetUrl, requestInit);
448
+ for (let redirectCount = 0; ; redirectCount++) {
449
+ let hop;
450
+ try {
451
+ hop = await network.fetch(state.url.toString(), {
452
+ method: state.method,
453
+ headers: state.headers,
454
+ body: state.body,
455
+ credentials: "omit",
456
+ // Don't send cookies to third parties
457
+ signal: controller.signal,
458
+ redirect: "manual"
459
+ });
460
+ } catch (err) {
461
+ log("[proxy] Upstream error:", err);
462
+ throw upstreamFetchError(err, timedOut);
463
+ }
464
+ log("[proxy] Response:", hop.status, hop.statusText);
465
+ if (!isUpstreamRedirect(hop.status)) {
466
+ response = hop;
467
+ break;
468
+ }
469
+ let next;
470
+ try {
471
+ next = resolveProxyRedirect(hop, state, redirectCount, hopAllowed);
472
+ } catch (err) {
473
+ await hop.body?.cancel(err).catch((cancelError) => Object.assign(err, { cleanupError: cancelError }));
474
+ throw err;
475
+ }
476
+ const redirectDiscarded = new Error("Upstream redirect response body discarded");
477
+ await hop.body?.cancel(redirectDiscarded).catch((cancelError) => Object.assign(redirectDiscarded, { cause: cancelError }));
478
+ log("[proxy] Following redirect:", next.url.toString());
479
+ state = next;
480
+ }
388
481
  clearTimeout(timeoutId);
389
482
  } catch (err) {
390
483
  clearTimeout(timeoutId);
391
484
  await closePublicNetworkDispatcher(network, err);
392
- log("[proxy] Upstream error:", err);
393
- const blockedPrivateNetwork = isPrivateNetworkResolutionError(err);
394
- throw createError({
395
- statusCode: blockedPrivateNetwork ? 403 : timedOut ? 504 : 502,
396
- statusMessage: blockedPrivateNetwork ? "Local network targets are not allowed" : timedOut ? "Gateway Timeout" : "Bad Gateway",
397
- message: "Proxy upstream request failed",
398
- cause: err,
399
- data: {
400
- errorName: err?.name,
401
- errorCode: timedOut ? "TIMEOUT" : err?.code
402
- }
403
- });
404
- }
405
- log("[proxy] Response:", response.status, response.statusText);
406
- if (response.status >= 300 && response.status < 400 && response.status !== 304) {
407
- clearTimeout(timeoutId);
408
- const redirectError = createError({
409
- statusCode: 502,
410
- statusMessage: "Unsafe upstream redirect",
411
- message: "Proxy upstream returned a redirect that was not followed"
412
- });
413
- await response.body?.cancel(redirectError).catch((cancelError) => Object.assign(redirectError, { cleanupError: cancelError }));
414
- await closePublicNetworkDispatcher(network, redirectError);
415
- throw redirectError;
485
+ throw err;
416
486
  }
487
+ log("[proxy] Upstream settled:", response.status);
417
488
  const responseConnectionHeaders = new Set(
418
489
  (response.headers.get("connection") || "").split(",").map((header) => header.trim().toLowerCase()).filter(Boolean)
419
490
  );
@@ -1,2 +1,2 @@
1
- import type { CreateNetworkDispatcher } from './network-host.js';
2
- export declare const createNetworkDispatcher: CreateNetworkDispatcher;
1
+ import type { PublicNetworkDispatcher } from './network-host.js';
2
+ export declare const createNetworkDispatcher: () => Promise<PublicNetworkDispatcher>;
@@ -1,5 +1,8 @@
1
1
  export const createNetworkDispatcher = async () => ({
2
- fetch: globalThis.fetch,
2
+ // workerd's native fetch throws `TypeError: Illegal invocation` when a
3
+ // detached reference is called as a method (e.g. `dispatcher.fetch(...)`),
4
+ // so pin the receiver before handing the function to callers.
5
+ fetch: globalThis.fetch.bind(globalThis),
3
6
  close: async () => {
4
7
  }
5
8
  });
@@ -305,7 +305,7 @@ const types = {
305
305
  {
306
306
  name: "ScriptGoogleAdsenseProps",
307
307
  kind: "interface",
308
- code: "interface ScriptGoogleAdsenseProps {\n dataAdClient: string\n dataAdSlot: string\n dataAdFormat?: 'auto' | 'rectangle' | 'vertical' | 'horizontal' | 'fluid' | 'autorelaxed'\n dataAdLayout?: 'in-article'\n dataAdLayoutKey?: string\n dataFullWidthResponsive?: boolean\n /**\n * Defines the trigger event to load the script.\n */\n trigger?: ElementScriptTrigger\n}"
308
+ code: "interface ScriptGoogleAdsenseProps {\n dataAdClient: string\n dataAdSlot: string\n dataAdFormat?: 'auto' | 'rectangle' | 'vertical' | 'horizontal' | 'fluid' | 'autorelaxed'\n dataAdLayout?: 'in-article' | 'image-top' | 'image-side' | 'text-only'\n dataAdLayoutKey?: string\n dataFullWidthResponsive?: boolean\n /**\n * Defines the trigger event to load the script.\n */\n trigger?: ElementScriptTrigger\n}"
309
309
  },
310
310
  {
311
311
  name: "ScriptGoogleAdsenseEvents",
@@ -4544,7 +4544,7 @@ const schemaFields = {
4544
4544
  },
4545
4545
  {
4546
4546
  name: "dataAdLayout",
4547
- type: "'in-article'",
4547
+ type: "'in-article' | 'image-top' | 'image-side' | 'text-only'",
4548
4548
  required: false
4549
4549
  },
4550
4550
  {
package/dist/types.d.mts CHANGED
@@ -6,6 +6,6 @@ declare module '@nuxt/schema' {
6
6
 
7
7
  export { type FirstPartyPrivacy } from '../dist/runtime/types.js'
8
8
 
9
- export { type applyAutoInject, default, type findMissingRequiredFields, type isProxyDisabled, type resolveConfiguredProxyDomains } from './module.mjs'
9
+ export { type STATIC_PROXY_PRESETS, type applyAutoInject, default, type findMissingRequiredFields, type isProxyDisabled, type isStaticProxyTarget, type normalizeNitroPreset, type resolveConfiguredProxyDomains } from './module.mjs'
10
10
 
11
11
  export { type ModuleHooks, type ModuleOptions } from './module.mjs'
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nuxt/scripts",
3
3
  "type": "module",
4
- "version": "2.0.0-beta.4",
4
+ "version": "2.0.0-beta.6",
5
5
  "description": "Load third-party scripts with better performance, privacy and DX in Nuxt Apps.",
6
6
  "author": {
7
7
  "name": "Harlan Wilton",
@@ -72,18 +72,18 @@
72
72
  },
73
73
  "peerDependencies": {
74
74
  "@googlemaps/markerclusterer": "^2.6.2",
75
- "@paypal/paypal-js": "^10.0.0",
76
- "@speedcurve/lux": "^4.4.3",
77
- "@stripe/stripe-js": "^7.0.0 || ^8.0.0 || ^9.0.0",
78
- "@types/geojson": "^7946.0.0",
79
- "@types/google.maps": "^3.58.1",
80
- "@types/leaflet": "^1.9.0",
75
+ "@paypal/paypal-js": "^11.0.0",
76
+ "@speedcurve/lux": "^4.5.2",
77
+ "@stripe/stripe-js": "^9.15.0",
78
+ "@types/geojson": "^7946.0.16",
79
+ "@types/google.maps": "^3.66.2",
80
+ "@types/leaflet": "^1.9.22",
81
81
  "@types/vimeo__player": "^2.18.3",
82
- "@types/youtube": "^0.1.0",
83
- "@unhead/vue": "^3.3.1",
84
- "maplibre-gl": "^6.0.0",
85
- "posthog-js": "^1.0.0",
86
- "unhead": "^3.3.1"
82
+ "@types/youtube": "^0.3.0",
83
+ "@unhead/vue": "^3.4.0",
84
+ "maplibre-gl": "^6.8.0",
85
+ "posthog-js": "^1.428.7",
86
+ "unhead": "^3.4.0"
87
87
  },
88
88
  "peerDependenciesMeta": {
89
89
  "@googlemaps/markerclusterer": {
@@ -121,16 +121,16 @@
121
121
  }
122
122
  },
123
123
  "dependencies": {
124
- "@nuxt/devtools-kit": "^3.4.1",
125
- "@oxc-project/types": "^0.143.0",
124
+ "@nuxt/devtools-kit": "^3.4.2",
125
+ "@oxc-project/types": "^0.149.0",
126
126
  "@vueuse/core": "^14.4.0",
127
127
  "@vueuse/shared": "^14.4.0",
128
128
  "consola": "^3.4.2",
129
129
  "defu": "^6.1.7",
130
130
  "h3": "^1.15.11",
131
- "magic-string": "^1.1.0",
131
+ "magic-string": "^1.2.3",
132
132
  "ofetch": "^1.5.1",
133
- "ohash": "^2.0.11",
133
+ "ohash": "^2.0.12",
134
134
  "oxc-walker": "^1.1.1",
135
135
  "pathe": "^2.0.3",
136
136
  "semver": "^7.8.5",
@@ -143,14 +143,14 @@
143
143
  "valibot": "^1.4.2"
144
144
  },
145
145
  "devDependencies": {
146
- "@nuxt/kit": "^4.5.1",
146
+ "@nuxt/kit": "^4.5.2",
147
147
  "@nuxt/module-builder": "^1.0.3",
148
- "@speedcurve/lux": "^4.4.3",
149
- "@unhead/vue": "^3.3.1",
150
- "rollup": "^4.62.4",
148
+ "@speedcurve/lux": "^4.5.2",
149
+ "@unhead/vue": "^3.4.0",
150
+ "rollup": "^4.63.1",
151
151
  "unbuild": "^3.6.1",
152
- "unhead": "^3.3.1",
153
- "unimport": "^6.4.0"
152
+ "unhead": "^3.4.0",
153
+ "unimport": "^7.0.1"
154
154
  },
155
155
  "scripts": {
156
156
  "build": "nuxt-module-build build",
@@ -1 +0,0 @@
1
- import{H as e,L as t,an as n,gn as r,in as i,yn as a}from"./CDDBpkXG.js";var o=Error.captureStackTrace,s=class e extends Error{name;code;docs;fix;sources;get why(){return this.message}constructor(t,n=e){super(t.why,{cause:t.cause}),this.code=this.name=t.code,this.fix=t.fix,this.docs=t.docs,this.sources=t.sources,o?.(this,n)}toJSON(){return{name:this.name,why:this.why,fix:this.fix,docs:this.docs,sources:this.sources,cause:this.cause,stack:this.stack}}};function c(e,t){return typeof e==`string`?`${e}/${t.toLowerCase()}`:e?.(t)}function l(e={}){let{docsBase:t,reporters:n=[]}=e;return new Proxy({},{get(e,r){if(typeof r!=`string`)return;let i=(e={},a={})=>{let o=c(t,r),l=new s({code:r,why:o??``,docs:o,cause:e.cause,sources:e.sources},i);for(let e of n)e(l,a);return l};return i}})}function u(e){return`https://nuxt.com/docs/4.x/errors/${e.replace(`NUXT_`,``).toLowerCase()}`}var d=[e=>{console.error(`[${e.name}]`)}],f=l({docsBase:u,reporters:d});function p(e,t={},n){for(let r in e){let i=e[r],a=n?`${n}:${r}`:r;typeof i==`object`&&i?p(i,t,a):typeof i==`function`&&(t[a]=i)}return t}var m=(()=>{if(console.createTask)return console.createTask;let e={run:e=>e()};return()=>e})();function h(e,t,n,r){for(let i=n;i<e.length;i+=1)try{let n=r?r.run(()=>e[i](...t)):e[i](...t);if(n&&typeof n.then==`function`)return Promise.resolve(n).then(()=>h(e,t,i+1,r))}catch(e){return Promise.reject(e)}}function g(e,t,n){if(e.length>0)return h(e,t,0,m(n))}function _(e,t,n){if(e.length>0){let r=m(n);return Promise.all(e.map(e=>r.run(()=>e(...t))))}}function v(e,t){for(let n of[...e])n(t)}var y=class{_hooks;_before;_after;_deprecatedHooks;_deprecatedMessages;constructor(){this._hooks={},this._before=void 0,this._after=void 0,this._deprecatedMessages=void 0,this._deprecatedHooks={},this.hook=this.hook.bind(this),this.callHook=this.callHook.bind(this),this.callHookWith=this.callHookWith.bind(this)}hook(e,t,n={}){if(!e||typeof t!=`function`)return()=>{};let r=e,i;for(;this._deprecatedHooks[e];)i=this._deprecatedHooks[e],e=i.to;if(i&&!n.allowDeprecated){let e=i.message;e||=`${r} hook has been deprecated`+(i.to?`, please use ${i.to}`:``),this._deprecatedMessages||=new Set,this._deprecatedMessages.has(e)||(console.warn(e),this._deprecatedMessages.add(e))}if(!t.name)try{Object.defineProperty(t,"name",{get:()=>`_`+e.replace(/\W+/g,`_`)+`_hook_cb`,configurable:!0})}catch{}return this._hooks[e]=this._hooks[e]||[],this._hooks[e].push(t),()=>{t&&=(this.removeHook(e,t),void 0)}}hookOnce(e,t){let n,r=(...e)=>(typeof n==`function`&&n(),n=void 0,r=void 0,t(...e));return n=this.hook(e,r),n}removeHook(e,t){let n=this._hooks[e];if(n){let r=n.indexOf(t);r!==-1&&n.splice(r,1),n.length===0&&(this._hooks[e]=void 0)}}clearHook(e){this._hooks[e]=void 0}deprecateHook(e,t){this._deprecatedHooks[e]=typeof t==`string`?{to:t}:t;let n=this._hooks[e]||[];this._hooks[e]=void 0;for(let t of n)this.hook(e,t)}deprecateHooks(e){for(let t in e)this.deprecateHook(t,e[t])}addHooks(e){let t=p(e),n=Object.keys(t).map(e=>this.hook(e,t[e]));return()=>{for(let e of n)e();n.length=0}}removeHooks(e){let t=p(e);for(let e in t)this.removeHook(e,t[e])}removeAllHooks(){this._hooks={}}callHook(e,...t){return this.callHookWith(g,e,t)}callHookParallel(e,...t){return this.callHookWith(_,e,t)}callHookWith(e,t,n){let r=this._before||this._after?{name:t,args:n,context:{}}:void 0;this._before&&v(this._before,r);let i=e(this._hooks[t]?[...this._hooks[t]]:[],n,t);return i instanceof Promise?i.finally(()=>{this._after&&r&&v(this._after,r)}):(this._after&&r&&v(this._after,r),i)}beforeEach(e){return this._before=this._before||[],this._before.push(e),()=>{if(this._before!==void 0){let t=this._before.indexOf(e);t!==-1&&this._before.splice(t,1)}}}afterEach(e){return this._after=this._after||[],this._after.push(e),()=>{if(this._after!==void 0){let t=this._after.indexOf(e);t!==-1&&this._after.splice(t,1)}}}};function b(){return new y}var x=class{_hooks;constructor(){this._hooks={}}hook(e,t){return!e||typeof t!=`function`?()=>{}:(this._hooks[e]=this._hooks[e]||[],this._hooks[e].push(t),()=>{t&&=(this.removeHook(e,t),void 0)})}removeHook(e,t){let n=this._hooks[e];if(n){let r=n.indexOf(t);r!==-1&&n.splice(r,1),n.length===0&&(this._hooks[e]=void 0)}}callHook(e,...t){let n=this._hooks[e];if(!(!n||n.length===0))return h(n,t,0)}};function S(){return globalThis.AsyncLocalStorage||globalThis.process?.getBuiltinModule?.(`node:async_hooks`)?.AsyncLocalStorage}function C(e={}){let t,n=!1,r=e=>{if(t&&t!==e)throw Error(`Context conflict`)},i;if(e.asyncContext){let t=e.AsyncLocalStorage||S();t?i=new t:console.warn("[unctx] `AsyncLocalStorage` is not provided.")}let a=e=>i&&typeof e==`object`&&e?{__unctx_weak:new WeakRef(e)}:e,o=e=>e&&e.__unctx_weak?e.__unctx_weak.deref():e,s=()=>{if(i){let e=i.getStore();if(e!==void 0)return o(e)}return t};return{use:()=>{let e=s();if(e===void 0)throw Error(`Context is not available`);return e},tryUse:()=>s(),set:(e,i)=>{i||r(e),t=e,n=!0},unset:()=>{t=void 0,n=!1},call:(e,o)=>{r(e),t=e;try{return i?i.run(a(e),o):o()}finally{n||(t=void 0)}},async callAsync(e,r){t=e;let o=()=>{t=e},s=()=>t===e?o:void 0;A.add(s);try{let o=i?i.run(a(e),r):r();return n||(t=void 0),await o}finally{A.delete(s)}}}}function w(e={}){let t={};return{get(n,r={}){return t[n]||(t[n]=C({...e,...r})),t[n]}}}var T=typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof global<`u`?global:typeof window<`u`?window:{},E=`__unctx__`,D=T[E]||(T[E]=w()),O=(e,t={})=>D.get(e,t),k=`__unctx_async_handlers__`,A=T[k]||(T[k]=new Set);function j(e){let t=[];for(let e of A){let n=e();n&&t.push(n)}let n=()=>{for(let e of t)e()},r=e();return r&&typeof r==`object`&&`catch`in r&&(r=r.catch(e=>{throw n(),e})),[r,n]}var M={meta:[{name:`viewport`,content:`width=device-width, initial-scale=1`},{charset:`utf-8`}],link:[],style:[],script:[],noscript:[]},N={id:`__nuxt-loader`},P={componentName:`NuxtLink`,prefetch:!0,prefetchOn:{visibility:!0}},F={deep:!1},I=`#__nuxt`,L=`nuxt-app`,R=36e5,z=`vite:preloadError`;function B(e=`nuxt-app`){return O(e,{asyncContext:!1})}var V=`__nuxt_plugin`;function H(e){let t=0,o={_id:e.id||`nuxt-app`,_scope:i(),provide:void 0,versions:{get nuxt(){return`4.5.1`},get vue(){return o.vueApp.version}},payload:a({...e.ssrContext?.payload||{},data:a({}),state:r({}),once:new Set,_errors:a({})}),static:{data:{}},runWithContext(e){return o._scope.active&&!n()?o._scope.run(()=>K(o,e)):K(o,e)},isHydrating:!0,deferHydration(){if(!o.isHydrating)return()=>{};t++;let e=!1;return()=>{if(!e&&(e=!0,t--,t===0))return o.isHydrating=!1,o.callHook(`app:suspense:resolve`)}},_asyncDataPromises:{},_asyncData:a({}),_state:a({}),_payloadRevivers:{},...e};{let e=window.__NUXT__;if(e)for(let t in e)switch(t){case`data`:case`state`:case`_errors`:Object.assign(o.payload[t],e[t]);break;default:o.payload[t]=e[t]}}o.hooks=b(),o.hook=o.hooks.hook;{let e=o.hooks.callHook;o.hooks.callHook=(t,...n)=>Promise.resolve().then(()=>e(t,...n))}o.callHook=o.hooks.callHook,o.provide=(e,t)=>{let n=`$`+e;X(o,n,t),X(o.vueApp.config.globalProperties,n,t)},X(o.vueApp,`$nuxt`,o),X(o.vueApp.config.globalProperties,`$nuxt`,o);{window.addEventListener(z,e=>{o.callHook(`app:chunkError`,{error:e.payload}),e.payload?.message?.includes(`Unable to preload CSS`)&&e.preventDefault()}),window.useNuxtApp||=J;let e=o.hook(`app:error`,(...e)=>{f.NUXT_E1005({cause:e.length>1?e:e[0]})});o.hook(`app:mounted`,e)}let s=o.payload.config;return o.provide(`config`,s),o}async function U(e,t){if(typeof t==`function`){let{provide:n}=await e.runWithContext(()=>t(e))||{};if(n&&typeof n==`object`)for(let t in n)e.provide(t,n[t])}}async function W(e,t){let n;for(let r of t)try{await U(e,r)}catch(t){if(!e.payload.error)throw t;n||=t}if(n)throw e.payload.error||n}function G(e){if(typeof e==`function`)return e;let t=e._name||e.name;return delete e.name,Object.assign(e.setup||(()=>{}),e,{[V]:!0,_name:t})}function K(e,t,n){return B(e._id).set(e),e.vueApp.runWithContext(()=>n?t(...n):t())}function q(n){let r;return e()&&(r=t()?.appContext.app.$nuxt),r||=B(n).tryUse(),r||null}function J(e){let t=q(e);if(!t)throw f.NUXT_E1001();return t}function Y(e){return J().$config}function X(e,t,n){Object.defineProperty(e,t,{get:()=>n})}export{d as _,Y as a,N as c,R as d,I as f,u as g,f as h,J as i,F as l,x as m,H as n,M as o,j as p,G as r,L as s,W as t,P as u,l as v};
@@ -1 +0,0 @@
1
- import{_ as e,b as t,mt as n,tr as r}from"./CDDBpkXG.js";import{n as i}from"./KsX6Az5B.js";import{t as a}from"./BDNMzG2s.js";var o={class:`antialiased bg-white dark:bg-[#020420] dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-[#020420] tracking-wide`},s={class:`max-w-520px text-center`},c=[`textContent`],l=[`textContent`],u=[`textContent`],d=a({__name:`error-500`,props:{appName:{type:String,default:`Nuxt`},status:{type:Number,default:500},statusText:{type:String,default:`Internal server error`},description:{type:String,default:`This page is temporarily unavailable.`},refresh:{type:String,default:`Refresh this page`}},setup(a){let d=a;return i({title:`${d.status} - ${d.statusText} | ${d.appName}`,script:[{innerHTML:`!function(){let e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(let e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(let t of e)if("childList"===t.type)for(let e of t.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;let r=function(e){let r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:`*,:after,:before{box-sizing:border-box;border-style:solid;border-width:0;border-color:var(--un-default-border-color,#e5e7eb)}:after,:before{--un-content:""}html{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}h1,h2{font-size:inherit;font-weight:inherit}h1,h2,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 #0000;--un-ring-shadow:0 0 #0000;--un-shadow-inset: ;--un-shadow:0 0 #0000;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:#93c5fd80;--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }`}]}),(i,d)=>(n(),t(`div`,o,[e(`div`,s,[e(`h1`,{class:`font-semibold leading-none mb-4 sm:text-[110px] tabular-nums text-[80px]`,textContent:r(a.status)},null,8,c),e(`h2`,{class:`font-semibold mb-2 sm:text-3xl text-2xl`,textContent:r(a.statusText)},null,8,l),e(`p`,{class:`mb-4 px-2 text-[#64748B] text-md`,textContent:r(a.description)},null,8,u)])]))}},[[`__scopeId`,`data-v-847aeaf1`]]);export{d as default};
@@ -1 +0,0 @@
1
- import{D as e,E as t,On as n,T as ee,Yt as te,Zn as r,_ as i,b as a,bt as o,gn as s,k as c,mt as l,o as u,qt as d,tr as f,v as ne,y as p}from"./CDDBpkXG.js";import{Wt as re}from"./UmWNrBO5.js";import{U as ie,j as m,n as h}from"./C41E8Pp1.js";import{t as g}from"./BDNMzG2s.js";var _={class:`py-1`},v={key:0,class:`panel-grids rounded-xl flex flex-col items-center justify-center py-16 gap-4`},y={class:`w-14 h-14 rounded-2xl bg-(--color-surface-elevated) border border-(--color-border) flex items-center justify-center`},b={class:`hint-callout text-xs max-w-sm`},x={key:1,class:`stagger-children space-y-4`},S={class:`flex flex-wrap gap-2.5`},C={class:`stat-card`},w={class:`stat-value`},T={class:`stat-card`},E={class:`stat-value`},D={class:`stat-card`},O={class:`stat-value`},k={class:`stat-card`},A={class:`stat-value capitalize text-sm`},j={class:`flex items-center gap-2 text-xs text-(--color-text-subtle)`},M={class:`px-1.5 py-0.5 rounded text-[11px] font-mono bg-(--color-surface-sunken) border border-(--color-border-subtle) text-(--color-text-muted)`},N={class:`space-y-3`},P={class:`p-4`},F={class:`flex items-start justify-between gap-4`},I={class:`flex items-center gap-2.5 min-w-0`},L={class:`w-7 h-7 rounded-lg bg-(--color-surface-sunken) border border-(--color-border-subtle) flex items-center justify-center flex-shrink-0 overflow-hidden`},R=[`innerHTML`],z={class:`text-sm font-semibold tracking-tight`},B={class:`ml-2 text-[10px] px-1.5 py-0.5 rounded-full bg-(--color-surface-sunken) text-(--color-text-subtle) font-medium`},V={class:`flex gap-0.5 flex-shrink-0`},ae={class:`flex items-center gap-1.5 mt-2.5 flex-wrap`},H={key:0,class:`fp-badge fp-badge-info`},U={key:1,class:`fp-badge fp-badge-warn`},W={key:2,class:`fp-badge fp-badge-muted`},G={key:0,class:`px-4 pb-3 flex items-center gap-1.5 flex-wrap`},K={key:1,class:`border-t border-(--color-border-subtle)`},q=[`onClick`],J={class:`flex items-center gap-1.5`},oe={key:0,class:`opacity-50`},se={class:`border-t border-(--color-border-subtle)`},ce={style:{color:`oklch(55% 0.12 250)`},class:`min-w-0 truncate`},le={class:`text-(--color-text-subtle) min-w-0 truncate`},ue={key:0,class:`border-t border-(--color-border-subtle) px-4 py-2`},de={style:{color:`oklch(55% 0.12 300)`},class:`truncate`},fe={class:`text-(--color-text-subtle) truncate`},pe={key:0,class:`card overflow-hidden`},me={class:`px-4 py-2.5 border-b border-(--color-border-subtle)`},he={class:`text-xs font-semibold uppercase tracking-wider text-(--color-text-subtle) flex items-center gap-1.5`},ge={class:`overflow-x-auto`},_e={class:`w-full text-xs`},ve={class:`border-b border-(--color-border-subtle)`},ye={class:`px-4 py-2 font-medium whitespace-nowrap`},be={class:`px-2.5 py-2 text-center`},Y=g(c({__name:`first-party`,setup(c){let g=[`ip`,`userAgent`,`language`,`screen`,`timezone`,`hardware`],Y={ip:`IP Address`,userAgent:`User Agent`,language:`Language`,screen:`Screen`,timezone:`Timezone`,hardware:`Hardware`},xe={ip:`IP`,userAgent:`UA`,language:`Lang`,screen:`Screen`,timezone:`TZ`,hardware:`HW`},Se={ip:`i-carbon-location`,userAgent:`i-carbon-user-profile`,language:`i-carbon-translate`,screen:`i-carbon-screen`,timezone:`i-carbon-time`,hardware:`i-carbon-chip`},X=s({});function Ce(e){X[e]=!X[e]}function Z(e){return e===`full`?`privacy-full`:e===`partial`?`privacy-partial`:`privacy-none`}function we(e){return e===`bundle-rewrite-intercept`?`mechanism-bundle`:`mechanism-config`}function Q(e){return e===`bundle-rewrite-intercept`?`Bundle + Rewrite`:`Config Injection`}return(s,c)=>{let $=ie,Te=m;return l(),a(`div`,_,[n(h)?.enabled?(l(),a(`div`,x,[i(`div`,S,[c[7]||=ee(`<div class="stat-card" data-v-97e4a274><div class="stat-label" data-v-97e4a274> Status </div><div class="flex items-center gap-1.5" data-v-97e4a274><span class="stat-dot stat-dot-active" data-v-97e4a274></span><span class="text-sm font-semibold" style="color:oklch(55% 0.18 145);" data-v-97e4a274>Active</span></div></div>`,1),i(`div`,C,[c[3]||=i(`div`,{class:`stat-label`},` Scripts `,-1),i(`div`,w,f(n(h).scripts.length),1)]),i(`div`,T,[c[4]||=i(`div`,{class:`stat-label`},` Routes `,-1),i(`div`,E,f(n(h).totalRoutes),1)]),i(`div`,D,[c[5]||=i(`div`,{class:`stat-label`},` Domains `,-1),i(`div`,O,f(n(h).totalDomains),1)]),i(`div`,k,[c[6]||=i(`div`,{class:`stat-label`},` Privacy `,-1),i(`div`,A,f(n(h).privacyMode),1)])]),i(`div`,j,[e($,{name:`i-carbon-direction-fork`,class:`text-sm`}),c[8]||=t(` Proxy prefix: `,-1),i(`code`,M,f(n(h).proxyPrefix),1)]),i(`div`,N,[(l(!0),a(u,null,o(n(h).scripts,n=>(l(),a(`div`,{key:n.registryKey,class:`card overflow-hidden`},[i(`div`,P,[i(`div`,F,[i(`div`,I,[i(`div`,L,[n.logo?(l(),a(`div`,{key:0,class:`w-5 h-5 flex items-center justify-center [&>svg]:max-w-5 [&>svg]:max-h-5`,innerHTML:n.logo},null,8,R)):(l(),ne($,{key:1,name:`i-carbon-script`,class:`text-sm text-(--color-text-subtle)`}))]),i(`div`,null,[i(`span`,z,f(n.label),1),i(`span`,B,f(n.category),1)])]),i(`div`,V,[(l(),a(u,null,o(g,t=>e(Te,{key:t,text:`${Y[t]}: ${n.privacy[t]?`Anonymised`:`Passthrough`}`},{default:d(()=>[i(`div`,{class:r([`privacy-flag`,n.privacy[t]?`privacy-flag-on`:`privacy-flag-off`])},[e($,{name:Se[t],class:`text-xs`},null,8,[`name`])],2)]),_:2},1032,[`text`])),64))])]),i(`div`,ae,[i(`span`,{class:r([`fp-badge`,we(n.mechanism)])},f(Q(n.mechanism)),3),i(`span`,{class:r([`fp-badge`,Z(n.privacyLevel)])},f(n.privacyLevel===`full`?`Full Privacy`:n.privacyLevel===`partial`?`Partial`:`Passthrough`),3),n.hasAutoInject?(l(),a(`span`,H,` Auto-inject`+f(n.autoInjectField?`: ${n.autoInjectField}`:``),1)):p(``,!0),n.canvasFingerprinting?(l(),a(`span`,U,` Canvas FP neutralized `)):p(``,!0),n.hasSdkPatches?(l(),a(`span`,W,` SDK patches `)):p(``,!0)])]),n.domains?.length?(l(),a(`div`,G,[c[9]||=i(`span`,{class:`text-[10px] text-(--color-text-subtle) mr-0.5`},`Proxying:`,-1),(l(!0),a(u,null,o(n.domains,e=>(l(),a(`span`,{key:e,class:`text-[10px] font-mono px-1.5 py-0.5 rounded bg-(--color-surface-sunken) text-(--color-text-muted) border border-(--color-border-subtle)`},f(e),1))),128))])):p(``,!0),n.routes?.length?(l(),a(`div`,K,[i(`button`,{class:`w-full px-4 py-2 flex items-center justify-between text-xs text-(--color-text-subtle) hover:text-(--color-text-muted) transition-colors cursor-pointer`,onClick:e=>Ce(n.registryKey)},[i(`span`,J,[e($,{name:`i-carbon-arrows-horizontal`,class:`text-xs`}),t(` `+f(n.routes.length)+` route`+f(n.routes.length>1?`s`:``)+` `,1),n.interceptRules?.length?(l(),a(`span`,oe,` · `+f(n.interceptRules.length)+` intercept rule`+f(n.interceptRules.length>1?`s`:``),1)):p(``,!0)]),e($,{name:X[n.registryKey]?`i-carbon-chevron-up`:`i-carbon-chevron-down`,class:`text-xs transition-transform`},null,8,[`name`])],8,q),te(i(`div`,null,[i(`div`,se,[(l(!0),a(u,null,o(n.routes,(t,n)=>(l(),a(`div`,{key:n,class:`px-4 py-1.5 flex items-center gap-2 text-[11px] font-mono hover:bg-(--color-surface-sunken) transition-colors`},[i(`span`,ce,f(t.local),1),e($,{name:`i-carbon-arrow-right`,class:`text-[9px] opacity-25 flex-shrink-0`}),i(`span`,le,f(t.target),1)]))),128))]),n.interceptRules?.length?(l(),a(`div`,ue,[c[10]||=i(`div`,{class:`text-[10px] uppercase tracking-wider text-(--color-text-subtle) mb-1 font-medium`},` Intercept Rules `,-1),(l(!0),a(u,null,o(n.interceptRules,(t,n)=>(l(),a(`div`,{key:n,class:`py-1 flex items-center gap-2 text-[11px] font-mono`},[i(`span`,de,f(t.pattern)+f(t.pathPrefix),1),e($,{name:`i-carbon-arrow-right`,class:`text-[9px] opacity-25 flex-shrink-0`}),i(`span`,fe,f(t.target),1)]))),128))])):p(``,!0)],512),[[re,X[n.registryKey]]])])):p(``,!0)]))),128))]),n(h).scripts.length>1?(l(),a(`div`,pe,[i(`div`,me,[i(`h4`,he,[e($,{name:`i-carbon-data-table`,class:`text-sm`}),c[11]||=t(` Privacy Matrix `,-1)])]),i(`div`,ge,[i(`table`,_e,[i(`thead`,null,[i(`tr`,ve,[c[12]||=i(`th`,{class:`px-4 py-2 text-left font-medium text-(--color-text-subtle)`},` Script `,-1),(l(),a(u,null,o(g,e=>i(`th`,{key:e,class:`px-2.5 py-2 text-center font-medium text-(--color-text-subtle) whitespace-nowrap`},f(xe[e]),1)),64)),c[13]||=i(`th`,{class:`px-2.5 py-2 text-center font-medium text-(--color-text-subtle)`},` Level `,-1)])]),i(`tbody`,null,[(l(!0),a(u,null,o(n(h).scripts,e=>(l(),a(`tr`,{key:e.registryKey,class:`border-b border-(--color-border-subtle) last:border-b-0 hover:bg-(--color-surface-sunken) transition-colors`},[i(`td`,ye,f(e.label),1),(l(),a(u,null,o(g,t=>i(`td`,{key:t,class:`px-2.5 py-2 text-center`},[i(`div`,{class:r([`w-2.5 h-2.5 rounded-full mx-auto`,e.privacy[t]?`matrix-dot-on`:`matrix-dot-off`])},null,2)])),64)),i(`td`,be,[i(`span`,{class:r([`fp-badge text-[10px]`,Z(e.privacyLevel)])},f(e.privacyLevel),3)])]))),128))])])])])):p(``,!0),c[14]||=i(`div`,{class:`text-center pt-1 pb-3`},[i(`a`,{href:`https://scripts.nuxt.com/docs/guides/first-party`,target:`_blank`,class:`link-external text-xs`},` First-Party Mode: Privacy Focused Proxy `)],-1)])):(l(),a(`div`,v,[i(`div`,y,[e($,{name:`i-carbon-security`,class:`text-3xl text-(--color-text-subtle)`})]),c[1]||=i(`div`,{class:`text-center space-y-1.5`},[i(`p`,{class:`text-sm font-semibold text-(--color-text-muted)`},` Privacy Proxy is not active `),i(`p`,{class:`text-xs text-(--color-text-subtle) max-w-sm`},` The reverse proxy is auto-enabled when scripts with proxy capabilities are configured in the registry. `)],-1),i(`div`,b,[e($,{name:`i-carbon-information`,class:`hint-callout-icon text-base flex-shrink-0`}),c[0]||=i(`div`,null,[t(` Check that your registry scripts have not set `),i(`code`,{class:`px-1 py-0.5 rounded text-[11px] font-mono bg-(--color-surface-sunken)`},`proxy: false`),t(` or `),i(`code`,{class:`px-1 py-0.5 rounded text-[11px] font-mono bg-(--color-surface-sunken)`},`bundle: false`),t(`. `)],-1)]),c[2]||=i(`a`,{href:`https://scripts.nuxt.com/docs/guides/first-party`,target:`_blank`,class:`link-external text-xs mt-1`},` View Documentation `,-1)]))])}}}),[[`__scopeId`,`data-v-97e4a274`]]);export{Y as default};
@@ -1 +0,0 @@
1
- var e=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n};export{e as t};
@@ -1 +0,0 @@
1
- import{D as e,E as t,_ as n,b as r,mt as i,qt as a,tr as o}from"./CDDBpkXG.js";import{n as s}from"./KsX6Az5B.js";import{t as c}from"./Dat651Oh.js";import{t as l}from"./BDNMzG2s.js";var u={class:`antialiased bg-white dark:bg-[#020420] dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-[#020420] tracking-wide`},d={class:`max-w-520px text-center`},f=[`textContent`],p=[`textContent`],m=[`textContent`],h={class:`flex items-center justify-center w-full`},g=l({__name:`error-404`,props:{appName:{type:String,default:`Nuxt`},status:{type:Number,default:404},statusText:{type:String,default:`Page not found`},description:{type:String,default:`Sorry, the page you are looking for could not be found.`},backHome:{type:String,default:`Go back home`}},setup(l){let g=l;return s({title:`${g.status} - ${g.statusText} | ${g.appName}`,script:[{innerHTML:`!function(){let e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(let e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(let t of e)if("childList"===t.type)for(let e of t.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;let r=function(e){let r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:`*,:after,:before{box-sizing:border-box;border-style:solid;border-width:0;border-color:var(--un-default-border-color,#e5e7eb)}:after,:before{--un-content:""}html{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}h1,h2{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}h1,h2,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 #0000;--un-ring-shadow:0 0 #0000;--un-shadow-inset: ;--un-shadow:0 0 #0000;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:#93c5fd80;--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }`}]}),(s,g)=>{let _=c;return i(),r(`div`,u,[n(`div`,d,[n(`h1`,{class:`font-semibold leading-none mb-4 sm:text-[110px] tabular-nums text-[80px]`,textContent:o(l.status)},null,8,f),n(`h2`,{class:`font-semibold mb-2 sm:text-3xl text-2xl`,textContent:o(l.statusText)},null,8,p),n(`p`,{class:`mb-4 px-2 text-[#64748B] text-md`,textContent:o(l.description)},null,8,m),n(`div`,h,[e(_,{to:`/`,class:`font-medium hover:text-[#00DC82] text-sm underline underline-offset-3`},{default:a(()=>[t(o(l.backHome),1)]),_:1})])])])}}},[[`__scopeId`,`data-v-8c12c98d`]]);export{g as default};