@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,78 @@
1
+ import { createError, defineEventHandler, getQuery, setHeader } from "h3";
2
+ import { useRuntimeConfig } from "nitropack/runtime";
3
+ import { createCachedJsonFetch } from "./utils/cached-upstream.js";
4
+ import { rewriteBlueskyPostImages } from "./utils/embed-rewriters.js";
5
+ import { withSigning } from "./utils/withSigning.js";
6
+ const BSKY_POST_URL_RE = /^https:\/\/bsky\.app\/profile\/([^/]+)\/post\/([^/?]+)$/;
7
+ const EMBED_BSKY_SUFFIX_RE = /\/embed\/bluesky$/;
8
+ const cachedProfileFetch = createCachedJsonFetch(
9
+ "nuxt-scripts-bsky-profile",
10
+ 86400,
11
+ (url) => url
12
+ );
13
+ const cachedPostFetch = createCachedJsonFetch(
14
+ "nuxt-scripts-bsky-post",
15
+ 600,
16
+ (url) => url
17
+ );
18
+ export default withSigning(defineEventHandler(async (event) => {
19
+ const query = getQuery(event);
20
+ const postUrl = query.url;
21
+ if (!postUrl) {
22
+ throw createError({
23
+ statusCode: 400,
24
+ statusMessage: "Post URL is required"
25
+ });
26
+ }
27
+ const match = postUrl.match(BSKY_POST_URL_RE);
28
+ if (!match) {
29
+ throw createError({
30
+ statusCode: 400,
31
+ statusMessage: "Invalid Bluesky post URL"
32
+ });
33
+ }
34
+ const [, actor, rkey] = match;
35
+ let did = actor;
36
+ if (!actor.startsWith("did:")) {
37
+ const profile = await cachedProfileFetch(
38
+ `https://public.api.bsky.app/xrpc/app.bsky.actor.getProfile?actor=${encodeURIComponent(actor)}`
39
+ ).catch((error) => {
40
+ throw createError({
41
+ statusCode: error.statusCode || 500,
42
+ statusMessage: "Failed to resolve Bluesky handle"
43
+ });
44
+ });
45
+ did = profile.did;
46
+ }
47
+ const uri = `at://${did}/app.bsky.feed.post/${rkey}`;
48
+ const response = await cachedPostFetch(
49
+ `https://public.api.bsky.app/xrpc/app.bsky.feed.getPostThread?uri=${encodeURIComponent(uri)}&depth=0&parentHeight=0`
50
+ ).catch((error) => {
51
+ throw createError({
52
+ statusCode: error.statusCode || 500,
53
+ statusMessage: error.statusMessage || "Failed to fetch Bluesky post"
54
+ });
55
+ });
56
+ if (response.thread.$type !== "app.bsky.feed.defs#threadViewPost") {
57
+ throw createError({
58
+ statusCode: 404,
59
+ statusMessage: "Post not found"
60
+ });
61
+ }
62
+ const post = structuredClone(response.thread.post);
63
+ const hasOptOut = post.labels?.some((l) => l.val === "!no-unauthenticated") || post.author?.labels?.some((l) => l.val === "!no-unauthenticated");
64
+ if (hasOptOut) {
65
+ throw createError({
66
+ statusCode: 403,
67
+ statusMessage: "Author has opted out of external embedding"
68
+ });
69
+ }
70
+ const handlerPath = event.path?.split("?")[0] || "";
71
+ const prefix = handlerPath.replace(EMBED_BSKY_SUFFIX_RE, "") || "/_scripts";
72
+ const imagePath = `${prefix}/embed/bluesky-image`;
73
+ const secret = useRuntimeConfig(event)["nuxt-scripts"]?.proxySecret;
74
+ rewriteBlueskyPostImages(post, imagePath, secret);
75
+ setHeader(event, "Content-Type", "application/json");
76
+ setHeader(event, "Cache-Control", "public, max-age=600, s-maxage=600");
77
+ return post;
78
+ }));
@@ -0,0 +1,2 @@
1
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<any>>;
2
+ export default _default;
@@ -0,0 +1,38 @@
1
+ import { createError, defineEventHandler, getQuery, setHeader } from "h3";
2
+ import { useRuntimeConfig } from "nitropack/runtime";
3
+ import { withQuery } from "ufo";
4
+ import { createCachedJsonFetch } from "./utils/cached-upstream.js";
5
+ import { withSigning } from "./utils/withSigning.js";
6
+ const cachedGeocodeFetch = createCachedJsonFetch(
7
+ "nuxt-scripts-geocode",
8
+ 2592e3,
9
+ (url) => url
10
+ );
11
+ export default withSigning(defineEventHandler(async (event) => {
12
+ const runtimeConfig = useRuntimeConfig();
13
+ const privateConfig = runtimeConfig["nuxt-scripts"]?.googleMapsGeocodeProxy;
14
+ const apiKey = privateConfig?.apiKey;
15
+ if (!apiKey) {
16
+ throw createError({
17
+ statusCode: 500,
18
+ statusMessage: "Google Maps API key not configured for geocode proxy"
19
+ });
20
+ }
21
+ const query = getQuery(event);
22
+ const { key: _clientKey, ...safeQuery } = query;
23
+ const geocodeUrl = withQuery("https://maps.googleapis.com/maps/api/geocode/json", {
24
+ ...safeQuery,
25
+ key: apiKey
26
+ });
27
+ const data = await cachedGeocodeFetch(geocodeUrl, {
28
+ headers: { "User-Agent": "Nuxt Scripts Google Geocode Proxy" }
29
+ }).catch((error) => {
30
+ throw createError({
31
+ statusCode: error.statusCode || 500,
32
+ statusMessage: error.statusMessage || "Failed to geocode"
33
+ });
34
+ });
35
+ setHeader(event, "Content-Type", "application/json");
36
+ setHeader(event, "Cache-Control", "public, max-age=86400, s-maxage=86400");
37
+ return data;
38
+ }));
@@ -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,8 +1,12 @@
1
- import { createError, defineEventHandler, getHeader, getQuery, setHeader } from "h3";
2
- import { $fetch } from "ofetch";
1
+ import { createError, defineEventHandler, getQuery, setHeader } from "h3";
2
+ import { useRuntimeConfig } from "nitropack/runtime";
3
3
  import { withQuery } from "ufo";
