@nuxt/scripts 1.0.0-beta.7 → 1.0.0-rc.10

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 (300) hide show
  1. package/bin/cli.mjs +2 -0
  2. package/dist/cli.d.mts +2 -0
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.mjs +50 -0
  5. package/dist/devtools-client/200.html +1 -0
  6. package/dist/devtools-client/404.html +1 -0
  7. package/dist/devtools-client/_fonts/4ppnHhMi-pBsWSPo7mY0avYxlDoAg1N3PTzCwXLZ5rA-d9oibkGnTd1JL3tc_xnaVgBLYmOB8kjrK2cvZaqwj9s.woff2 +0 -0
  8. package/dist/devtools-client/_fonts/4qBuU9MRVUlPZNPSF7Xom_sK8RBEnfYu-9VXFrdq8A8-8TDwLE1HAj1sQn7XxVWtM_7sIaPM-DTdO3Pf8U2DF1U.woff2 +0 -0
  9. package/dist/devtools-client/_fonts/6dYsbWUd_BpKJ7mdDihgOcya1gHXLpJBuMYXux3WMjE-q3fYNS8YbW5n7ZeXI2vSNgkRWW5VDPKAl51SNTjG2qk.woff2 +0 -0
  10. package/dist/devtools-client/_fonts/Lr-hqqZZsYmCt0ITUlr1CUrWim9fsKvoDFZliMxgNHY-iTa_Yt_PzhOY9TX7ZXdSlEPim6iRt92xhECwaxWxd5w.woff2 +0 -0
  11. package/dist/devtools-client/_fonts/OknHvWI6KtYn1JQBzX7eSpNDBQ8520F9TvSUJYkVf6A-xeZn9253svK_8Q2LD0XEruY_MnEsuCRO5LenPoggC0Y.woff2 +0 -0
  12. package/dist/devtools-client/_fonts/PV2hrQG6wq5BlIPDjdL1IcOflycaghyt5MHzlBqZtlo-lb_WexLz3VZqfTN0oi554iBH5tT2j2UFEV-XErCAS3E.woff2 +0 -0
  13. package/dist/devtools-client/_fonts/UA7OtwYHwGN_HjcVGTdmiQxUit7FlqkCwxVUWSeXVnQ-B4OXCFOL_tWrYODpQTc07aMaj0c2cewTOmBRWR9tD-A.woff2 +0 -0
  14. package/dist/devtools-client/_fonts/VE4cDVCv5MxbFM7ZLoLCGbIpNd71zhp7MDI9lmN5Y7I-xZyDYCUVrd6LV8eVGF3Um3UZjBFuUtDGtvdyTBBRYBo.woff2 +0 -0
  15. package/dist/devtools-client/_fonts/fVoGbnMbBFd5L9BBp9fUPavUSkZ_EmsQNSyadkT-108-U4T0khaeLQSIhtt9eVvaCEKJjtWJ4ioRJOf8hvqkWY0.woff2 +0 -0
  16. package/dist/devtools-client/_fonts/lQAxeCEs1R0Lw-H9XRU1RlOARQN8J6npRsPjyEDMe5s-_DUSLEkO3tKTuun_gSnDLoQPVEnpOnyqZMOw0ByZ6PA.woff2 +0 -0
  17. package/dist/devtools-client/_fonts/lntlqNHKLV2n82yTwMde70QqOjcfLE2XJ5oKZ3vRPWc-z6TxpIZQdWXztWLr9_OFWqt_WJJoeGtuK_-XQMZGQwE.woff2 +0 -0
  18. package/dist/devtools-client/_fonts/qxAYvKsXWeYv731eb-h5TRurcdIP_W44mpNdX-HABAk-zUDeMEFlNtNbrwvT9JxLEBg0TphGy70O6RfIoIX_ZwU.woff2 +0 -0
  19. package/dist/devtools-client/_nuxt/B8PEiB0p.js +1 -0
  20. package/dist/devtools-client/_nuxt/BgPDxVUn.js +1 -0
  21. package/dist/devtools-client/_nuxt/BmlapxLP.js +1 -0
  22. package/dist/devtools-client/_nuxt/CM2vefXI.js +188 -0
  23. package/dist/devtools-client/_nuxt/DAF5Qk9P.js +1 -0
  24. package/dist/devtools-client/_nuxt/Dx6HhVmj.js +1 -0
  25. package/dist/devtools-client/_nuxt/S8LiR9M1.js +1 -0
  26. package/dist/devtools-client/_nuxt/builds/latest.json +1 -0
  27. package/dist/devtools-client/_nuxt/builds/meta/5458a3f2-af35-479c-8852-bf6f92fed611.json +1 -0
  28. package/dist/devtools-client/_nuxt/entry.BKkVrcJj.css +1 -0
  29. package/dist/devtools-client/_nuxt/error-404.d44aGwWI.css +1 -0
  30. package/dist/devtools-client/_nuxt/error-500.NthMfIEt.css +1 -0
  31. package/dist/devtools-client/_nuxt/first-party.C8Ha4JLM.css +1 -0
  32. package/dist/devtools-client/_nuxt/index.DZD1lwyI.css +1 -0
  33. package/dist/devtools-client/_nuxt/registry.B9lnjF_b.css +1 -0
  34. package/dist/devtools-client/_nuxt/vBkR1GJq.js +1 -0
  35. package/dist/devtools-client/_nuxt/wDzz0qaB.js +1 -0
  36. package/dist/devtools-client/docs/index.html +1 -0
  37. package/dist/devtools-client/first-party/index.html +1 -0
  38. package/dist/devtools-client/index.html +1 -0
  39. package/dist/devtools-client/registry/index.html +1 -0
  40. package/dist/module.d.mts +89 -80
  41. package/dist/module.d.ts +185 -0
  42. package/dist/module.json +1 -1
  43. package/dist/module.mjs +1056 -756
  44. package/dist/registry.d.mts +92 -4
  45. package/dist/registry.d.ts +94 -0
  46. package/dist/registry.mjs +668 -326
  47. package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.d.vue.ts +77 -165
  48. package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.vue +148 -227
  49. package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.vue.d.ts +77 -165
  50. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.d.vue.ts +6 -55
  51. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.vue +12 -83
  52. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.vue.d.ts +6 -55
  53. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsCircle.d.vue.ts +5 -1
  54. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsCircle.vue +24 -38
  55. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsCircle.vue.d.ts +5 -1
  56. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsGeoJson.d.vue.ts +43 -0
  57. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsGeoJson.vue +60 -0
  58. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsGeoJson.vue.d.ts +43 -0
  59. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.d.vue.ts +4 -0
  60. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.vue +22 -26
  61. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.vue.d.ts +4 -0
  62. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsInfoWindow.d.vue.ts +11 -8
  63. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsInfoWindow.vue +57 -57
  64. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsInfoWindow.vue.d.ts +11 -8
  65. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarker.d.vue.ts +24 -42
  66. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarker.vue +71 -74
  67. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarker.vue.d.ts +24 -42
  68. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarkerClusterer.d.vue.ts +19 -20
  69. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarkerClusterer.vue +85 -38
  70. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarkerClusterer.vue.d.ts +19 -20
  71. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsOverlayView.d.vue.ts +98 -0
  72. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsOverlayView.vue +263 -0
  73. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsOverlayView.vue.d.ts +98 -0
  74. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPinElement.d.vue.ts +10 -3
  75. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPinElement.vue +9 -41
  76. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPinElement.vue.d.ts +10 -3
  77. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolygon.d.vue.ts +7 -3
  78. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolygon.vue +23 -38
  79. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolygon.vue.d.ts +7 -3
  80. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolyline.d.vue.ts +7 -3
  81. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolyline.vue +23 -38
  82. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolyline.vue.d.ts +7 -3
  83. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsRectangle.d.vue.ts +7 -3
  84. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsRectangle.vue +24 -38
  85. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsRectangle.vue.d.ts +7 -3
  86. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsStaticMap.d.vue.ts +200 -0
  87. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsStaticMap.vue +170 -0
  88. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsStaticMap.vue.d.ts +200 -0
  89. package/dist/runtime/components/GoogleMaps/bindGoogleMapsEvents.d.ts +13 -0
  90. package/dist/runtime/components/GoogleMaps/bindGoogleMapsEvents.js +8 -0
  91. package/dist/runtime/components/GoogleMaps/injectionKeys.d.ts +10 -0
  92. package/dist/runtime/components/GoogleMaps/injectionKeys.js +2 -0
  93. package/dist/runtime/components/GoogleMaps/types.d.ts +42 -0
  94. package/dist/runtime/components/GoogleMaps/types.js +1 -0
  95. package/dist/runtime/components/GoogleMaps/useGoogleMapsResource.d.ts +98 -0
  96. package/dist/runtime/components/GoogleMaps/useGoogleMapsResource.js +126 -0
  97. package/dist/runtime/components/ScriptBlueskyEmbed.d.vue.ts +83 -0
  98. package/dist/runtime/components/ScriptBlueskyEmbed.vue +91 -0
  99. package/dist/runtime/components/ScriptBlueskyEmbed.vue.d.ts +83 -0
  100. package/dist/runtime/components/ScriptCarbonAds.d.vue.ts +4 -7
  101. package/dist/runtime/components/ScriptCarbonAds.vue +1 -0
  102. package/dist/runtime/components/ScriptCarbonAds.vue.d.ts +4 -7
  103. package/dist/runtime/components/ScriptCrisp.d.vue.ts +7 -11
  104. package/dist/runtime/components/ScriptCrisp.vue +2 -1
  105. package/dist/runtime/components/ScriptCrisp.vue.d.ts +7 -11
  106. package/dist/runtime/components/ScriptGoogleAdsense.d.vue.ts +4 -7
  107. package/dist/runtime/components/ScriptGoogleAdsense.vue +2 -1
  108. package/dist/runtime/components/ScriptGoogleAdsense.vue.d.ts +4 -7
  109. package/dist/runtime/components/ScriptGravatar.d.vue.ts +22 -0
  110. package/dist/runtime/components/ScriptGravatar.vue +46 -0
  111. package/dist/runtime/components/ScriptGravatar.vue.d.ts +22 -0
  112. package/dist/runtime/components/ScriptInstagramEmbed.d.vue.ts +12 -15
  113. package/dist/runtime/components/ScriptInstagramEmbed.vue +11 -3
  114. package/dist/runtime/components/ScriptInstagramEmbed.vue.d.ts +12 -15
  115. package/dist/runtime/components/ScriptIntercom.d.vue.ts +7 -11
  116. package/dist/runtime/components/ScriptIntercom.vue +5 -3
  117. package/dist/runtime/components/ScriptIntercom.vue.d.ts +7 -11
  118. package/dist/runtime/components/ScriptLemonSqueezy.d.vue.ts +2 -3
  119. package/dist/runtime/components/ScriptLemonSqueezy.vue +1 -0
  120. package/dist/runtime/components/ScriptLemonSqueezy.vue.d.ts +2 -3
  121. package/dist/runtime/components/ScriptPayPalButtons.d.vue.ts +43 -37
  122. package/dist/runtime/components/ScriptPayPalButtons.vue +49 -79
  123. package/dist/runtime/components/ScriptPayPalButtons.vue.d.ts +43 -37
  124. package/dist/runtime/components/ScriptPayPalMessages.d.vue.ts +37 -28
  125. package/dist/runtime/components/ScriptPayPalMessages.vue +47 -50
  126. package/dist/runtime/components/ScriptPayPalMessages.vue.d.ts +37 -28
  127. package/dist/runtime/components/ScriptStripePricingTable.d.vue.ts +5 -9
  128. package/dist/runtime/components/ScriptStripePricingTable.vue +3 -2
  129. package/dist/runtime/components/ScriptStripePricingTable.vue.d.ts +5 -9
  130. package/dist/runtime/components/ScriptVimeoPlayer.d.vue.ts +17 -11
  131. package/dist/runtime/components/ScriptVimeoPlayer.vue +14 -10
  132. package/dist/runtime/components/ScriptVimeoPlayer.vue.d.ts +17 -11
  133. package/dist/runtime/components/ScriptXEmbed.d.vue.ts +10 -14
  134. package/dist/runtime/components/ScriptXEmbed.vue +21 -12
  135. package/dist/runtime/components/ScriptXEmbed.vue.d.ts +10 -14
  136. package/dist/runtime/components/ScriptYouTubePlayer.d.vue.ts +10 -15
  137. package/dist/runtime/components/ScriptYouTubePlayer.vue +12 -5
  138. package/dist/runtime/components/ScriptYouTubePlayer.vue.d.ts +10 -15
  139. package/dist/runtime/composables/useScript.js +159 -8
  140. package/dist/runtime/composables/useScriptEventPage.js +2 -2
  141. package/dist/runtime/composables/useScriptProxyToken.d.ts +12 -0
  142. package/dist/runtime/composables/useScriptProxyToken.js +4 -0
  143. package/dist/runtime/composables/useScriptProxyUrl.d.ts +12 -0
  144. package/dist/runtime/composables/useScriptProxyUrl.js +27 -0
  145. package/dist/runtime/composables/useScriptTriggerConsent.d.ts +10 -0
  146. package/dist/runtime/composables/useScriptTriggerConsent.js +33 -20
  147. package/dist/runtime/composables/useScriptTriggerElement.js +1 -1
  148. package/dist/runtime/composables/useScriptTriggerIdleTimeout.js +1 -1
  149. package/dist/runtime/devtools-standalone-bridge.client.d.ts +8 -0
  150. package/dist/runtime/devtools-standalone-bridge.client.js +50 -0
  151. package/dist/runtime/plugins/proxy-token.server.d.ts +10 -0
  152. package/dist/runtime/plugins/proxy-token.server.js +17 -0
  153. package/dist/runtime/registry/bing-uet.d.ts +198 -0
  154. package/dist/runtime/registry/bing-uet.js +43 -0
  155. package/dist/runtime/registry/bluesky-embed.d.ts +112 -0
  156. package/dist/runtime/registry/bluesky-embed.js +68 -0
  157. package/dist/runtime/registry/clarity.d.ts +16 -17
  158. package/dist/runtime/registry/clarity.js +33 -31
  159. package/dist/runtime/registry/cloudflare-web-analytics.d.ts +2 -13
  160. package/dist/runtime/registry/cloudflare-web-analytics.js +2 -14
  161. package/dist/runtime/registry/crisp.d.ts +10 -40
  162. package/dist/runtime/registry/crisp.js +2 -33
  163. package/dist/runtime/registry/databuddy-analytics.d.ts +2 -35
  164. package/dist/runtime/registry/databuddy-analytics.js +20 -45
  165. package/dist/runtime/registry/fathom-analytics.d.ts +7 -26
  166. package/dist/runtime/registry/fathom-analytics.js +3 -25
  167. package/dist/runtime/registry/google-adsense.d.ts +3 -11
  168. package/dist/runtime/registry/google-adsense.js +2 -11
  169. package/dist/runtime/registry/google-analytics.d.ts +9 -7
  170. package/dist/runtime/registry/google-analytics.js +15 -9
  171. package/dist/runtime/registry/google-maps.d.ts +3 -9
  172. package/dist/runtime/registry/google-maps.js +2 -8
  173. package/dist/runtime/registry/google-recaptcha.d.ts +2 -6
  174. package/dist/runtime/registry/google-recaptcha.js +4 -12
  175. package/dist/runtime/registry/google-sign-in.d.ts +2 -13
  176. package/dist/runtime/registry/google-sign-in.js +2 -22
  177. package/dist/runtime/registry/google-tag-manager.d.ts +8 -29
  178. package/dist/runtime/registry/google-tag-manager.js +14 -28
  179. package/dist/runtime/registry/gravatar.d.ts +26 -0
  180. package/dist/runtime/registry/gravatar.js +33 -0
  181. package/dist/runtime/registry/hotjar.d.ts +4 -6
  182. package/dist/runtime/registry/hotjar.js +2 -5
  183. package/dist/runtime/registry/instagram-embed.d.ts +3 -18
  184. package/dist/runtime/registry/instagram-embed.js +4 -19
  185. package/dist/runtime/registry/intercom.d.ts +5 -13
  186. package/dist/runtime/registry/intercom.js +2 -12
  187. package/dist/runtime/registry/matomo-analytics.d.ts +12 -15
  188. package/dist/runtime/registry/matomo-analytics.js +31 -13
  189. package/dist/runtime/registry/meta-pixel.d.ts +12 -8
  190. package/dist/runtime/registry/meta-pixel.js +12 -5
  191. package/dist/runtime/registry/mixpanel-analytics.d.ts +32 -0
  192. package/dist/runtime/registry/mixpanel-analytics.js +58 -0
  193. package/dist/runtime/registry/npm.d.ts +3 -7
  194. package/dist/runtime/registry/npm.js +2 -9
  195. package/dist/runtime/registry/paypal.d.ts +4 -25
  196. package/dist/runtime/registry/paypal.js +3 -66
  197. package/dist/runtime/registry/plausible-analytics.js +19 -14
  198. package/dist/runtime/registry/posthog.d.ts +18 -14
  199. package/dist/runtime/registry/posthog.js +18 -16
  200. package/dist/runtime/registry/reddit-pixel.d.ts +5 -6
  201. package/dist/runtime/registry/reddit-pixel.js +2 -4
  202. package/dist/runtime/registry/rybbit-analytics.d.ts +2 -14
  203. package/dist/runtime/registry/rybbit-analytics.js +10 -20
  204. package/dist/runtime/registry/schemas.d.ts +1047 -0
  205. package/dist/runtime/registry/schemas.js +1004 -0
  206. package/dist/runtime/registry/segment.d.ts +2 -5
  207. package/dist/runtime/registry/segment.js +2 -5
  208. package/dist/runtime/registry/snapchat-pixel.d.ts +5 -34
  209. package/dist/runtime/registry/snapchat-pixel.js +2 -20
  210. package/dist/runtime/registry/stripe.d.ts +3 -4
  211. package/dist/runtime/registry/stripe.js +2 -4
  212. package/dist/runtime/registry/tiktok-pixel.d.ts +20 -9
  213. package/dist/runtime/registry/tiktok-pixel.js +24 -7
  214. package/dist/runtime/registry/umami-analytics.d.ts +2 -31
  215. package/dist/runtime/registry/umami-analytics.js +2 -36
  216. package/dist/runtime/registry/vercel-analytics.d.ts +29 -0
  217. package/dist/runtime/registry/vercel-analytics.js +84 -0
  218. package/dist/runtime/registry/vimeo-player.d.ts +2 -2
  219. package/dist/runtime/registry/vimeo-player.js +1 -1
  220. package/dist/runtime/registry/x-embed.d.ts +3 -21
  221. package/dist/runtime/registry/x-embed.js +2 -21
  222. package/dist/runtime/registry/x-pixel.d.ts +4 -7
  223. package/dist/runtime/registry/x-pixel.js +2 -5
  224. package/dist/runtime/registry/youtube-player.d.ts +7 -7
  225. package/dist/runtime/registry/youtube-player.js +1 -1
  226. package/dist/runtime/server/bluesky-embed-image.d.ts +2 -0
  227. package/dist/runtime/server/bluesky-embed-image.js +7 -0
  228. package/dist/runtime/server/bluesky-embed.d.ts +2 -0
  229. package/dist/runtime/server/bluesky-embed.js +78 -0
  230. package/dist/runtime/server/google-maps-geocode-proxy.d.ts +2 -0
  231. package/dist/runtime/server/google-maps-geocode-proxy.js +38 -0
  232. package/dist/runtime/server/google-static-maps-proxy.d.ts +1 -1
  233. package/dist/runtime/server/google-static-maps-proxy.js +18 -23
  234. package/dist/runtime/server/gravatar-proxy.d.ts +2 -0
  235. package/dist/runtime/server/gravatar-proxy.js +46 -0
  236. package/dist/runtime/server/instagram-embed-asset.d.ts +1 -1
  237. package/dist/runtime/server/instagram-embed-asset.js +8 -41
  238. package/dist/runtime/server/instagram-embed-image.d.ts +1 -1
  239. package/dist/runtime/server/instagram-embed-image.js +6 -53
  240. package/dist/runtime/server/instagram-embed.d.ts +1 -0
  241. package/dist/runtime/server/instagram-embed.js +82 -40
  242. package/dist/runtime/server/proxy-handler.js +102 -85
  243. package/dist/runtime/server/utils/cached-upstream.d.ts +55 -0
  244. package/dist/runtime/server/utils/cached-upstream.js +65 -0
  245. package/dist/runtime/server/utils/embed-rewriters.d.ts +19 -0
  246. package/dist/runtime/server/utils/embed-rewriters.js +41 -0
  247. package/dist/runtime/server/utils/image-proxy.d.ts +14 -0
  248. package/dist/runtime/server/utils/image-proxy.js +73 -0
  249. package/dist/runtime/server/utils/instagram-embed.d.ts +16 -0
  250. package/dist/runtime/server/utils/instagram-embed.js +153 -0
  251. package/dist/runtime/server/utils/privacy.d.ts +1 -10
  252. package/dist/runtime/server/utils/privacy.js +60 -40
  253. package/dist/runtime/server/utils/proxy-url.d.ts +9 -0
  254. package/dist/runtime/server/utils/proxy-url.js +21 -0
  255. package/dist/runtime/server/utils/sign-constants.d.ts +16 -0
  256. package/dist/runtime/server/utils/sign-constants.js +5 -0
  257. package/dist/runtime/server/utils/sign.d.ts +101 -0
  258. package/dist/runtime/server/utils/sign.js +91 -0
  259. package/dist/runtime/server/utils/withSigning.d.ts +23 -0
  260. package/dist/runtime/server/utils/withSigning.js +19 -0
  261. package/dist/runtime/server/x-embed-image.d.ts +1 -1
  262. package/dist/runtime/server/x-embed-image.js +5 -49
  263. package/dist/runtime/server/x-embed.js +26 -6
  264. package/dist/runtime/types.d.ts +311 -55
  265. package/dist/runtime/types.js +1 -2
  266. package/dist/runtime/utils/pure.d.ts +1 -1
  267. package/dist/runtime/utils.d.ts +6 -4
  268. package/dist/runtime/utils.js +31 -14
  269. package/dist/stats.d.mts +202 -0
  270. package/dist/stats.d.ts +202 -0
  271. package/dist/stats.mjs +3835 -0
  272. package/dist/types-source.d.mts +17 -0
  273. package/dist/types-source.d.ts +17 -0
  274. package/dist/types-source.mjs +3787 -0
  275. package/dist/types.d.mts +4 -2
  276. package/package.json +41 -63
  277. package/README.md +0 -86
  278. package/dist/client/200.html +0 -1
  279. package/dist/client/404.html +0 -1
  280. package/dist/client/_nuxt/BJa0m50V.js +0 -1
  281. package/dist/client/_nuxt/BPQ3VLAy.js +0 -1
  282. package/dist/client/_nuxt/Ci5iXYuB.js +0 -1
  283. package/dist/client/_nuxt/DaI2y8Uz.js +0 -162
  284. package/dist/client/_nuxt/builds/latest.json +0 -1
  285. package/dist/client/_nuxt/builds/meta/9b4fb16a-3c62-48b0-8295-126cb077b5d3.json +0 -1
  286. package/dist/client/_nuxt/entry.D45OuV0w.css +0 -1
  287. package/dist/client/_nuxt/error-404.B57D-jUQ.css +0 -1
  288. package/dist/client/_nuxt/error-500.DTHUW7BI.css +0 -1
  289. package/dist/client/_nuxt/vPLZfVXe.js +0 -1
  290. package/dist/client/index.html +0 -1
  291. package/dist/runtime/components/ScriptPayPalMarks.d.vue.ts +0 -52
  292. package/dist/runtime/components/ScriptPayPalMarks.vue +0 -69
  293. package/dist/runtime/components/ScriptPayPalMarks.vue.d.ts +0 -52
  294. package/dist/runtime/validation/mock.d.ts +0 -42
  295. package/dist/runtime/validation/mock.js +0 -21
  296. package/dist/runtime/validation/valibot.d.ts +0 -1
  297. package/dist/runtime/validation/valibot.js +0 -1
  298. /package/dist/{client → devtools-client}/_nuxt/CVO1_9PV.js +0 -0
  299. /package/dist/{client → devtools-client}/_nuxt/Cp-IABpG.js +0 -0
  300. /package/dist/{client → devtools-client}/_nuxt/D0r3Knsf.js +0 -0
