@nuxt/scripts 1.0.0-beta.24 → 1.0.0-beta.26

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 (80) hide show
  1. package/dist/client/200.html +1 -1
  2. package/dist/client/404.html +1 -1
  3. package/dist/client/_nuxt/{Bh9fd9qr.js → C-7nRtzO.js} +1 -1
  4. package/dist/client/_nuxt/{UTi7FhVv.js → D5k4eN9O.js} +1 -1
  5. package/dist/client/_nuxt/DjhmCJlE.js +162 -0
  6. package/dist/client/_nuxt/{B7aPLMNo.js → TJ5JFHov.js} +1 -1
  7. package/dist/client/_nuxt/builds/latest.json +1 -1
  8. package/dist/client/_nuxt/builds/meta/33e1ac0e-aba1-4856-8beb-775c426be236.json +1 -0
  9. package/dist/client/_nuxt/entry.C5SUNdim.css +1 -0
  10. package/dist/client/_nuxt/error-404.C_3_IG5y.css +1 -0
  11. package/dist/client/_nuxt/error-500.DSv6YikH.css +1 -0
  12. package/dist/client/index.html +1 -1
  13. package/dist/module.d.mts +6 -20
  14. package/dist/module.d.ts +6 -20
  15. package/dist/module.json +1 -1
  16. package/dist/module.mjs +303 -277
  17. package/dist/registry.mjs +121 -71
  18. package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.d.vue.ts +2 -5
  19. package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.vue +14 -15
  20. package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.vue.d.ts +2 -5
  21. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.d.vue.ts +1 -4
  22. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.vue +30 -37
  23. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.vue.d.ts +1 -4
  24. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsCircle.vue +19 -28
  25. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.vue +18 -22
  26. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsInfoWindow.vue +30 -37
  27. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarker.d.vue.ts +1 -4
  28. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarker.vue +31 -36
  29. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarker.vue.d.ts +1 -4
  30. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarkerClusterer.vue +17 -22
  31. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPinElement.vue +19 -28
  32. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolygon.vue +19 -28
  33. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolyline.vue +19 -28
  34. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsRectangle.vue +19 -28
  35. package/dist/runtime/components/GoogleMaps/injectionKeys.d.ts +11 -0
  36. package/dist/runtime/components/GoogleMaps/injectionKeys.js +3 -0
  37. package/dist/runtime/components/GoogleMaps/useGoogleMapsResource.d.ts +26 -0
  38. package/dist/runtime/components/GoogleMaps/useGoogleMapsResource.js +37 -0
  39. package/dist/runtime/composables/useScriptTriggerConsent.d.ts +10 -0
  40. package/dist/runtime/composables/useScriptTriggerConsent.js +32 -19
  41. package/dist/runtime/registry/bing-uet.d.ts +20 -0
  42. package/dist/runtime/registry/bing-uet.js +29 -0
  43. package/dist/runtime/registry/bluesky-embed.d.ts +1 -1
  44. package/dist/runtime/registry/crisp.d.ts +1 -1
  45. package/dist/runtime/registry/fathom-analytics.d.ts +1 -1
  46. package/dist/runtime/registry/google-adsense.d.ts +1 -1
  47. package/dist/runtime/registry/hotjar.d.ts +1 -1
  48. package/dist/runtime/registry/instagram-embed.d.ts +1 -1
  49. package/dist/runtime/registry/intercom.d.ts +1 -1
  50. package/dist/runtime/registry/matomo-analytics.d.ts +1 -1
  51. package/dist/runtime/registry/meta-pixel.d.ts +1 -1
  52. package/dist/runtime/registry/mixpanel-analytics.d.ts +22 -0
  53. package/dist/runtime/registry/mixpanel-analytics.js +46 -0
  54. package/dist/runtime/registry/npm.d.ts +1 -1
  55. package/dist/runtime/registry/reddit-pixel.d.ts +1 -1
  56. package/dist/runtime/registry/schemas.d.ts +19 -0
  57. package/dist/runtime/registry/schemas.js +19 -0
  58. package/dist/runtime/registry/snapchat-pixel.d.ts +1 -1
  59. package/dist/runtime/registry/tiktok-pixel.d.ts +1 -1
  60. package/dist/runtime/registry/vercel-analytics.d.ts +1 -1
  61. package/dist/runtime/registry/x-embed.d.ts +1 -1
  62. package/dist/runtime/registry/x-pixel.d.ts +1 -1
  63. package/dist/runtime/server/proxy-handler.js +36 -23
  64. package/dist/runtime/server/utils/privacy.d.ts +1 -1
  65. package/dist/runtime/server/utils/privacy.js +3 -3
  66. package/dist/runtime/types.d.ts +30 -18
  67. package/dist/runtime/utils/pure.d.ts +1 -1
  68. package/dist/runtime/utils.js +1 -1
  69. package/dist/shared/scripts.ViOoYQXH.mjs +381 -0
  70. package/dist/stats.d.mts +95 -3
  71. package/dist/stats.d.ts +95 -3
  72. package/dist/stats.mjs +2845 -169
  73. package/dist/types-source.mjs +47 -0
  74. package/package.json +13 -13
  75. package/dist/client/_nuxt/BNNMZFwZ.js +0 -162
  76. package/dist/client/_nuxt/builds/meta/78647cef-f45a-4560-82b4-b9364815198a.json +0 -1
  77. package/dist/client/_nuxt/entry.CACgbLJl.css +0 -1
  78. package/dist/client/_nuxt/error-404.DMdWw4vT.css +0 -1
  79. package/dist/client/_nuxt/error-500.CROTF27X.css +0 -1
  80. package/dist/shared/scripts.Crpn87WB.mjs +0 -318