4
- import { useRuntimeConfig } from "#imports";
5
- export default defineEventHandler(async (event) => {
4
+ import { createCachedBinaryFetch } from "./utils/cached-upstream.js";
5
+ import { PAGE_TOKEN_PARAM, PAGE_TOKEN_TS_PARAM, SIG_PARAM } from "./utils/sign-constants.js";
6
+ import { withSigning } from "./utils/withSigning.js";
7
+ const cachedMapFetch = createCachedBinaryFetch("nuxt-scripts-static-map", 604800);
8
+ const STRIP_PARAMS = /* @__PURE__ */ new Set([SIG_PARAM, PAGE_TOKEN_PARAM, PAGE_TOKEN_TS_PARAM, "key"]);
9
+ export default withSigning(defineEventHandler(async (event) => {
6
10
  const runtimeConfig = useRuntimeConfig();
7
11
  const publicConfig = runtimeConfig.public["nuxt-scripts"]?.googleStaticMapsProxy;
8
12
  const privateConfig = runtimeConfig["nuxt-scripts"]?.googleStaticMapsProxy;
@@ -19,27 +23,18 @@ export default defineEventHandler(async (event) => {
19
23
  statusMessage: "Google Maps API key not configured for proxy"
20
24
  });
21
25
  }
22
- const referer = getHeader(event, "referer");
23
- const host = getHeader(event, "host");
24
- if (referer && host) {
25
- const refererUrl = new URL(referer).host;
26
- if (refererUrl !== host) {
27
- throw createError({
28
- statusCode: 403,
29
- statusMessage: "Invalid referer"
30
- });
31
- }
32
- }
33
26
  const query = getQuery(event);
34
- const { key: _clientKey, ...safeQuery } = query;
27
+ const safeQuery = {};
28
+ for (const [k, v] of Object.entries(query)) {
29
+ if (!STRIP_PARAMS.has(k))
30
+ safeQuery[k] = v;
31
+ }
35
32
  const googleMapsUrl = withQuery("https://maps.googleapis.com/maps/api/staticmap", {
36
33
  ...safeQuery,
37
34
  key: apiKey
38
35
  });
39
- const response = await $fetch.raw(googleMapsUrl, {
40
- headers: {
41
- "User-Agent": "Nuxt Scripts Google Static Maps Proxy"
42
- }
36
+ const result = await cachedMapFetch(googleMapsUrl, {
37
+ headers: { "User-Agent": "Nuxt Scripts Google Static Maps Proxy" }
43
38
  }).catch((error) => {
44
39
  throw createError({
45
40
  statusCode: error.statusCode || 500,
@@ -47,8 +42,8 @@ export default defineEventHandler(async (event) => {
47
42
  });
48
43
  });
49
44
  const cacheMaxAge = publicConfig.cacheMaxAge || 3600;
50
- setHeader(event, "Content-Type", response.headers.get("content-type") || "image/png");
45
+ setHeader(event, "Content-Type", result.contentType || "image/png");
51
46
  setHeader(event, "Cache-Control", `public, max-age=${cacheMaxAge}, s-maxage=${cacheMaxAge}`);
52
47
  setHeader(event, "Vary", "Accept-Encoding");
53
- return response._data;
54
- });
48
+ return result.body;
49
+ }));
@@ -0,0 +1,2 @@
1
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<Buffer<ArrayBufferLike>>>;
2
+ export default _default;
@@ -0,0 +1,46 @@
1
+ import { createError, defineEventHandler, getQuery, setHeader } from "h3";
2
+ import { useRuntimeConfig } from "nitropack/runtime";
3
+ import { withQuery } from "ufo";
4
+ import { createCachedBinaryFetch } from "./utils/cached-upstream.js";
5
+ import { withSigning } from "./utils/withSigning.js";
6
+ const cachedGravatarFetch = createCachedBinaryFetch("nuxt-scripts-gravatar", 3600);
7
+ export default withSigning(defineEventHandler(async (event) => {
8
+ const runtimeConfig = useRuntimeConfig();
9
+ const proxyConfig = runtimeConfig.public["nuxt-scripts"]?.gravatarProxy;
10
+ const query = getQuery(event);
11
+ let hash = query.hash;
12
+ const email = query.email;
13
+ if (!hash && email) {
14
+ const encoder = new TextEncoder();
15
+ const data = encoder.encode(email.trim().toLowerCase());
16
+ const hashBuffer = await crypto.subtle.digest("SHA-256", data);
17
+ hash = Array.from(new Uint8Array(hashBuffer), (b) => b.toString(16).padStart(2, "0")).join("");
18
+ }
19
+ if (!hash) {
20
+ throw createError({
21
+ statusCode: 400,
22
+ statusMessage: "Either hash or email parameter is required"
23
+ });
24
+ }
25
+ const size = query.s || "80";
26
+ const defaultImg = query.d || "mp";
27
+ const rating = query.r || "g";
28
+ const gravatarUrl = withQuery(`https://www.gravatar.com/avatar/${hash}`, {
29
+ s: size,
30
+ d: defaultImg,
31
+ r: rating
32
+ });
33
+ const result = await cachedGravatarFetch(gravatarUrl, {
34
+ headers: { "User-Agent": "Nuxt Scripts Gravatar Proxy" }
35
+ }).catch((error) => {
36
+ throw createError({
37
+ statusCode: error.statusCode || 500,
38
+ statusMessage: error.statusMessage || "Failed to fetch Gravatar avatar"
39
+ });
40
+ });
41
+ const cacheMaxAge = proxyConfig?.cacheMaxAge ?? 3600;
42
+ setHeader(event, "Content-Type", result.contentType || "image/jpeg");
43
+ setHeader(event, "Cache-Control", `public, max-age=${cacheMaxAge}, s-maxage=${cacheMaxAge}`);
44
+ setHeader(event, "Vary", "Accept-Encoding");
45
+ return result.body;
46
+ }));
@@ -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,42 +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?.replace(/&amp;/g, "&");
6
- if (!url) {
7
- throw createError({
8
- statusCode: 400,
9
- statusMessage: "Asset 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 asset URL"
19
- });
20
- }
21
- if (parsedUrl.hostname !== "static.cdninstagram.com") {
22
- throw createError({
23
- statusCode: 403,
24
- statusMessage: "Domain not allowed"
25
- });
26
- }
27
- const response = await $fetch.raw(url, {
28
- headers: {
29
- "Accept": "*/*",
30
- "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"
31
- }
32
- }).catch((error) => {
33
- throw createError({
34
- statusCode: error.statusCode || 500,
35
- statusMessage: error.statusMessage || "Failed to fetch asset"
36
- });
37
- });
38
- const contentType = response.headers.get("content-type") || "application/octet-stream";
39
- setHeader(event, "Content-Type", contentType);
40
- setHeader(event, "Cache-Control", "public, max-age=86400, s-maxage=86400");
41
- return response._data;
1
+ import { createImageProxyHandler } from "./utils/image-proxy.js";
2
+ export default createImageProxyHandler({
3
+ allowedDomains: ["static.cdninstagram.com"],
4
+ accept: "*/*",
5
+ 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",
6
+ cacheMaxAge: 86400,
7
+ contentType: "application/octet-stream",
8
+ decodeAmpersands: true
42
9
  });
@@ -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,54 +1,7 @@
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?.replace(/&amp;/g, "&");
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
- if (!parsedUrl.hostname.endsWith(".cdninstagram.com") && parsedUrl.hostname !== "scontent.cdninstagram.com") {
28
- throw createError({
29
- statusCode: 403,
30
- statusMessage: "Domain not allowed"
31
- });
32
- }
33
- const response = await $fetch.raw(url, {
34
- redirect: "manual",
35
- headers: {
36
- "Accept": "image/webp,image/jpeg,image/png,image/*,*/*;q=0.8",
37
- "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"
38
- }
39
- }).catch((error) => {
40
- throw createError({
41
- statusCode: error.statusCode || 500,
42
- statusMessage: error.statusMessage || "Failed to fetch image"
43
- });
44
- });
45
- if (response.status >= 300 && response.status < 400) {
46
- throw createError({
47
- statusCode: 403,
48
- statusMessage: "Redirects not allowed"
49
- });
50
- }
51
- setHeader(event, "Content-Type", response.headers.get("content-type") || "image/jpeg");
52
- setHeader(event, "Cache-Control", "public, max-age=3600, s-maxage=3600");
53
- return response._data;
1
+ import { createImageProxyHandler } from "./utils/image-proxy.js";
2
+ export default createImageProxyHandler({
3
+ allowedDomains: (hostname) => hostname.endsWith(".cdninstagram.com") || hostname === "scontent.cdninstagram.com",
4
+ 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",
5
+ followRedirects: false,
6
+ decodeAmpersands: true
54
7
  });
@@ -1,2 +1,3 @@
1
+ export { proxyAssetUrl, proxyImageUrl, rewriteUrl, rewriteUrlsInText, scopeCss } from './utils/instagram-embed.js';
1
2
  declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<string>>;
2
3
  export default _default;
@@ -1,6 +1,33 @@
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 { ELEMENT_NODE, parse, renderSync, TEXT_NODE, walkSync } from "ultrahtml";
4
+ import { createCachedJsonFetch } from "./utils/cached-upstream.js";
5
+ import { proxyAssetUrl, rewriteUrl, rewriteUrlsInText, RSRC_RE, scopeCss } from "./utils/instagram-embed.js";
6
+ import { withSigning } from "./utils/withSigning.js";
7
+ export { proxyAssetUrl, proxyImageUrl, rewriteUrl, rewriteUrlsInText, scopeCss } from "./utils/instagram-embed.js";
8
+ const EMBED_INSTAGRAM_SUFFIX_RE = /\/embed\/instagram$/;
9
+ const SRCSET_SPLIT_RE = /\s+/;
10
+ const cachedEmbedFetch = createCachedJsonFetch(
11
+ "nuxt-scripts-instagram-embed",
12
+ 600,
13
+ (url) => url
14
+ );
15
+ const cachedCssFetch = createCachedJsonFetch(
16
+ "nuxt-scripts-instagram-css",
17
+ 86400,
18
+ (url) => url
19
+ );
20
+ function removeNode(node) {
21
+ node.type = TEXT_NODE;
22
+ node.value = "";
23
+ node.name = void 0;
24
+ node.attributes = {};
25
+ node.children = [];
26
+ }
27
+ export default withSigning(defineEventHandler(async (event) => {
28
+ const handlerPath = event.path?.split("?")[0] || "";
29
+ const prefix = handlerPath.replace(EMBED_INSTAGRAM_SUFFIX_RE, "") || "/_scripts";
30
+ const secret = useRuntimeConfig(event)["nuxt-scripts"]?.proxySecret;
4
31
  const query = getQuery(event);
5
32
  const postUrl = query.url;
6
33
  const captions = query.captions === "true";
@@ -27,11 +54,10 @@ export default defineEventHandler(async (event) => {
27
54
  }
28
55
  const pathname = parsedUrl.pathname.endsWith("/") ? parsedUrl.pathname : `${parsedUrl.pathname}/`;
29
56
  const cleanUrl = parsedUrl.origin + pathname;
30
- const embedUrl = cleanUrl + "embed/" + (captions ? "captioned/" : "");
31
- const html = await $fetch(embedUrl, {
57
+ const embedUrl = `${cleanUrl}embed/${captions ? "captioned/" : ""}`;
58
+ const html = await cachedEmbedFetch(embedUrl, {
32
59
  headers: {
33
60
  "Accept": "text/html",
34
- // Use simple UA - full Chrome UA triggers JS-heavy version without static content
35
61
  "User-Agent": "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
36
62
  }
37
63
  }).catch((error) => {
@@ -40,52 +66,68 @@ export default defineEventHandler(async (event) => {
40
66
  statusMessage: error.statusMessage || "Failed to fetch Instagram embed"
41
67
  });
42
68
  });
69
+ const ast = parse(html);
43
70
  const cssUrls = [];
44
- const linkRegex = /<link[^>]+rel=["']stylesheet["'][^>]+href=["']([^"']+)["'][^>]*>/gi;
45
- let match;
46
- while ((match = linkRegex.exec(html)) !== null) {
47
- if (match[1])
48
- cssUrls.push(match[1]);
49
- }
50
- const linkRegex2 = /<link[^>]+href=["']([^"']+)["'][^>]+rel=["']stylesheet["'][^>]*>/gi;
51
- while ((match = linkRegex2.exec(html)) !== null) {
52
- if (match[1])
53
- cssUrls.push(match[1]);
54
- }
71
+ walkSync(ast, (node) => {
72
+ if (node.type !== ELEMENT_NODE)
73
+ return;
74
+ if (node.name === "link" && node.attributes.rel === "stylesheet" && node.attributes.href) {
75
+ cssUrls.push(node.attributes.href);
76
+ removeNode(node);
77
+ return;
78
+ }
79
+ if (node.name === "script" || node.name === "noscript" || node.name === "style") {
80
+ removeNode(node);
81
+ return;
82
+ }
83
+ for (const attr of ["src", "poster"]) {
84
+ if (node.attributes[attr])
85
+ node.attributes[attr] = rewriteUrl(node.attributes[attr], prefix, secret);
86
+ }
87
+ if (node.attributes.srcset) {
88
+ node.attributes.srcset = node.attributes.srcset.split(",").map((entry) => {
89
+ const parts = entry.trim().split(SRCSET_SPLIT_RE);
90
+ const url = parts[0];
91
+ const descriptor = parts.slice(1).join(" ");
92
+ return url ? `${rewriteUrl(url, prefix, secret)}${descriptor ? ` ${descriptor}` : ""}` : entry;
93
+ }).join(", ");
94
+ }
95
+ if (node.attributes.style)
96
+ node.attributes.style = rewriteUrlsInText(node.attributes.style, prefix, secret);
97
+ });
98
+ walkSync(ast, (node) => {
99
+ if (node.type === TEXT_NODE && node.value)
100
+ node.value = rewriteUrlsInText(node.value, prefix, secret);
101
+ });
102
+ let bodyNode = null;
103
+ walkSync(ast, (node) => {
104
+ if (node.type === ELEMENT_NODE && node.name === "body")
105
+ bodyNode = node;
106
+ });
107
+ const bodyHtml = bodyNode ? bodyNode.children.map((child) => renderSync(child)).join("") : renderSync(ast);
55
108
  const cssContents = await Promise.all(
56
109
  cssUrls.map(
57
- (url) => $fetch(url, {
110
+ (url) => cachedCssFetch(url, {
58
111
  headers: { Accept: "text/css" }
59
112
  }).catch(() => "")
60
113
  )
61
114
  );
62
115
  let combinedCss = cssContents.join("\n");
63
116
  combinedCss = combinedCss.replace(
64
- /url\(\/rsrc\.php([^)]+)\)/g,
65
- (_m, path) => `url(/api/_scripts/instagram-embed-asset?url=${encodeURIComponent(`https://static.cdninstagram.com/rsrc.php${path}`)})`
117
+ RSRC_RE,
118
+ (_m, path) => `url(${proxyAssetUrl(`https://static.cdninstagram.com/rsrc.php${path}`, prefix, secret)})`
66
119
  );
120
+ combinedCss = rewriteUrlsInText(combinedCss, prefix, secret);
121
+ combinedCss = scopeCss(combinedCss, ".instagram-embed-root");
67
122
  const baseStyles = `
68
- html { background: white; max-width: 540px; width: calc(100% - 2px); border-radius: 3px; border: 1px solid rgb(219, 219, 219); display: block; margin: 0px 0px 12px; min-width: 326px; padding: 0px; }
69
- #splash-screen { display: none !important; }
70
- .Embed { opacity: 1 !important; visibility: visible !important; }
71
- .EmbeddedMedia, .EmbeddedMediaImage { display: block !important; visibility: visible !important; }
123
+ .instagram-embed-root { background: white; max-width: 540px; width: calc(100% - 2px); border-radius: 3px; border: 1px solid rgb(219, 219, 219); display: block; margin: 0px 0px 12px; min-width: 326px; padding: 0px; }
124
+ .instagram-embed-root #splash-screen { display: none !important; }
125
+ .instagram-embed-root .Embed { opacity: 1 !important; visibility: visible !important; }
126
+ .instagram-embed-root .EmbeddedMedia, .instagram-embed-root .EmbeddedMediaImage { display: block !important; visibility: visible !important; }
72
127
  `;
73
- let rewrittenHtml = html.replace(/<script[\s\S]*?<\/script>/gi, "").replace(/<link[^>]+rel=["']stylesheet["'][^>]*>/gi, "").replace(/<link[^>]+href=["'][^"']+\.css[^"']*["'][^>]*>/gi, "").replace(/<noscript>[\s\S]*?<\/noscript>/gi, "").replace(
74
- /https:\/\/scontent[^"'\s),]+\.cdninstagram\.com[^"'\s),]+/g,
75
- (m) => `/api/_scripts/instagram-embed-image?url=${encodeURIComponent(m.replace(/&amp;/g, "&"))}`
76
- ).replace(
77
- /https:\/\/static\.cdninstagram\.com[^"'\s),]+/g,
78
- (m) => `/api/_scripts/instagram-embed-asset?url=${encodeURIComponent(m.replace(/&amp;/g, "&"))}`
79
- ).replace(
80
- /https:\/\/lookaside\.instagram\.com[^"'\s),]+/g,
81
- (m) => `/api/_scripts/instagram-embed-image?url=${encodeURIComponent(m.replace(/&amp;/g, "&"))}`
82
- );
83
- rewrittenHtml = rewrittenHtml.replace(
84
- "</head>",
85
- `<style>${baseStyles}
86
- ${combinedCss}</style></head>`
87
- );
128
+ const result = `<div class="instagram-embed-root"><style>${baseStyles}
129
+ ${combinedCss}</style>${bodyHtml}</div>`;
88
130
  setHeader(event, "Content-Type", "text/html");
89
131
  setHeader(event, "Cache-Control", "public, max-age=600, s-maxage=600");
90
- return rewrittenHtml;
91
- });
132
+ return result;
133
+ }));