@@ -0,0 +1,19 @@
1
+ import { createError, defineEventHandler } from "h3";
2
+ import { useRuntimeConfig } from "nitropack/runtime";
3
+ import { verifyProxyRequest } from "./sign.js";
4
+ export function withSigning(handler) {
5
+ return defineEventHandler(async (event) => {
6
+ const runtimeConfig = useRuntimeConfig(event);
7
+ const scriptsConfig = runtimeConfig["nuxt-scripts"];
8
+ const secret = scriptsConfig?.proxySecret;
9
+ if (!secret)
10
+ return handler(event);
11
+ if (!verifyProxyRequest(event, secret, scriptsConfig?.pageTokenMaxAge)) {
12
+ throw createError({
13
+ statusCode: 403,
14
+ statusMessage: "Invalid signature"
15
+ });
16
+ }
17
+ return handler(event);
18
+ });
19
+ }
@@ -1,2 +1,2 @@
1
- declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<any>>;
1
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<Buffer<ArrayBufferLike>>>;
2
2
  export default _default;
@@ -1,53 +1,9 @@
1
- import { createError, defineEventHandler, getQuery, setHeader } from "h3";
2
- import { $fetch } from "ofetch";
3
- export default defineEventHandler(async (event) => {
4
- const query = getQuery(event);
5
- const url = query.url;
6
- if (!url) {
7
- throw createError({
8
- statusCode: 400,
9
- statusMessage: "Image URL is required"
10
- });
11
- }
12
- let parsedUrl;
13
- try {
14
- parsedUrl = new URL(url);
15
- } catch {
16
- throw createError({
17
- statusCode: 400,
18
- statusMessage: "Invalid image URL"
19
- });
20
- }
21
- if (parsedUrl.protocol !== "http:" && parsedUrl.protocol !== "https:") {
22
- throw createError({
23
- statusCode: 400,
24
- statusMessage: "Invalid URL scheme"
25
- });
26
- }
27
- const allowedDomains = [
1
+ import { createImageProxyHandler } from "./utils/image-proxy.js";
2
+ export default createImageProxyHandler({
3
+ allowedDomains: [
28
4
  "pbs.twimg.com",
29
5
  "abs.twimg.com",
30
6
  "video.twimg.com"
31
- ];
32
- if (!allowedDomains.includes(parsedUrl.hostname)) {
33
- throw createError({
34
- statusCode: 403,
35
- statusMessage: "Domain not allowed"
36
- });
37
- }
38
- const response = await $fetch.raw(url, {
39
- timeout: 5e3,
40
- headers: {
41
- "Accept": "image/webp,image/jpeg,image/png,image/*,*/*;q=0.8",
42
- "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36"
43
- }
44
- }).catch((error) => {
45
- throw createError({
46
- statusCode: error.statusCode || 500,
47
- statusMessage: error.statusMessage || "Failed to fetch image"
48
- });
49
- });
50
- setHeader(event, "Content-Type", response.headers.get("content-type") || "image/jpeg");
51
- setHeader(event, "Cache-Control", "public, max-age=3600, s-maxage=3600");
52
- return response._data;
7
+ ],
8
+ userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36"
53
9
  });
@@ -1,17 +1,31 @@
1
1
  import { createError, defineEventHandler, getQuery, setHeader } from "h3";
2
- import { $fetch } from "ofetch";
3
- export default defineEventHandler(async (event) => {
2
+ import { useRuntimeConfig } from "nitropack/runtime";
3
+ import { createCachedJsonFetch } from "./utils/cached-upstream.js";
4
+ import { rewriteTweetImages } from "./utils/embed-rewriters.js";
5
+ import { withSigning } from "./utils/withSigning.js";
6
+ const TWEET_ID_RE = /^\d+$/;
7
+ const EMBED_X_SUFFIX_RE = /\/embed\/x$/;
8
+ const TWEET_ID_FROM_URL_RE = /[?&]id=(\d+)/;
9
+ const cachedTweetFetch = createCachedJsonFetch(
10
+ "nuxt-scripts-x-tweet",
11
+ 600,
12
+ (url) => {
13
+ const match = url.match(TWEET_ID_FROM_URL_RE);
14
+ return match?.[1] || url;
15
+ }
16
+ );
17
+ export default withSigning(defineEventHandler(async (event) => {
4
18
  const query = getQuery(event);
5
19
  const tweetId = query.id;
6
- if (!tweetId || !/^\d+$/.test(tweetId)) {
20
+ if (!tweetId || !TWEET_ID_RE.test(tweetId)) {
7
21
  throw createError({
8
22
  statusCode: 400,
9
23
  statusMessage: "Valid Tweet ID is required"
10
24
  });
11
25
  }
12
- const randomToken = [...Array(11)].map(() => (Math.random() * 36).toString(36)[2]).join("");
26
+ const randomToken = Array.from(Array.from({ length: 11 }), () => (Math.random() * 36).toString(36)[2]).join("");
13
27
  const params = new URLSearchParams({ id: tweetId, token: randomToken });
14
- const tweetData = await $fetch(
28
+ const tweetRaw = await cachedTweetFetch(
15
29
  `https://cdn.syndication.twimg.com/tweet-result?${params.toString()}`,
16
30
  {
17
31
  headers: {
@@ -25,7 +39,13 @@ export default defineEventHandler(async (event) => {
25
39
  statusMessage: error.statusMessage || "Failed to fetch tweet"
26
40
  });
27
41
  });
42
+ const tweetData = structuredClone(tweetRaw);
43
+ const handlerPath = event.path?.split("?")[0] || "";
44
+ const prefix = handlerPath.replace(EMBED_X_SUFFIX_RE, "") || "/_scripts";
45
+ const imagePath = `${prefix}/embed/x-image`;
46
+ const secret = useRuntimeConfig(event)["nuxt-scripts"]?.proxySecret;
47
+ rewriteTweetImages(tweetData, imagePath, secret);
28
48
  setHeader(event, "Content-Type", "application/json");
29
49
  setHeader(event, "Cache-Control", "public, max-age=600, s-maxage=600");
30
50
  return tweetData;
31
- });
51
+ }));
@@ -1,44 +1,78 @@
1
+ import type { UseScriptInput, UseScriptOptions, VueScriptInstance } from '@unhead/vue';
1
2
  import type { Script } from '@unhead/vue/types';
2
- import type { UseScriptInput, VueScriptInstance, UseScriptOptions } from '@unhead/vue';
3
- import type { ComputedRef, Ref } from 'vue';
4
- import type { InferInput, ObjectSchema, ValiError } from 'valibot';
5
3
  import type { Import } from 'unimport';
6
- import type { SegmentInput } from './registry/segment.js';
4
+ import type { InferInput, ObjectEntries, ObjectSchema, UnionSchema, ValiError } from 'valibot';
5
+ import type { ComputedRef, Ref } from 'vue';
6
+ import type { BingUetInput } from './registry/bing-uet.js';
7
+ import type { BlueskyEmbedInput } from './registry/bluesky-embed.js';
8
+ import type { ClarityInput } from './registry/clarity.js';
7
9
  import type { CloudflareWebAnalyticsInput } from './registry/cloudflare-web-analytics.js';
10
+ import type { CrispInput } from './registry/crisp.js';
8
11
  import type { DatabuddyAnalyticsInput } from './registry/databuddy-analytics.js';
9
- import type { MetaPixelInput } from './registry/meta-pixel.js';
10
12
  import type { FathomAnalyticsInput } from './registry/fathom-analytics.js';
13
+ import type { GoogleAdsenseInput } from './registry/google-adsense.js';
14
+ import type { GoogleAnalyticsInput } from './registry/google-analytics.js';
15
+ import type { GoogleMapsInput } from './registry/google-maps.js';
16
+ import type { GoogleRecaptchaInput } from './registry/google-recaptcha.js';
17
+ import type { GoogleSignInInput } from './registry/google-sign-in.js';
18
+ import type { GoogleTagManagerInput } from './registry/google-tag-manager.js';
19
+ import type { GravatarInput } from './registry/gravatar.js';
11
20
  import type { HotjarInput } from './registry/hotjar.js';
21
+ import type { InstagramEmbedInput } from './registry/instagram-embed.js';
12
22
  import type { IntercomInput } from './registry/intercom.js';
13
- import type { GoogleMapsInput } from './registry/google-maps.js';
23
+ import type { LemonSqueezyInput } from './registry/lemon-squeezy.js';
14
24
  import type { MatomoAnalyticsInput } from './registry/matomo-analytics.js';
15
- import type { StripeInput } from './registry/stripe.js';
16
- import type { VimeoPlayerInput } from './registry/vimeo-player.js';
17
- import type { XPixelInput } from './registry/x-pixel.js';
18
- import type { SnapTrPixelInput } from './registry/snapchat-pixel.js';
19
- import type { YouTubePlayerInput } from './registry/youtube-player.js';
20
- import type { PlausibleAnalyticsInput } from './registry/plausible-analytics.js';
25
+ import type { MetaPixelInput } from './registry/meta-pixel.js';
26
+ import type { MixpanelAnalyticsInput } from './registry/mixpanel-analytics.js';
21
27
  import type { NpmInput } from './registry/npm.js';
22
- import type { LemonSqueezyInput } from './registry/lemon-squeezy.js';
23
- import type { GoogleAdsenseInput } from './registry/google-adsense.js';
24
- import type { ClarityInput } from './registry/clarity.js';
25
- import type { CrispInput } from './registry/crisp.js';
26
- import type { GoogleAnalyticsInput } from './registry/google-analytics.js';
27
- import type { GoogleTagManagerInput } from './registry/google-tag-manager.js';
28
- import type { UmamiAnalyticsInput } from './registry/umami-analytics.js';
29
- import type { RybbitAnalyticsInput } from './registry/rybbit-analytics.js';
30
- import type { RedditPixelInput } from './registry/reddit-pixel.js';
31
28
  import type { PayPalInput } from './registry/paypal.js';
29
+ import type { PlausibleAnalyticsInput } from './registry/plausible-analytics.js';
32
30
  import type { PostHogInput } from './registry/posthog.js';
33
- import type { GoogleRecaptchaInput } from './registry/google-recaptcha.js';
31
+ import type { RedditPixelInput } from './registry/reddit-pixel.js';
32
+ import type { RybbitAnalyticsInput } from './registry/rybbit-analytics.js';
33
+ import type { SegmentInput } from './registry/segment.js';
34
+ import type { SnapTrPixelInput } from './registry/snapchat-pixel.js';
35
+ import type { StripeInput } from './registry/stripe.js';
34
36
  import type { TikTokPixelInput } from './registry/tiktok-pixel.js';
37
+ import type { UmamiAnalyticsInput } from './registry/umami-analytics.js';
38
+ import type { VercelAnalyticsInput } from './registry/vercel-analytics.js';
39
+ import type { VimeoPlayerInput } from './registry/vimeo-player.js';
40
+ import type { XEmbedInput } from './registry/x-embed.js';
41
+ import type { XPixelInput } from './registry/x-pixel.js';
42
+ import type { YouTubePlayerInput } from './registry/youtube-player.js';
43
+ import type { ProxyPrivacyInput } from './server/utils/privacy.js';
44
+ export type { Cluster, ClusterStats, MarkerClustererContext, MarkerClustererInstance, MarkerClustererOptions } from './components/GoogleMaps/types.js';
45
+ export { MARKER_CLUSTERER_INJECTION_KEY } from './components/GoogleMaps/types.js';
35
46
  export type WarmupStrategy = false | 'preload' | 'preconnect' | 'dns-prefetch';
36
- export type UseScriptContext<T extends Record<symbol | string, any>> = VueScriptInstance<T> & {
47
+ /**
48
+ * GCMv2 consent category value.
49
+ * @see https://developers.google.com/tag-platform/security/guides/consent
50
+ */
51
+ export type ConsentCategoryValue = 'granted' | 'denied';
52
+ /**
53
+ * Canonical GCMv2 consent state shape used by vendors that natively consume
54
+ * Consent Mode v2 (Google Analytics, Google Tag Manager, Bing UET).
55
+ */
56
+ export interface ConsentState {
57
+ ad_storage?: ConsentCategoryValue;
58
+ ad_user_data?: ConsentCategoryValue;
59
+ ad_personalization?: ConsentCategoryValue;
60
+ analytics_storage?: ConsentCategoryValue;
61
+ functionality_storage?: ConsentCategoryValue;
62
+ personalization_storage?: ConsentCategoryValue;
63
+ security_storage?: ConsentCategoryValue;
64
+ }
65
+ export type UseScriptContext<T extends Record<symbol | string, any>, C = unknown> = VueScriptInstance<T> & {
37
66
  /**
38
67
  * Remove and reload the script. Useful for scripts that need to re-execute
39
68
  * after SPA navigation (e.g., DOM-scanning scripts like iubenda).
40
69
  */
41
70
  reload: () => Promise<T>;
71
+ /**
72
+ * Vendor-native consent controls attached by registry scripts.
73
+ * Shape depends on the vendor (GCMv2 update, binary grant/revoke, three-state, etc.).
74
+ */
75
+ consent?: C;
42
76
  };
43
77
  export type NuxtUseScriptOptions<T extends Record<symbol | string, any> = {}> = Omit<UseScriptOptions<T>, 'trigger'> & {
44
78
  /**
@@ -58,16 +92,16 @@ export type NuxtUseScriptOptions<T extends Record<symbol | string, any> = {}> =
58
92
  *
59
93
  * Note: Using 'force' may significantly increase build time as scripts will be re-downloaded on every build.
60
94
  *
61
- * @deprecated Use `scripts.firstParty: true` in nuxt.config instead for bundling and routing scripts through your domain.
95
+ * @deprecated Bundling is now auto-enabled per-script via capabilities. Set `bundle: false` per-script to disable.
62
96
  */
63
97
  bundle?: boolean | 'force';
64
98
  /**
65
- * Opt-out of first-party routing for this specific script when global `scripts.firstParty` is enabled.
66
- * Set to `false` to load this script directly from its original source instead of through your domain.
67
- *
68
- * Note: This option only works as an opt-out. To enable first-party routing, use the global `scripts.firstParty` option in nuxt.config.
99
+ * Control proxying for this script.
100
+ * When `false`, collection requests go directly to the third-party server.
101
+ * When `true`, collection requests are proxied through `/_scripts/p/`.
102
+ * Defaults based on whether the script has a `proxy` capability in the registry.
69
103
  */
70
- firstParty?: false;
104
+ proxy?: boolean;
71
105
  /**
72
106
  * Load the script in a web worker using Partytown.
73
107
  * When enabled, adds `type="text/partytown"` to the script tag.
@@ -104,6 +138,11 @@ export type NuxtUseScriptOptions<T extends Record<symbol | string, any> = {}> =
104
138
  * @internal
105
139
  */
106
140
  registryMeta?: Record<string, string>;
141
+ /**
142
+ * Known third-party domains this script communicates with.
143
+ * @internal
144
+ */
145
+ domains?: string[];
107
146
  };
108
147
  /**
109
148
  * @internal
@@ -137,10 +176,26 @@ export interface ConsentScriptTriggerOptions {
137
176
  */
138
177
  postConsentTrigger?: ExcludePromises<NuxtUseScriptOptions['trigger']> | (() => Promise<any>);
139
178
  }
179
+ export interface NuxtDevToolsNetworkRequest {
180
+ url: string;
181
+ startTime: number;
182
+ duration: number;
183
+ transferSize: number;
184
+ encodedBodySize: number;
185
+ decodedBodySize: number;
186
+ initiatorType: string;
187
+ dns: number;
188
+ connect: number;
189
+ ssl: number;
190
+ ttfb: number;
191
+ download: number;
192
+ isProxied: boolean;
193
+ }
140
194
  export interface NuxtDevToolsScriptInstance {
141
195
  registryKey?: string;
142
196
  registryMeta?: Record<string, string>;
143
197
  src: string;
198
+ domains?: string[];
144
199
  $script: VueScriptInstance<any>;
145
200
  events: {
146
201
  type: string;
@@ -150,19 +205,25 @@ export interface NuxtDevToolsScriptInstance {
150
205
  trigger?: NuxtUseScriptOptions['trigger'];
151
206
  at: number;
152
207
  }[];
208
+ networkRequests: NuxtDevToolsNetworkRequest[];
153
209
  }
154
210
  export interface ScriptRegistry {
211
+ bingUet?: BingUetInput;
212
+ blueskyEmbed?: BlueskyEmbedInput;
213
+ carbonAds?: true;
155
214
  crisp?: CrispInput;
156
215
  clarity?: ClarityInput;
157
216
  cloudflareWebAnalytics?: CloudflareWebAnalyticsInput;
158
217
  databuddyAnalytics?: DatabuddyAnalyticsInput;
159
218
  metaPixel?: MetaPixelInput;
160
219
  fathomAnalytics?: FathomAnalyticsInput;
220
+ instagramEmbed?: InstagramEmbedInput;
161
221
  plausibleAnalytics?: PlausibleAnalyticsInput;
162
222
  googleAdsense?: GoogleAdsenseInput;
163
223
  googleAnalytics?: GoogleAnalyticsInput;
164
224
  googleMaps?: GoogleMapsInput;
165
225
  googleRecaptcha?: GoogleRecaptchaInput;
226
+ googleSignIn?: GoogleSignInInput;
166
227
  lemonSqueezy?: LemonSqueezyInput;
167
228
  googleTagManager?: GoogleTagManagerInput;
168
229
  hotjar?: HotjarInput;
@@ -170,58 +231,163 @@ export interface ScriptRegistry {
170
231
  paypal?: PayPalInput;
171
232
  posthog?: PostHogInput;
172
233
  matomoAnalytics?: MatomoAnalyticsInput;
234
+ mixpanelAnalytics?: MixpanelAnalyticsInput;
173
235
  rybbitAnalytics?: RybbitAnalyticsInput;
174
236
  redditPixel?: RedditPixelInput;
175
237
  segment?: SegmentInput;
176
238
  stripe?: StripeInput;
177
239
  tiktokPixel?: TikTokPixelInput;
240
+ xEmbed?: XEmbedInput;
178
241
  xPixel?: XPixelInput;
179
242
  snapchatPixel?: SnapTrPixelInput;
180
243
  youtubePlayer?: YouTubePlayerInput;
244
+ vercelAnalytics?: VercelAnalyticsInput;
181
245
  vimeoPlayer?: VimeoPlayerInput;
182
246
  umamiAnalytics?: UmamiAnalyticsInput;
247
+ gravatar?: GravatarInput;
248
+ npm?: NpmInput;
183
249
  [key: `${string}-npm`]: NpmInput;
184
250
  }
185
- export type NuxtConfigScriptRegistryEntry<T> = true | 'mock' | T | [T, NuxtUseScriptOptionsSerializable];
186
- export type NuxtConfigScriptRegistry<T extends keyof ScriptRegistry = keyof ScriptRegistry> = Partial<{
187
- [key in T]: NuxtConfigScriptRegistryEntry<ScriptRegistry[key]>;
188
- }>;
251
+ /**
252
+ * Built-in registry script keys not affected by module augmentation.
253
+ * Use this to type-check records that must enumerate all built-in scripts (logos, meta, etc.).
254
+ */
255
+ export type BuiltInRegistryScriptKey = 'bingUet' | 'blueskyEmbed' | 'carbonAds' | 'crisp' | 'clarity' | 'cloudflareWebAnalytics' | 'databuddyAnalytics' | 'metaPixel' | 'fathomAnalytics' | 'instagramEmbed' | 'plausibleAnalytics' | 'googleAdsense' | 'googleAnalytics' | 'googleMaps' | 'googleRecaptcha' | 'googleSignIn' | 'lemonSqueezy' | 'googleTagManager' | 'hotjar' | 'intercom' | 'paypal' | 'posthog' | 'matomoAnalytics' | 'mixpanelAnalytics' | 'rybbitAnalytics' | 'redditPixel' | 'segment' | 'stripe' | 'tiktokPixel' | 'xEmbed' | 'xPixel' | 'snapchatPixel' | 'youtubePlayer' | 'vercelAnalytics' | 'vimeoPlayer' | 'umamiAnalytics' | 'gravatar' | 'npm';
256
+ /**
257
+ * Union of all explicit registry script keys (excludes npm pattern).
258
+ * Includes both built-in and augmented keys.
259
+ */
260
+ export type RegistryScriptKey = Exclude<keyof ScriptRegistry, `${string}-npm`>;
261
+ type RegistryConfigInput<T> = 0 extends 1 & T ? Record<string, any> : [T] extends [true] ? Record<string, never> : T;
262
+ export type NuxtConfigScriptRegistryEntry<T> = true | false | 'mock' | (RegistryConfigInput<T> & {
263
+ trigger?: NuxtUseScriptOptionsSerializable['trigger'] | false;
264
+ proxy?: boolean;
265
+ bundle?: boolean;
266
+ partytown?: boolean;
267
+ privacy?: ProxyPrivacyInput;
268
+ });
269
+ type _NuxtConfigScriptRegistryEntries = {
270
+ [K in keyof ScriptRegistry as K extends `${string}-npm` ? never : K]?: NuxtConfigScriptRegistryEntry<ScriptRegistry[K]>;
271
+ };
272
+ export interface NuxtConfigScriptRegistry extends _NuxtConfigScriptRegistryEntries {
273
+ [key: string]: any;
274
+ }
189
275
  export type UseFunctionType<T, U> = T extends {
190
276
  use: infer V;
191
277
  } ? V extends (...args: any) => any ? ReturnType<V> : U : U;
192
- declare const _emptyOptions: ObjectSchema<{}, undefined>;
193
- export type EmptyOptionsSchema = typeof _emptyOptions;
278
+ export type EmptyOptionsSchema = ObjectSchema<ObjectEntries, undefined>;
194
279
  type ScriptInput = Script;
195
- export type InferIfSchema<T> = T extends ObjectSchema<any, any> ? InferInput<T> : T;
196
- export type RegistryScriptInput<T = EmptyOptionsSchema, Bundelable extends boolean = true, Usable extends boolean = false, CanBypassOptions extends boolean = true> = (InferIfSchema<T> & {
280
+ export type InferIfSchema<T> = T extends ObjectSchema<any, any> | UnionSchema<any, any> ? InferInput<T> : T;
281
+ export interface RegistryScriptInputExtras<Bundelable extends boolean = true, Usable extends boolean = false> {
197
282
  /**
198
283
  * A unique key to use for the script, this can be used to load multiple of the same script with different options.
199
284
  */
200
285
  key?: string;
201
286
  scriptInput?: ScriptInput;
202
287
  scriptOptions?: Omit<NuxtUseScriptOptions, Bundelable extends true ? '' : 'bundle' | Usable extends true ? '' : 'use'>;
203
- }) | Partial<InferIfSchema<T>> & (CanBypassOptions extends true ? {
288
+ }
289
+ export type RegistryScriptInput<T = EmptyOptionsSchema, Bundelable extends boolean = true, Usable extends boolean = false> = Partial<InferIfSchema<T>> & RegistryScriptInputExtras<Bundelable, Usable>;
290
+ export interface RegistryScriptServerHandler {
291
+ route: string;
292
+ handler: string;
293
+ middleware?: boolean;
204
294
  /**
205
- * A unique key to use for the script, this can be used to load multiple of the same script with different options.
295
+ * Whether this handler verifies HMAC signatures via `withSigning()`.
296
+ *
297
+ * When any enabled script registers a handler with `requiresSigning: true`,
298
+ * the module enforces that `NUXT_SCRIPTS_PROXY_SECRET` is set in production,
299
+ * and the `/_scripts/sign` endpoint will accept this route as a signable path.
206
300
  */
207
- key?: string;
208
- scriptInput: Required<Pick<ScriptInput, 'src'>> & ScriptInput;
209
- scriptOptions?: Omit<NuxtUseScriptOptions, Bundelable extends true ? '' : 'bundle' | Usable extends true ? '' : 'use'>;
210
- } : never);
301
+ requiresSigning?: boolean;
302
+ }
303
+ /**
304
+ * Declares what optimization modes a script supports and what's active by default.
305
+ * Each flag is an independent capability that must be explicitly opted into.
306
+ */
307
+ export interface ScriptCapabilities {
308
+ /** Script can be downloaded at build time and served from `/_scripts/assets/`. */
309
+ bundle?: boolean;
310
+ /**
311
+ * Collection requests can be proxied through `/_scripts/p/`.
312
+ * When combined with `bundle`: AST URL rewriting + runtime intercept.
313
+ * Without `bundle` (npm mode): autoInject sets SDK endpoint to proxy URL.
314
+ */
315
+ proxy?: boolean;
316
+ /** Script can run in a web worker via Partytown. */
317
+ partytown?: boolean;
318
+ }
319
+ /**
320
+ * A third-party domain the script communicates with.
321
+ * Used for proxy routing, AST rewriting, and connection warming (dns-prefetch/preconnect).
322
+ */
323
+ export interface ScriptDomain {
324
+ /** The domain hostname (e.g., 'www.google-analytics.com') */
325
+ domain: string;
326
+ /**
327
+ * Whether this domain is used lazily (e.g., only after user interaction or SDK initialization).
328
+ * When `true`, connection warming uses `dns-prefetch` instead of `preconnect`.
329
+ * @default false
330
+ */
331
+ lazy?: boolean;
332
+ }
333
+ /**
334
+ * Bundle capability config. When present, the script can be downloaded at
335
+ * build time and served from `/_scripts/assets/`.
336
+ */
337
+ export interface BundleCapability {
338
+ /** Custom URL resolution. If omitted, the script's `src` is used. */
339
+ resolve?: (options?: any) => string | false;
340
+ }
341
+ /**
342
+ * Proxy capability config. When present, collection requests can be
343
+ * proxied through `/_scripts/p/`.
344
+ * When combined with bundle: AST URL rewriting + runtime intercept.
345
+ * Without bundle (npm/config mode): autoInject sets SDK endpoint to proxy URL.
346
+ */
347
+ export interface ProxyCapability {
348
+ /** Third-party domains this script communicates with. */
349
+ domains: (string | ScriptDomain)[];
350
+ /** Privacy controls for proxied requests. */
351
+ privacy: import('../runtime/server/utils/privacy').ProxyPrivacyInput;
352
+ /** Auto-inject proxy endpoint into the script's SDK config. */
353
+ autoInject?: ProxyAutoInject;
354
+ /** AST-level SDK patches applied during URL rewriting. */
355
+ sdkPatches?: SdkPatch[];
356
+ }
357
+ /**
358
+ * Declarative SDK patch applied during AST rewriting.
359
+ * Replaces fragile regex-based postProcess with targeted AST visitors.
360
+ */
361
+ export type SdkPatch = {
362
+ type: 'neutralize-domain-check';
363
+ }
364
+ /**
365
+ * Replace `<expr>.split("<separator>")[0]` patterns used by SDKs that derive
366
+ * their API host from `document.currentScript.src`. When bundled, the script src
367
+ * changes, breaking this derivation. This patch replaces the expression with
368
+ * the correct proxy path.
369
+ */
370
+ | {
371
+ type: 'replace-src-split';
372
+ separator: string;
373
+ fromDomain: string;
374
+ appendPath?: string;
375
+ };
376
+ /**
377
+ * Partytown capability config. When present, the script can run in a
378
+ * web worker via Partytown.
379
+ */
380
+ export interface PartytownCapability {
381
+ /** Global API forward declarations for Partytown. */
382
+ forwards: string[];
383
+ }
211
384
  export interface RegistryScript {
212
- import?: Import;
213
- scriptBundling?: false | ((options?: any) => string | false);
214
385
  /**
215
- * First-party routing configuration for this script.
216
- * - `string` - The proxy config key to use (e.g., 'googleAnalytics', 'metaPixel')
217
- * - `false` - Explicitly disable first-party routing for this script
218
- * - `undefined` - Use the default key derived from the function name
219
- *
220
- * When set to a string, the script's URLs will be rewritten and collection
221
- * endpoints will be routed through your server when `scripts.firstParty` is enabled.
222
- * @internal
386
+ * The config key used in `scripts.registry` in nuxt.config (e.g., 'googleAnalytics', 'plausibleAnalytics').
387
+ * Used for direct lookup from config to script.
223
388
  */
224
- proxy?: string | false;
389
+ registryKey?: RegistryScriptKey;
390
+ import?: Import;
225
391
  label?: string;
226
392
  src?: string | false;
227
393
  category?: string;
@@ -229,7 +395,97 @@ export interface RegistryScript {
229
395
  light: string;
230
396
  dark: string;
231
397
  };
398
+ /** Server handlers (routes/middleware) to register when this script is enabled. */
399
+ serverHandlers?: RegistryScriptServerHandler[];
400
+ /** Valibot schema for the script's input options. */
401
+ schema?: ObjectSchema<ObjectEntries, any>;
402
+ /** Default env var field names and values for NUXT_PUBLIC_SCRIPTS_<SCRIPT>_<KEY> resolution. */
403
+ envDefaults?: Record<string, string>;
404
+ /**
405
+ * Bundle capability. Script can be downloaded at build time and served locally.
406
+ * - `true`: bundleable using the script's `src` URL
407
+ * - `{ resolve }`: bundleable with a custom URL resolution function
408
+ * - absent: not bundleable
409
+ */
410
+ bundle?: BundleCapability | true;
411
+ /**
412
+ * Proxy capability. Collection requests are proxied through `/_scripts/p/`.
413
+ * - `ProxyCapability`: proxy-capable with inline config (domains, privacy, etc.)
414
+ * - `RegistryScriptKey` string: alias, inherits proxy config from the referenced script
415
+ * - absent: not proxy-capable
416
+ */
417
+ proxy?: ProxyCapability | RegistryScriptKey;
418
+ /**
419
+ * Partytown capability. Script can run in a web worker via Partytown.
420
+ * - `PartytownCapability`: partytown-capable with forward declarations
421
+ * - absent: not partytown-capable
422
+ */
423
+ partytown?: PartytownCapability;
232
424
  }
233
425
  export type ElementScriptTrigger = 'immediate' | 'visible' | string | string[] | false;
234
426
  export type RegistryScripts = RegistryScript[];
235
- export {};
427
+ export interface ProxyRewrite {
428
+ /** Domain and path to match (e.g., 'www.google-analytics.com/g/collect') */
429
+ from: string;
430
+ /** Local path to rewrite to (e.g., '/_scripts/p/ga/g/collect') */
431
+ to: string;
432
+ }
433
+ /**
434
+ * Global privacy override for all proxied requests.
435
+ *
436
+ * By default (`undefined`), each script uses its own privacy controls declared in the registry.
437
+ * Setting this overrides all per-script defaults:
438
+ *
439
+ * - `true`: full anonymization (IP, UA, language, screen, timezone, hardware)
440
+ * - `false`: passthrough (still strips sensitive auth headers)
441
+ * - `{ ip: false }`: selective override per flag
442
+ */
443
+ export type FirstPartyPrivacy = ProxyPrivacyInput;
444
+ /**
445
+ * Auto-inject proxy endpoint into the script's SDK config.
446
+ * Used by scripts that let you configure the collection endpoint (PostHog, Plausible, etc.).
447
+ *
448
+ * Simple form: `{ field, target }` where target is appended to proxyPrefix.
449
+ * Complex form: `{ field, resolve }` for dynamic endpoint computation.
450
+ */
451
+ export interface ProxyAutoInject {
452
+ /** The config field name to set (e.g., 'apiHost', 'endpoint') */
453
+ field: string;
454
+ /** Domain and path appended to proxyPrefix. Sugar for `resolve: (p) => p + '/' + target`. */
455
+ target?: string;
456
+ /** Compute the proxy endpoint value from the proxyPrefix and script config. Use for dynamic logic (e.g., region-based endpoints). */
457
+ resolve?: (proxyPrefix: string, config: Record<string, any>) => string;
458
+ }
459
+ /**
460
+ * Resolved auto-inject config with a guaranteed computeValue function.
461
+ * Used in ProxyConfig output after normalization.
462
+ */
463
+ export interface ResolvedProxyAutoInject {
464
+ configField: string;
465
+ computeValue: (proxyPrefix: string, config: Record<string, any>) => string;
466
+ }
467
+ /**
468
+ * Proxy configuration for third-party scripts.
469
+ * Each supported script declares its domains, privacy controls, and optional SDK-specific hooks.
470
+ *
471
+ * The AST rewriter derives rewrite rules automatically from domains:
472
+ * { from: domain, to: proxyPrefix + '/' + domain }
473
+ *
474
+ * The runtime intercept plugin catches any remaining dynamic URLs at the
475
+ * fetch/sendBeacon/XHR/Image call site.
476
+ */
477
+ export interface ProxyConfig {
478
+ /** Third-party domains to proxy. AST rewrites are derived automatically. */
479
+ domains: string[];
480
+ /**
481
+ * Per-script privacy controls. Each script declares what it needs.
482
+ * - `true` (default) = full anonymize: IP, UA, language, screen, timezone, hardware fingerprints
483
+ * - `false` = passthrough (still strips sensitive auth headers)
484
+ * - `{ ip: false }` = selective (unset flags default to `false`)
485
+ */
486
+ privacy: ProxyPrivacyInput;
487
+ /** Auto-inject proxy endpoint config into the script's SDK options (resolved form) */
488
+ autoInject?: ResolvedProxyAutoInject;
489
+ /** AST-level SDK patches applied during URL rewriting. */
490
+ sdkPatches?: SdkPatch[];
491
+ }
@@ -1,2 +1 @@
1
- import { object } from "#nuxt-scripts-validator";
2
- const _emptyOptions = object({});
1
+ export { MARKER_CLUSTERER_INJECTION_KEY } from "./components/GoogleMaps/types.js";
@@ -4,6 +4,6 @@
4
4
  export interface ProxyRewrite {
5
5
  /** Domain and path to match (e.g., 'www.google-analytics.com/g/collect') */
6
6
  from: string;
7
- /** Local path to rewrite to (e.g., '/_scripts/c/ga/g/collect') */
7
+ /** Local path to rewrite to (e.g., '/_scripts/p/ga/g/collect') */
8
8
  to: string;
9
9
  }
@@ -1,6 +1,6 @@
1
- import type { ObjectSchema } from 'valibot';
1
+ import type { EmptyOptionsSchema, InferIfSchema, NuxtUseScriptOptions, RegistryScriptInput, ScriptRegistry, UseFunctionType, UseScriptContext } from '#nuxt-scripts/types';
2
2
  import type { UseScriptInput } from '@unhead/vue';
3
- import type { EmptyOptionsSchema, InferIfSchema, NuxtUseScriptOptions, RegistryScriptInput, UseFunctionType, ScriptRegistry, UseScriptContext } from '#nuxt-scripts/types';
3
+ import type { ObjectSchema, UnionSchema } from 'valibot';
4
4
  export type MaybePromise<T> = Promise<T> | T;
5
5
  type OptionsFn<O> = (options: InferIfSchema<O>, ctx: {
6
6
  scriptInput?: UseScriptInput & {
@@ -9,10 +9,12 @@ type OptionsFn<O> = (options: InferIfSchema<O>, ctx: {
9
9
  }) => ({
10
10
  scriptInput?: UseScriptInput;
11
11
  scriptOptions?: NuxtUseScriptOptions;
12
- schema?: O extends ObjectSchema<any, any> ? O : undefined;
12
+ schema?: O extends ObjectSchema<any, any> | UnionSchema<any, any> ? O : undefined;
13
13
  clientInit?: () => void | Promise<any>;
14
14
  scriptMode?: 'external' | 'npm';
15
15
  });
16
16
  export declare function scriptRuntimeConfig<T extends keyof ScriptRegistry>(key: T): ScriptRegistry[T];
17
+ export declare function scriptsPrefix(): string;
18
+ export declare function requireRegistryEndpoint(componentName: string, registryKey: string): void;
17
19
  export declare function useRegistryScript<T extends Record<string | symbol, any>, O = EmptyOptionsSchema>(registryKey: keyof ScriptRegistry | string, optionsFn: OptionsFn<O>, _userOptions?: RegistryScriptInput<O>): UseScriptContext<UseFunctionType<NuxtUseScriptOptions<T>, T>>;
18
- export * from './utils/pure.js';
20
+ export {};