@nuxt/scripts 1.0.0-beta.22 → 1.0.0-beta.24
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/dist/client/200.html +1 -1
- package/dist/client/404.html +1 -1
- package/dist/client/_nuxt/builds/latest.json +1 -1
- package/dist/client/_nuxt/builds/meta/78647cef-f45a-4560-82b4-b9364815198a.json +1 -0
- package/dist/client/index.html +1 -1
- package/dist/module.json +1 -1
- package/dist/module.mjs +31 -5
- package/dist/runtime/server/utils/privacy.d.ts +0 -1
- package/dist/runtime/server/utils/privacy.js +6 -8
- package/dist/stats.mjs +16 -8
- package/dist/types-source.d.mts +0 -2
- package/dist/types-source.d.ts +0 -2
- package/dist/types-source.mjs +1959 -952
- package/package.json +3 -3
- package/dist/client/_nuxt/builds/meta/7b372941-1db0-4ea4-80d2-a41f53088a98.json +0 -1
package/dist/client/200.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.CACgbLJl.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BNNMZFwZ.js"><script type="module" src="/__nuxt-scripts/_nuxt/BNNMZFwZ.js" crossorigin></script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{"nuxt-scripts":{version:"",defaultScriptOptions:{trigger:"onNuxtReady"},googleStaticMapsProxy:"",endpoints:{}}},app:{baseURL:"/__nuxt-scripts",buildId:"
|
|
1
|
+
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.CACgbLJl.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BNNMZFwZ.js"><script type="module" src="/__nuxt-scripts/_nuxt/BNNMZFwZ.js" crossorigin></script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{"nuxt-scripts":{version:"",defaultScriptOptions:{trigger:"onNuxtReady"},googleStaticMapsProxy:"",endpoints:{}}},app:{baseURL:"/__nuxt-scripts",buildId:"78647cef-f45a-4560-82b4-b9364815198a",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1773461556086,false]</script></body></html>
|
package/dist/client/404.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.CACgbLJl.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BNNMZFwZ.js"><script type="module" src="/__nuxt-scripts/_nuxt/BNNMZFwZ.js" crossorigin></script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{"nuxt-scripts":{version:"",defaultScriptOptions:{trigger:"onNuxtReady"},googleStaticMapsProxy:"",endpoints:{}}},app:{baseURL:"/__nuxt-scripts",buildId:"
|
|
1
|
+
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.CACgbLJl.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BNNMZFwZ.js"><script type="module" src="/__nuxt-scripts/_nuxt/BNNMZFwZ.js" crossorigin></script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{"nuxt-scripts":{version:"",defaultScriptOptions:{trigger:"onNuxtReady"},googleStaticMapsProxy:"",endpoints:{}}},app:{baseURL:"/__nuxt-scripts",buildId:"78647cef-f45a-4560-82b4-b9364815198a",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1773461556087,false]</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"
|
|
1
|
+
{"id":"78647cef-f45a-4560-82b4-b9364815198a","timestamp":1773461550818}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"78647cef-f45a-4560-82b4-b9364815198a","timestamp":1773461550818,"prerendered":[]}
|
package/dist/client/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.CACgbLJl.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BNNMZFwZ.js"><script type="module" src="/__nuxt-scripts/_nuxt/BNNMZFwZ.js" crossorigin></script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{"nuxt-scripts":{version:"",defaultScriptOptions:{trigger:"onNuxtReady"},googleStaticMapsProxy:"",endpoints:{}}},app:{baseURL:"/__nuxt-scripts",buildId:"
|
|
1
|
+
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.CACgbLJl.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BNNMZFwZ.js"><script type="module" src="/__nuxt-scripts/_nuxt/BNNMZFwZ.js" crossorigin></script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{"nuxt-scripts":{version:"",defaultScriptOptions:{trigger:"onNuxtReady"},googleStaticMapsProxy:"",endpoints:{}}},app:{baseURL:"/__nuxt-scripts",buildId:"78647cef-f45a-4560-82b4-b9364815198a",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1773461556087,false]</script></body></html>
|
package/dist/module.json
CHANGED
package/dist/module.mjs
CHANGED
|
@@ -10,7 +10,7 @@ import { createStorage } from 'unstorage';
|
|
|
10
10
|
import fsDriver from 'unstorage/drivers/fs-lite';
|
|
11
11
|
import { addCustomTab } from '@nuxt/devtools-kit';
|
|
12
12
|
import { isCI, provider } from 'std-env';
|
|
13
|
-
import { parseAndWalk, ScopeTracker, walk, ScopeTrackerFunctionParam, ScopeTrackerVariable } from 'oxc-walker';
|
|
13
|
+
import { parseAndWalk, ScopeTracker, walk, ScopeTrackerFunction, ScopeTrackerIdentifier, ScopeTrackerFunctionParam, ScopeTrackerVariable } from 'oxc-walker';
|
|
14
14
|
import { createUnplugin } from 'unplugin';
|
|
15
15
|
import { pathToFileURL } from 'node:url';
|
|
16
16
|
import { createHash } from 'node:crypto';
|
|
@@ -269,11 +269,11 @@ async function setupFirstPartyHandlers(firstParty, resolvePath) {
|
|
|
269
269
|
return interceptRules;
|
|
270
270
|
}
|
|
271
271
|
function finalizeFirstParty(opts) {
|
|
272
|
-
const { firstParty, interceptRules, registryScriptsWithImport, nuxtOptions } = opts;
|
|
272
|
+
const { firstParty, interceptRules, registryScripts, registryScriptsWithImport, nuxtOptions } = opts;
|
|
273
273
|
const proxyConfigs = getAllProxyConfigs(firstParty.collectPrefix);
|
|
274
274
|
const registryKeys = Object.keys(opts.registry || {});
|
|
275
275
|
const scriptByKey = /* @__PURE__ */ new Map();
|
|
276
|
-
for (const script of
|
|
276
|
+
for (const script of registryScripts) {
|
|
277
277
|
if (script.registryKey) {
|
|
278
278
|
scriptByKey.set(script.registryKey, script);
|
|
279
279
|
}
|
|
@@ -478,6 +478,7 @@ function NuxtScriptsCheckScripts() {
|
|
|
478
478
|
}
|
|
479
479
|
|
|
480
480
|
const WORD_OR_DOLLAR_RE = /[\w$]/;
|
|
481
|
+
const BLANK_CANVAS_DATA_URL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIHWNgAAIABQABNjN9GQAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAAA0lEQVQI12NgYGBgAAAABQABXvMqOgAAAABJRU5ErkJggg==";
|
|
481
482
|
const GA_COLLECT_RE = /([\w$])?"https:\/\/"\+\(.*?\)\+"\.google-analytics\.com\/g\/collect"/g;
|
|
482
483
|
const GA_ANALYTICS_COLLECT_RE = /([\w$])?"https:\/\/"\+\(.*?\)\+"\.analytics\.google\.com\/g\/collect"/g;
|
|
483
484
|
const FATHOM_SELF_HOSTED_RE = /\.src\.indexOf\("cdn\.usefathom\.com"\)\s*<\s*0/;
|
|
@@ -557,12 +558,15 @@ function resolveToGlobal(name, scopeTracker, depth = 0) {
|
|
|
557
558
|
return null;
|
|
558
559
|
if (init.type === "Identifier")
|
|
559
560
|
return resolveToGlobal(init.name, scopeTracker, depth + 1);
|
|
560
|
-
if (init.type === "MemberExpression" &&
|
|
561
|
+
if (init.type === "MemberExpression" && init.object?.type === "Identifier") {
|
|
562
|
+
const memberProp = init.computed ? init.property?.type === "Literal" && typeof init.property.value === "string" ? init.property.value : null : init.property?.type === "Identifier" ? init.property.name : null;
|
|
563
|
+
if (!memberProp)
|
|
564
|
+
return null;
|
|
561
565
|
const objGlobal = resolveToGlobal(init.object.name, scopeTracker, depth + 1);
|
|
562
566
|
if (!objGlobal)
|
|
563
567
|
return null;
|
|
564
568
|
if (WINDOW_GLOBALS.has(objGlobal) || objGlobal === "document")
|
|
565
|
-
return
|
|
569
|
+
return memberProp;
|
|
566
570
|
return null;
|
|
567
571
|
}
|
|
568
572
|
return null;
|
|
@@ -636,6 +640,27 @@ function rewriteScriptUrlsAST(content, filename, rewrites) {
|
|
|
636
640
|
}
|
|
637
641
|
if (node.type === "CallExpression") {
|
|
638
642
|
const callee = node.callee;
|
|
643
|
+
const canvasPropName = callee?.type === "MemberExpression" ? callee.computed ? callee.property?.type === "Literal" && typeof callee.property.value === "string" ? callee.property.value : null : callee.property?.name : null;
|
|
644
|
+
if (canvasPropName === "toDataURL" && callee.object) {
|
|
645
|
+
const blankCanvas = `"${BLANK_CANVAS_DATA_URL}"`;
|
|
646
|
+
if (callee.object.type === "Identifier") {
|
|
647
|
+
const decl = scopeTracker.getDeclaration(callee.object.name);
|
|
648
|
+
if (decl instanceof ScopeTrackerFunction || decl instanceof ScopeTrackerIdentifier) ; else {
|
|
649
|
+
s.overwrite(node.start, node.end, blankCanvas);
|
|
650
|
+
return;
|
|
651
|
+
}
|
|
652
|
+
} else {
|
|
653
|
+
s.overwrite(node.start, node.end, blankCanvas);
|
|
654
|
+
return;
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
if (canvasPropName === "getExtension") {
|
|
658
|
+
const args = node.arguments;
|
|
659
|
+
if (args?.length === 1 && args[0]?.type === "Literal" && args[0].value === "WEBGL_debug_renderer_info") {
|
|
660
|
+
s.overwrite(node.start, node.end, "null");
|
|
661
|
+
return;
|
|
662
|
+
}
|
|
663
|
+
}
|
|
639
664
|
if (callee?.type === "Identifier" && callee.name === "fetch") {
|
|
640
665
|
if (!scopeTracker.getDeclaration("fetch"))
|
|
641
666
|
s.overwrite(callee.start, callee.end, "__nuxtScripts.fetch");
|
|
@@ -1523,6 +1548,7 @@ const module$1 = defineNuxtModule({
|
|
|
1523
1548
|
firstParty,
|
|
1524
1549
|
interceptRules,
|
|
1525
1550
|
registry: config.registry,
|
|
1551
|
+
registryScripts,
|
|
1526
1552
|
registryScriptsWithImport,
|
|
1527
1553
|
nuxtOptions: nuxt.options
|
|
1528
1554
|
});
|
|
@@ -78,11 +78,13 @@ export const STRIP_PARAMS = {
|
|
|
78
78
|
// Browser version lists — generalized to major versions (d_bvs = Snapchat, uafvl = GA Client Hints)
|
|
79
79
|
browserVersion: ["d_bvs", "uafvl"],
|
|
80
80
|
// Browser data lists — replaced with empty value
|
|
81
|
-
browserData: ["plugins", "fonts"],
|
|
81
|
+
browserData: ["plugins", "fonts", "audiofingerprint"],
|
|
82
82
|
// Location/Timezone — generalized
|
|
83
83
|
location: ["tz", "timezone", "timezoneoffset"],
|
|
84
|
-
// Canvas/WebGL
|
|
85
|
-
|
|
84
|
+
// Canvas/WebGL fingerprints — neutralized at build time via AST rewriting (rewrite-ast.ts).
|
|
85
|
+
// These params are no longer stripped at runtime; the source APIs (toDataURL, WEBGL_debug_renderer_info)
|
|
86
|
+
// are neutralized before the script ever runs.
|
|
87
|
+
// canvas: ['canvas', 'webgl'],
|
|
86
88
|
// Combined device fingerprinting (X/Twitter dv param contains: timezone, locale, vendor, platform, screen, etc.)
|
|
87
89
|
deviceInfo: ["dv", "device_info", "deviceinfo"]
|
|
88
90
|
};
|
|
@@ -302,11 +304,7 @@ export function stripPayloadFingerprinting(payload, privacy) {
|
|
|
302
304
|
continue;
|
|
303
305
|
}
|
|
304
306
|
if (matchesParam(key, STRIP_PARAMS.browserData)) {
|
|
305
|
-
result[key] = p.hardware ? Array.isArray(value) ? [] : "" : value;
|
|
306
|
-
continue;
|
|
307
|
-
}
|
|
308
|
-
if (matchesParam(key, STRIP_PARAMS.canvas)) {
|
|
309
|
-
result[key] = p.hardware ? typeof value === "number" ? 0 : typeof value === "object" ? {} : "" : value;
|
|
307
|
+
result[key] = p.hardware ? Array.isArray(value) ? [] : typeof value === "number" ? 0 : "" : value;
|
|
310
308
|
continue;
|
|
311
309
|
}
|
|
312
310
|
if (matchesParam(key, STRIP_PARAMS.deviceInfo)) {
|
package/dist/stats.mjs
CHANGED
|
@@ -37,7 +37,8 @@ const scriptMeta = {
|
|
|
37
37
|
},
|
|
38
38
|
googleAnalytics: {
|
|
39
39
|
urls: ["https://www.googletagmanager.com/gtag/js?id=G-TR58L0EF8P"],
|
|
40
|
-
trackedData: ["page-views", "events", "conversions", "user-identity", "audiences"]
|
|
40
|
+
trackedData: ["page-views", "events", "conversions", "user-identity", "audiences"],
|
|
41
|
+
canvasFingerprinting: true
|
|
41
42
|
},
|
|
42
43
|
umamiAnalytics: {
|
|
43
44
|
urls: ["https://cloud.umami.is/script.js"],
|
|
@@ -46,23 +47,28 @@ const scriptMeta = {
|
|
|
46
47
|
// Ads / Pixels
|
|
47
48
|
metaPixel: {
|
|
48
49
|
urls: ["https://connect.facebook.net/en_US/fbevents.js"],
|
|
49
|
-
trackedData: ["page-views", "conversions", "retargeting", "audiences"]
|
|
50
|
+
trackedData: ["page-views", "conversions", "retargeting", "audiences"],
|
|
51
|
+
canvasFingerprinting: true
|
|
50
52
|
},
|
|
51
53
|
xPixel: {
|
|
52
54
|
urls: ["https://static.ads-twitter.com/uwt.js"],
|
|
53
|
-
trackedData: ["page-views", "conversions", "retargeting", "audiences"]
|
|
55
|
+
trackedData: ["page-views", "conversions", "retargeting", "audiences"],
|
|
56
|
+
canvasFingerprinting: true
|
|
54
57
|
},
|
|
55
58
|
tikTokPixel: {
|
|
56
59
|
urls: ["https://analytics.tiktok.com/i18n/pixel/events.js"],
|
|
57
|
-
trackedData: ["page-views", "conversions", "retargeting", "audiences"]
|
|
60
|
+
trackedData: ["page-views", "conversions", "retargeting", "audiences"],
|
|
61
|
+
canvasFingerprinting: true
|
|
58
62
|
},
|
|
59
63
|
snapchatPixel: {
|
|
60
64
|
urls: ["https://sc-static.net/scevent.min.js"],
|
|
61
|
-
trackedData: ["page-views", "conversions", "retargeting", "audiences"]
|
|
65
|
+
trackedData: ["page-views", "conversions", "retargeting", "audiences"],
|
|
66
|
+
canvasFingerprinting: true
|
|
62
67
|
},
|
|
63
68
|
redditPixel: {
|
|
64
69
|
urls: ["https://www.redditstatic.com/ads/pixel.js"],
|
|
65
|
-
trackedData: ["page-views", "conversions", "retargeting", "audiences"]
|
|
70
|
+
trackedData: ["page-views", "conversions", "retargeting", "audiences"],
|
|
71
|
+
canvasFingerprinting: true
|
|
66
72
|
},
|
|
67
73
|
googleAdsense: {
|
|
68
74
|
urls: ["https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"],
|
|
@@ -75,11 +81,13 @@ const scriptMeta = {
|
|
|
75
81
|
// Session replay / Heatmaps
|
|
76
82
|
hotjar: {
|
|
77
83
|
urls: ["https://static.hotjar.com/c/hotjar-3925006.js?sv=6"],
|
|
78
|
-
trackedData: ["page-views", "session-replay", "heatmaps", "clicks", "scrolls", "form-submissions"]
|
|
84
|
+
trackedData: ["page-views", "session-replay", "heatmaps", "clicks", "scrolls", "form-submissions"],
|
|
85
|
+
canvasFingerprinting: true
|
|
79
86
|
},
|
|
80
87
|
clarity: {
|
|
81
88
|
urls: ["https://www.clarity.ms/tag/mqk2m9dr2v"],
|
|
82
|
-
trackedData: ["page-views", "session-replay", "heatmaps", "clicks", "scrolls"]
|
|
89
|
+
trackedData: ["page-views", "session-replay", "heatmaps", "clicks", "scrolls"],
|
|
90
|
+
canvasFingerprinting: true
|
|
83
91
|
},
|
|
84
92
|
// Tag Manager
|
|
85
93
|
googleTagManager: {
|
package/dist/types-source.d.mts
CHANGED