@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.
- package/bin/cli.mjs +2 -0
- package/dist/cli.d.mts +2 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.mjs +50 -0
- package/dist/devtools-client/200.html +1 -0
- package/dist/devtools-client/404.html +1 -0
- package/dist/devtools-client/_fonts/4ppnHhMi-pBsWSPo7mY0avYxlDoAg1N3PTzCwXLZ5rA-d9oibkGnTd1JL3tc_xnaVgBLYmOB8kjrK2cvZaqwj9s.woff2 +0 -0
- package/dist/devtools-client/_fonts/4qBuU9MRVUlPZNPSF7Xom_sK8RBEnfYu-9VXFrdq8A8-8TDwLE1HAj1sQn7XxVWtM_7sIaPM-DTdO3Pf8U2DF1U.woff2 +0 -0
- package/dist/devtools-client/_fonts/6dYsbWUd_BpKJ7mdDihgOcya1gHXLpJBuMYXux3WMjE-q3fYNS8YbW5n7ZeXI2vSNgkRWW5VDPKAl51SNTjG2qk.woff2 +0 -0
- package/dist/devtools-client/_fonts/Lr-hqqZZsYmCt0ITUlr1CUrWim9fsKvoDFZliMxgNHY-iTa_Yt_PzhOY9TX7ZXdSlEPim6iRt92xhECwaxWxd5w.woff2 +0 -0
- package/dist/devtools-client/_fonts/OknHvWI6KtYn1JQBzX7eSpNDBQ8520F9TvSUJYkVf6A-xeZn9253svK_8Q2LD0XEruY_MnEsuCRO5LenPoggC0Y.woff2 +0 -0
- package/dist/devtools-client/_fonts/PV2hrQG6wq5BlIPDjdL1IcOflycaghyt5MHzlBqZtlo-lb_WexLz3VZqfTN0oi554iBH5tT2j2UFEV-XErCAS3E.woff2 +0 -0
- package/dist/devtools-client/_fonts/UA7OtwYHwGN_HjcVGTdmiQxUit7FlqkCwxVUWSeXVnQ-B4OXCFOL_tWrYODpQTc07aMaj0c2cewTOmBRWR9tD-A.woff2 +0 -0
- package/dist/devtools-client/_fonts/VE4cDVCv5MxbFM7ZLoLCGbIpNd71zhp7MDI9lmN5Y7I-xZyDYCUVrd6LV8eVGF3Um3UZjBFuUtDGtvdyTBBRYBo.woff2 +0 -0
- package/dist/devtools-client/_fonts/fVoGbnMbBFd5L9BBp9fUPavUSkZ_EmsQNSyadkT-108-U4T0khaeLQSIhtt9eVvaCEKJjtWJ4ioRJOf8hvqkWY0.woff2 +0 -0
- package/dist/devtools-client/_fonts/lQAxeCEs1R0Lw-H9XRU1RlOARQN8J6npRsPjyEDMe5s-_DUSLEkO3tKTuun_gSnDLoQPVEnpOnyqZMOw0ByZ6PA.woff2 +0 -0
- package/dist/devtools-client/_fonts/lntlqNHKLV2n82yTwMde70QqOjcfLE2XJ5oKZ3vRPWc-z6TxpIZQdWXztWLr9_OFWqt_WJJoeGtuK_-XQMZGQwE.woff2 +0 -0
- package/dist/devtools-client/_fonts/qxAYvKsXWeYv731eb-h5TRurcdIP_W44mpNdX-HABAk-zUDeMEFlNtNbrwvT9JxLEBg0TphGy70O6RfIoIX_ZwU.woff2 +0 -0
- package/dist/devtools-client/_nuxt/B8PEiB0p.js +1 -0
- package/dist/devtools-client/_nuxt/BgPDxVUn.js +1 -0
- package/dist/devtools-client/_nuxt/BmlapxLP.js +1 -0
- package/dist/devtools-client/_nuxt/CM2vefXI.js +188 -0
- package/dist/devtools-client/_nuxt/DAF5Qk9P.js +1 -0
- package/dist/devtools-client/_nuxt/Dx6HhVmj.js +1 -0
- package/dist/devtools-client/_nuxt/S8LiR9M1.js +1 -0
- package/dist/devtools-client/_nuxt/builds/latest.json +1 -0
- package/dist/devtools-client/_nuxt/builds/meta/5458a3f2-af35-479c-8852-bf6f92fed611.json +1 -0
- package/dist/devtools-client/_nuxt/entry.BKkVrcJj.css +1 -0
- package/dist/devtools-client/_nuxt/error-404.d44aGwWI.css +1 -0
- package/dist/devtools-client/_nuxt/error-500.NthMfIEt.css +1 -0
- package/dist/devtools-client/_nuxt/first-party.C8Ha4JLM.css +1 -0
- package/dist/devtools-client/_nuxt/index.DZD1lwyI.css +1 -0
- package/dist/devtools-client/_nuxt/registry.B9lnjF_b.css +1 -0
- package/dist/devtools-client/_nuxt/vBkR1GJq.js +1 -0
- package/dist/devtools-client/_nuxt/wDzz0qaB.js +1 -0
- package/dist/devtools-client/docs/index.html +1 -0
- package/dist/devtools-client/first-party/index.html +1 -0
- package/dist/devtools-client/index.html +1 -0
- package/dist/devtools-client/registry/index.html +1 -0
- package/dist/module.d.mts +89 -80
- package/dist/module.d.ts +185 -0
- package/dist/module.json +1 -1
- package/dist/module.mjs +1056 -756
- package/dist/registry.d.mts +92 -4
- package/dist/registry.d.ts +94 -0
- package/dist/registry.mjs +668 -326
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.d.vue.ts +77 -165
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.vue +148 -227
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.vue.d.ts +77 -165
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.d.vue.ts +6 -55
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.vue +12 -83
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.vue.d.ts +6 -55
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsCircle.d.vue.ts +5 -1
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsCircle.vue +24 -38
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsCircle.vue.d.ts +5 -1
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsGeoJson.d.vue.ts +43 -0
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsGeoJson.vue +60 -0
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsGeoJson.vue.d.ts +43 -0
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.d.vue.ts +4 -0
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.vue +22 -26
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.vue.d.ts +4 -0
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsInfoWindow.d.vue.ts +11 -8
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsInfoWindow.vue +57 -57
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsInfoWindow.vue.d.ts +11 -8
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarker.d.vue.ts +24 -42
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarker.vue +71 -74
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarker.vue.d.ts +24 -42
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarkerClusterer.d.vue.ts +19 -20
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarkerClusterer.vue +85 -38
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarkerClusterer.vue.d.ts +19 -20
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsOverlayView.d.vue.ts +98 -0
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsOverlayView.vue +263 -0
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsOverlayView.vue.d.ts +98 -0
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPinElement.d.vue.ts +10 -3
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPinElement.vue +9 -41
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPinElement.vue.d.ts +10 -3
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolygon.d.vue.ts +7 -3
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolygon.vue +23 -38
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolygon.vue.d.ts +7 -3
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolyline.d.vue.ts +7 -3
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolyline.vue +23 -38
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolyline.vue.d.ts +7 -3
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsRectangle.d.vue.ts +7 -3
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsRectangle.vue +24 -38
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsRectangle.vue.d.ts +7 -3
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsStaticMap.d.vue.ts +200 -0
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsStaticMap.vue +170 -0
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsStaticMap.vue.d.ts +200 -0
- package/dist/runtime/components/GoogleMaps/bindGoogleMapsEvents.d.ts +13 -0
- package/dist/runtime/components/GoogleMaps/bindGoogleMapsEvents.js +8 -0
- package/dist/runtime/components/GoogleMaps/injectionKeys.d.ts +10 -0
- package/dist/runtime/components/GoogleMaps/injectionKeys.js +2 -0
- package/dist/runtime/components/GoogleMaps/types.d.ts +42 -0
- package/dist/runtime/components/GoogleMaps/types.js +1 -0
- package/dist/runtime/components/GoogleMaps/useGoogleMapsResource.d.ts +98 -0
- package/dist/runtime/components/GoogleMaps/useGoogleMapsResource.js +126 -0
- package/dist/runtime/components/ScriptBlueskyEmbed.d.vue.ts +83 -0
- package/dist/runtime/components/ScriptBlueskyEmbed.vue +91 -0
- package/dist/runtime/components/ScriptBlueskyEmbed.vue.d.ts +83 -0
- package/dist/runtime/components/ScriptCarbonAds.d.vue.ts +4 -7
- package/dist/runtime/components/ScriptCarbonAds.vue +1 -0
- package/dist/runtime/components/ScriptCarbonAds.vue.d.ts +4 -7
- package/dist/runtime/components/ScriptCrisp.d.vue.ts +7 -11
- package/dist/runtime/components/ScriptCrisp.vue +2 -1
- package/dist/runtime/components/ScriptCrisp.vue.d.ts +7 -11
- package/dist/runtime/components/ScriptGoogleAdsense.d.vue.ts +4 -7
- package/dist/runtime/components/ScriptGoogleAdsense.vue +2 -1
- package/dist/runtime/components/ScriptGoogleAdsense.vue.d.ts +4 -7
- package/dist/runtime/components/ScriptGravatar.d.vue.ts +22 -0
- package/dist/runtime/components/ScriptGravatar.vue +46 -0
- package/dist/runtime/components/ScriptGravatar.vue.d.ts +22 -0
- package/dist/runtime/components/ScriptInstagramEmbed.d.vue.ts +12 -15
- package/dist/runtime/components/ScriptInstagramEmbed.vue +11 -3
- package/dist/runtime/components/ScriptInstagramEmbed.vue.d.ts +12 -15
- package/dist/runtime/components/ScriptIntercom.d.vue.ts +7 -11
- package/dist/runtime/components/ScriptIntercom.vue +5 -3
- package/dist/runtime/components/ScriptIntercom.vue.d.ts +7 -11
- package/dist/runtime/components/ScriptLemonSqueezy.d.vue.ts +2 -3
- package/dist/runtime/components/ScriptLemonSqueezy.vue +1 -0
- package/dist/runtime/components/ScriptLemonSqueezy.vue.d.ts +2 -3
- package/dist/runtime/components/ScriptPayPalButtons.d.vue.ts +43 -37
- package/dist/runtime/components/ScriptPayPalButtons.vue +49 -79
- package/dist/runtime/components/ScriptPayPalButtons.vue.d.ts +43 -37
- package/dist/runtime/components/ScriptPayPalMessages.d.vue.ts +37 -28
- package/dist/runtime/components/ScriptPayPalMessages.vue +47 -50
- package/dist/runtime/components/ScriptPayPalMessages.vue.d.ts +37 -28
- package/dist/runtime/components/ScriptStripePricingTable.d.vue.ts +5 -9
- package/dist/runtime/components/ScriptStripePricingTable.vue +3 -2
- package/dist/runtime/components/ScriptStripePricingTable.vue.d.ts +5 -9
- package/dist/runtime/components/ScriptVimeoPlayer.d.vue.ts +17 -11
- package/dist/runtime/components/ScriptVimeoPlayer.vue +14 -10
- package/dist/runtime/components/ScriptVimeoPlayer.vue.d.ts +17 -11
- package/dist/runtime/components/ScriptXEmbed.d.vue.ts +10 -14
- package/dist/runtime/components/ScriptXEmbed.vue +21 -12
- package/dist/runtime/components/ScriptXEmbed.vue.d.ts +10 -14
- package/dist/runtime/components/ScriptYouTubePlayer.d.vue.ts +10 -15
- package/dist/runtime/components/ScriptYouTubePlayer.vue +12 -5
- package/dist/runtime/components/ScriptYouTubePlayer.vue.d.ts +10 -15
- package/dist/runtime/composables/useScript.js +159 -8
- package/dist/runtime/composables/useScriptEventPage.js +2 -2
- package/dist/runtime/composables/useScriptProxyToken.d.ts +12 -0
- package/dist/runtime/composables/useScriptProxyToken.js +4 -0
- package/dist/runtime/composables/useScriptProxyUrl.d.ts +12 -0
- package/dist/runtime/composables/useScriptProxyUrl.js +27 -0
- package/dist/runtime/composables/useScriptTriggerConsent.d.ts +10 -0
- package/dist/runtime/composables/useScriptTriggerConsent.js +33 -20
- package/dist/runtime/composables/useScriptTriggerElement.js +1 -1
- package/dist/runtime/composables/useScriptTriggerIdleTimeout.js +1 -1
- package/dist/runtime/devtools-standalone-bridge.client.d.ts +8 -0
- package/dist/runtime/devtools-standalone-bridge.client.js +50 -0
- package/dist/runtime/plugins/proxy-token.server.d.ts +10 -0
- package/dist/runtime/plugins/proxy-token.server.js +17 -0
- package/dist/runtime/registry/bing-uet.d.ts +198 -0
- package/dist/runtime/registry/bing-uet.js +43 -0
- package/dist/runtime/registry/bluesky-embed.d.ts +112 -0
- package/dist/runtime/registry/bluesky-embed.js +68 -0
- package/dist/runtime/registry/clarity.d.ts +16 -17
- package/dist/runtime/registry/clarity.js +33 -31
- package/dist/runtime/registry/cloudflare-web-analytics.d.ts +2 -13
- package/dist/runtime/registry/cloudflare-web-analytics.js +2 -14
- package/dist/runtime/registry/crisp.d.ts +10 -40
- package/dist/runtime/registry/crisp.js +2 -33
- package/dist/runtime/registry/databuddy-analytics.d.ts +2 -35
- package/dist/runtime/registry/databuddy-analytics.js +20 -45
- package/dist/runtime/registry/fathom-analytics.d.ts +7 -26
- package/dist/runtime/registry/fathom-analytics.js +3 -25
- package/dist/runtime/registry/google-adsense.d.ts +3 -11
- package/dist/runtime/registry/google-adsense.js +2 -11
- package/dist/runtime/registry/google-analytics.d.ts +9 -7
- package/dist/runtime/registry/google-analytics.js +15 -9
- package/dist/runtime/registry/google-maps.d.ts +3 -9
- package/dist/runtime/registry/google-maps.js +2 -8
- package/dist/runtime/registry/google-recaptcha.d.ts +2 -6
- package/dist/runtime/registry/google-recaptcha.js +4 -12
- package/dist/runtime/registry/google-sign-in.d.ts +2 -13
- package/dist/runtime/registry/google-sign-in.js +2 -22
- package/dist/runtime/registry/google-tag-manager.d.ts +8 -29
- package/dist/runtime/registry/google-tag-manager.js +14 -28
- package/dist/runtime/registry/gravatar.d.ts +26 -0
- package/dist/runtime/registry/gravatar.js +33 -0
- package/dist/runtime/registry/hotjar.d.ts +4 -6
- package/dist/runtime/registry/hotjar.js +2 -5
- package/dist/runtime/registry/instagram-embed.d.ts +3 -18
- package/dist/runtime/registry/instagram-embed.js +4 -19
- package/dist/runtime/registry/intercom.d.ts +5 -13
- package/dist/runtime/registry/intercom.js +2 -12
- package/dist/runtime/registry/matomo-analytics.d.ts +12 -15
- package/dist/runtime/registry/matomo-analytics.js +31 -13
- package/dist/runtime/registry/meta-pixel.d.ts +12 -8
- package/dist/runtime/registry/meta-pixel.js +12 -5
- package/dist/runtime/registry/mixpanel-analytics.d.ts +32 -0
- package/dist/runtime/registry/mixpanel-analytics.js +58 -0
- package/dist/runtime/registry/npm.d.ts +3 -7
- package/dist/runtime/registry/npm.js +2 -9
- package/dist/runtime/registry/paypal.d.ts +4 -25
- package/dist/runtime/registry/paypal.js +3 -66
- package/dist/runtime/registry/plausible-analytics.js +19 -14
- package/dist/runtime/registry/posthog.d.ts +18 -14
- package/dist/runtime/registry/posthog.js +18 -16
- package/dist/runtime/registry/reddit-pixel.d.ts +5 -6
- package/dist/runtime/registry/reddit-pixel.js +2 -4
- package/dist/runtime/registry/rybbit-analytics.d.ts +2 -14
- package/dist/runtime/registry/rybbit-analytics.js +10 -20
- package/dist/runtime/registry/schemas.d.ts +1047 -0
- package/dist/runtime/registry/schemas.js +1004 -0
- package/dist/runtime/registry/segment.d.ts +2 -5
- package/dist/runtime/registry/segment.js +2 -5
- package/dist/runtime/registry/snapchat-pixel.d.ts +5 -34
- package/dist/runtime/registry/snapchat-pixel.js +2 -20
- package/dist/runtime/registry/stripe.d.ts +3 -4
- package/dist/runtime/registry/stripe.js +2 -4
- package/dist/runtime/registry/tiktok-pixel.d.ts +20 -9
- package/dist/runtime/registry/tiktok-pixel.js +24 -7
- package/dist/runtime/registry/umami-analytics.d.ts +2 -31
- package/dist/runtime/registry/umami-analytics.js +2 -36
- package/dist/runtime/registry/vercel-analytics.d.ts +29 -0
- package/dist/runtime/registry/vercel-analytics.js +84 -0
- package/dist/runtime/registry/vimeo-player.d.ts +2 -2
- package/dist/runtime/registry/vimeo-player.js +1 -1
- package/dist/runtime/registry/x-embed.d.ts +3 -21
- package/dist/runtime/registry/x-embed.js +2 -21
- package/dist/runtime/registry/x-pixel.d.ts +4 -7
- package/dist/runtime/registry/x-pixel.js +2 -5
- package/dist/runtime/registry/youtube-player.d.ts +7 -7
- package/dist/runtime/registry/youtube-player.js +1 -1
- package/dist/runtime/server/bluesky-embed-image.d.ts +2 -0
- package/dist/runtime/server/bluesky-embed-image.js +7 -0
- package/dist/runtime/server/bluesky-embed.d.ts +2 -0
- package/dist/runtime/server/bluesky-embed.js +78 -0
- package/dist/runtime/server/google-maps-geocode-proxy.d.ts +2 -0
- package/dist/runtime/server/google-maps-geocode-proxy.js +38 -0
- package/dist/runtime/server/google-static-maps-proxy.d.ts +1 -1
- package/dist/runtime/server/google-static-maps-proxy.js +18 -23
- package/dist/runtime/server/gravatar-proxy.d.ts +2 -0
- package/dist/runtime/server/gravatar-proxy.js +46 -0
- package/dist/runtime/server/instagram-embed-asset.d.ts +1 -1
- package/dist/runtime/server/instagram-embed-asset.js +8 -41
- package/dist/runtime/server/instagram-embed-image.d.ts +1 -1
- package/dist/runtime/server/instagram-embed-image.js +6 -53
- package/dist/runtime/server/instagram-embed.d.ts +1 -0
- package/dist/runtime/server/instagram-embed.js +82 -40
- package/dist/runtime/server/proxy-handler.js +102 -85
- package/dist/runtime/server/utils/cached-upstream.d.ts +55 -0
- package/dist/runtime/server/utils/cached-upstream.js +65 -0
- package/dist/runtime/server/utils/embed-rewriters.d.ts +19 -0
- package/dist/runtime/server/utils/embed-rewriters.js +41 -0
- package/dist/runtime/server/utils/image-proxy.d.ts +14 -0
- package/dist/runtime/server/utils/image-proxy.js +73 -0
- package/dist/runtime/server/utils/instagram-embed.d.ts +16 -0
- package/dist/runtime/server/utils/instagram-embed.js +153 -0
- package/dist/runtime/server/utils/privacy.d.ts +1 -10
- package/dist/runtime/server/utils/privacy.js +60 -40
- package/dist/runtime/server/utils/proxy-url.d.ts +9 -0
- package/dist/runtime/server/utils/proxy-url.js +21 -0
- package/dist/runtime/server/utils/sign-constants.d.ts +16 -0
- package/dist/runtime/server/utils/sign-constants.js +5 -0
- package/dist/runtime/server/utils/sign.d.ts +101 -0
- package/dist/runtime/server/utils/sign.js +91 -0
- package/dist/runtime/server/utils/withSigning.d.ts +23 -0
- package/dist/runtime/server/utils/withSigning.js +19 -0
- package/dist/runtime/server/x-embed-image.d.ts +1 -1
- package/dist/runtime/server/x-embed-image.js +5 -49
- package/dist/runtime/server/x-embed.js +26 -6
- package/dist/runtime/types.d.ts +311 -55
- package/dist/runtime/types.js +1 -2
- package/dist/runtime/utils/pure.d.ts +1 -1
- package/dist/runtime/utils.d.ts +6 -4
- package/dist/runtime/utils.js +31 -14
- package/dist/stats.d.mts +202 -0
- package/dist/stats.d.ts +202 -0
- package/dist/stats.mjs +3835 -0
- package/dist/types-source.d.mts +17 -0
- package/dist/types-source.d.ts +17 -0
- package/dist/types-source.mjs +3787 -0
- package/dist/types.d.mts +4 -2
- package/package.json +41 -63
- package/README.md +0 -86
- package/dist/client/200.html +0 -1
- package/dist/client/404.html +0 -1
- package/dist/client/_nuxt/BJa0m50V.js +0 -1
- package/dist/client/_nuxt/BPQ3VLAy.js +0 -1
- package/dist/client/_nuxt/Ci5iXYuB.js +0 -1
- package/dist/client/_nuxt/DaI2y8Uz.js +0 -162
- package/dist/client/_nuxt/builds/latest.json +0 -1
- package/dist/client/_nuxt/builds/meta/9b4fb16a-3c62-48b0-8295-126cb077b5d3.json +0 -1
- package/dist/client/_nuxt/entry.D45OuV0w.css +0 -1
- package/dist/client/_nuxt/error-404.B57D-jUQ.css +0 -1
- package/dist/client/_nuxt/error-500.DTHUW7BI.css +0 -1
- package/dist/client/_nuxt/vPLZfVXe.js +0 -1
- package/dist/client/index.html +0 -1
- package/dist/runtime/components/ScriptPayPalMarks.d.vue.ts +0 -52
- package/dist/runtime/components/ScriptPayPalMarks.vue +0 -69
- package/dist/runtime/components/ScriptPayPalMarks.vue.d.ts +0 -52
- package/dist/runtime/validation/mock.d.ts +0 -42
- package/dist/runtime/validation/mock.js +0 -21
- package/dist/runtime/validation/valibot.d.ts +0 -1
- package/dist/runtime/validation/valibot.js +0 -1
- /package/dist/{client → devtools-client}/_nuxt/CVO1_9PV.js +0 -0
- /package/dist/{client → devtools-client}/_nuxt/Cp-IABpG.js +0 -0
- /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,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<
|
|
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,
|
|
2
|
-
import {
|
|
1
|
+
import { createError, defineEventHandler, getQuery, setHeader } from "h3";
|
|
2
|
+
import { useRuntimeConfig } from "nitropack/runtime";
|
|
3
3
|
import { withQuery } from "ufo";
|
|
4
|
-
import {
|
|
5
|
-
|
|
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
|
|
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
|
|
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",
|
|
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
|
|
54
|
-
});
|
|
48
|
+
return result.body;
|
|
49
|
+
}));
|
|
@@ -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<
|
|
1
|
+
declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<Buffer<ArrayBufferLike>>>;
|
|
2
2
|
export default _default;
|
|
@@ -1,42 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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<
|
|
1
|
+
declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<Buffer<ArrayBufferLike>>>;
|
|
2
2
|
export default _default;
|
|
@@ -1,54 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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,6 +1,33 @@
|
|
|
1
1
|
import { createError, defineEventHandler, getQuery, setHeader } from "h3";
|
|
2
|
-
import {
|
|
3
|
-
|
|
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
|
|
31
|
-
const html = await
|
|
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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
if (
|
|
48
|
-
cssUrls.push(
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
if (
|
|
53
|
-
|
|
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) =>
|
|
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
|
-
|
|
65
|
-
(_m, path) => `url(
|
|
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
|
-
|
|
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
|
-
|
|
74
|
-
|
|
75
|
-
(m) => `/api/_scripts/instagram-embed-image?url=${encodeURIComponent(m.replace(/&/g, "&"))}`
|
|
76
|
-
).replace(
|
|
77
|
-
/https:\/\/static\.cdninstagram\.com[^"'\s),]+/g,
|
|
78
|
-
(m) => `/api/_scripts/instagram-embed-asset?url=${encodeURIComponent(m.replace(/&/g, "&"))}`
|
|
79
|
-
).replace(
|
|
80
|
-
/https:\/\/lookaside\.instagram\.com[^"'\s),]+/g,
|
|
81
|
-
(m) => `/api/_scripts/instagram-embed-image?url=${encodeURIComponent(m.replace(/&/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
|
|
91
|
-
});
|
|
132
|
+
return result;
|
|
133
|
+
}));
|