@@ -0,0 +1,381 @@
1
+ const GA_COLLECT_RE = /([\w$])?"https:\/\/"\+\(.*?\)\+"\.google-analytics\.com\/g\/collect"/g;
2
+ const GA_ANALYTICS_COLLECT_RE = /([\w$])?"https:\/\/"\+\(.*?\)\+"\.analytics\.google\.com\/g\/collect"/g;
3
+ const FATHOM_SELF_HOSTED_RE = /\.src\.indexOf\("cdn\.usefathom\.com"\)\s*<\s*0/;
4
+ const RYBBIT_HOST_SPLIT_RE = /\w+\.split\(["']\/script\.js["']\)\[0\]/g;
5
+ const PRIVACY_NONE = { ip: false, userAgent: false, language: false, screen: false, timezone: false, hardware: false };
6
+ const PRIVACY_FULL = { ip: true, userAgent: true, language: true, screen: true, timezone: true, hardware: true };
7
+ const PRIVACY_HEATMAP = { ip: true, userAgent: false, language: true, screen: false, timezone: false, hardware: true };
8
+ const PRIVACY_IP_ONLY = { ip: true, userAgent: false, language: false, screen: false, timezone: false, hardware: false };
9
+ function deriveRewrites(domains, proxyPrefix) {
10
+ return domains.map(([domain, alias]) => ({
11
+ from: domain,
12
+ to: `${proxyPrefix}/${alias}`
13
+ }));
14
+ }
15
+ function deriveRoutes(domains, proxyPrefix) {
16
+ const routes = {};
17
+ const seen = /* @__PURE__ */ new Set();
18
+ for (const [domain, alias] of domains) {
19
+ if (seen.has(alias))
20
+ continue;
21
+ seen.add(alias);
22
+ routes[`${proxyPrefix}/${alias}/**`] = { proxy: `https://${domain}/**` };
23
+ }
24
+ return routes;
25
+ }
26
+ function fromDomains(domains, proxyPrefix, opts) {
27
+ const { extraRewrites, ...rest } = opts;
28
+ const rewrites = deriveRewrites(domains, proxyPrefix);
29
+ if (extraRewrites) {
30
+ for (const r of extraRewrites)
31
+ rewrites.push({ from: r.from, to: `${proxyPrefix}/${r.to}` });
32
+ }
33
+ return { rewrite: rewrites, routes: deriveRoutes(domains, proxyPrefix), ...rest };
34
+ }
35
+ function buildProxyConfig(proxyPrefix) {
36
+ return {
37
+ googleAnalytics: fromDomains(
38
+ [
39
+ ["www.google-analytics.com", "ga"],
40
+ ["analytics.google.com", "ga"],
41
+ ["stats.g.doubleclick.net", "ga-dc"],
42
+ ["pagead2.googlesyndication.com", "ga-syn"],
43
+ ["www.googleadservices.com", "ga-ads"],
44
+ ["googleads.g.doubleclick.net", "ga-gads"]
45
+ ],
46
+ proxyPrefix,
47
+ {
48
+ // GA4: screen/timezone/UA needed for device, time, and OS reports; rest anonymized safely
49
+ privacy: PRIVACY_HEATMAP,
50
+ extraRewrites: [
51
+ // Modern gtag.js uses www.google.com/g/collect
52
+ { from: "www.google.com/g/collect", to: "ga/g/collect" },
53
+ // Suffix patterns for dynamically constructed URLs
54
+ { from: ".google-analytics.com/g/collect", to: "ga/g/collect" },
55
+ { from: ".analytics.google.com/g/collect", to: "ga/g/collect" },
56
+ // Full domain + path patterns
57
+ { from: "www.google-analytics.com/g/collect", to: "ga/g/collect" },
58
+ { from: "analytics.google.com/g/collect", to: "ga/g/collect" },
59
+ // DoubleClick collect endpoint
60
+ { from: "stats.g.doubleclick.net/g/collect", to: "ga/g/collect" }
61
+ ],
62
+ // GA4 dynamically constructs collect URLs via string concatenation that can't be
63
+ // caught by AST rewriting. These regex patches handle the remaining patterns.
64
+ postProcess(output, rewrites) {
65
+ const gaRewrite = rewrites.find((r) => r.from.includes("google-analytics.com/g/collect"));
66
+ if (gaRewrite) {
67
+ output = output.replace(
68
+ GA_COLLECT_RE,
69
+ (_, prevChar) => `${prevChar ? `${prevChar} ` : ""}self.location.origin+"${gaRewrite.to}"`
70
+ );
71
+ output = output.replace(
72
+ GA_ANALYTICS_COLLECT_RE,
73
+ (_, prevChar) => `${prevChar ? `${prevChar} ` : ""}self.location.origin+"${gaRewrite.to}"`
74
+ );
75
+ }
76
+ return output;
77
+ }
78
+ }
79
+ ),
80
+ googleTagManager: fromDomains(
81
+ [["www.googletagmanager.com", "gtm"]],
82
+ proxyPrefix,
83
+ { privacy: PRIVACY_NONE }
84
+ ),
85
+ metaPixel: fromDomains(
86
+ [
87
+ ["connect.facebook.net", "meta"],
88
+ ["www.facebook.com/tr", "meta-tr"],
89
+ ["facebook.com/tr", "meta-tr"],
90
+ ["pixel.facebook.com", "meta-px"],
91
+ ["www.facebook.com/plugins", "meta-plugins"]
92
+ ],
93
+ proxyPrefix,
94
+ { privacy: PRIVACY_FULL }
95
+ ),
96
+ tiktokPixel: fromDomains(
97
+ [["analytics.tiktok.com", "tiktok"]],
98
+ proxyPrefix,
99
+ { privacy: PRIVACY_FULL }
100
+ ),
101
+ segment: fromDomains(
102
+ [
103
+ ["api.segment.io", "segment"],
104
+ ["cdn.segment.com", "segment-cdn"]
105
+ ],
106
+ proxyPrefix,
107
+ { privacy: PRIVACY_NONE }
108
+ ),
109
+ xPixel: fromDomains(
110
+ [
111
+ ["analytics.twitter.com", "x"],
112
+ ["static.ads-twitter.com", "x-ads"],
113
+ ["t.co", "x-t"]
114
+ ],
115
+ proxyPrefix,
116
+ { privacy: PRIVACY_FULL }
117
+ ),
118
+ snapchatPixel: fromDomains(
119
+ [
120
+ ["sc-static.net", "snap-cdn"],
121
+ ["tr.snapchat.com", "snap"],
122
+ ["pixel.tapad.com", "snap-tapad"]
123
+ ],
124
+ proxyPrefix,
125
+ { privacy: PRIVACY_FULL }
126
+ ),
127
+ redditPixel: fromDomains(
128
+ [
129
+ ["www.redditstatic.com", "reddit-cdn"],
130
+ ["alb.reddit.com", "reddit"],
131
+ ["pixel-config.reddit.com", "reddit-cfg"]
132
+ ],
133
+ proxyPrefix,
134
+ { privacy: PRIVACY_FULL }
135
+ ),
136
+ clarity: fromDomains(
137
+ [
138
+ ["www.clarity.ms", "clarity"],
139
+ ["scripts.clarity.ms", "clarity-scripts"],
140
+ ["d.clarity.ms", "clarity-data"],
141
+ ["e.clarity.ms", "clarity-events"],
142
+ ["k.clarity.ms", "clarity-collect"]
143
+ ],
144
+ proxyPrefix,
145
+ { privacy: PRIVACY_HEATMAP }
146
+ ),
147
+ posthog: {
148
+ // No rewrites needed - PostHog uses NPM mode, SDK URLs are set via api_host config
149
+ privacy: PRIVACY_NONE,
150
+ routes: {
151
+ // US region
152
+ [`${proxyPrefix}/ph/static/**`]: { proxy: "https://us-assets.i.posthog.com/static/**" },
153
+ [`${proxyPrefix}/ph/**`]: { proxy: "https://us.i.posthog.com/**" },
154
+ // EU region
155
+ [`${proxyPrefix}/ph-eu/static/**`]: { proxy: "https://eu-assets.i.posthog.com/static/**" },
156
+ [`${proxyPrefix}/ph-eu/**`]: { proxy: "https://eu.i.posthog.com/**" }
157
+ },
158
+ autoInject: {
159
+ configField: "apiHost",
160
+ computeValue: (proxyPrefix2, config) => {
161
+ const region = config.region || "us";
162
+ return region === "eu" ? `${proxyPrefix2}/ph-eu` : `${proxyPrefix2}/ph`;
163
+ }
164
+ }
165
+ },
166
+ hotjar: fromDomains(
167
+ [
168
+ ["static.hotjar.com", "hotjar"],
169
+ ["script.hotjar.com", "hotjar-script"],
170
+ ["vars.hotjar.com", "hotjar-vars"],
171
+ ["in.hotjar.com", "hotjar-in"],
172
+ ["vc.hotjar.com", "hotjar-vc"],
173
+ ["vc.hotjar.io", "hotjar-vc"],
174
+ ["metrics.hotjar.io", "hotjar-metrics"],
175
+ ["insights.hotjar.com", "hotjar-insights"],
176
+ ["ask.hotjar.io", "hotjar-ask"],
177
+ ["events.hotjar.io", "hotjar-events"],
178
+ ["identify.hotjar.com", "hotjar-identify"],
179
+ ["surveystats.hotjar.io", "hotjar-surveys"]
180
+ ],
181
+ proxyPrefix,
182
+ { privacy: PRIVACY_HEATMAP }
183
+ ),
184
+ plausibleAnalytics: fromDomains(
185
+ [["plausible.io", "plausible"]],
186
+ proxyPrefix,
187
+ {
188
+ privacy: PRIVACY_NONE,
189
+ autoInject: {
190
+ configField: "endpoint",
191
+ computeValue: (proxyPrefix2) => `${proxyPrefix2}/plausible/api/event`
192
+ }
193
+ }
194
+ ),
195
+ cloudflareWebAnalytics: fromDomains(
196
+ [
197
+ ["static.cloudflareinsights.com", "cfwa"],
198
+ ["cloudflareinsights.com", "cfwa-beacon"]
199
+ ],
200
+ proxyPrefix,
201
+ { privacy: PRIVACY_NONE }
202
+ ),
203
+ rybbitAnalytics: fromDomains(
204
+ [["app.rybbit.io", "rybbit"]],
205
+ proxyPrefix,
206
+ {
207
+ privacy: PRIVACY_NONE,
208
+ autoInject: {
209
+ configField: "analyticsHost",
210
+ computeValue: (proxyPrefix2) => `${proxyPrefix2}/rybbit/api`
211
+ },
212
+ // Rybbit SDK derives API host via `e.split("/script.js")[0]` from the script tag's
213
+ // src attribute. When bundled, src becomes /_scripts/assets/<hash>.js so the split fails.
214
+ postProcess(output, rewrites) {
215
+ const rybbitRewrite = rewrites.find((r) => r.from === "app.rybbit.io");
216
+ if (rybbitRewrite) {
217
+ output = output.replace(
218
+ RYBBIT_HOST_SPLIT_RE,
219
+ `self.location.origin+"${rybbitRewrite.to}/api"`
220
+ );
221
+ }
222
+ return output;
223
+ }
224
+ }
225
+ ),
226
+ umamiAnalytics: fromDomains(
227
+ [["cloud.umami.is", "umami"]],
228
+ proxyPrefix,
229
+ {
230
+ privacy: PRIVACY_NONE,
231
+ extraRewrites: [
232
+ { from: "api-gateway.umami.dev", to: "umami" }
233
+ ],
234
+ autoInject: {
235
+ configField: "hostUrl",
236
+ computeValue: (proxyPrefix2) => `${proxyPrefix2}/umami`
237
+ }
238
+ }
239
+ ),
240
+ databuddyAnalytics: fromDomains(
241
+ [
242
+ ["cdn.databuddy.cc", "databuddy"],
243
+ ["basket.databuddy.cc", "databuddy-api"]
244
+ ],
245
+ proxyPrefix,
246
+ {
247
+ privacy: PRIVACY_NONE,
248
+ autoInject: {
249
+ configField: "apiUrl",
250
+ computeValue: (proxyPrefix2) => `${proxyPrefix2}/databuddy-api`
251
+ }
252
+ }
253
+ ),
254
+ fathomAnalytics: fromDomains(
255
+ [["cdn.usefathom.com", "fathom"]],
256
+ proxyPrefix,
257
+ {
258
+ privacy: PRIVACY_NONE,
259
+ // Fathom SDK checks if script src contains "cdn.usefathom.com" to detect self-hosted
260
+ // mode, then overrides trackerUrl with the script host's root. After AST rewrite already
261
+ // set trackerUrl to the proxy URL, neutralize this check so it doesn't override it.
262
+ postProcess(output) {
263
+ return output.replace(
264
+ FATHOM_SELF_HOSTED_RE,
265
+ '.src.indexOf("cdn.usefathom.com")<-1'
266
+ );
267
+ }
268
+ }
269
+ ),
270
+ intercom: fromDomains(
271
+ [
272
+ ["widget.intercom.io", "intercom"],
273
+ ["api-iam.intercom.io", "intercom-api"],
274
+ ["api-iam.eu.intercom.io", "intercom-api-eu"],
275
+ ["api-iam.au.intercom.io", "intercom-api-au"],
276
+ ["js.intercomcdn.com", "intercom-cdn"],
277
+ ["downloads.intercomcdn.com", "intercom-downloads"],
278
+ ["video-messages.intercomcdn.com", "intercom-video"]
279
+ ],
280
+ proxyPrefix,
281
+ { privacy: PRIVACY_IP_ONLY }
282
+ ),
283
+ crisp: fromDomains(
284
+ [
285
+ ["client.crisp.chat", "crisp"],
286
+ ["client.relay.crisp.chat", "crisp-relay"],
287
+ ["assets.crisp.chat", "crisp-assets"],
288
+ ["go.crisp.chat", "crisp-go"],
289
+ ["image.crisp.chat", "crisp-image"]
290
+ ],
291
+ proxyPrefix,
292
+ { privacy: PRIVACY_IP_ONLY }
293
+ ),
294
+ vercelAnalytics: fromDomains(
295
+ [["va.vercel-scripts.com", "vercel"]],
296
+ proxyPrefix,
297
+ { privacy: PRIVACY_NONE }
298
+ ),
299
+ gravatar: fromDomains(
300
+ [
301
+ ["secure.gravatar.com", "gravatar"],
302
+ ["gravatar.com/avatar", "gravatar-avatar"]
303
+ ],
304
+ proxyPrefix,
305
+ { privacy: PRIVACY_IP_ONLY }
306
+ ),
307
+ carbonAds: fromDomains(
308
+ [["cdn.carbonads.com", "carbon"]],
309
+ proxyPrefix,
310
+ { privacy: PRIVACY_NONE }
311
+ ),
312
+ lemonSqueezy: fromDomains(
313
+ [["assets.lemonsqueezy.com", "lemonsqueezy"]],
314
+ proxyPrefix,
315
+ { privacy: PRIVACY_NONE }
316
+ ),
317
+ matomoAnalytics: fromDomains(
318
+ [["cdn.matomo.cloud", "matomo"]],
319
+ proxyPrefix,
320
+ { privacy: PRIVACY_NONE }
321
+ ),
322
+ stripe: fromDomains(
323
+ [["js.stripe.com", "stripe"]],
324
+ proxyPrefix,
325
+ { privacy: PRIVACY_IP_ONLY }
326
+ ),
327
+ paypal: fromDomains(
328
+ [["www.paypal.com", "paypal"]],
329
+ proxyPrefix,
330
+ { privacy: PRIVACY_IP_ONLY }
331
+ ),
332
+ youtubePlayer: fromDomains(
333
+ [["www.youtube.com", "youtube"]],
334
+ proxyPrefix,
335
+ { privacy: PRIVACY_IP_ONLY }
336
+ ),
337
+ vimeoPlayer: fromDomains(
338
+ [["player.vimeo.com", "vimeo"]],
339
+ proxyPrefix,
340
+ { privacy: PRIVACY_IP_ONLY }
341
+ ),
342
+ googleRecaptcha: {
343
+ privacy: PRIVACY_IP_ONLY,
344
+ rewrite: [
345
+ { from: "www.gstatic.com", to: `${proxyPrefix}/gstatic` },
346
+ // www.google.com is shared with GA — only rewrite /recaptcha paths
347
+ { from: "www.google.com/recaptcha", to: `${proxyPrefix}/grecaptcha` },
348
+ { from: "www.recaptcha.net/recaptcha", to: `${proxyPrefix}/grecaptcha` }
349
+ ],
350
+ routes: {
351
+ [`${proxyPrefix}/gstatic/**`]: { proxy: "https://www.gstatic.com/**" },
352
+ [`${proxyPrefix}/grecaptcha/**`]: { proxy: "https://www.google.com/recaptcha/**" }
353
+ }
354
+ },
355
+ googleSignIn: fromDomains(
356
+ [["accounts.google.com", "gsignin"]],
357
+ proxyPrefix,
358
+ { privacy: PRIVACY_IP_ONLY }
359
+ )
360
+ };
361
+ }
362
+ function getAllProxyConfigs(proxyPrefix) {
363
+ return buildProxyConfig(proxyPrefix);
364
+ }
365
+ const PROXY_URL_RE = /^https?:\/\/([^/]+)(\/.*)?\/\*\*$/;
366
+ const ROUTE_WILDCARD_RE = /\/\*\*$/;
367
+ function routesToInterceptRules(routes) {
368
+ const rules = [];
369
+ for (const [localPath, { proxy }] of Object.entries(routes)) {
370
+ const match = proxy.match(PROXY_URL_RE);
371
+ if (match?.[1]) {
372
+ const domain = match[1];
373
+ const pathPrefix = match[2] || "";
374
+ const target = localPath.replace(ROUTE_WILDCARD_RE, "");
375
+ rules.push({ pattern: domain, pathPrefix, target });
376
+ }
377
+ }
378
+ return rules;
379
+ }
380
+
381
+ export { getAllProxyConfigs as g, routesToInterceptRules as r };
package/dist/stats.d.mts CHANGED
@@ -17,6 +17,91 @@ interface ScriptSizeDetail {
17
17
  initiatorType: string;
18
18
  protocol: string;
19
19
  }
20
+ interface ScriptApis {
21
+ cookies: boolean;
22
+ localStorage: boolean;
23
+ sessionStorage: boolean;
24
+ indexedDB: boolean;
25
+ canvas: boolean;
26
+ webgl: boolean;
27
+ audioContext: boolean;
28
+ userAgent: boolean;
29
+ doNotTrack: boolean;
30
+ hardwareConcurrency: boolean;
31
+ deviceMemory: boolean;
32
+ plugins: boolean;
33
+ languages: boolean;
34
+ screen: boolean;
35
+ timezone: boolean;
36
+ platform: boolean;
37
+ vendor: boolean;
38
+ connection: boolean;
39
+ maxTouchPoints: boolean;
40
+ devicePixelRatio: boolean;
41
+ mediaDevices: boolean;
42
+ getBattery: boolean;
43
+ referrer: boolean;
44
+ windowName: boolean;
45
+ rtcPeerConnection: boolean;
46
+ geolocation: boolean;
47
+ serviceWorker: boolean;
48
+ cacheApi: boolean;
49
+ sendBeacon: boolean;
50
+ fetch: boolean;
51
+ xhr: boolean;
52
+ websocket: boolean;
53
+ mutationObserver: boolean;
54
+ performanceObserver: boolean;
55
+ intersectionObserver: boolean;
56
+ }
57
+ interface ApiPrivacyScore {
58
+ /** 0–100, higher = more invasive */
59
+ score: number;
60
+ /** Persistence APIs used (cookies, localStorage, sessionStorage, indexedDB) */
61
+ persistence: number;
62
+ /** Fingerprinting APIs used (canvas, webgl, audioContext, deviceMemory, hardwareConcurrency, plugins, screen, userAgent, languages, timezone, platform, vendor, connection, maxTouchPoints, devicePixelRatio, mediaDevices, getBattery) */
63
+ fingerprinting: number;
64
+ /** Tracking APIs used (referrer, windowName, rtcPeerConnection, geolocation, serviceWorker, cacheApi) */
65
+ tracking: number;
66
+ /** Behavioral monitoring APIs used (mutationObserver, intersectionObserver) */
67
+ monitoring: number;
68
+ }
69
+ interface ScriptCookie {
70
+ name: string;
71
+ domain: string;
72
+ path: string;
73
+ httpOnly: boolean;
74
+ secure: boolean;
75
+ sameSite: string;
76
+ session: boolean;
77
+ lifetimeDays: number;
78
+ firstParty: boolean;
79
+ }
80
+ interface NetworkSummary {
81
+ requestCount: number;
82
+ domains: string[];
83
+ outboundBytes: number;
84
+ inboundBytes: number;
85
+ injectedElements: {
86
+ tag: string;
87
+ src: string;
88
+ }[];
89
+ }
90
+ interface CwvEstimate {
91
+ /** Estimated LCP delay: scriptDurationMs blocks rendering during page load */
92
+ lcpImpactMs: number;
93
+ /** CLS risk: true if script injects visible DOM elements (iframes, images) without reserved space */
94
+ clsRisk: boolean;
95
+ /** Number of visible elements injected that could cause layout shifts */
96
+ clsElements: number;
97
+ /** INP risk level based on script weight + DOM observation */
98
+ inpRiskLevel: 'low' | 'medium' | 'high';
99
+ }
100
+ interface PerformanceSummary {
101
+ taskDurationMs: number;
102
+ scriptDurationMs: number;
103
+ heapDeltaKb: number;
104
+ }
20
105
  interface ScriptStats {
21
106
  id: string;
22
107
  label: string;
@@ -25,10 +110,17 @@ interface ScriptStats {
25
110
  totalTransferKb: number;
26
111
  totalDecodedKb: number;
27
112
  trackedData: TrackedDataType[];
113
+ collectsWebVitals: boolean;
114
+ apis: ScriptApis;
115
+ apiPrivacyScore: ApiPrivacyScore;
116
+ cookies: ScriptCookie[];
117
+ network: NetworkSummary;
118
+ performance: PerformanceSummary;
119
+ cwvEstimate: CwvEstimate;
28
120
  hasBundling: boolean;
29
121
  hasProxy: boolean;
30
- domains: string[];
31
- endpoints: number;
122
+ proxyDomains: string[];
123
+ proxyEndpoints: number;
32
124
  privacy: ScriptPrivacy | null;
33
125
  privacyLevel: 'full' | 'partial' | 'none' | 'unknown';
34
126
  loadingMethod: 'cdn' | 'npm' | 'dynamic';
@@ -36,4 +128,4 @@ interface ScriptStats {
36
128
  declare function getScriptStats(): Promise<ScriptStats[]>;
37
129
 
38
130
  export { getScriptStats };
39
- export type { ScriptPrivacy, ScriptSizeDetail, ScriptStats, TrackedDataType };
131
+ export type { ApiPrivacyScore, CwvEstimate, NetworkSummary, PerformanceSummary, ScriptApis, ScriptCookie, ScriptPrivacy, ScriptSizeDetail, ScriptStats, TrackedDataType };
package/dist/stats.d.ts CHANGED
@@ -17,6 +17,91 @@ interface ScriptSizeDetail {
17
17
  initiatorType: string;
18
18
  protocol: string;
19
19
  }
20
+ interface ScriptApis {
21
+ cookies: boolean;
22
+ localStorage: boolean;
23
+ sessionStorage: boolean;
24
+ indexedDB: boolean;
25
+ canvas: boolean;
26
+ webgl: boolean;
27
+ audioContext: boolean;
28
+ userAgent: boolean;
29
+ doNotTrack: boolean;
30
+ hardwareConcurrency: boolean;
31
+ deviceMemory: boolean;
32
+ plugins: boolean;
33
+ languages: boolean;
34
+ screen: boolean;
35
+ timezone: boolean;
36
+ platform: boolean;
37
+ vendor: boolean;
38
+ connection: boolean;
39
+ maxTouchPoints: boolean;
40
+ devicePixelRatio: boolean;
41
+ mediaDevices: boolean;
42
+ getBattery: boolean;
43
+ referrer: boolean;
44
+ windowName: boolean;
45
+ rtcPeerConnection: boolean;
46
+ geolocation: boolean;
47
+ serviceWorker: boolean;
48
+ cacheApi: boolean;
49
+ sendBeacon: boolean;
50
+ fetch: boolean;
51
+ xhr: boolean;
52
+ websocket: boolean;
53
+ mutationObserver: boolean;
54
+ performanceObserver: boolean;
55
+ intersectionObserver: boolean;
56
+ }
57
+ interface ApiPrivacyScore {
58
+ /** 0–100, higher = more invasive */
59
+ score: number;
60
+ /** Persistence APIs used (cookies, localStorage, sessionStorage, indexedDB) */
61
+ persistence: number;
62
+ /** Fingerprinting APIs used (canvas, webgl, audioContext, deviceMemory, hardwareConcurrency, plugins, screen, userAgent, languages, timezone, platform, vendor, connection, maxTouchPoints, devicePixelRatio, mediaDevices, getBattery) */
63
+ fingerprinting: number;
64
+ /** Tracking APIs used (referrer, windowName, rtcPeerConnection, geolocation, serviceWorker, cacheApi) */
65
+ tracking: number;
66
+ /** Behavioral monitoring APIs used (mutationObserver, intersectionObserver) */
67
+ monitoring: number;
68
+ }
69
+ interface ScriptCookie {
70
+ name: string;
71
+ domain: string;
72
+ path: string;
73
+ httpOnly: boolean;
74
+ secure: boolean;
75
+ sameSite: string;
76
+ session: boolean;
77
+ lifetimeDays: number;
78
+ firstParty: boolean;
79
+ }
80
+ interface NetworkSummary {
81
+ requestCount: number;
82
+ domains: string[];
83
+ outboundBytes: number;
84
+ inboundBytes: number;
85
+ injectedElements: {
86
+ tag: string;
87
+ src: string;
88
+ }[];
89
+ }
90
+ interface CwvEstimate {
91
+ /** Estimated LCP delay: scriptDurationMs blocks rendering during page load */
92
+ lcpImpactMs: number;
93
+ /** CLS risk: true if script injects visible DOM elements (iframes, images) without reserved space */
94
+ clsRisk: boolean;
95
+ /** Number of visible elements injected that could cause layout shifts */
96
+ clsElements: number;
97
+ /** INP risk level based on script weight + DOM observation */
98
+ inpRiskLevel: 'low' | 'medium' | 'high';
99
+ }
100
+ interface PerformanceSummary {
101
+ taskDurationMs: number;
102
+ scriptDurationMs: number;
103
+ heapDeltaKb: number;
104
+ }
20
105
  interface ScriptStats {
21
106
  id: string;
22
107
  label: string;
@@ -25,10 +110,17 @@ interface ScriptStats {
25
110
  totalTransferKb: number;
26
111
  totalDecodedKb: number;
27
112
  trackedData: TrackedDataType[];
113
+ collectsWebVitals: boolean;
114
+ apis: ScriptApis;
115
+ apiPrivacyScore: ApiPrivacyScore;
116
+ cookies: ScriptCookie[];
117
+ network: NetworkSummary;
118
+ performance: PerformanceSummary;
119
+ cwvEstimate: CwvEstimate;
28
120
  hasBundling: boolean;
29
121
  hasProxy: boolean;
30
- domains: string[];
31
- endpoints: number;
122
+ proxyDomains: string[];
123
+ proxyEndpoints: number;
32
124
  privacy: ScriptPrivacy | null;
33
125
  privacyLevel: 'full' | 'partial' | 'none' | 'unknown';
34
126
  loadingMethod: 'cdn' | 'npm' | 'dynamic';
@@ -36,4 +128,4 @@ interface ScriptStats {
36
128
  declare function getScriptStats(): Promise<ScriptStats[]>;
37
129
 
38
130
  export { getScriptStats };
39
- export type { ScriptPrivacy, ScriptSizeDetail, ScriptStats, TrackedDataType };
131
+ export type { ApiPrivacyScore, CwvEstimate, NetworkSummary, PerformanceSummary, ScriptApis, ScriptCookie, ScriptPrivacy, ScriptSizeDetail, ScriptStats, TrackedDataType };