@sonordev/site-kit 5.7.0 → 5.8.0

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 (604) hide show
  1. package/README.md +3 -3
  2. package/agent-manifest.json +14 -2
  3. package/dist/AnalyticsProvider-OCXRNIVE.js +33 -0
  4. package/dist/{AnalyticsProvider-GJFG7YXA.js.map → AnalyticsProvider-OCXRNIVE.js.map} +1 -1
  5. package/dist/AnalyticsProvider-ZAUONQCX.mjs +12 -0
  6. package/dist/{AnalyticsProvider-EWF7JN2X.mjs.map → AnalyticsProvider-ZAUONQCX.mjs.map} +1 -1
  7. package/dist/{BlogViewTracker-2D3IJPJK.js → BlogViewTracker-HK5C7PU6.js} +14 -11
  8. package/dist/BlogViewTracker-HK5C7PU6.js.map +1 -0
  9. package/dist/{BlogViewTracker-CKYG6MYU.mjs → BlogViewTracker-KXRZHN3U.mjs} +13 -10
  10. package/dist/BlogViewTracker-KXRZHN3U.mjs.map +1 -0
  11. package/dist/ChatWidget-3OW5LY37.js +24 -0
  12. package/dist/{ChatWidget-AWP6GBVW.js.map → ChatWidget-3OW5LY37.js.map} +1 -1
  13. package/dist/ChatWidget-54GVS27I.mjs +15 -0
  14. package/dist/{ChatWidget-Z5QXDZP3.mjs.map → ChatWidget-54GVS27I.mjs.map} +1 -1
  15. package/dist/EngageWidget-7EUP76WE.mjs +12 -0
  16. package/dist/{EngageWidget-BKEY5TPO.mjs.map → EngageWidget-7EUP76WE.mjs.map} +1 -1
  17. package/dist/EngageWidget-DDP5UFA4.js +21 -0
  18. package/dist/{EngageWidget-VT4DYXVO.js.map → EngageWidget-DDP5UFA4.js.map} +1 -1
  19. package/dist/{FileField-JJN5QKDL.mjs → FileField-IQLN6E3C.mjs} +5 -5
  20. package/dist/{FileField-JJN5QKDL.mjs.map → FileField-IQLN6E3C.mjs.map} +1 -1
  21. package/dist/{FileField-62ZWZMQK.js → FileField-SBPL4JHP.js} +6 -6
  22. package/dist/{FileField-62ZWZMQK.js.map → FileField-SBPL4JHP.js.map} +1 -1
  23. package/dist/{FormSpotlight-OTFB6QM5.mjs → FormSpotlight-E2LKKHGV.mjs} +11 -7
  24. package/dist/FormSpotlight-E2LKKHGV.mjs.map +1 -0
  25. package/dist/{FormSpotlight-URS4XRS7.js → FormSpotlight-YTACNE57.js} +25 -21
  26. package/dist/FormSpotlight-YTACNE57.js.map +1 -0
  27. package/dist/{FormStage-FVKMIV73.js → FormStage-S277U2CP.js} +20 -15
  28. package/dist/FormStage-S277U2CP.js.map +1 -0
  29. package/dist/{FormStage-VPGOCMAV.mjs → FormStage-YSBN5XKL.mjs} +9 -4
  30. package/dist/FormStage-YSBN5XKL.mjs.map +1 -0
  31. package/dist/ManagedForm-I3QVRQ53.mjs +16 -0
  32. package/dist/{ManagedForm-CXVDJMHN.mjs.map → ManagedForm-I3QVRQ53.mjs.map} +1 -1
  33. package/dist/ManagedForm-TSYKQFLJ.js +25 -0
  34. package/dist/{ManagedForm-FGNTDGED.js.map → ManagedForm-TSYKQFLJ.js.map} +1 -1
  35. package/dist/{ManagedNewsletterForm-SQYB4BZU.mjs → ManagedNewsletterForm-T3YRAWKZ.mjs} +9 -7
  36. package/dist/ManagedNewsletterForm-T3YRAWKZ.mjs.map +1 -0
  37. package/dist/{ManagedNewsletterForm-3O5L44AZ.js → ManagedNewsletterForm-YSOPPKS6.js} +10 -8
  38. package/dist/ManagedNewsletterForm-YSOPPKS6.js.map +1 -0
  39. package/dist/{SignalCore-M2PKKIGH.mjs → SignalCore-PPSIQ4BW.mjs} +8 -14
  40. package/dist/SignalCore-PPSIQ4BW.mjs.map +1 -0
  41. package/dist/{SignalCore-RFBOBNLQ.js → SignalCore-SUZH3XWZ.js} +14 -20
  42. package/dist/SignalCore-SUZH3XWZ.js.map +1 -0
  43. package/dist/SitemapSync-HSHCOKCL.mjs +9 -0
  44. package/dist/{SitemapSync-4OVMIIGC.mjs.map → SitemapSync-HSHCOKCL.mjs.map} +1 -1
  45. package/dist/SitemapSync-LH6UVP4P.js +18 -0
  46. package/dist/{SitemapSync-RK3SQ4M2.js.map → SitemapSync-LH6UVP4P.js.map} +1 -1
  47. package/dist/analytics/AnalyticsProvider.d.ts.map +1 -1
  48. package/dist/analytics/index.js +10 -9
  49. package/dist/analytics/index.mjs +5 -4
  50. package/dist/blog/BlogLayout.d.ts +3 -1
  51. package/dist/blog/BlogLayout.d.ts.map +1 -1
  52. package/dist/blog/BlogList.d.ts +7 -1
  53. package/dist/blog/BlogList.d.ts.map +1 -1
  54. package/dist/blog/BlogPost.d.ts +20 -1
  55. package/dist/blog/BlogPost.d.ts.map +1 -1
  56. package/dist/blog/BlogSidebar.d.ts +3 -1
  57. package/dist/blog/BlogSidebar.d.ts.map +1 -1
  58. package/dist/blog/BlogViewTracker.d.ts +8 -2
  59. package/dist/blog/BlogViewTracker.d.ts.map +1 -1
  60. package/dist/blog/ClusterLandingPage.d.ts +3 -1
  61. package/dist/blog/ClusterLandingPage.d.ts.map +1 -1
  62. package/dist/blog/ClusterNavigation.d.ts +5 -2
  63. package/dist/blog/ClusterNavigation.d.ts.map +1 -1
  64. package/dist/blog/RelatedPosts.d.ts +3 -1
  65. package/dist/blog/RelatedPosts.d.ts.map +1 -1
  66. package/dist/blog/index.d.ts +1 -1
  67. package/dist/blog/index.d.ts.map +1 -1
  68. package/dist/blog/index.js +40 -31
  69. package/dist/blog/index.js.map +1 -1
  70. package/dist/blog/index.mjs +11 -6
  71. package/dist/blog/index.mjs.map +1 -1
  72. package/dist/blog/not-found.test.d.ts +2 -0
  73. package/dist/blog/not-found.test.d.ts.map +1 -0
  74. package/dist/blog/processBlogHtml.d.ts +19 -2
  75. package/dist/blog/processBlogHtml.d.ts.map +1 -1
  76. package/dist/blog/public-reads.d.ts +27 -0
  77. package/dist/blog/public-reads.d.ts.map +1 -0
  78. package/dist/blog/server-core.d.ts +76 -10
  79. package/dist/blog/server-core.d.ts.map +1 -1
  80. package/dist/blog/server-ui.js +29 -23
  81. package/dist/blog/server-ui.js.map +1 -1
  82. package/dist/blog/server-ui.mjs +12 -6
  83. package/dist/blog/server-ui.mjs.map +1 -1
  84. package/dist/blog/server.d.ts +76 -10
  85. package/dist/blog/server.d.ts.map +1 -1
  86. package/dist/blog/server.js +54 -47
  87. package/dist/blog/server.mjs +5 -2
  88. package/dist/blog/site-scope.test.d.ts +2 -0
  89. package/dist/blog/site-scope.test.d.ts.map +1 -0
  90. package/dist/brand/extract-brand-profile.d.ts +36 -2
  91. package/dist/brand/extract-brand-profile.d.ts.map +1 -1
  92. package/dist/brand/extract-brand-profile.test.d.ts +2 -0
  93. package/dist/brand/extract-brand-profile.test.d.ts.map +1 -0
  94. package/dist/{chunk-3YQILJKJ.js → chunk-2FQG2AHJ.js} +60 -35
  95. package/dist/chunk-2FQG2AHJ.js.map +1 -0
  96. package/dist/{chunk-D553G64G.js → chunk-2OQWLXDO.js} +13 -13
  97. package/dist/{chunk-D553G64G.js.map → chunk-2OQWLXDO.js.map} +1 -1
  98. package/dist/{chunk-OYOO2OO5.js → chunk-2SCDUVFJ.js} +10 -10
  99. package/dist/{chunk-OYOO2OO5.js.map → chunk-2SCDUVFJ.js.map} +1 -1
  100. package/dist/{chunk-3S5JN6KL.js → chunk-35ERUUH3.js} +6 -6
  101. package/dist/{chunk-3S5JN6KL.js.map → chunk-35ERUUH3.js.map} +1 -1
  102. package/dist/{chunk-57AFHENV.mjs → chunk-3AUFD7KR.mjs} +3 -3
  103. package/dist/{chunk-57AFHENV.mjs.map → chunk-3AUFD7KR.mjs.map} +1 -1
  104. package/dist/{chunk-L7ACQ6PC.js → chunk-3BVCF4ZF.js} +4 -4
  105. package/dist/{chunk-L7ACQ6PC.js.map → chunk-3BVCF4ZF.js.map} +1 -1
  106. package/dist/{chunk-BFJOZ3MU.mjs → chunk-3EY5E35M.mjs} +36 -71
  107. package/dist/chunk-3EY5E35M.mjs.map +1 -0
  108. package/dist/{chunk-BQGEVMIR.mjs → chunk-3SLFT453.mjs} +5 -5
  109. package/dist/{chunk-BQGEVMIR.mjs.map → chunk-3SLFT453.mjs.map} +1 -1
  110. package/dist/{chunk-ILNCUSXW.mjs → chunk-4L7OHRWB.mjs} +12 -9
  111. package/dist/chunk-4L7OHRWB.mjs.map +1 -0
  112. package/dist/chunk-4LYW6PMU.mjs +72 -0
  113. package/dist/chunk-4LYW6PMU.mjs.map +1 -0
  114. package/dist/{chunk-TSZIACRC.js → chunk-4OS6M3V4.js} +6 -12
  115. package/dist/chunk-4OS6M3V4.js.map +1 -0
  116. package/dist/{chunk-YKUEFRZI.js → chunk-4RY7JETY.js} +14 -14
  117. package/dist/{chunk-YKUEFRZI.js.map → chunk-4RY7JETY.js.map} +1 -1
  118. package/dist/chunk-4TLFZ6NR.mjs +16 -0
  119. package/dist/chunk-4TLFZ6NR.mjs.map +1 -0
  120. package/dist/{chunk-4B4S56WJ.mjs → chunk-5B4J3IBX.mjs} +75 -21
  121. package/dist/chunk-5B4J3IBX.mjs.map +1 -0
  122. package/dist/chunk-5O7JSWT6.js +8 -0
  123. package/dist/{chunk-5TXXTYXL.js.map → chunk-5O7JSWT6.js.map} +1 -1
  124. package/dist/chunk-5SANRSX3.mjs +17 -0
  125. package/dist/chunk-5SANRSX3.mjs.map +1 -0
  126. package/dist/{chunk-FBDHKYNF.mjs → chunk-5WGMXSCB.mjs} +3 -3
  127. package/dist/{chunk-FBDHKYNF.mjs.map → chunk-5WGMXSCB.mjs.map} +1 -1
  128. package/dist/chunk-5XFFUP6D.js +100 -0
  129. package/dist/chunk-5XFFUP6D.js.map +1 -0
  130. package/dist/{chunk-7ZX6TO6C.mjs → chunk-6HFFTGFP.mjs} +50 -26
  131. package/dist/chunk-6HFFTGFP.mjs.map +1 -0
  132. package/dist/{chunk-R2SXXFXZ.mjs → chunk-6SBTHS6C.mjs} +3 -3
  133. package/dist/{chunk-R2SXXFXZ.mjs.map → chunk-6SBTHS6C.mjs.map} +1 -1
  134. package/dist/{chunk-FO4KGPGF.js → chunk-7TC3GRXQ.js} +73 -38
  135. package/dist/chunk-7TC3GRXQ.js.map +1 -0
  136. package/dist/{chunk-XLPU3TEE.mjs → chunk-7THZOAUR.mjs} +4 -4
  137. package/dist/{chunk-XLPU3TEE.mjs.map → chunk-7THZOAUR.mjs.map} +1 -1
  138. package/dist/{chunk-MW2M6O7A.mjs → chunk-AOWJP25J.mjs} +4 -4
  139. package/dist/{chunk-MW2M6O7A.mjs.map → chunk-AOWJP25J.mjs.map} +1 -1
  140. package/dist/{chunk-UQ5YULFU.mjs → chunk-B2VFMPVJ.mjs} +4 -4
  141. package/dist/{chunk-UQ5YULFU.mjs.map → chunk-B2VFMPVJ.mjs.map} +1 -1
  142. package/dist/{chunk-JTF4DFUF.mjs → chunk-B35OJ7FR.mjs} +4 -4
  143. package/dist/{chunk-JTF4DFUF.mjs.map → chunk-B35OJ7FR.mjs.map} +1 -1
  144. package/dist/{chunk-2N27LCZH.js → chunk-BER36QXU.js} +9 -9
  145. package/dist/{chunk-2N27LCZH.js.map → chunk-BER36QXU.js.map} +1 -1
  146. package/dist/{chunk-47XQWV4S.mjs → chunk-BFZNLTWK.mjs} +3 -3
  147. package/dist/{chunk-47XQWV4S.mjs.map → chunk-BFZNLTWK.mjs.map} +1 -1
  148. package/dist/chunk-BQP6JIE2.mjs +28 -0
  149. package/dist/chunk-BQP6JIE2.mjs.map +1 -0
  150. package/dist/{chunk-KXGD4E7G.js → chunk-C3WU45JT.js} +7 -7
  151. package/dist/{chunk-KXGD4E7G.js.map → chunk-C3WU45JT.js.map} +1 -1
  152. package/dist/chunk-CUNZAD46.js +53 -0
  153. package/dist/chunk-CUNZAD46.js.map +1 -0
  154. package/dist/chunk-CXAXZFFW.js +157 -0
  155. package/dist/chunk-CXAXZFFW.js.map +1 -0
  156. package/dist/{chunk-H4OBGC43.mjs → chunk-DA7IANFG.mjs} +14 -3
  157. package/dist/chunk-DA7IANFG.mjs.map +1 -0
  158. package/dist/{chunk-NOU3JQJK.js → chunk-EIW6YEPY.js} +8 -8
  159. package/dist/{chunk-NOU3JQJK.js.map → chunk-EIW6YEPY.js.map} +1 -1
  160. package/dist/{chunk-RCSTDJUH.js → chunk-F6SKG34N.js} +8 -13
  161. package/dist/chunk-F6SKG34N.js.map +1 -0
  162. package/dist/{chunk-LC7AM4J5.js → chunk-FHPW7XVH.js} +77 -20
  163. package/dist/chunk-FHPW7XVH.js.map +1 -0
  164. package/dist/{chunk-JNRHTZL4.js → chunk-FVW6FT6L.js} +73 -29
  165. package/dist/chunk-FVW6FT6L.js.map +1 -0
  166. package/dist/{chunk-BFM5PEFV.js → chunk-GNDWTXLU.js} +56 -177
  167. package/dist/chunk-GNDWTXLU.js.map +1 -0
  168. package/dist/{chunk-OZ3FU4BT.js → chunk-H5NBFNND.js} +2 -2
  169. package/dist/chunk-H5NBFNND.js.map +1 -0
  170. package/dist/{chunk-RNAGCAIB.js → chunk-HAKD27AZ.js} +7 -7
  171. package/dist/{chunk-RNAGCAIB.js.map → chunk-HAKD27AZ.js.map} +1 -1
  172. package/dist/chunk-HCN3IKMW.mjs +106 -0
  173. package/dist/chunk-HCN3IKMW.mjs.map +1 -0
  174. package/dist/{chunk-V5THCFPG.mjs → chunk-HCX343AS.mjs} +4 -4
  175. package/dist/{chunk-V5THCFPG.mjs.map → chunk-HCX343AS.mjs.map} +1 -1
  176. package/dist/{chunk-TDJKGN5Q.mjs → chunk-HEOQT5SM.mjs} +216 -103
  177. package/dist/chunk-HEOQT5SM.mjs.map +1 -0
  178. package/dist/{chunk-6FC5Q4KU.mjs → chunk-HOJ4J4X2.mjs} +30 -12
  179. package/dist/chunk-HOJ4J4X2.mjs.map +1 -0
  180. package/dist/{chunk-ELQ4SRRR.js → chunk-HQOHB6QF.js} +15 -15
  181. package/dist/{chunk-ELQ4SRRR.js.map → chunk-HQOHB6QF.js.map} +1 -1
  182. package/dist/chunk-HRMGITUZ.mjs +6 -0
  183. package/dist/{chunk-QRBPT6Z6.mjs.map → chunk-HRMGITUZ.mjs.map} +1 -1
  184. package/dist/{chunk-JQ7M6CVL.mjs → chunk-HYVEIP2N.mjs} +3 -3
  185. package/dist/{chunk-JQ7M6CVL.mjs.map → chunk-HYVEIP2N.mjs.map} +1 -1
  186. package/dist/{chunk-H6YVT3BL.js → chunk-I3ND4XYW.js} +12 -9
  187. package/dist/chunk-I3ND4XYW.js.map +1 -0
  188. package/dist/{chunk-4UVM7E2W.js → chunk-JDTU2RWC.js} +3 -3
  189. package/dist/{chunk-4UVM7E2W.js.map → chunk-JDTU2RWC.js.map} +1 -1
  190. package/dist/{chunk-GZJE23Y5.mjs → chunk-JLVCWC6A.mjs} +2 -2
  191. package/dist/chunk-JLVCWC6A.mjs.map +1 -0
  192. package/dist/chunk-K4TCEAUX.js +52 -0
  193. package/dist/chunk-K4TCEAUX.js.map +1 -0
  194. package/dist/chunk-KV7XXLJV.mjs +30 -0
  195. package/dist/chunk-KV7XXLJV.mjs.map +1 -0
  196. package/dist/{chunk-C563AHZZ.mjs → chunk-L24RDT6Q.mjs} +3 -3
  197. package/dist/{chunk-C563AHZZ.mjs.map → chunk-L24RDT6Q.mjs.map} +1 -1
  198. package/dist/{chunk-FEWWGEQF.js → chunk-LBZGYF3B.js} +4 -4
  199. package/dist/{chunk-FEWWGEQF.js.map → chunk-LBZGYF3B.js.map} +1 -1
  200. package/dist/{chunk-CPY74A4F.js → chunk-LMEUYRRR.js} +72 -106
  201. package/dist/chunk-LMEUYRRR.js.map +1 -0
  202. package/dist/chunk-LVGSOW2F.js +32 -0
  203. package/dist/chunk-LVGSOW2F.js.map +1 -0
  204. package/dist/{chunk-DOB37PV4.js → chunk-M45AL7EA.js} +37 -19
  205. package/dist/chunk-M45AL7EA.js.map +1 -0
  206. package/dist/{chunk-YYDZ2TYR.js → chunk-MHX6TOAS.js} +3 -3
  207. package/dist/{chunk-YYDZ2TYR.js.map → chunk-MHX6TOAS.js.map} +1 -1
  208. package/dist/chunk-MLVHVKFT.mjs +148 -0
  209. package/dist/chunk-MLVHVKFT.mjs.map +1 -0
  210. package/dist/{chunk-M5GY2AI3.mjs → chunk-N2NZBPQ5.mjs} +4 -10
  211. package/dist/chunk-N2NZBPQ5.mjs.map +1 -0
  212. package/dist/chunk-NRBITVDK.js +114 -0
  213. package/dist/chunk-NRBITVDK.js.map +1 -0
  214. package/dist/{chunk-O2VJZOR2.mjs → chunk-O4YBWJHP.mjs} +6 -11
  215. package/dist/chunk-O4YBWJHP.mjs.map +1 -0
  216. package/dist/{chunk-BUJWXSYZ.mjs → chunk-O5ZSGBQD.mjs} +4 -4
  217. package/dist/{chunk-BUJWXSYZ.mjs.map → chunk-O5ZSGBQD.mjs.map} +1 -1
  218. package/dist/{chunk-TP7H6BSK.mjs → chunk-OE7CTIOU.mjs} +73 -30
  219. package/dist/chunk-OE7CTIOU.mjs.map +1 -0
  220. package/dist/{chunk-UJ6CHZAI.mjs → chunk-OEW2LFOV.js} +169 -25
  221. package/dist/chunk-OEW2LFOV.js.map +1 -0
  222. package/dist/chunk-P4Y75QSU.js +19 -0
  223. package/dist/chunk-P4Y75QSU.js.map +1 -0
  224. package/dist/{chunk-Q7347KP6.mjs → chunk-PK2OTGW5.mjs} +6 -12
  225. package/dist/chunk-PK2OTGW5.mjs.map +1 -0
  226. package/dist/{chunk-H65OX263.js → chunk-PRTXAIIC.js} +15 -15
  227. package/dist/{chunk-H65OX263.js.map → chunk-PRTXAIIC.js.map} +1 -1
  228. package/dist/{chunk-ABZGEHTC.mjs → chunk-PUAXHYBL.mjs} +3 -3
  229. package/dist/{chunk-ABZGEHTC.mjs.map → chunk-PUAXHYBL.mjs.map} +1 -1
  230. package/dist/chunk-QRHVMTHF.mjs +94 -0
  231. package/dist/chunk-QRHVMTHF.mjs.map +1 -0
  232. package/dist/{chunk-JTCQJKJE.js → chunk-QTJTDQYR.js} +76 -111
  233. package/dist/chunk-QTJTDQYR.js.map +1 -0
  234. package/dist/{chunk-HBN4A2N4.mjs → chunk-QVHVL7EX.mjs} +3 -3
  235. package/dist/{chunk-HBN4A2N4.mjs.map → chunk-QVHVL7EX.mjs.map} +1 -1
  236. package/dist/chunk-R7GHP3FY.js +81 -0
  237. package/dist/chunk-R7GHP3FY.js.map +1 -0
  238. package/dist/{chunk-P4TB4ROG.js → chunk-SEP5D4MI.js} +8 -2
  239. package/dist/chunk-SEP5D4MI.js.map +1 -0
  240. package/dist/{chunk-3CLP35TT.mjs → chunk-TXMVU4EY.mjs} +62 -97
  241. package/dist/chunk-TXMVU4EY.mjs.map +1 -0
  242. package/dist/{chunk-L4V6TKMJ.mjs → chunk-U2V542EO.mjs} +7 -3
  243. package/dist/chunk-U2V542EO.mjs.map +1 -0
  244. package/dist/{chunk-4WBTM6YE.js → chunk-UWHCHYCX.js} +4 -4
  245. package/dist/{chunk-4WBTM6YE.js.map → chunk-UWHCHYCX.js.map} +1 -1
  246. package/dist/{chunk-JNAXDFC4.mjs → chunk-VJ74275U.mjs} +38 -156
  247. package/dist/chunk-VJ74275U.mjs.map +1 -0
  248. package/dist/{chunk-H7274TKR.mjs → chunk-VJV7WUR2.mjs} +12 -4
  249. package/dist/chunk-VJV7WUR2.mjs.map +1 -0
  250. package/dist/{chunk-4A5V73SR.mjs → chunk-VYL6IHJA.mjs} +9 -9
  251. package/dist/{chunk-4A5V73SR.mjs.map → chunk-VYL6IHJA.mjs.map} +1 -1
  252. package/dist/{chunk-5B4FABFK.js → chunk-WS7MH3GD.js} +14 -2
  253. package/dist/chunk-WS7MH3GD.js.map +1 -0
  254. package/dist/{chunk-IPV2TUAT.js → chunk-XA2GJFVM.js} +12 -4
  255. package/dist/chunk-XA2GJFVM.js.map +1 -0
  256. package/dist/chunk-XBX2K3GA.js +33 -0
  257. package/dist/chunk-XBX2K3GA.js.map +1 -0
  258. package/dist/{chunk-F3AKYZOH.js → chunk-XCYKM2SA.js} +6 -13
  259. package/dist/chunk-XCYKM2SA.js.map +1 -0
  260. package/dist/{chunk-6CJP7BFM.js → chunk-XZO5I4RS.mjs} +147 -20
  261. package/dist/chunk-XZO5I4RS.mjs.map +1 -0
  262. package/dist/chunk-Y5QZPUL3.mjs +47 -0
  263. package/dist/chunk-Y5QZPUL3.mjs.map +1 -0
  264. package/dist/{chunk-C4PZ2R3B.js → chunk-YECDJDDD.js} +10 -10
  265. package/dist/{chunk-C4PZ2R3B.js.map → chunk-YECDJDDD.js.map} +1 -1
  266. package/dist/chunk-YN7QHLWF.js +19 -0
  267. package/dist/chunk-YN7QHLWF.js.map +1 -0
  268. package/dist/chunk-YU7QZ3PP.mjs +45 -0
  269. package/dist/chunk-YU7QZ3PP.mjs.map +1 -0
  270. package/dist/{chunk-VFGEY6FJ.js → chunk-ZEOC26LZ.js} +223 -110
  271. package/dist/chunk-ZEOC26LZ.js.map +1 -0
  272. package/dist/{chunk-RVRN5U7W.mjs → chunk-ZVI7MBVF.mjs} +73 -38
  273. package/dist/chunk-ZVI7MBVF.mjs.map +1 -0
  274. package/dist/cli/agent/checks.d.ts +15 -1
  275. package/dist/cli/agent/checks.d.ts.map +1 -1
  276. package/dist/cli/agent/sitemap-trailing-slash.test.d.ts +2 -0
  277. package/dist/cli/agent/sitemap-trailing-slash.test.d.ts.map +1 -0
  278. package/dist/cli/commands/doctor.d.ts.map +1 -1
  279. package/dist/cli/commands/og.d.ts +26 -8
  280. package/dist/cli/commands/og.d.ts.map +1 -1
  281. package/dist/cli/index.js +683 -322
  282. package/dist/cli/index.js.map +1 -1
  283. package/dist/cli/index.mjs +604 -243
  284. package/dist/cli/index.mjs.map +1 -1
  285. package/dist/client/index.js +6 -6
  286. package/dist/client/index.mjs +5 -5
  287. package/dist/commerce/CheckoutForm.d.ts.map +1 -1
  288. package/dist/commerce/ProductDetail.d.ts.map +1 -1
  289. package/dist/commerce/api.d.ts +14 -0
  290. package/dist/commerce/api.d.ts.map +1 -1
  291. package/dist/commerce/discount-checkout.test.d.ts +2 -0
  292. package/dist/commerce/discount-checkout.test.d.ts.map +1 -0
  293. package/dist/commerce/index.d.ts +1 -1
  294. package/dist/commerce/index.d.ts.map +1 -1
  295. package/dist/commerce/index.js +61 -56
  296. package/dist/commerce/index.mjs +6 -5
  297. package/dist/config/index.js +3 -3
  298. package/dist/config/index.mjs +1 -1
  299. package/dist/discover-CYXYKHZ2.mjs +4 -0
  300. package/dist/{discover-FGTKWOL3.mjs.map → discover-CYXYKHZ2.mjs.map} +1 -1
  301. package/dist/discover-NGEPXZOD.js +21 -0
  302. package/dist/{discover-NJZPWTDL.js.map → discover-NGEPXZOD.js.map} +1 -1
  303. package/dist/engage/index.js +12 -10
  304. package/dist/engage/index.js.map +1 -1
  305. package/dist/engage/index.mjs +9 -7
  306. package/dist/engage/index.mjs.map +1 -1
  307. package/dist/fleet/index.js +8 -8
  308. package/dist/fleet/index.mjs +4 -4
  309. package/dist/forms/FormClient.d.ts.map +1 -1
  310. package/dist/forms/FormField.d.ts +7 -1
  311. package/dist/forms/FormField.d.ts.map +1 -1
  312. package/dist/forms/FormSpotlight.d.ts +1 -1
  313. package/dist/forms/FormSpotlight.d.ts.map +1 -1
  314. package/dist/forms/FormStage.d.ts +1 -1
  315. package/dist/forms/FormStage.d.ts.map +1 -1
  316. package/dist/forms/experience-plan.d.ts +0 -1
  317. package/dist/forms/experience-plan.d.ts.map +1 -1
  318. package/dist/forms/field-interactions.d.ts +63 -0
  319. package/dist/forms/field-interactions.d.ts.map +1 -0
  320. package/dist/forms/field-interactions.test.d.ts +8 -0
  321. package/dist/forms/field-interactions.test.d.ts.map +1 -0
  322. package/dist/forms/field-rules.d.ts +41 -0
  323. package/dist/forms/field-rules.d.ts.map +1 -0
  324. package/dist/forms/field-rules.test.d.ts +8 -0
  325. package/dist/forms/field-rules.test.d.ts.map +1 -0
  326. package/dist/forms/form-field-focus.test.d.ts +8 -0
  327. package/dist/forms/form-field-focus.test.d.ts.map +1 -0
  328. package/dist/forms/index.js +25 -23
  329. package/dist/forms/index.js.map +1 -1
  330. package/dist/forms/index.mjs +13 -11
  331. package/dist/forms/index.mjs.map +1 -1
  332. package/dist/forms/server.js +11 -11
  333. package/dist/forms/server.mjs +9 -9
  334. package/dist/forms/static.js +8 -8
  335. package/dist/forms/static.mjs +7 -7
  336. package/dist/forms/tracking-session.d.ts +48 -3
  337. package/dist/forms/tracking-session.d.ts.map +1 -1
  338. package/dist/forms/types.d.ts +11 -0
  339. package/dist/forms/types.d.ts.map +1 -1
  340. package/dist/forms/useForm.d.ts +8 -0
  341. package/dist/forms/useForm.d.ts.map +1 -1
  342. package/dist/forms/useFormTracking.d.ts +29 -4
  343. package/dist/forms/useFormTracking.d.ts.map +1 -1
  344. package/dist/images/index.js +11 -11
  345. package/dist/images/index.mjs +4 -4
  346. package/dist/index.js +72 -68
  347. package/dist/index.js.map +1 -1
  348. package/dist/index.mjs +14 -10
  349. package/dist/index.mjs.map +1 -1
  350. package/dist/layout/client.js +10 -10
  351. package/dist/layout/client.mjs +9 -9
  352. package/dist/layout/index.js +13 -12
  353. package/dist/layout/index.js.map +1 -1
  354. package/dist/layout/index.mjs +11 -10
  355. package/dist/layout/index.mjs.map +1 -1
  356. package/dist/llms/aiRobots.d.ts +20 -4
  357. package/dist/llms/aiRobots.d.ts.map +1 -1
  358. package/dist/llms/api.d.ts +8 -3
  359. package/dist/llms/api.d.ts.map +1 -1
  360. package/dist/llms/discovery-headers.d.ts +24 -0
  361. package/dist/llms/discovery-headers.d.ts.map +1 -1
  362. package/dist/llms/generateLLMsTxt.d.ts.map +1 -1
  363. package/dist/llms/index.d.ts +2 -2
  364. package/dist/llms/index.d.ts.map +1 -1
  365. package/dist/llms/index.js +45 -96
  366. package/dist/llms/index.js.map +1 -1
  367. package/dist/llms/index.mjs +11 -81
  368. package/dist/llms/index.mjs.map +1 -1
  369. package/dist/llms/links.d.ts +26 -0
  370. package/dist/llms/links.d.ts.map +1 -0
  371. package/dist/llms/links.test.d.ts +2 -0
  372. package/dist/llms/links.test.d.ts.map +1 -0
  373. package/dist/llms/types.d.ts +15 -0
  374. package/dist/llms/types.d.ts.map +1 -1
  375. package/dist/llms/wiring.d.ts +22 -0
  376. package/dist/llms/wiring.d.ts.map +1 -1
  377. package/dist/llms/writeLLMsTxt.d.ts +9 -0
  378. package/dist/llms/writeLLMsTxt.d.ts.map +1 -1
  379. package/dist/maps/index.js +5 -5
  380. package/dist/maps/index.mjs +3 -3
  381. package/dist/motion/gsap.d.ts +54 -0
  382. package/dist/motion/gsap.d.ts.map +1 -1
  383. package/dist/motion/gsap.js +34 -4
  384. package/dist/motion/gsap.js.map +1 -1
  385. package/dist/motion/gsap.mjs +33 -5
  386. package/dist/motion/gsap.mjs.map +1 -1
  387. package/dist/motion/gsap.test.d.ts +2 -0
  388. package/dist/motion/gsap.test.d.ts.map +1 -0
  389. package/dist/og/config.d.ts +6 -0
  390. package/dist/og/config.d.ts.map +1 -1
  391. package/dist/og/contrast.d.ts +33 -0
  392. package/dist/og/contrast.d.ts.map +1 -0
  393. package/dist/og/index.d.ts +2 -0
  394. package/dist/og/index.d.ts.map +1 -1
  395. package/dist/og/index.js +26 -8
  396. package/dist/og/index.mjs +3 -1
  397. package/dist/og/pages.d.ts +101 -0
  398. package/dist/og/pages.d.ts.map +1 -1
  399. package/dist/og/route-copy.d.ts +34 -0
  400. package/dist/og/route-copy.d.ts.map +1 -0
  401. package/dist/og/route-fit.d.ts +77 -0
  402. package/dist/og/route-fit.d.ts.map +1 -0
  403. package/dist/og/route.d.ts +80 -20
  404. package/dist/og/route.d.ts.map +1 -1
  405. package/dist/og/route.js +195 -25
  406. package/dist/og/route.js.map +1 -1
  407. package/dist/og/route.mjs +193 -26
  408. package/dist/og/route.mjs.map +1 -1
  409. package/dist/og/route.test.d.ts +2 -0
  410. package/dist/og/route.test.d.ts.map +1 -0
  411. package/dist/og/template.d.ts.map +1 -1
  412. package/dist/og/wiring.d.ts +43 -3
  413. package/dist/og/wiring.d.ts.map +1 -1
  414. package/dist/proxy/index.d.ts.map +1 -1
  415. package/dist/proxy/index.js +15 -10
  416. package/dist/proxy/index.js.map +1 -1
  417. package/dist/proxy/index.mjs +12 -7
  418. package/dist/proxy/index.mjs.map +1 -1
  419. package/dist/proxy/llms-discovery.test.d.ts +2 -0
  420. package/dist/proxy/llms-discovery.test.d.ts.map +1 -0
  421. package/dist/redirects/index.d.ts +24 -0
  422. package/dist/redirects/index.d.ts.map +1 -1
  423. package/dist/redirects/index.js +11 -8
  424. package/dist/redirects/index.mjs +4 -1
  425. package/dist/redirects/index.test.d.ts +2 -0
  426. package/dist/redirects/index.test.d.ts.map +1 -0
  427. package/dist/redirects/not-found.js +8 -5
  428. package/dist/redirects/not-found.js.map +1 -1
  429. package/dist/redirects/not-found.mjs +4 -1
  430. package/dist/redirects/not-found.mjs.map +1 -1
  431. package/dist/robots/index.d.ts +2 -0
  432. package/dist/robots/index.d.ts.map +1 -1
  433. package/dist/robots/index.js +23 -3
  434. package/dist/robots/index.js.map +1 -1
  435. package/dist/robots/index.mjs +2 -2
  436. package/dist/robots/index.mjs.map +1 -1
  437. package/dist/search/index.js +4 -4
  438. package/dist/search/index.mjs +3 -3
  439. package/dist/seo/ManagedContent.d.ts +4 -2
  440. package/dist/seo/ManagedContent.d.ts.map +1 -1
  441. package/dist/seo/ManagedFAQ.d.ts.map +1 -1
  442. package/dist/seo/ManagedInternalLinks.d.ts.map +1 -1
  443. package/dist/seo/ManagedSchema.d.ts.map +1 -1
  444. package/dist/seo/client.js +6 -6
  445. package/dist/seo/client.mjs +5 -5
  446. package/dist/seo/getManagedMetadata.d.ts.map +1 -1
  447. package/dist/seo/getManagedMetadata.test.d.ts +2 -0
  448. package/dist/seo/getManagedMetadata.test.d.ts.map +1 -0
  449. package/dist/seo/index.js +59 -49
  450. package/dist/seo/index.js.map +1 -1
  451. package/dist/seo/index.mjs +29 -19
  452. package/dist/seo/index.mjs.map +1 -1
  453. package/dist/seo/managed-schema-filter.test.d.ts +2 -0
  454. package/dist/seo/managed-schema-filter.test.d.ts.map +1 -0
  455. package/dist/seo/register-sitemap-cli-impl.d.ts +32 -0
  456. package/dist/seo/register-sitemap-cli-impl.d.ts.map +1 -1
  457. package/dist/seo/register-sitemap-cli.d.ts +7 -0
  458. package/dist/seo/register-sitemap-cli.d.ts.map +1 -1
  459. package/dist/seo/register-sitemap-cli.js +273 -56
  460. package/dist/seo/register-sitemap-cli.js.map +1 -1
  461. package/dist/seo/register-sitemap-cli.mjs +269 -52
  462. package/dist/seo/register-sitemap-cli.mjs.map +1 -1
  463. package/dist/seo/register-sitemap-request.d.ts +36 -0
  464. package/dist/seo/register-sitemap-request.d.ts.map +1 -0
  465. package/dist/seo/register-sitemap-request.test.d.ts +2 -0
  466. package/dist/seo/register-sitemap-request.test.d.ts.map +1 -0
  467. package/dist/seo/routing.d.ts +2 -0
  468. package/dist/seo/routing.d.ts.map +1 -1
  469. package/dist/seo/schema-filter.d.ts +43 -0
  470. package/dist/seo/schema-filter.d.ts.map +1 -0
  471. package/dist/seo/schema-filter.test.d.ts +2 -0
  472. package/dist/seo/schema-filter.test.d.ts.map +1 -0
  473. package/dist/seo/server-api.d.ts +15 -2
  474. package/dist/seo/server-api.d.ts.map +1 -1
  475. package/dist/seo/server.js +23 -18
  476. package/dist/seo/server.mjs +7 -2
  477. package/dist/seo/site-scope.test.d.ts +2 -0
  478. package/dist/seo/site-scope.test.d.ts.map +1 -0
  479. package/dist/seo/types.d.ts +30 -0
  480. package/dist/seo/types.d.ts.map +1 -1
  481. package/dist/seo-meta/contract.d.ts +60 -0
  482. package/dist/seo-meta/contract.d.ts.map +1 -0
  483. package/dist/seo-meta/contract.js +41 -0
  484. package/dist/seo-meta/contract.js.map +1 -0
  485. package/dist/seo-meta/contract.mjs +4 -0
  486. package/dist/seo-meta/contract.mjs.map +1 -0
  487. package/dist/seo-meta/contract.test.d.ts +2 -0
  488. package/dist/seo-meta/contract.test.d.ts.map +1 -0
  489. package/dist/server/index.js +4 -3
  490. package/dist/server/index.mjs +3 -2
  491. package/dist/server/mint-site-token.d.ts +2 -32
  492. package/dist/server/mint-site-token.d.ts.map +1 -1
  493. package/dist/{server-api-RG3ZL3DV.mjs → server-api-A2EFCTZX.mjs} +7 -3
  494. package/dist/{server-api-RG3ZL3DV.mjs.map → server-api-A2EFCTZX.mjs.map} +1 -1
  495. package/dist/{server-api-RYJQAUGO.js → server-api-IWTZ7C3O.js} +25 -21
  496. package/dist/{server-api-RYJQAUGO.js.map → server-api-IWTZ7C3O.js.map} +1 -1
  497. package/dist/shared/build-entries.d.ts +2 -0
  498. package/dist/shared/build-entries.d.ts.map +1 -1
  499. package/dist/shared/fresh-fetch.d.ts +64 -0
  500. package/dist/shared/fresh-fetch.d.ts.map +1 -0
  501. package/dist/shared/fresh-fetch.test.d.ts +2 -0
  502. package/dist/shared/fresh-fetch.test.d.ts.map +1 -0
  503. package/dist/shared/next-files.d.ts +7 -0
  504. package/dist/shared/next-files.d.ts.map +1 -1
  505. package/dist/shared/page-leave.d.ts +27 -0
  506. package/dist/shared/page-leave.d.ts.map +1 -0
  507. package/dist/shared/page-leave.test.d.ts +2 -0
  508. package/dist/shared/page-leave.test.d.ts.map +1 -0
  509. package/dist/shared/source-graph.d.ts +63 -0
  510. package/dist/shared/source-graph.d.ts.map +1 -0
  511. package/dist/shared/source-graph.test.d.ts +2 -0
  512. package/dist/shared/source-graph.test.d.ts.map +1 -0
  513. package/dist/shared/version.d.ts +1 -1
  514. package/dist/signal/SignalCore.d.ts.map +1 -1
  515. package/dist/signal/index.js +11 -11
  516. package/dist/signal/index.mjs +2 -2
  517. package/dist/sitemap/index.d.ts +19 -4
  518. package/dist/sitemap/index.d.ts.map +1 -1
  519. package/dist/sitemap/index.js +53 -43
  520. package/dist/sitemap/index.js.map +1 -1
  521. package/dist/sitemap/index.mjs +37 -27
  522. package/dist/sitemap/index.mjs.map +1 -1
  523. package/dist/sitemap/shared.d.ts +65 -0
  524. package/dist/sitemap/shared.d.ts.map +1 -1
  525. package/dist/sitemap/trailing-slash.test.d.ts +2 -0
  526. package/dist/sitemap/trailing-slash.test.d.ts.map +1 -0
  527. package/dist/sites/resolve.d.ts.map +1 -1
  528. package/dist/sites/site-param.d.ts +16 -0
  529. package/dist/sites/site-param.d.ts.map +1 -0
  530. package/dist/sync/index.js +17 -17
  531. package/dist/sync/index.mjs +4 -4
  532. package/dist/writeLLMsTxt-CQ7A4AAL.js +20 -0
  533. package/dist/writeLLMsTxt-CQ7A4AAL.js.map +1 -0
  534. package/dist/writeLLMsTxt-NX5MSPYX.mjs +11 -0
  535. package/dist/writeLLMsTxt-NX5MSPYX.mjs.map +1 -0
  536. package/package.json +8 -3
  537. package/dist/AnalyticsProvider-EWF7JN2X.mjs +0 -11
  538. package/dist/AnalyticsProvider-GJFG7YXA.js +0 -32
  539. package/dist/BlogViewTracker-2D3IJPJK.js.map +0 -1
  540. package/dist/BlogViewTracker-CKYG6MYU.mjs.map +0 -1
  541. package/dist/ChatWidget-AWP6GBVW.js +0 -22
  542. package/dist/ChatWidget-Z5QXDZP3.mjs +0 -13
  543. package/dist/EngageWidget-BKEY5TPO.mjs +0 -12
  544. package/dist/EngageWidget-VT4DYXVO.js +0 -21
  545. package/dist/FormSpotlight-OTFB6QM5.mjs.map +0 -1
  546. package/dist/FormSpotlight-URS4XRS7.js.map +0 -1
  547. package/dist/FormStage-FVKMIV73.js.map +0 -1
  548. package/dist/FormStage-VPGOCMAV.mjs.map +0 -1
  549. package/dist/ManagedForm-CXVDJMHN.mjs +0 -14
  550. package/dist/ManagedForm-FGNTDGED.js +0 -23
  551. package/dist/ManagedNewsletterForm-3O5L44AZ.js.map +0 -1
  552. package/dist/ManagedNewsletterForm-SQYB4BZU.mjs.map +0 -1
  553. package/dist/SignalCore-M2PKKIGH.mjs.map +0 -1
  554. package/dist/SignalCore-RFBOBNLQ.js.map +0 -1
  555. package/dist/SitemapSync-4OVMIIGC.mjs +0 -9
  556. package/dist/SitemapSync-RK3SQ4M2.js +0 -18
  557. package/dist/chunk-3CLP35TT.mjs.map +0 -1
  558. package/dist/chunk-3UC6JETG.js +0 -32
  559. package/dist/chunk-3UC6JETG.js.map +0 -1
  560. package/dist/chunk-3YQILJKJ.js.map +0 -1
  561. package/dist/chunk-4B4S56WJ.mjs.map +0 -1
  562. package/dist/chunk-5B4FABFK.js.map +0 -1
  563. package/dist/chunk-5TXXTYXL.js +0 -8
  564. package/dist/chunk-6CJP7BFM.js.map +0 -1
  565. package/dist/chunk-6FC5Q4KU.mjs.map +0 -1
  566. package/dist/chunk-7ZX6TO6C.mjs.map +0 -1
  567. package/dist/chunk-AWK57R5S.mjs +0 -29
  568. package/dist/chunk-AWK57R5S.mjs.map +0 -1
  569. package/dist/chunk-BFJOZ3MU.mjs.map +0 -1
  570. package/dist/chunk-BFM5PEFV.js.map +0 -1
  571. package/dist/chunk-CPY74A4F.js.map +0 -1
  572. package/dist/chunk-DOB37PV4.js.map +0 -1
  573. package/dist/chunk-F3AKYZOH.js.map +0 -1
  574. package/dist/chunk-FO4KGPGF.js.map +0 -1
  575. package/dist/chunk-GZJE23Y5.mjs.map +0 -1
  576. package/dist/chunk-H4OBGC43.mjs.map +0 -1
  577. package/dist/chunk-H6YVT3BL.js.map +0 -1
  578. package/dist/chunk-H7274TKR.mjs.map +0 -1
  579. package/dist/chunk-ILNCUSXW.mjs.map +0 -1
  580. package/dist/chunk-IPV2TUAT.js.map +0 -1
  581. package/dist/chunk-JEOKDUPQ.js +0 -45
  582. package/dist/chunk-JEOKDUPQ.js.map +0 -1
  583. package/dist/chunk-JNAXDFC4.mjs.map +0 -1
  584. package/dist/chunk-JNRHTZL4.js.map +0 -1
  585. package/dist/chunk-JTCQJKJE.js.map +0 -1
  586. package/dist/chunk-L4V6TKMJ.mjs.map +0 -1
  587. package/dist/chunk-LC7AM4J5.js.map +0 -1
  588. package/dist/chunk-M5GY2AI3.mjs.map +0 -1
  589. package/dist/chunk-O2VJZOR2.mjs.map +0 -1
  590. package/dist/chunk-OZ3FU4BT.js.map +0 -1
  591. package/dist/chunk-P4TB4ROG.js.map +0 -1
  592. package/dist/chunk-Q7347KP6.mjs.map +0 -1
  593. package/dist/chunk-QJU6HBSK.mjs +0 -39
  594. package/dist/chunk-QJU6HBSK.mjs.map +0 -1
  595. package/dist/chunk-QRBPT6Z6.mjs +0 -6
  596. package/dist/chunk-RCSTDJUH.js.map +0 -1
  597. package/dist/chunk-RVRN5U7W.mjs.map +0 -1
  598. package/dist/chunk-TDJKGN5Q.mjs.map +0 -1
  599. package/dist/chunk-TP7H6BSK.mjs.map +0 -1
  600. package/dist/chunk-TSZIACRC.js.map +0 -1
  601. package/dist/chunk-UJ6CHZAI.mjs.map +0 -1
  602. package/dist/chunk-VFGEY6FJ.js.map +0 -1
  603. package/dist/discover-FGTKWOL3.mjs +0 -4
  604. package/dist/discover-NJZPWTDL.js +0 -21
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/proxy/segment.ts","../../src/proxy/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @sonordev/site-kit/proxy — visitor segment resolution (the \"one edge pass\").\n *\n * Pure, edge-runtime-safe helpers that classify a request into a coarse visitor\n * segment (new-vs-returning + marketing source + campaign) from the URL's UTM\n * params and the referrer. The middleware writes the result to the `_sk_seg`\n * cookie so server-rendered slots / personalization can vary by segment WITHOUT\n * each one re-parsing the request. Resolved once, at the edge.\n *\n * Kept side-effect-free (no NextResponse, no cookie writes) so it is trivially\n * unit-testable and reusable.\n */\nimport type { NextRequest } from 'next/server'\n\nexport type SegmentSource = 'paid' | 'organic' | 'social' | 'referral' | 'direct'\n\nexport interface VisitorSegment {\n /** `new` on the first visit (no prior `_sk_vid` cookie), else `returning`. */\n visitorType: 'new' | 'returning'\n /** Marketing source bucket derived from UTM medium/source, then referrer. */\n source: SegmentSource\n /** `utm_campaign`, if present (sanitized when encoded). */\n campaign: string | null\n}\n\nconst PAID_MEDIUMS = ['cpc', 'ppc', 'paid', 'paidsearch', 'paid-search', 'display', 'cpm', 'banner']\nconst SOCIAL_MEDIUMS = ['social', 'social-media', 'social_media', 'sm']\nconst SOCIAL_HOSTS = [\n 'facebook.',\n 'instagram.',\n 'linkedin.',\n 't.co',\n 'twitter.',\n 'x.com',\n 'pinterest.',\n 'tiktok.',\n 'youtube.',\n 'reddit.',\n]\nconst SEARCH_HOSTS = ['google.', 'bing.', 'duckduckgo.', 'yahoo.', 'ecosia.', 'brave.', 'baidu.', 'yandex.']\n\n/**\n * Classify `request` into a {@link VisitorSegment}. UTM params win over the\n * referrer; a same-host referrer is ignored (internal navigation, not a source).\n */\nexport function resolveVisitorSegment(\n request: NextRequest,\n opts: { hadVisitorCookie: boolean },\n): VisitorSegment {\n const params = request.nextUrl.searchParams\n const medium = (params.get('utm_medium') || '').toLowerCase().trim()\n const campaign = params.get('utm_campaign')\n\n let source: SegmentSource = 'direct'\n\n if (PAID_MEDIUMS.includes(medium)) {\n source = 'paid'\n } else if (SOCIAL_MEDIUMS.includes(medium)) {\n source = 'social'\n } else if (medium === 'organic') {\n source = 'organic'\n } else if (medium === 'referral') {\n source = 'referral'\n } else if (params.get('utm_source') || params.get('gclid') || params.get('fbclid')) {\n // A tagged link with a non-standard medium: gclid => paid Google, fbclid => social.\n if (params.get('gclid')) source = 'paid'\n else if (params.get('fbclid')) source = 'social'\n else source = 'referral'\n } else {\n // No campaign tagging — fall back to the referrer host.\n const ref = request.headers.get('referer') || ''\n if (ref) {\n try {\n const host = new URL(ref).host.toLowerCase()\n const selfHost = request.nextUrl.host.toLowerCase()\n if (host && host !== selfHost) {\n if (SEARCH_HOSTS.some((h) => host.includes(h))) source = 'organic'\n else if (SOCIAL_HOSTS.some((h) => host.includes(h))) source = 'social'\n else source = 'referral'\n }\n } catch {\n /* malformed referer — stays 'direct' */\n }\n }\n }\n\n return {\n visitorType: opts.hadVisitorCookie ? 'returning' : 'new',\n source,\n campaign: campaign || null,\n }\n}\n\n/**\n * Compact, cookie-safe encoding: `\"<visitorType>|<source>|<campaign>\"`, e.g.\n * `\"new|paid|spring_sale\"`. Campaign is sanitized to `[A-Za-z0-9_-]` and capped.\n * Decode with {@link decodeSegment}.\n */\nexport function encodeSegment(seg: VisitorSegment): string {\n const campaign = (seg.campaign || '').replace(/[^a-zA-Z0-9_-]/g, '').slice(0, 40)\n return `${seg.visitorType}|${seg.source}|${campaign}`\n}\n\n/** Parse a `_sk_seg` cookie value produced by {@link encodeSegment}. */\nexport function decodeSegment(value: string | undefined | null): VisitorSegment | null {\n if (!value) return null\n const [visitorType, source, campaign] = value.split('|')\n if (visitorType !== 'new' && visitorType !== 'returning') return null\n return {\n visitorType,\n source: (['paid', 'organic', 'social', 'referral', 'direct'].includes(source) ? source : 'direct') as SegmentSource,\n campaign: campaign || null,\n }\n}\n","/**\n * @sonordev/site-kit/proxy\n *\n * Composable Next.js Proxy factory (Next 16's replacement for middleware).\n * Also served on the deprecated `/middleware` subpath. Handles:\n * - Security headers (CSP frame-ancestors, nosniff, referrer/permissions\n * policy — deliberately NO X-Frame-Options; see securityHeaders.ts)\n * - Portal-managed redirects (rule list cached in memory, see the\n * `redirects` option below)\n * - Stamps `x-sk-path` on the request (read by the deprecated not-found\n * resolver; kept so sites still using it don't break)\n * - Optional before/after hooks for custom logic\n *\n * @example\n * ```ts\n * // proxy.ts — entire file\n * import { createProxy } from '@sonordev/site-kit/proxy'\n *\n * export default createProxy()\n *\n * // Inlined on purpose: Next statically parses `config.matcher` at build\n * // time and REJECTS an imported value (Turbopack build error). Keep in\n * // sync with siteKitMatcher below.\n * export const config = {\n * matcher: [\n * '/((?!_next/static|_next/image|favicon\\\\.ico|.*\\\\.(?:ico|png|jpg|jpeg|gif|webp|svg|woff2?)$).*)',\n * ],\n * }\n * ```\n *\n * Next 16 notes: `middleware.ts` is deprecated (codemod:\n * `npx @next/codemod@canary middleware-to-proxy .`), Proxy defaults to the\n * Node.js runtime, and the `runtime` config option is unavailable in proxy\n * files — setting it throws at build time.\n *\n * @example With custom hooks:\n * ```ts\n * export default createProxy({\n * before: (req) => {\n * // Custom auth check, etc.\n * },\n * })\n * ```\n */\n\nimport { NextRequest, NextResponse } from 'next/server'\nimport {\n handleManagedRedirects,\n SK_PATH_HEADER,\n type RedirectConfig,\n} from '../redirects'\nimport {\n buildSecurityHeaders,\n type SecurityHeadersConfig,\n} from './securityHeaders'\nimport { buildAiDiscoveryHeaders } from '../llms/discovery-headers'\nimport { resolveVisitorSegment, encodeSegment } from './segment'\n// Single source of truth for v4 UUIDs — Web Crypto in the edge runtime, with a\n// non-throwing fallback everywhere else. Do NOT re-fork ID generation here.\nimport { uuid } from '../shared/uuid'\n\nexport type { SecurityHeadersConfig } from './securityHeaders'\nexport { DEFAULT_FRAME_ANCESTORS } from './securityHeaders'\nexport {\n resolveVisitorSegment,\n encodeSegment,\n decodeSegment,\n type VisitorSegment,\n type SegmentSource,\n} from './segment'\n\nexport interface IdentityConfig {\n /**\n * Also resolve + persist a coarse visitor segment (new-vs-returning + source\n * + campaign) into the `_sk_seg` cookie, for segment-aware slots /\n * personalization. Default: true (when identity is enabled).\n */\n segment?: boolean\n /** Days the `_sk_vid` visitor cookie persists. Default: 730 (~2 years). */\n cookieMaxAgeDays?: number\n}\n\nexport interface LlmsDiscoveryConfig {\n /** Canonical site origin, e.g. `https://example.com` */\n siteUrl: string\n /** Path to llms.txt (default `/llms.txt`) */\n llmsPath?: string\n}\n\nexport interface SiteKitProxyConfig {\n /**\n * Portal-managed redirects, checked before each page render. Default: true,\n * and the recommended setting.\n *\n * The rule list is cached in memory for `cacheSeconds` (default 300) per\n * instance, and a fetch is bounded at 300ms with a 30s failure cooldown,\n * so page loads rarely wait on it. Set `false` only on a site that uses no\n * Sonor-managed redirects.\n *\n * Don't move redirects into app/not-found.tsx with\n * `resolveManagedRedirect()`. Next renders the root not-found boundary\n * inside every page, and the resolver's headers() call opts every route\n * into dynamic rendering (verified on a Next 16 build: every ○ route became\n * ƒ). That resolver is deprecated.\n */\n redirects?: boolean | RedirectConfig\n /** Enable security headers. Default: true */\n securityHeaders?: boolean | SecurityHeadersConfig\n /**\n * Opt-in: inject `Link: <...>; rel=\"describedby\"` header on HTML responses\n * pointing to /llms.txt for AI crawler discovery (RFC 8288).\n * Preferred over visible footer links.\n */\n llmsDiscovery?: LlmsDiscoveryConfig | false\n /**\n * Opt-in EDGE IDENTITY pass. When enabled, the middleware ensures a\n * first-party `_sk_vid` visitor cookie exists (server-authoritative id) and\n * resolves the visitor segment into `_sk_seg`, so server-rendered slots and\n * personalization can read identity + segment without re-parsing the request.\n * Purely additive — it only writes cookies, never changes the rendered HTML,\n * so it is LCP/static-safe. Default: OFF (sites opt in for 3.0 personalization).\n *\n * NOTE: to make these the SAME id the client uses, the shared identity helper\n * must read `_sk_vid` cookie-first (a follow-on change validated with a live\n * preview); until then the cookie is the server-side mirror.\n */\n identity?: boolean | IdentityConfig\n /**\n * Hook that runs BEFORE redirect check.\n * Return a NextResponse to short-circuit, or undefined to continue.\n */\n before?: (\n request: NextRequest,\n ) => NextResponse | undefined | Promise<NextResponse | undefined>\n /**\n * Hook that runs AFTER all processing.\n * Receives the response that will be sent — mutate headers, etc.\n */\n after?: (\n request: NextRequest,\n response: NextResponse,\n ) => NextResponse | Promise<NextResponse>\n}\n\n/**\n * Create a fully-featured Next.js Proxy function.\n *\n * With zero config this handles redirects + security headers automatically.\n * Export it from `proxy.ts` at the project root (or `src/`).\n */\nexport function createProxy(config?: SiteKitProxyConfig) {\n const securityHeaders = buildSecurityHeaders(\n config?.securityHeaders,\n )\n\n // Pre-compute discovery headers (static per middleware instance)\n const discoveryHeaders: Record<string, string> =\n config?.llmsDiscovery\n ? buildAiDiscoveryHeaders({\n siteUrl: config.llmsDiscovery.siteUrl,\n llmsPath: config.llmsDiscovery.llmsPath,\n })\n : {}\n\n return async function proxy(\n request: NextRequest,\n ): Promise<NextResponse> {\n // 1. Run user's 'before' hook\n if (config?.before) {\n const earlyResponse = await config.before(request)\n if (earlyResponse) {\n // Apply security headers even to early responses\n applyHeaders(earlyResponse, securityHeaders)\n return earlyResponse\n }\n }\n\n // 2. Check Portal-managed redirects (unless disabled)\n if (config?.redirects !== false) {\n const redirectConfig: RedirectConfig =\n typeof config?.redirects === 'object'\n ? config.redirects\n : {}\n\n const redirect = await handleManagedRedirects(\n request,\n redirectConfig,\n )\n if (redirect) {\n // Redirects get security headers too\n applyHeaders(redirect, securityHeaders)\n return redirect\n }\n }\n\n // 3. Build the pass-through response. Stamp the requested\n // pathname+search onto the REQUEST for the deprecated not-found\n // resolver, so sites still calling it keep working.\n // Pure header write — no fetch, static-safe.\n const requestHeaders = new Headers(request.headers)\n requestHeaders.set(\n SK_PATH_HEADER,\n request.nextUrl.pathname + request.nextUrl.search,\n )\n let response = NextResponse.next({ request: { headers: requestHeaders } })\n\n // 4. Apply security headers\n applyHeaders(response, securityHeaders)\n\n // 5. Apply AI discovery Link header (only on HTML-like requests, not static assets)\n if (Object.keys(discoveryHeaders).length > 0) {\n const accept = request.headers.get('accept') || ''\n if (accept.includes('text/html') || accept.includes('*/*')) {\n applyHeaders(response, discoveryHeaders)\n }\n }\n\n // 5b. Edge identity pass (opt-in). Ensure a first-party `_sk_vid` visitor\n // cookie exists and resolve the visitor segment into `_sk_seg`. Additive:\n // only writes cookies, never changes the rendered HTML (LCP/static-safe).\n if (config?.identity) {\n const idCfg: IdentityConfig =\n typeof config.identity === 'object' ? config.identity : {}\n const hadVisitorCookie = !!request.cookies.get('_sk_vid')?.value\n if (!hadVisitorCookie) {\n const maxAgeDays = idCfg.cookieMaxAgeDays ?? 730\n response.cookies.set('_sk_vid', uuid(), {\n maxAge: maxAgeDays * 24 * 60 * 60,\n path: '/',\n sameSite: 'lax',\n secure: true,\n })\n }\n if (idCfg.segment !== false) {\n const segment = encodeSegment(\n resolveVisitorSegment(request, { hadVisitorCookie }),\n )\n response.cookies.set('_sk_seg', segment, {\n // Session-ish: a fresh campaign / source on a later visit re-segments.\n maxAge: 30 * 60,\n path: '/',\n sameSite: 'lax',\n secure: true,\n })\n }\n }\n\n // 6. Run user's 'after' hook\n if (config?.after) {\n response = await config.after(request, response)\n }\n\n return response\n }\n}\n\nfunction applyHeaders(\n response: NextResponse,\n headers: Record<string, string>,\n): void {\n for (const [key, value] of Object.entries(headers)) {\n response.headers.set(key, value)\n }\n}\n\n/**\n * REFERENCE VALUE ONLY — copy the array into your proxy.ts, do not export it.\n *\n * `export const config = siteKitMatcher` is a BUILD ERROR on Next 16:\n * `config.matcher` must be statically analyzable and Turbopack rejects any\n * imported value. This constant exists so the canonical pattern lives in one\n * place (the scaffold, docs, and tests read it) — inline its contents.\n */\nexport const siteKitMatcher = {\n matcher: [\n '/((?!_next/static|_next/image|favicon\\\\.ico|.*\\\\.(?:ico|png|jpg|jpeg|gif|webp|svg|woff2?)$).*)',\n ],\n}\n\n/**\n * @deprecated Use `createProxy`. Next 16 renamed the `middleware` file\n * convention to `proxy` (`npx @next/codemod@canary middleware-to-proxy .`);\n * the old name still builds but warns, and the factory is named for the file\n * it is exported from. Kept indefinitely — 100+ fleet sites import it — but\n * new code should say `createProxy` from `@sonordev/site-kit/proxy`.\n */\nexport const createMiddleware = createProxy\n\n/** @deprecated Use `SiteKitProxyConfig`. */\nexport type SiteKitMiddlewareConfig = SiteKitProxyConfig\n"]}
1
+ {"version":3,"sources":["../../src/proxy/segment.ts","../../src/proxy/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @sonordev/site-kit/proxy — visitor segment resolution (the \"one edge pass\").\n *\n * Pure, edge-runtime-safe helpers that classify a request into a coarse visitor\n * segment (new-vs-returning + marketing source + campaign) from the URL's UTM\n * params and the referrer. The middleware writes the result to the `_sk_seg`\n * cookie so server-rendered slots / personalization can vary by segment WITHOUT\n * each one re-parsing the request. Resolved once, at the edge.\n *\n * Kept side-effect-free (no NextResponse, no cookie writes) so it is trivially\n * unit-testable and reusable.\n */\nimport type { NextRequest } from 'next/server'\n\nexport type SegmentSource = 'paid' | 'organic' | 'social' | 'referral' | 'direct'\n\nexport interface VisitorSegment {\n /** `new` on the first visit (no prior `_sk_vid` cookie), else `returning`. */\n visitorType: 'new' | 'returning'\n /** Marketing source bucket derived from UTM medium/source, then referrer. */\n source: SegmentSource\n /** `utm_campaign`, if present (sanitized when encoded). */\n campaign: string | null\n}\n\nconst PAID_MEDIUMS = ['cpc', 'ppc', 'paid', 'paidsearch', 'paid-search', 'display', 'cpm', 'banner']\nconst SOCIAL_MEDIUMS = ['social', 'social-media', 'social_media', 'sm']\nconst SOCIAL_HOSTS = [\n 'facebook.',\n 'instagram.',\n 'linkedin.',\n 't.co',\n 'twitter.',\n 'x.com',\n 'pinterest.',\n 'tiktok.',\n 'youtube.',\n 'reddit.',\n]\nconst SEARCH_HOSTS = ['google.', 'bing.', 'duckduckgo.', 'yahoo.', 'ecosia.', 'brave.', 'baidu.', 'yandex.']\n\n/**\n * Classify `request` into a {@link VisitorSegment}. UTM params win over the\n * referrer; a same-host referrer is ignored (internal navigation, not a source).\n */\nexport function resolveVisitorSegment(\n request: NextRequest,\n opts: { hadVisitorCookie: boolean },\n): VisitorSegment {\n const params = request.nextUrl.searchParams\n const medium = (params.get('utm_medium') || '').toLowerCase().trim()\n const campaign = params.get('utm_campaign')\n\n let source: SegmentSource = 'direct'\n\n if (PAID_MEDIUMS.includes(medium)) {\n source = 'paid'\n } else if (SOCIAL_MEDIUMS.includes(medium)) {\n source = 'social'\n } else if (medium === 'organic') {\n source = 'organic'\n } else if (medium === 'referral') {\n source = 'referral'\n } else if (params.get('utm_source') || params.get('gclid') || params.get('fbclid')) {\n // A tagged link with a non-standard medium: gclid => paid Google, fbclid => social.\n if (params.get('gclid')) source = 'paid'\n else if (params.get('fbclid')) source = 'social'\n else source = 'referral'\n } else {\n // No campaign tagging — fall back to the referrer host.\n const ref = request.headers.get('referer') || ''\n if (ref) {\n try {\n const host = new URL(ref).host.toLowerCase()\n const selfHost = request.nextUrl.host.toLowerCase()\n if (host && host !== selfHost) {\n if (SEARCH_HOSTS.some((h) => host.includes(h))) source = 'organic'\n else if (SOCIAL_HOSTS.some((h) => host.includes(h))) source = 'social'\n else source = 'referral'\n }\n } catch {\n /* malformed referer — stays 'direct' */\n }\n }\n }\n\n return {\n visitorType: opts.hadVisitorCookie ? 'returning' : 'new',\n source,\n campaign: campaign || null,\n }\n}\n\n/**\n * Compact, cookie-safe encoding: `\"<visitorType>|<source>|<campaign>\"`, e.g.\n * `\"new|paid|spring_sale\"`. Campaign is sanitized to `[A-Za-z0-9_-]` and capped.\n * Decode with {@link decodeSegment}.\n */\nexport function encodeSegment(seg: VisitorSegment): string {\n const campaign = (seg.campaign || '').replace(/[^a-zA-Z0-9_-]/g, '').slice(0, 40)\n return `${seg.visitorType}|${seg.source}|${campaign}`\n}\n\n/** Parse a `_sk_seg` cookie value produced by {@link encodeSegment}. */\nexport function decodeSegment(value: string | undefined | null): VisitorSegment | null {\n if (!value) return null\n const [visitorType, source, campaign] = value.split('|')\n if (visitorType !== 'new' && visitorType !== 'returning') return null\n return {\n visitorType,\n source: (['paid', 'organic', 'social', 'referral', 'direct'].includes(source) ? source : 'direct') as SegmentSource,\n campaign: campaign || null,\n }\n}\n","/**\n * @sonordev/site-kit/proxy\n *\n * Composable Next.js Proxy factory (Next 16's replacement for middleware).\n * Also served on the deprecated `/middleware` subpath. Handles:\n * - Security headers (CSP frame-ancestors, nosniff, referrer/permissions\n * policy — deliberately NO X-Frame-Options; see securityHeaders.ts)\n * - Portal-managed redirects (rule list cached in memory, see the\n * `redirects` option below)\n * - Stamps `x-sk-path` on the request (read by the deprecated not-found\n * resolver; kept so sites still using it don't break)\n * - Optional before/after hooks for custom logic\n *\n * @example\n * ```ts\n * // proxy.ts — entire file\n * import { createProxy } from '@sonordev/site-kit/proxy'\n *\n * export default createProxy()\n *\n * // Inlined on purpose: Next statically parses `config.matcher` at build\n * // time and REJECTS an imported value (Turbopack build error). Keep in\n * // sync with siteKitMatcher below.\n * export const config = {\n * matcher: [\n * '/((?!_next/static|_next/image|favicon\\\\.ico|.*\\\\.(?:ico|png|jpg|jpeg|gif|webp|svg|woff2?)$).*)',\n * ],\n * }\n * ```\n *\n * Next 16 notes: `middleware.ts` is deprecated (codemod:\n * `npx @next/codemod@canary middleware-to-proxy .`), Proxy defaults to the\n * Node.js runtime, and the `runtime` config option is unavailable in proxy\n * files — setting it throws at build time.\n *\n * @example With custom hooks:\n * ```ts\n * export default createProxy({\n * before: (req) => {\n * // Custom auth check, etc.\n * },\n * })\n * ```\n */\n\nimport { NextRequest, NextResponse } from 'next/server'\nimport {\n handleManagedRedirects,\n SK_PATH_HEADER,\n type RedirectConfig,\n} from '../redirects'\nimport {\n buildSecurityHeaders,\n type SecurityHeadersConfig,\n} from './securityHeaders'\nimport { buildAiDiscoveryHeaders, wantsLlmsDiscoveryLink } from '../llms/discovery-headers'\nimport { resolveVisitorSegment, encodeSegment } from './segment'\n// Single source of truth for v4 UUIDs — Web Crypto in the edge runtime, with a\n// non-throwing fallback everywhere else. Do NOT re-fork ID generation here.\nimport { uuid } from '../shared/uuid'\n\nexport type { SecurityHeadersConfig } from './securityHeaders'\nexport { DEFAULT_FRAME_ANCESTORS } from './securityHeaders'\nexport {\n resolveVisitorSegment,\n encodeSegment,\n decodeSegment,\n type VisitorSegment,\n type SegmentSource,\n} from './segment'\n\nexport interface IdentityConfig {\n /**\n * Also resolve + persist a coarse visitor segment (new-vs-returning + source\n * + campaign) into the `_sk_seg` cookie, for segment-aware slots /\n * personalization. Default: true (when identity is enabled).\n */\n segment?: boolean\n /** Days the `_sk_vid` visitor cookie persists. Default: 730 (~2 years). */\n cookieMaxAgeDays?: number\n}\n\nexport interface LlmsDiscoveryConfig {\n /** Canonical site origin, e.g. `https://example.com` */\n siteUrl: string\n /** Path to llms.txt (default `/llms.txt`) */\n llmsPath?: string\n}\n\nexport interface SiteKitProxyConfig {\n /**\n * Portal-managed redirects, checked before each page render. Default: true,\n * and the recommended setting.\n *\n * The rule list is cached in memory for `cacheSeconds` (default 300) per\n * instance, and a fetch is bounded at 300ms with a 30s failure cooldown,\n * so page loads rarely wait on it. Set `false` only on a site that uses no\n * Sonor-managed redirects.\n *\n * Don't move redirects into app/not-found.tsx with\n * `resolveManagedRedirect()`. Next renders the root not-found boundary\n * inside every page, and the resolver's headers() call opts every route\n * into dynamic rendering (verified on a Next 16 build: every ○ route became\n * ƒ). That resolver is deprecated.\n */\n redirects?: boolean | RedirectConfig\n /** Enable security headers. Default: true */\n securityHeaders?: boolean | SecurityHeadersConfig\n /**\n * Opt-in: inject `Link: <...>; rel=\"describedby\"` header on HTML responses\n * pointing to /llms.txt for AI crawler discovery (RFC 8288).\n * Preferred over visible footer links.\n */\n llmsDiscovery?: LlmsDiscoveryConfig | false\n /**\n * Opt-in EDGE IDENTITY pass. When enabled, the middleware ensures a\n * first-party `_sk_vid` visitor cookie exists (server-authoritative id) and\n * resolves the visitor segment into `_sk_seg`, so server-rendered slots and\n * personalization can read identity + segment without re-parsing the request.\n * Purely additive — it only writes cookies, never changes the rendered HTML,\n * so it is LCP/static-safe. Default: OFF (sites opt in for 3.0 personalization).\n *\n * NOTE: to make these the SAME id the client uses, the shared identity helper\n * must read `_sk_vid` cookie-first (a follow-on change validated with a live\n * preview); until then the cookie is the server-side mirror.\n */\n identity?: boolean | IdentityConfig\n /**\n * Hook that runs BEFORE redirect check.\n * Return a NextResponse to short-circuit, or undefined to continue.\n */\n before?: (\n request: NextRequest,\n ) => NextResponse | undefined | Promise<NextResponse | undefined>\n /**\n * Hook that runs AFTER all processing.\n * Receives the response that will be sent — mutate headers, etc.\n */\n after?: (\n request: NextRequest,\n response: NextResponse,\n ) => NextResponse | Promise<NextResponse>\n}\n\n/**\n * Create a fully-featured Next.js Proxy function.\n *\n * With zero config this handles redirects + security headers automatically.\n * Export it from `proxy.ts` at the project root (or `src/`).\n */\nexport function createProxy(config?: SiteKitProxyConfig) {\n const securityHeaders = buildSecurityHeaders(\n config?.securityHeaders,\n )\n\n // Pre-compute discovery headers (static per middleware instance)\n const discoveryHeaders: Record<string, string> =\n config?.llmsDiscovery\n ? buildAiDiscoveryHeaders({\n siteUrl: config.llmsDiscovery.siteUrl,\n llmsPath: config.llmsDiscovery.llmsPath,\n })\n : {}\n\n return async function proxy(\n request: NextRequest,\n ): Promise<NextResponse> {\n // 1. Run user's 'before' hook\n if (config?.before) {\n const earlyResponse = await config.before(request)\n if (earlyResponse) {\n // Apply security headers even to early responses\n applyHeaders(earlyResponse, securityHeaders)\n return earlyResponse\n }\n }\n\n // 2. Check Portal-managed redirects (unless disabled)\n if (config?.redirects !== false) {\n const redirectConfig: RedirectConfig =\n typeof config?.redirects === 'object'\n ? config.redirects\n : {}\n\n const redirect = await handleManagedRedirects(\n request,\n redirectConfig,\n )\n if (redirect) {\n // Redirects get security headers too\n applyHeaders(redirect, securityHeaders)\n return redirect\n }\n }\n\n // 3. Build the pass-through response. Stamp the requested\n // pathname+search onto the REQUEST for the deprecated not-found\n // resolver, so sites still calling it keep working.\n // Pure header write — no fetch, static-safe.\n const requestHeaders = new Headers(request.headers)\n requestHeaders.set(\n SK_PATH_HEADER,\n request.nextUrl.pathname + request.nextUrl.search,\n )\n let response = NextResponse.next({ request: { headers: requestHeaders } })\n\n // 4. Apply security headers\n applyHeaders(response, securityHeaders)\n\n // 5. Apply the AI discovery Link header to anything that could be a page.\n // A request with no Accept header counts: that's how curl and many\n // crawlers ask, and they're who the header is for.\n if (\n Object.keys(discoveryHeaders).length > 0 &&\n wantsLlmsDiscoveryLink({\n method: request.method,\n pathname: request.nextUrl.pathname,\n accept: request.headers.get('accept'),\n rsc: request.headers.get('rsc'),\n })\n ) {\n applyHeaders(response, discoveryHeaders)\n }\n\n // 5b. Edge identity pass (opt-in). Ensure a first-party `_sk_vid` visitor\n // cookie exists and resolve the visitor segment into `_sk_seg`. Additive:\n // only writes cookies, never changes the rendered HTML (LCP/static-safe).\n if (config?.identity) {\n const idCfg: IdentityConfig =\n typeof config.identity === 'object' ? config.identity : {}\n const hadVisitorCookie = !!request.cookies.get('_sk_vid')?.value\n if (!hadVisitorCookie) {\n const maxAgeDays = idCfg.cookieMaxAgeDays ?? 730\n response.cookies.set('_sk_vid', uuid(), {\n maxAge: maxAgeDays * 24 * 60 * 60,\n path: '/',\n sameSite: 'lax',\n secure: true,\n })\n }\n if (idCfg.segment !== false) {\n const segment = encodeSegment(\n resolveVisitorSegment(request, { hadVisitorCookie }),\n )\n response.cookies.set('_sk_seg', segment, {\n // Session-ish: a fresh campaign / source on a later visit re-segments.\n maxAge: 30 * 60,\n path: '/',\n sameSite: 'lax',\n secure: true,\n })\n }\n }\n\n // 6. Run user's 'after' hook\n if (config?.after) {\n response = await config.after(request, response)\n }\n\n return response\n }\n}\n\nfunction applyHeaders(\n response: NextResponse,\n headers: Record<string, string>,\n): void {\n for (const [key, value] of Object.entries(headers)) {\n response.headers.set(key, value)\n }\n}\n\n/**\n * REFERENCE VALUE ONLY — copy the array into your proxy.ts, do not export it.\n *\n * `export const config = siteKitMatcher` is a BUILD ERROR on Next 16:\n * `config.matcher` must be statically analyzable and Turbopack rejects any\n * imported value. This constant exists so the canonical pattern lives in one\n * place (the scaffold, docs, and tests read it) — inline its contents.\n */\nexport const siteKitMatcher = {\n matcher: [\n '/((?!_next/static|_next/image|favicon\\\\.ico|.*\\\\.(?:ico|png|jpg|jpeg|gif|webp|svg|woff2?)$).*)',\n ],\n}\n\n/**\n * @deprecated Use `createProxy`. Next 16 renamed the `middleware` file\n * convention to `proxy` (`npx @next/codemod@canary middleware-to-proxy .`);\n * the old name still builds but warns, and the factory is named for the file\n * it is exported from. Kept indefinitely — 100+ fleet sites import it — but\n * new code should say `createProxy` from `@sonordev/site-kit/proxy`.\n */\nexport const createMiddleware = createProxy\n\n/** @deprecated Use `SiteKitProxyConfig`. */\nexport type SiteKitMiddlewareConfig = SiteKitProxyConfig\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=llms-discovery.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llms-discovery.test.d.ts","sourceRoot":"","sources":["../../src/proxy/llms-discovery.test.ts"],"names":[],"mappings":""}
@@ -4,6 +4,14 @@
4
4
  * Fetches redirect rules from Portal and applies them.
5
5
  * Supports API key only (domain resolved from Portal) or domain-based lookup.
6
6
  *
7
+ * On a multi-site project (one Sonor project, many domains) rules are per
8
+ * host: a rule with no site applies everywhere, and one tagged
9
+ * 'bd-charlotte.com' applies only there. The list read and the hit both name
10
+ * the host through `sites/site-param` (explicit `site` > NEXT_PUBLIC_SITE_URL
11
+ * host), and the in-memory cache key carries it too. Keyed by API key alone,
12
+ * two hosts served by one process would share whichever list was fetched
13
+ * first, for the whole cache window.
14
+ *
7
15
  * Usage in proxy.ts (API key only):
8
16
  *
9
17
  * import { handleManagedRedirects } from '@sonordev/site-kit/redirects'
@@ -32,6 +40,14 @@ export interface RedirectConfig {
32
40
  domain?: string;
33
41
  /** Project API key; when set, redirects are fetched by key (no domain needed) */
34
42
  apiKey?: string;
43
+ /**
44
+ * Sub-site host on a multi-site project (e.g. 'bd-charlotte.com'). Same
45
+ * meaning as the `site` argument of withSiteParam: when unset it comes from
46
+ * the NEXT_PUBLIC_SITE_URL host. The API returns this host's rules plus the
47
+ * project-wide ones. When nothing resolves no site is sent, and the API
48
+ * answers for the project's primary domain.
49
+ */
50
+ site?: string;
35
51
  portalApiUrl?: string;
36
52
  cacheSeconds?: number;
37
53
  /**
@@ -55,6 +71,7 @@ export declare const SK_PATH_HEADER = "x-sk-path";
55
71
  * Fetch redirect rules from Portal API.
56
72
  * When apiKey is set (or from env), uses key-based endpoint (no domain required).
57
73
  * Otherwise uses domain query (or domain from getSiteConfig when only env API key is set).
74
+ * Either way the site host goes along as `?site=`, left off when it resolves empty.
58
75
  */
59
76
  export declare function fetchRedirectRules(config: RedirectConfig): Promise<RedirectRule[]>;
60
77
  /**
@@ -71,12 +88,19 @@ export declare function handleManagedRedirects(request: NextRequest, config: Red
71
88
  /**
72
89
  * Track redirect hit for analytics (needs domain; resolved from config or getSiteConfig when using apiKey)
73
90
  * Exported for the not-found resolver — fire-and-forget, never throws.
91
+ * The site host goes in the body so a multi-site project counts the hit on
92
+ * that host's rule, not the project-wide one.
74
93
  */
75
94
  export declare function trackRedirectHit(config: RedirectConfig, fromPath: string, domainForHit?: string): Promise<void>;
76
95
  /**
77
96
  * Generate Next.js redirects config from Portal
78
97
  * Use this in next.config.js for build-time redirects
79
98
  *
99
+ * The site host resolves as it does everywhere else. Next loads .env files
100
+ * before it evaluates next.config, so a NEXT_PUBLIC_SITE_URL from .env.local
101
+ * or the host's env is already visible here, and each build of a multi-site
102
+ * project bakes in its own host's rules.
103
+ *
80
104
  * Usage in next.config.js:
81
105
  *
82
106
  * const { generateNextRedirects } = require('@sonordev/site-kit/redirects')
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/redirects/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAGvD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAA;IAC5C,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iFAAiF;IACjF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAoBD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,cAAc,CAAA;AAUzC;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAgExF;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,YAAY,EAAE,GACpB,YAAY,GAAG,SAAS,CAO1B;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAiCnC;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAarH;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC;IACjF,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;CACnB,CAAC,CAAC,CAUF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/redirects/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAKvD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAA;IAC5C,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iFAAiF;IACjF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAoBD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,cAAc,CAAA;AAezC;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAmExF;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,YAAY,EAAE,GACpB,YAAY,GAAG,SAAS,CAO1B;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAiCnC;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAarH;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC;IACjF,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;CACnB,CAAC,CAAC,CAUF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
@@ -1,38 +1,41 @@
1
1
  'use strict';
2
2
 
3
- var chunkH6YVT3BL_js = require('../chunk-H6YVT3BL.js');
3
+ var chunkI3ND4XYW_js = require('../chunk-I3ND4XYW.js');
4
4
  require('../chunk-JP5WGL75.js');
5
+ require('../chunk-YN7QHLWF.js');
6
+ require('../chunk-H5NBFNND.js');
7
+ require('../chunk-SWIKKSKL.js');
5
8
  require('../chunk-SNAQBZPT.js');
6
9
 
7
10
 
8
11
 
9
12
  Object.defineProperty(exports, "SK_PATH_HEADER", {
10
13
  enumerable: true,
11
- get: function () { return chunkH6YVT3BL_js.SK_PATH_HEADER; }
14
+ get: function () { return chunkI3ND4XYW_js.SK_PATH_HEADER; }
12
15
  });
13
16
  Object.defineProperty(exports, "clearRedirectCache", {
14
17
  enumerable: true,
15
- get: function () { return chunkH6YVT3BL_js.clearRedirectCache; }
18
+ get: function () { return chunkI3ND4XYW_js.clearRedirectCache; }
16
19
  });
17
20
  Object.defineProperty(exports, "fetchRedirectRules", {
18
21
  enumerable: true,
19
- get: function () { return chunkH6YVT3BL_js.fetchRedirectRules; }
22
+ get: function () { return chunkI3ND4XYW_js.fetchRedirectRules; }
20
23
  });
21
24
  Object.defineProperty(exports, "findRedirectMatch", {
22
25
  enumerable: true,
23
- get: function () { return chunkH6YVT3BL_js.findRedirectMatch; }
26
+ get: function () { return chunkI3ND4XYW_js.findRedirectMatch; }
24
27
  });
25
28
  Object.defineProperty(exports, "generateNextRedirects", {
26
29
  enumerable: true,
27
- get: function () { return chunkH6YVT3BL_js.generateNextRedirects; }
30
+ get: function () { return chunkI3ND4XYW_js.generateNextRedirects; }
28
31
  });
29
32
  Object.defineProperty(exports, "handleManagedRedirects", {
30
33
  enumerable: true,
31
- get: function () { return chunkH6YVT3BL_js.handleManagedRedirects; }
34
+ get: function () { return chunkI3ND4XYW_js.handleManagedRedirects; }
32
35
  });
33
36
  Object.defineProperty(exports, "trackRedirectHit", {
34
37
  enumerable: true,
35
- get: function () { return chunkH6YVT3BL_js.trackRedirectHit; }
38
+ get: function () { return chunkI3ND4XYW_js.trackRedirectHit; }
36
39
  });
37
40
  //# sourceMappingURL=index.js.map
38
41
  //# sourceMappingURL=index.js.map
@@ -1,5 +1,8 @@
1
- export { SK_PATH_HEADER, clearRedirectCache, fetchRedirectRules, findRedirectMatch, generateNextRedirects, handleManagedRedirects, trackRedirectHit } from '../chunk-ILNCUSXW.mjs';
1
+ export { SK_PATH_HEADER, clearRedirectCache, fetchRedirectRules, findRedirectMatch, generateNextRedirects, handleManagedRedirects, trackRedirectHit } from '../chunk-4L7OHRWB.mjs';
2
2
  import '../chunk-B22WSN4L.mjs';
3
+ import '../chunk-4TLFZ6NR.mjs';
4
+ import '../chunk-JLVCWC6A.mjs';
5
+ import '../chunk-ZN4HBK5C.mjs';
3
6
  import '../chunk-BEXTDHO4.mjs';
4
7
  //# sourceMappingURL=index.mjs.map
5
8
  //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../src/redirects/index.test.ts"],"names":[],"mappings":""}
@@ -1,7 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var chunkH6YVT3BL_js = require('../chunk-H6YVT3BL.js');
3
+ var chunkI3ND4XYW_js = require('../chunk-I3ND4XYW.js');
4
4
  require('../chunk-JP5WGL75.js');
5
+ require('../chunk-YN7QHLWF.js');
6
+ require('../chunk-H5NBFNND.js');
7
+ require('../chunk-SWIKKSKL.js');
5
8
  require('../chunk-SNAQBZPT.js');
6
9
  var headers = require('next/headers');
7
10
 
@@ -16,7 +19,7 @@ async function resolveManagedRedirect(config = {}) {
16
19
  let raw;
17
20
  try {
18
21
  const h = await headers.headers();
19
- raw = h.get(chunkH6YVT3BL_js.SK_PATH_HEADER);
22
+ raw = h.get(chunkI3ND4XYW_js.SK_PATH_HEADER);
20
23
  } catch {
21
24
  return null;
22
25
  }
@@ -27,10 +30,10 @@ async function resolveManagedRedirect(config = {}) {
27
30
  if (pathname.startsWith("/_next") || pathname.startsWith("/api") || pathname.includes(".")) {
28
31
  return null;
29
32
  }
30
- const rules = await chunkH6YVT3BL_js.fetchRedirectRules(config);
31
- const match = chunkH6YVT3BL_js.findRedirectMatch(pathname, rules);
33
+ const rules = await chunkI3ND4XYW_js.fetchRedirectRules(config);
34
+ const match = chunkI3ND4XYW_js.findRedirectMatch(pathname, rules);
32
35
  if (!match) return null;
33
- chunkH6YVT3BL_js.trackRedirectHit(config, match.from_path, config.domain).catch(() => {
36
+ chunkI3ND4XYW_js.trackRedirectHit(config, match.from_path, config.domain).catch(() => {
34
37
  });
35
38
  const destination = search ? `${match.to_path}${match.to_path.includes("?") ? "&" : "?"}${search}` : match.to_path;
36
39
  return {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/redirects/not-found.ts"],"names":["headers","SK_PATH_HEADER","fetchRedirectRules","findRedirectMatch","trackRedirectHit"],"mappings":";;;;;;;AA0CA,IAAI,MAAA,GAAS,KAAA;AAMb,eAAsB,sBAAA,CACpB,MAAA,GAAyB,EAAC,EACQ;AAClC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAA,GAAS,IAAA;AACT,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN;AAAA,KAEF;AAAA,EACF;AACA,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,CAAA,GAAI,MAAMA,eAAA,EAAQ;AACxB,IAAA,GAAA,GAAM,CAAA,CAAE,IAAIC,+BAAc,CAAA;AAAA,EAC5B,CAAA,CAAA,MAAQ;AAGN,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,GAAA,IAAO,CAAC,IAAI,UAAA,CAAW,GAAG,GAAG,OAAO,IAAA;AAEzC,EAAA,MAAM,UAAA,GAAa,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA;AAClC,EAAA,MAAM,WAAW,UAAA,KAAe,EAAA,GAAK,MAAM,GAAA,CAAI,KAAA,CAAM,GAAG,UAAU,CAAA;AAClE,EAAA,MAAM,SAAS,UAAA,KAAe,EAAA,GAAK,KAAK,GAAA,CAAI,KAAA,CAAM,aAAa,CAAC,CAAA;AAIhE,EAAA,IAAI,QAAA,CAAS,UAAA,CAAW,QAAQ,CAAA,IAAK,QAAA,CAAS,UAAA,CAAW,MAAM,CAAA,IAAK,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA,EAAG;AAC1F,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAMC,mCAAA,CAAmB,MAAM,CAAA;AAC7C,EAAA,MAAM,KAAA,GAAQC,kCAAA,CAAkB,QAAA,EAAU,KAAK,CAAA;AAC/C,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAGnB,EAAAC,iCAAA,CAAiB,QAAQ,KAAA,CAAM,SAAA,EAAW,OAAO,MAAM,CAAA,CAAE,MAAM,MAAM;AAAA,EAAC,CAAC,CAAA;AAEvE,EAAA,MAAM,cAAc,MAAA,GAChB,CAAA,EAAG,KAAA,CAAM,OAAO,GAAG,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,GAAG,IAAI,GAAA,GAAM,GAAG,CAAA,EAAG,MAAM,KACnE,KAAA,CAAM,OAAA;AAEV,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,SAAA,EAAW,KAAA,CAAM,aAAA,KAAkB,KAAA,IAAS,MAAM,aAAA,KAAkB;AAAA,GACtE;AACF","file":"not-found.js","sourcesContent":["/**\n * @sonordev/site-kit/redirects/not-found — managed redirects at the 404 boundary.\n *\n * DEPRECATED: DON'T USE THIS IN app/not-found.tsx. Next renders the root\n * not-found boundary inside every page's tree, so this resolver's headers()\n * call opts EVERY route into dynamic rendering. On a Next 16 build\n * (nkylawfirm.com, 2026-09-14) every static route turned dynamic, and\n * reverting only not-found.jsx put them back. Skipping the lookup at build\n * time doesn't help: the 404 page would then be prerendered static and the\n * redirects would never run.\n *\n * Use `createProxy({ redirects: true })` instead (the default). The proxy\n * caches the rule list in memory for five minutes, so page loads rarely wait\n * on it.\n *\n * Kept exported so sites that already call it keep building. It logs a\n * one-time warning per process.\n */\n\nimport { headers } from 'next/headers'\nimport {\n fetchRedirectRules,\n findRedirectMatch,\n trackRedirectHit,\n SK_PATH_HEADER,\n type RedirectConfig,\n} from './index'\n\nexport interface ResolvedRedirect {\n /** Destination path/URL with the original query string carried over. */\n destination: string\n /** True for 301/308 rules — pair with next/navigation's permanentRedirect. */\n permanent: boolean\n}\n\n/**\n * Resolve a managed redirect for the URL that just 404ed.\n *\n * Returns null when the path is unknown (proxy not installed), no rule\n * matches, or Portal can't be reached inside the timeout — a 404 page must\n * never hang on us, so the default budget is the shared 300ms.\n */\nlet warned = false\n\n/**\n * @deprecated Makes every page dynamic when called from a not-found boundary.\n * Use `createProxy({ redirects: true })`. See the module comment.\n */\nexport async function resolveManagedRedirect(\n config: RedirectConfig = {},\n): Promise<ResolvedRedirect | null> {\n if (!warned) {\n warned = true\n console.warn(\n '[site-kit] resolveManagedRedirect() is deprecated: called from a not-found boundary it makes every page dynamic. ' +\n 'Remove it and use createProxy({ redirects: true }) in proxy.ts.',\n )\n }\n let raw: string | null\n try {\n const h = await headers()\n raw = h.get(SK_PATH_HEADER)\n } catch {\n // Called outside a request scope (e.g. build-time prerender of the 404\n // shell). Nothing to resolve.\n return null\n }\n if (!raw || !raw.startsWith('/')) return null\n\n const queryIndex = raw.indexOf('?')\n const pathname = queryIndex === -1 ? raw : raw.slice(0, queryIndex)\n const search = queryIndex === -1 ? '' : raw.slice(queryIndex + 1)\n\n // Same skip set as the proxy-mode handler: these can 404 but are never\n // redirect targets, so don't spend the fetch on them.\n if (pathname.startsWith('/_next') || pathname.startsWith('/api') || pathname.includes('.')) {\n return null\n }\n\n const rules = await fetchRedirectRules(config)\n const match = findRedirectMatch(pathname, rules)\n if (!match) return null\n\n // Fire and forget — analytics must never delay the redirect.\n trackRedirectHit(config, match.from_path, config.domain).catch(() => {})\n\n const destination = search\n ? `${match.to_path}${match.to_path.includes('?') ? '&' : '?'}${search}`\n : match.to_path\n\n return {\n destination,\n permanent: match.redirect_type === '301' || match.redirect_type === '308',\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/redirects/not-found.ts"],"names":["headers","SK_PATH_HEADER","fetchRedirectRules","findRedirectMatch","trackRedirectHit"],"mappings":";;;;;;;;;;AA0CA,IAAI,MAAA,GAAS,KAAA;AAMb,eAAsB,sBAAA,CACpB,MAAA,GAAyB,EAAC,EACQ;AAClC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAA,GAAS,IAAA;AACT,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN;AAAA,KAEF;AAAA,EACF;AACA,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,CAAA,GAAI,MAAMA,eAAA,EAAQ;AACxB,IAAA,GAAA,GAAM,CAAA,CAAE,IAAIC,+BAAc,CAAA;AAAA,EAC5B,CAAA,CAAA,MAAQ;AAGN,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,GAAA,IAAO,CAAC,IAAI,UAAA,CAAW,GAAG,GAAG,OAAO,IAAA;AAEzC,EAAA,MAAM,UAAA,GAAa,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA;AAClC,EAAA,MAAM,WAAW,UAAA,KAAe,EAAA,GAAK,MAAM,GAAA,CAAI,KAAA,CAAM,GAAG,UAAU,CAAA;AAClE,EAAA,MAAM,SAAS,UAAA,KAAe,EAAA,GAAK,KAAK,GAAA,CAAI,KAAA,CAAM,aAAa,CAAC,CAAA;AAIhE,EAAA,IAAI,QAAA,CAAS,UAAA,CAAW,QAAQ,CAAA,IAAK,QAAA,CAAS,UAAA,CAAW,MAAM,CAAA,IAAK,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA,EAAG;AAC1F,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAMC,mCAAA,CAAmB,MAAM,CAAA;AAC7C,EAAA,MAAM,KAAA,GAAQC,kCAAA,CAAkB,QAAA,EAAU,KAAK,CAAA;AAC/C,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAGnB,EAAAC,iCAAA,CAAiB,QAAQ,KAAA,CAAM,SAAA,EAAW,OAAO,MAAM,CAAA,CAAE,MAAM,MAAM;AAAA,EAAC,CAAC,CAAA;AAEvE,EAAA,MAAM,cAAc,MAAA,GAChB,CAAA,EAAG,KAAA,CAAM,OAAO,GAAG,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,GAAG,IAAI,GAAA,GAAM,GAAG,CAAA,EAAG,MAAM,KACnE,KAAA,CAAM,OAAA;AAEV,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,SAAA,EAAW,KAAA,CAAM,aAAA,KAAkB,KAAA,IAAS,MAAM,aAAA,KAAkB;AAAA,GACtE;AACF","file":"not-found.js","sourcesContent":["/**\n * @sonordev/site-kit/redirects/not-found — managed redirects at the 404 boundary.\n *\n * DEPRECATED: DON'T USE THIS IN app/not-found.tsx. Next renders the root\n * not-found boundary inside every page's tree, so this resolver's headers()\n * call opts EVERY route into dynamic rendering. On a Next 16 build\n * (nkylawfirm.com, 2026-09-14) every static route turned dynamic, and\n * reverting only not-found.jsx put them back. Skipping the lookup at build\n * time doesn't help: the 404 page would then be prerendered static and the\n * redirects would never run.\n *\n * Use `createProxy({ redirects: true })` instead (the default). The proxy\n * caches the rule list in memory for five minutes, so page loads rarely wait\n * on it.\n *\n * Kept exported so sites that already call it keep building. It logs a\n * one-time warning per process.\n */\n\nimport { headers } from 'next/headers'\nimport {\n fetchRedirectRules,\n findRedirectMatch,\n trackRedirectHit,\n SK_PATH_HEADER,\n type RedirectConfig,\n} from './index'\n\nexport interface ResolvedRedirect {\n /** Destination path/URL with the original query string carried over. */\n destination: string\n /** True for 301/308 rules — pair with next/navigation's permanentRedirect. */\n permanent: boolean\n}\n\n/**\n * Resolve a managed redirect for the URL that just 404ed.\n *\n * Returns null when the path is unknown (proxy not installed), no rule\n * matches, or Portal can't be reached inside the timeout — a 404 page must\n * never hang on us, so the default budget is the shared 300ms.\n */\nlet warned = false\n\n/**\n * @deprecated Makes every page dynamic when called from a not-found boundary.\n * Use `createProxy({ redirects: true })`. See the module comment.\n */\nexport async function resolveManagedRedirect(\n config: RedirectConfig = {},\n): Promise<ResolvedRedirect | null> {\n if (!warned) {\n warned = true\n console.warn(\n '[site-kit] resolveManagedRedirect() is deprecated: called from a not-found boundary it makes every page dynamic. ' +\n 'Remove it and use createProxy({ redirects: true }) in proxy.ts.',\n )\n }\n let raw: string | null\n try {\n const h = await headers()\n raw = h.get(SK_PATH_HEADER)\n } catch {\n // Called outside a request scope (e.g. build-time prerender of the 404\n // shell). Nothing to resolve.\n return null\n }\n if (!raw || !raw.startsWith('/')) return null\n\n const queryIndex = raw.indexOf('?')\n const pathname = queryIndex === -1 ? raw : raw.slice(0, queryIndex)\n const search = queryIndex === -1 ? '' : raw.slice(queryIndex + 1)\n\n // Same skip set as the proxy-mode handler: these can 404 but are never\n // redirect targets, so don't spend the fetch on them.\n if (pathname.startsWith('/_next') || pathname.startsWith('/api') || pathname.includes('.')) {\n return null\n }\n\n const rules = await fetchRedirectRules(config)\n const match = findRedirectMatch(pathname, rules)\n if (!match) return null\n\n // Fire and forget — analytics must never delay the redirect.\n trackRedirectHit(config, match.from_path, config.domain).catch(() => {})\n\n const destination = search\n ? `${match.to_path}${match.to_path.includes('?') ? '&' : '?'}${search}`\n : match.to_path\n\n return {\n destination,\n permanent: match.redirect_type === '301' || match.redirect_type === '308',\n }\n}\n"]}
@@ -1,5 +1,8 @@
1
- import { SK_PATH_HEADER, fetchRedirectRules, findRedirectMatch, trackRedirectHit } from '../chunk-ILNCUSXW.mjs';
1
+ import { SK_PATH_HEADER, fetchRedirectRules, findRedirectMatch, trackRedirectHit } from '../chunk-4L7OHRWB.mjs';
2
2
  import '../chunk-B22WSN4L.mjs';
3
+ import '../chunk-4TLFZ6NR.mjs';
4
+ import '../chunk-JLVCWC6A.mjs';
5
+ import '../chunk-ZN4HBK5C.mjs';
3
6
  import '../chunk-BEXTDHO4.mjs';
4
7
  import { headers } from 'next/headers';
5
8
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/redirects/not-found.ts"],"names":[],"mappings":";;;;;AA0CA,IAAI,MAAA,GAAS,KAAA;AAMb,eAAsB,sBAAA,CACpB,MAAA,GAAyB,EAAC,EACQ;AAClC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAA,GAAS,IAAA;AACT,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN;AAAA,KAEF;AAAA,EACF;AACA,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,CAAA,GAAI,MAAM,OAAA,EAAQ;AACxB,IAAA,GAAA,GAAM,CAAA,CAAE,IAAI,cAAc,CAAA;AAAA,EAC5B,CAAA,CAAA,MAAQ;AAGN,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,GAAA,IAAO,CAAC,IAAI,UAAA,CAAW,GAAG,GAAG,OAAO,IAAA;AAEzC,EAAA,MAAM,UAAA,GAAa,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA;AAClC,EAAA,MAAM,WAAW,UAAA,KAAe,EAAA,GAAK,MAAM,GAAA,CAAI,KAAA,CAAM,GAAG,UAAU,CAAA;AAClE,EAAA,MAAM,SAAS,UAAA,KAAe,EAAA,GAAK,KAAK,GAAA,CAAI,KAAA,CAAM,aAAa,CAAC,CAAA;AAIhE,EAAA,IAAI,QAAA,CAAS,UAAA,CAAW,QAAQ,CAAA,IAAK,QAAA,CAAS,UAAA,CAAW,MAAM,CAAA,IAAK,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA,EAAG;AAC1F,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAM,kBAAA,CAAmB,MAAM,CAAA;AAC7C,EAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,QAAA,EAAU,KAAK,CAAA;AAC/C,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAGnB,EAAA,gBAAA,CAAiB,QAAQ,KAAA,CAAM,SAAA,EAAW,OAAO,MAAM,CAAA,CAAE,MAAM,MAAM;AAAA,EAAC,CAAC,CAAA;AAEvE,EAAA,MAAM,cAAc,MAAA,GAChB,CAAA,EAAG,KAAA,CAAM,OAAO,GAAG,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,GAAG,IAAI,GAAA,GAAM,GAAG,CAAA,EAAG,MAAM,KACnE,KAAA,CAAM,OAAA;AAEV,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,SAAA,EAAW,KAAA,CAAM,aAAA,KAAkB,KAAA,IAAS,MAAM,aAAA,KAAkB;AAAA,GACtE;AACF","file":"not-found.mjs","sourcesContent":["/**\n * @sonordev/site-kit/redirects/not-found — managed redirects at the 404 boundary.\n *\n * DEPRECATED: DON'T USE THIS IN app/not-found.tsx. Next renders the root\n * not-found boundary inside every page's tree, so this resolver's headers()\n * call opts EVERY route into dynamic rendering. On a Next 16 build\n * (nkylawfirm.com, 2026-09-14) every static route turned dynamic, and\n * reverting only not-found.jsx put them back. Skipping the lookup at build\n * time doesn't help: the 404 page would then be prerendered static and the\n * redirects would never run.\n *\n * Use `createProxy({ redirects: true })` instead (the default). The proxy\n * caches the rule list in memory for five minutes, so page loads rarely wait\n * on it.\n *\n * Kept exported so sites that already call it keep building. It logs a\n * one-time warning per process.\n */\n\nimport { headers } from 'next/headers'\nimport {\n fetchRedirectRules,\n findRedirectMatch,\n trackRedirectHit,\n SK_PATH_HEADER,\n type RedirectConfig,\n} from './index'\n\nexport interface ResolvedRedirect {\n /** Destination path/URL with the original query string carried over. */\n destination: string\n /** True for 301/308 rules — pair with next/navigation's permanentRedirect. */\n permanent: boolean\n}\n\n/**\n * Resolve a managed redirect for the URL that just 404ed.\n *\n * Returns null when the path is unknown (proxy not installed), no rule\n * matches, or Portal can't be reached inside the timeout — a 404 page must\n * never hang on us, so the default budget is the shared 300ms.\n */\nlet warned = false\n\n/**\n * @deprecated Makes every page dynamic when called from a not-found boundary.\n * Use `createProxy({ redirects: true })`. See the module comment.\n */\nexport async function resolveManagedRedirect(\n config: RedirectConfig = {},\n): Promise<ResolvedRedirect | null> {\n if (!warned) {\n warned = true\n console.warn(\n '[site-kit] resolveManagedRedirect() is deprecated: called from a not-found boundary it makes every page dynamic. ' +\n 'Remove it and use createProxy({ redirects: true }) in proxy.ts.',\n )\n }\n let raw: string | null\n try {\n const h = await headers()\n raw = h.get(SK_PATH_HEADER)\n } catch {\n // Called outside a request scope (e.g. build-time prerender of the 404\n // shell). Nothing to resolve.\n return null\n }\n if (!raw || !raw.startsWith('/')) return null\n\n const queryIndex = raw.indexOf('?')\n const pathname = queryIndex === -1 ? raw : raw.slice(0, queryIndex)\n const search = queryIndex === -1 ? '' : raw.slice(queryIndex + 1)\n\n // Same skip set as the proxy-mode handler: these can 404 but are never\n // redirect targets, so don't spend the fetch on them.\n if (pathname.startsWith('/_next') || pathname.startsWith('/api') || pathname.includes('.')) {\n return null\n }\n\n const rules = await fetchRedirectRules(config)\n const match = findRedirectMatch(pathname, rules)\n if (!match) return null\n\n // Fire and forget — analytics must never delay the redirect.\n trackRedirectHit(config, match.from_path, config.domain).catch(() => {})\n\n const destination = search\n ? `${match.to_path}${match.to_path.includes('?') ? '&' : '?'}${search}`\n : match.to_path\n\n return {\n destination,\n permanent: match.redirect_type === '301' || match.redirect_type === '308',\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/redirects/not-found.ts"],"names":[],"mappings":";;;;;;;;AA0CA,IAAI,MAAA,GAAS,KAAA;AAMb,eAAsB,sBAAA,CACpB,MAAA,GAAyB,EAAC,EACQ;AAClC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAA,GAAS,IAAA;AACT,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN;AAAA,KAEF;AAAA,EACF;AACA,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,CAAA,GAAI,MAAM,OAAA,EAAQ;AACxB,IAAA,GAAA,GAAM,CAAA,CAAE,IAAI,cAAc,CAAA;AAAA,EAC5B,CAAA,CAAA,MAAQ;AAGN,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,GAAA,IAAO,CAAC,IAAI,UAAA,CAAW,GAAG,GAAG,OAAO,IAAA;AAEzC,EAAA,MAAM,UAAA,GAAa,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA;AAClC,EAAA,MAAM,WAAW,UAAA,KAAe,EAAA,GAAK,MAAM,GAAA,CAAI,KAAA,CAAM,GAAG,UAAU,CAAA;AAClE,EAAA,MAAM,SAAS,UAAA,KAAe,EAAA,GAAK,KAAK,GAAA,CAAI,KAAA,CAAM,aAAa,CAAC,CAAA;AAIhE,EAAA,IAAI,QAAA,CAAS,UAAA,CAAW,QAAQ,CAAA,IAAK,QAAA,CAAS,UAAA,CAAW,MAAM,CAAA,IAAK,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA,EAAG;AAC1F,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAM,kBAAA,CAAmB,MAAM,CAAA;AAC7C,EAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,QAAA,EAAU,KAAK,CAAA;AAC/C,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAGnB,EAAA,gBAAA,CAAiB,QAAQ,KAAA,CAAM,SAAA,EAAW,OAAO,MAAM,CAAA,CAAE,MAAM,MAAM;AAAA,EAAC,CAAC,CAAA;AAEvE,EAAA,MAAM,cAAc,MAAA,GAChB,CAAA,EAAG,KAAA,CAAM,OAAO,GAAG,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,GAAG,IAAI,GAAA,GAAM,GAAG,CAAA,EAAG,MAAM,KACnE,KAAA,CAAM,OAAA;AAEV,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,SAAA,EAAW,KAAA,CAAM,aAAA,KAAkB,KAAA,IAAS,MAAM,aAAA,KAAkB;AAAA,GACtE;AACF","file":"not-found.mjs","sourcesContent":["/**\n * @sonordev/site-kit/redirects/not-found — managed redirects at the 404 boundary.\n *\n * DEPRECATED: DON'T USE THIS IN app/not-found.tsx. Next renders the root\n * not-found boundary inside every page's tree, so this resolver's headers()\n * call opts EVERY route into dynamic rendering. On a Next 16 build\n * (nkylawfirm.com, 2026-09-14) every static route turned dynamic, and\n * reverting only not-found.jsx put them back. Skipping the lookup at build\n * time doesn't help: the 404 page would then be prerendered static and the\n * redirects would never run.\n *\n * Use `createProxy({ redirects: true })` instead (the default). The proxy\n * caches the rule list in memory for five minutes, so page loads rarely wait\n * on it.\n *\n * Kept exported so sites that already call it keep building. It logs a\n * one-time warning per process.\n */\n\nimport { headers } from 'next/headers'\nimport {\n fetchRedirectRules,\n findRedirectMatch,\n trackRedirectHit,\n SK_PATH_HEADER,\n type RedirectConfig,\n} from './index'\n\nexport interface ResolvedRedirect {\n /** Destination path/URL with the original query string carried over. */\n destination: string\n /** True for 301/308 rules — pair with next/navigation's permanentRedirect. */\n permanent: boolean\n}\n\n/**\n * Resolve a managed redirect for the URL that just 404ed.\n *\n * Returns null when the path is unknown (proxy not installed), no rule\n * matches, or Portal can't be reached inside the timeout — a 404 page must\n * never hang on us, so the default budget is the shared 300ms.\n */\nlet warned = false\n\n/**\n * @deprecated Makes every page dynamic when called from a not-found boundary.\n * Use `createProxy({ redirects: true })`. See the module comment.\n */\nexport async function resolveManagedRedirect(\n config: RedirectConfig = {},\n): Promise<ResolvedRedirect | null> {\n if (!warned) {\n warned = true\n console.warn(\n '[site-kit] resolveManagedRedirect() is deprecated: called from a not-found boundary it makes every page dynamic. ' +\n 'Remove it and use createProxy({ redirects: true }) in proxy.ts.',\n )\n }\n let raw: string | null\n try {\n const h = await headers()\n raw = h.get(SK_PATH_HEADER)\n } catch {\n // Called outside a request scope (e.g. build-time prerender of the 404\n // shell). Nothing to resolve.\n return null\n }\n if (!raw || !raw.startsWith('/')) return null\n\n const queryIndex = raw.indexOf('?')\n const pathname = queryIndex === -1 ? raw : raw.slice(0, queryIndex)\n const search = queryIndex === -1 ? '' : raw.slice(queryIndex + 1)\n\n // Same skip set as the proxy-mode handler: these can 404 but are never\n // redirect targets, so don't spend the fetch on them.\n if (pathname.startsWith('/_next') || pathname.startsWith('/api') || pathname.includes('.')) {\n return null\n }\n\n const rules = await fetchRedirectRules(config)\n const match = findRedirectMatch(pathname, rules)\n if (!match) return null\n\n // Fire and forget — analytics must never delay the redirect.\n trackRedirectHit(config, match.from_path, config.domain).catch(() => {})\n\n const destination = search\n ? `${match.to_path}${match.to_path.includes('?') ? '&' : '?'}${search}`\n : match.to_path\n\n return {\n destination,\n permanent: match.redirect_type === '301' || match.redirect_type === '308',\n }\n}\n"]}
@@ -17,6 +17,8 @@
17
17
  * })
18
18
  */
19
19
  export { isNextInternalsPath } from './next-internals';
20
+ export { AI_RETRIEVAL_CRAWLERS, AI_TRAINING_CRAWLERS, buildAiCrawlerRules, formatContentSignals, createRobotsTxtHandler, } from '../llms/aiRobots';
21
+ export type { AiCrawlerRulesOptions, ContentSignalsOptions, RobotsTxtHandlerOptions } from '../llms/aiRobots';
20
22
  export interface RobotsConfig {
21
23
  /** Base URL of the site (optional when apiKey is set; then resolved from Portal) */
22
24
  baseUrl?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/robots/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAEtD,MAAM,WAAW,YAAY;IAC3B,oFAAoF;IACpF,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB;AA8BD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAkBrF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/robots/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAKtD,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,kBAAkB,CAAA;AACzB,YAAY,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAE7G,MAAM,WAAW,YAAY;IAC3B,oFAAoF;IACpF,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB;AA8BD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAkBrF"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunk3UC6JETG_js = require('../chunk-3UC6JETG.js');
3
+ var chunkNRBITVDK_js = require('../chunk-NRBITVDK.js');
4
4
  var chunkJP5WGL75_js = require('../chunk-JP5WGL75.js');
5
5
  require('../chunk-SNAQBZPT.js');
6
6
 
@@ -12,7 +12,7 @@ function buildRobotsResponse(baseUrl, config) {
12
12
  } else {
13
13
  lines.push("User-agent: *");
14
14
  lines.push("Allow: /");
15
- const disallow = chunk3UC6JETG_js.stripNextInternals(config.disallow) ?? [];
15
+ const disallow = chunkNRBITVDK_js.stripNextInternals(config.disallow) ?? [];
16
16
  for (const p of Array.isArray(disallow) ? disallow : [disallow]) {
17
17
  lines.push(`Disallow: ${p}`);
18
18
  }
@@ -49,9 +49,29 @@ function createRobots(config) {
49
49
  };
50
50
  }
51
51
 
52
+ Object.defineProperty(exports, "AI_RETRIEVAL_CRAWLERS", {
53
+ enumerable: true,
54
+ get: function () { return chunkNRBITVDK_js.AI_RETRIEVAL_CRAWLERS; }
55
+ });
56
+ Object.defineProperty(exports, "AI_TRAINING_CRAWLERS", {
57
+ enumerable: true,
58
+ get: function () { return chunkNRBITVDK_js.AI_TRAINING_CRAWLERS; }
59
+ });
60
+ Object.defineProperty(exports, "buildAiCrawlerRules", {
61
+ enumerable: true,
62
+ get: function () { return chunkNRBITVDK_js.buildAiCrawlerRules; }
63
+ });
64
+ Object.defineProperty(exports, "createRobotsTxtHandler", {
65
+ enumerable: true,
66
+ get: function () { return chunkNRBITVDK_js.createRobotsTxtHandler; }
67
+ });
68
+ Object.defineProperty(exports, "formatContentSignals", {
69
+ enumerable: true,
70
+ get: function () { return chunkNRBITVDK_js.formatContentSignals; }
71
+ });
52
72
  Object.defineProperty(exports, "isNextInternalsPath", {
53
73
  enumerable: true,
54
- get: function () { return chunk3UC6JETG_js.isNextInternalsPath; }
74
+ get: function () { return chunkNRBITVDK_js.isNextInternalsPath; }
55
75
  });
56
76
  exports.createRobots = createRobots;
57
77
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/robots/index.ts"],"names":["stripNextInternals","getSiteConfig"],"mappings":";;;;;;;AAyCA,SAAS,mBAAA,CAAoB,SAAiB,MAAA,EAAgC;AAC5E,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,IAAI,MAAA,CAAO,aAAA,EAAe,IAAA,EAAK,EAAG;AAChC,IAAA,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,aAAA,CAAc,IAAA,EAAM,CAAA;AAAA,EACxC,CAAA,MAAO;AACL,IAAA,KAAA,CAAM,KAAK,eAAe,CAAA;AAC1B,IAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AACrB,IAAA,MAAM,QAAA,GAAWA,mCAAA,CAAmB,MAAA,CAAO,QAAQ,KAAK,EAAC;AACzD,IAAA,KAAA,MAAW,CAAA,IAAK,MAAM,OAAA,CAAQ,QAAQ,IAAI,QAAA,GAAW,CAAC,QAAQ,CAAA,EAAG;AAC/D,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,CAAC,CAAA,CAAE,CAAA;AAAA,IAC7B;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACtC,EAAA,MAAM,WAAA,GAAc,OAAO,WAAA,IAAe,cAAA;AAC1C,EAAA,MAAM,UAAA,GAAa,CAAA,EAAG,IAAI,CAAA,EAAG,WAAA,CAAY,UAAA,CAAW,GAAG,CAAA,GAAI,EAAA,GAAK,GAAG,CAAA,EAAG,WAAW,CAAA,CAAA;AACjF,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAY,UAAU,CAAA,CAAE,CAAA;AAEnC,EAAA,OAAO,IAAI,QAAA,CAAS,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,EAAG;AAAA,IACpC,MAAA,EAAQ,GAAA;AAAA,IACR,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB,2BAAA;AAAA,MAChB,eAAA,EAAiB;AAAA;AACnB,GACD,CAAA;AACH;AAMO,SAAS,aAAa,MAAA,EAA0D;AACrF,EAAA,OAAO,SAAS,MAAA,GAAuC;AACrD,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAO,mBAAA,CAAoB,SAAS,MAAM,CAAA;AAAA,IAC5C;AACA,IAAA,MAAM,MAAA,GAAS,OAAO,MAAA,KAAW,OAAO,YAAY,WAAA,IAAe,OAAA,CAAQ,GAAA,IAAO,OAAA,CAAQ,GAAA,CAAI,aAAA,CAAA;AAC9F,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAO,IAAI,SAAS,4BAAA,EAA8B;AAAA,QAChD,MAAA,EAAQ,GAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,2BAAA;AAA4B,OACxD,CAAA;AAAA,IACH;AACA,IAAA,OAAOC,8BAAA,CAAc,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,IAAA,KAAS;AACrE,MAAA,MAAM,GAAA,GAAM,MAAM,QAAA,IAAY,qBAAA;AAC9B,MAAA,OAAO,mBAAA,CAAoB,KAAK,MAAM,CAAA;AAAA,IACxC,CAAC,CAAA;AAAA,EACH,CAAA;AACF","file":"index.js","sourcesContent":["/**\n * @sonordev/site-kit/robots - robots.txt Generator\n *\n * Generates robots.txt with Sitemap directive.\n * baseUrl can be omitted when apiKey is set (resolved from Portal project-info).\n *\n * @example\n * // app/robots.txt/route.ts (API key only)\n * import { createRobots } from '@sonordev/site-kit/robots'\n * export const GET = createRobots({ apiKey: process.env.SONOR_API_KEY })\n *\n * @example\n * // With explicit baseUrl\n * export const GET = createRobots({\n * baseUrl: process.env.NEXT_PUBLIC_SITE_URL || 'https://example.com',\n * disallow: ['/admin'],\n * })\n */\n\nimport { getSiteConfig } from '../site-config'\nimport { stripNextInternals } from './next-internals'\n\nexport { isNextInternalsPath } from './next-internals'\n\nexport interface RobotsConfig {\n /** Base URL of the site (optional when apiKey is set; then resolved from Portal) */\n baseUrl?: string\n /** Project API key; when set and baseUrl is not, baseUrl is resolved from Portal */\n apiKey?: string\n apiUrl?: string\n /** Path to sitemap (default: /sitemap.xml) */\n sitemapPath?: string\n /** Pre-built robots content from Portal (overrides default when provided) */\n managedRobots?: string | null\n /**\n * Paths to disallow (e.g. ['/admin', '/api']). `/_next` paths are dropped:\n * Googlebot needs them to render pages and index images.\n */\n disallow?: string[]\n}\n\nfunction buildRobotsResponse(baseUrl: string, config: RobotsConfig): Response {\n const lines: string[] = []\n\n if (config.managedRobots?.trim()) {\n lines.push(config.managedRobots.trim())\n } else {\n lines.push('User-agent: *')\n lines.push('Allow: /')\n const disallow = stripNextInternals(config.disallow) ?? []\n for (const p of Array.isArray(disallow) ? disallow : [disallow]) {\n lines.push(`Disallow: ${p}`)\n }\n }\n\n const base = baseUrl.replace(/\\/$/, '')\n const sitemapPath = config.sitemapPath ?? '/sitemap.xml'\n const sitemapUrl = `${base}${sitemapPath.startsWith('/') ? '' : '/'}${sitemapPath}`\n lines.push(`Sitemap: ${sitemapUrl}`)\n\n return new Response(lines.join('\\n'), {\n status: 200,\n headers: {\n 'Content-Type': 'text/plain; charset=utf-8',\n 'Cache-Control': 'public, max-age=86400, s-maxage=86400',\n },\n })\n}\n\n/**\n * Create a robots.txt handler that returns a Response or Promise<Response>.\n * Use as GET handler for app/robots.txt/route.ts. When baseUrl is omitted, pass apiKey to resolve from Portal.\n */\nexport function createRobots(config: RobotsConfig): () => Response | Promise<Response> {\n return function robots(): Response | Promise<Response> {\n const baseUrl = config.baseUrl\n if (baseUrl) {\n return buildRobotsResponse(baseUrl, config)\n }\n const apiKey = config.apiKey ?? (typeof process !== 'undefined' && process.env && process.env.SONOR_API_KEY)\n if (!apiKey) {\n return new Response('User-agent: *\\nDisallow: /', {\n status: 200,\n headers: { 'Content-Type': 'text/plain; charset=utf-8' },\n })\n }\n return getSiteConfig({ apiKey, apiUrl: config.apiUrl }).then((site) => {\n const url = site?.site_url ?? 'https://example.com'\n return buildRobotsResponse(url, config)\n })\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/robots/index.ts"],"names":["stripNextInternals","getSiteConfig"],"mappings":";;;;;;;AAqDA,SAAS,mBAAA,CAAoB,SAAiB,MAAA,EAAgC;AAC5E,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,IAAI,MAAA,CAAO,aAAA,EAAe,IAAA,EAAK,EAAG;AAChC,IAAA,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,aAAA,CAAc,IAAA,EAAM,CAAA;AAAA,EACxC,CAAA,MAAO;AACL,IAAA,KAAA,CAAM,KAAK,eAAe,CAAA;AAC1B,IAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AACrB,IAAA,MAAM,QAAA,GAAWA,mCAAA,CAAmB,MAAA,CAAO,QAAQ,KAAK,EAAC;AACzD,IAAA,KAAA,MAAW,CAAA,IAAK,MAAM,OAAA,CAAQ,QAAQ,IAAI,QAAA,GAAW,CAAC,QAAQ,CAAA,EAAG;AAC/D,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,CAAC,CAAA,CAAE,CAAA;AAAA,IAC7B;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACtC,EAAA,MAAM,WAAA,GAAc,OAAO,WAAA,IAAe,cAAA;AAC1C,EAAA,MAAM,UAAA,GAAa,CAAA,EAAG,IAAI,CAAA,EAAG,WAAA,CAAY,UAAA,CAAW,GAAG,CAAA,GAAI,EAAA,GAAK,GAAG,CAAA,EAAG,WAAW,CAAA,CAAA;AACjF,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAY,UAAU,CAAA,CAAE,CAAA;AAEnC,EAAA,OAAO,IAAI,QAAA,CAAS,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,EAAG;AAAA,IACpC,MAAA,EAAQ,GAAA;AAAA,IACR,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB,2BAAA;AAAA,MAChB,eAAA,EAAiB;AAAA;AACnB,GACD,CAAA;AACH;AAMO,SAAS,aAAa,MAAA,EAA0D;AACrF,EAAA,OAAO,SAAS,MAAA,GAAuC;AACrD,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAO,mBAAA,CAAoB,SAAS,MAAM,CAAA;AAAA,IAC5C;AACA,IAAA,MAAM,MAAA,GAAS,OAAO,MAAA,KAAW,OAAO,YAAY,WAAA,IAAe,OAAA,CAAQ,GAAA,IAAO,OAAA,CAAQ,GAAA,CAAI,aAAA,CAAA;AAC9F,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAO,IAAI,SAAS,4BAAA,EAA8B;AAAA,QAChD,MAAA,EAAQ,GAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,2BAAA;AAA4B,OACxD,CAAA;AAAA,IACH;AACA,IAAA,OAAOC,8BAAA,CAAc,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,IAAA,KAAS;AACrE,MAAA,MAAM,GAAA,GAAM,MAAM,QAAA,IAAY,qBAAA;AAC9B,MAAA,OAAO,mBAAA,CAAoB,KAAK,MAAM,CAAA;AAAA,IACxC,CAAC,CAAA;AAAA,EACH,CAAA;AACF","file":"index.js","sourcesContent":["/**\n * @sonordev/site-kit/robots - robots.txt Generator\n *\n * Generates robots.txt with Sitemap directive.\n * baseUrl can be omitted when apiKey is set (resolved from Portal project-info).\n *\n * @example\n * // app/robots.txt/route.ts (API key only)\n * import { createRobots } from '@sonordev/site-kit/robots'\n * export const GET = createRobots({ apiKey: process.env.SONOR_API_KEY })\n *\n * @example\n * // With explicit baseUrl\n * export const GET = createRobots({\n * baseUrl: process.env.NEXT_PUBLIC_SITE_URL || 'https://example.com',\n * disallow: ['/admin'],\n * })\n */\n\nimport { getSiteConfig } from '../site-config'\nimport { stripNextInternals } from './next-internals'\n\nexport { isNextInternalsPath } from './next-internals'\n\n// The AI crawler helpers live in `llms/aiRobots` (and are exported from\n// `@sonordev/site-kit/llms`). Re-exported here because `/robots` is where a\n// robots.txt author looks for them. One implementation; never copy the lists.\nexport {\n AI_RETRIEVAL_CRAWLERS,\n AI_TRAINING_CRAWLERS,\n buildAiCrawlerRules,\n formatContentSignals,\n createRobotsTxtHandler,\n} from '../llms/aiRobots'\nexport type { AiCrawlerRulesOptions, ContentSignalsOptions, RobotsTxtHandlerOptions } from '../llms/aiRobots'\n\nexport interface RobotsConfig {\n /** Base URL of the site (optional when apiKey is set; then resolved from Portal) */\n baseUrl?: string\n /** Project API key; when set and baseUrl is not, baseUrl is resolved from Portal */\n apiKey?: string\n apiUrl?: string\n /** Path to sitemap (default: /sitemap.xml) */\n sitemapPath?: string\n /** Pre-built robots content from Portal (overrides default when provided) */\n managedRobots?: string | null\n /**\n * Paths to disallow (e.g. ['/admin', '/api']). `/_next` paths are dropped:\n * Googlebot needs them to render pages and index images.\n */\n disallow?: string[]\n}\n\nfunction buildRobotsResponse(baseUrl: string, config: RobotsConfig): Response {\n const lines: string[] = []\n\n if (config.managedRobots?.trim()) {\n lines.push(config.managedRobots.trim())\n } else {\n lines.push('User-agent: *')\n lines.push('Allow: /')\n const disallow = stripNextInternals(config.disallow) ?? []\n for (const p of Array.isArray(disallow) ? disallow : [disallow]) {\n lines.push(`Disallow: ${p}`)\n }\n }\n\n const base = baseUrl.replace(/\\/$/, '')\n const sitemapPath = config.sitemapPath ?? '/sitemap.xml'\n const sitemapUrl = `${base}${sitemapPath.startsWith('/') ? '' : '/'}${sitemapPath}`\n lines.push(`Sitemap: ${sitemapUrl}`)\n\n return new Response(lines.join('\\n'), {\n status: 200,\n headers: {\n 'Content-Type': 'text/plain; charset=utf-8',\n 'Cache-Control': 'public, max-age=86400, s-maxage=86400',\n },\n })\n}\n\n/**\n * Create a robots.txt handler that returns a Response or Promise<Response>.\n * Use as GET handler for app/robots.txt/route.ts. When baseUrl is omitted, pass apiKey to resolve from Portal.\n */\nexport function createRobots(config: RobotsConfig): () => Response | Promise<Response> {\n return function robots(): Response | Promise<Response> {\n const baseUrl = config.baseUrl\n if (baseUrl) {\n return buildRobotsResponse(baseUrl, config)\n }\n const apiKey = config.apiKey ?? (typeof process !== 'undefined' && process.env && process.env.SONOR_API_KEY)\n if (!apiKey) {\n return new Response('User-agent: *\\nDisallow: /', {\n status: 200,\n headers: { 'Content-Type': 'text/plain; charset=utf-8' },\n })\n }\n return getSiteConfig({ apiKey, apiUrl: config.apiUrl }).then((site) => {\n const url = site?.site_url ?? 'https://example.com'\n return buildRobotsResponse(url, config)\n })\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { stripNextInternals } from '../chunk-AWK57R5S.mjs';
2
- export { isNextInternalsPath } from '../chunk-AWK57R5S.mjs';
1
+ import { stripNextInternals } from '../chunk-HCN3IKMW.mjs';
2
+ export { AI_RETRIEVAL_CRAWLERS, AI_TRAINING_CRAWLERS, buildAiCrawlerRules, createRobotsTxtHandler, formatContentSignals, isNextInternalsPath } from '../chunk-HCN3IKMW.mjs';
3
3
  import { getSiteConfig } from '../chunk-B22WSN4L.mjs';
4
4
  import '../chunk-BEXTDHO4.mjs';
5
5
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/robots/index.ts"],"names":[],"mappings":";;;;;;AAyCA,SAAS,mBAAA,CAAoB,SAAiB,MAAA,EAAgC;AAC5E,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,IAAI,MAAA,CAAO,aAAA,EAAe,IAAA,EAAK,EAAG;AAChC,IAAA,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,aAAA,CAAc,IAAA,EAAM,CAAA;AAAA,EACxC,CAAA,MAAO;AACL,IAAA,KAAA,CAAM,KAAK,eAAe,CAAA;AAC1B,IAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AACrB,IAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,MAAA,CAAO,QAAQ,KAAK,EAAC;AACzD,IAAA,KAAA,MAAW,CAAA,IAAK,MAAM,OAAA,CAAQ,QAAQ,IAAI,QAAA,GAAW,CAAC,QAAQ,CAAA,EAAG;AAC/D,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,CAAC,CAAA,CAAE,CAAA;AAAA,IAC7B;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACtC,EAAA,MAAM,WAAA,GAAc,OAAO,WAAA,IAAe,cAAA;AAC1C,EAAA,MAAM,UAAA,GAAa,CAAA,EAAG,IAAI,CAAA,EAAG,WAAA,CAAY,UAAA,CAAW,GAAG,CAAA,GAAI,EAAA,GAAK,GAAG,CAAA,EAAG,WAAW,CAAA,CAAA;AACjF,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAY,UAAU,CAAA,CAAE,CAAA;AAEnC,EAAA,OAAO,IAAI,QAAA,CAAS,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,EAAG;AAAA,IACpC,MAAA,EAAQ,GAAA;AAAA,IACR,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB,2BAAA;AAAA,MAChB,eAAA,EAAiB;AAAA;AACnB,GACD,CAAA;AACH;AAMO,SAAS,aAAa,MAAA,EAA0D;AACrF,EAAA,OAAO,SAAS,MAAA,GAAuC;AACrD,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAO,mBAAA,CAAoB,SAAS,MAAM,CAAA;AAAA,IAC5C;AACA,IAAA,MAAM,MAAA,GAAS,OAAO,MAAA,KAAW,OAAO,YAAY,WAAA,IAAe,OAAA,CAAQ,GAAA,IAAO,OAAA,CAAQ,GAAA,CAAI,aAAA,CAAA;AAC9F,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAO,IAAI,SAAS,4BAAA,EAA8B;AAAA,QAChD,MAAA,EAAQ,GAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,2BAAA;AAA4B,OACxD,CAAA;AAAA,IACH;AACA,IAAA,OAAO,aAAA,CAAc,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,IAAA,KAAS;AACrE,MAAA,MAAM,GAAA,GAAM,MAAM,QAAA,IAAY,qBAAA;AAC9B,MAAA,OAAO,mBAAA,CAAoB,KAAK,MAAM,CAAA;AAAA,IACxC,CAAC,CAAA;AAAA,EACH,CAAA;AACF","file":"index.mjs","sourcesContent":["/**\n * @sonordev/site-kit/robots - robots.txt Generator\n *\n * Generates robots.txt with Sitemap directive.\n * baseUrl can be omitted when apiKey is set (resolved from Portal project-info).\n *\n * @example\n * // app/robots.txt/route.ts (API key only)\n * import { createRobots } from '@sonordev/site-kit/robots'\n * export const GET = createRobots({ apiKey: process.env.SONOR_API_KEY })\n *\n * @example\n * // With explicit baseUrl\n * export const GET = createRobots({\n * baseUrl: process.env.NEXT_PUBLIC_SITE_URL || 'https://example.com',\n * disallow: ['/admin'],\n * })\n */\n\nimport { getSiteConfig } from '../site-config'\nimport { stripNextInternals } from './next-internals'\n\nexport { isNextInternalsPath } from './next-internals'\n\nexport interface RobotsConfig {\n /** Base URL of the site (optional when apiKey is set; then resolved from Portal) */\n baseUrl?: string\n /** Project API key; when set and baseUrl is not, baseUrl is resolved from Portal */\n apiKey?: string\n apiUrl?: string\n /** Path to sitemap (default: /sitemap.xml) */\n sitemapPath?: string\n /** Pre-built robots content from Portal (overrides default when provided) */\n managedRobots?: string | null\n /**\n * Paths to disallow (e.g. ['/admin', '/api']). `/_next` paths are dropped:\n * Googlebot needs them to render pages and index images.\n */\n disallow?: string[]\n}\n\nfunction buildRobotsResponse(baseUrl: string, config: RobotsConfig): Response {\n const lines: string[] = []\n\n if (config.managedRobots?.trim()) {\n lines.push(config.managedRobots.trim())\n } else {\n lines.push('User-agent: *')\n lines.push('Allow: /')\n const disallow = stripNextInternals(config.disallow) ?? []\n for (const p of Array.isArray(disallow) ? disallow : [disallow]) {\n lines.push(`Disallow: ${p}`)\n }\n }\n\n const base = baseUrl.replace(/\\/$/, '')\n const sitemapPath = config.sitemapPath ?? '/sitemap.xml'\n const sitemapUrl = `${base}${sitemapPath.startsWith('/') ? '' : '/'}${sitemapPath}`\n lines.push(`Sitemap: ${sitemapUrl}`)\n\n return new Response(lines.join('\\n'), {\n status: 200,\n headers: {\n 'Content-Type': 'text/plain; charset=utf-8',\n 'Cache-Control': 'public, max-age=86400, s-maxage=86400',\n },\n })\n}\n\n/**\n * Create a robots.txt handler that returns a Response or Promise<Response>.\n * Use as GET handler for app/robots.txt/route.ts. When baseUrl is omitted, pass apiKey to resolve from Portal.\n */\nexport function createRobots(config: RobotsConfig): () => Response | Promise<Response> {\n return function robots(): Response | Promise<Response> {\n const baseUrl = config.baseUrl\n if (baseUrl) {\n return buildRobotsResponse(baseUrl, config)\n }\n const apiKey = config.apiKey ?? (typeof process !== 'undefined' && process.env && process.env.SONOR_API_KEY)\n if (!apiKey) {\n return new Response('User-agent: *\\nDisallow: /', {\n status: 200,\n headers: { 'Content-Type': 'text/plain; charset=utf-8' },\n })\n }\n return getSiteConfig({ apiKey, apiUrl: config.apiUrl }).then((site) => {\n const url = site?.site_url ?? 'https://example.com'\n return buildRobotsResponse(url, config)\n })\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/robots/index.ts"],"names":[],"mappings":";;;;;;AAqDA,SAAS,mBAAA,CAAoB,SAAiB,MAAA,EAAgC;AAC5E,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,IAAI,MAAA,CAAO,aAAA,EAAe,IAAA,EAAK,EAAG;AAChC,IAAA,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,aAAA,CAAc,IAAA,EAAM,CAAA;AAAA,EACxC,CAAA,MAAO;AACL,IAAA,KAAA,CAAM,KAAK,eAAe,CAAA;AAC1B,IAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AACrB,IAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,MAAA,CAAO,QAAQ,KAAK,EAAC;AACzD,IAAA,KAAA,MAAW,CAAA,IAAK,MAAM,OAAA,CAAQ,QAAQ,IAAI,QAAA,GAAW,CAAC,QAAQ,CAAA,EAAG;AAC/D,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,CAAC,CAAA,CAAE,CAAA;AAAA,IAC7B;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACtC,EAAA,MAAM,WAAA,GAAc,OAAO,WAAA,IAAe,cAAA;AAC1C,EAAA,MAAM,UAAA,GAAa,CAAA,EAAG,IAAI,CAAA,EAAG,WAAA,CAAY,UAAA,CAAW,GAAG,CAAA,GAAI,EAAA,GAAK,GAAG,CAAA,EAAG,WAAW,CAAA,CAAA;AACjF,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAY,UAAU,CAAA,CAAE,CAAA;AAEnC,EAAA,OAAO,IAAI,QAAA,CAAS,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,EAAG;AAAA,IACpC,MAAA,EAAQ,GAAA;AAAA,IACR,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB,2BAAA;AAAA,MAChB,eAAA,EAAiB;AAAA;AACnB,GACD,CAAA;AACH;AAMO,SAAS,aAAa,MAAA,EAA0D;AACrF,EAAA,OAAO,SAAS,MAAA,GAAuC;AACrD,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAO,mBAAA,CAAoB,SAAS,MAAM,CAAA;AAAA,IAC5C;AACA,IAAA,MAAM,MAAA,GAAS,OAAO,MAAA,KAAW,OAAO,YAAY,WAAA,IAAe,OAAA,CAAQ,GAAA,IAAO,OAAA,CAAQ,GAAA,CAAI,aAAA,CAAA;AAC9F,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAO,IAAI,SAAS,4BAAA,EAA8B;AAAA,QAChD,MAAA,EAAQ,GAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,2BAAA;AAA4B,OACxD,CAAA;AAAA,IACH;AACA,IAAA,OAAO,aAAA,CAAc,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,IAAA,KAAS;AACrE,MAAA,MAAM,GAAA,GAAM,MAAM,QAAA,IAAY,qBAAA;AAC9B,MAAA,OAAO,mBAAA,CAAoB,KAAK,MAAM,CAAA;AAAA,IACxC,CAAC,CAAA;AAAA,EACH,CAAA;AACF","file":"index.mjs","sourcesContent":["/**\n * @sonordev/site-kit/robots - robots.txt Generator\n *\n * Generates robots.txt with Sitemap directive.\n * baseUrl can be omitted when apiKey is set (resolved from Portal project-info).\n *\n * @example\n * // app/robots.txt/route.ts (API key only)\n * import { createRobots } from '@sonordev/site-kit/robots'\n * export const GET = createRobots({ apiKey: process.env.SONOR_API_KEY })\n *\n * @example\n * // With explicit baseUrl\n * export const GET = createRobots({\n * baseUrl: process.env.NEXT_PUBLIC_SITE_URL || 'https://example.com',\n * disallow: ['/admin'],\n * })\n */\n\nimport { getSiteConfig } from '../site-config'\nimport { stripNextInternals } from './next-internals'\n\nexport { isNextInternalsPath } from './next-internals'\n\n// The AI crawler helpers live in `llms/aiRobots` (and are exported from\n// `@sonordev/site-kit/llms`). Re-exported here because `/robots` is where a\n// robots.txt author looks for them. One implementation; never copy the lists.\nexport {\n AI_RETRIEVAL_CRAWLERS,\n AI_TRAINING_CRAWLERS,\n buildAiCrawlerRules,\n formatContentSignals,\n createRobotsTxtHandler,\n} from '../llms/aiRobots'\nexport type { AiCrawlerRulesOptions, ContentSignalsOptions, RobotsTxtHandlerOptions } from '../llms/aiRobots'\n\nexport interface RobotsConfig {\n /** Base URL of the site (optional when apiKey is set; then resolved from Portal) */\n baseUrl?: string\n /** Project API key; when set and baseUrl is not, baseUrl is resolved from Portal */\n apiKey?: string\n apiUrl?: string\n /** Path to sitemap (default: /sitemap.xml) */\n sitemapPath?: string\n /** Pre-built robots content from Portal (overrides default when provided) */\n managedRobots?: string | null\n /**\n * Paths to disallow (e.g. ['/admin', '/api']). `/_next` paths are dropped:\n * Googlebot needs them to render pages and index images.\n */\n disallow?: string[]\n}\n\nfunction buildRobotsResponse(baseUrl: string, config: RobotsConfig): Response {\n const lines: string[] = []\n\n if (config.managedRobots?.trim()) {\n lines.push(config.managedRobots.trim())\n } else {\n lines.push('User-agent: *')\n lines.push('Allow: /')\n const disallow = stripNextInternals(config.disallow) ?? []\n for (const p of Array.isArray(disallow) ? disallow : [disallow]) {\n lines.push(`Disallow: ${p}`)\n }\n }\n\n const base = baseUrl.replace(/\\/$/, '')\n const sitemapPath = config.sitemapPath ?? '/sitemap.xml'\n const sitemapUrl = `${base}${sitemapPath.startsWith('/') ? '' : '/'}${sitemapPath}`\n lines.push(`Sitemap: ${sitemapUrl}`)\n\n return new Response(lines.join('\\n'), {\n status: 200,\n headers: {\n 'Content-Type': 'text/plain; charset=utf-8',\n 'Cache-Control': 'public, max-age=86400, s-maxage=86400',\n },\n })\n}\n\n/**\n * Create a robots.txt handler that returns a Response or Promise<Response>.\n * Use as GET handler for app/robots.txt/route.ts. When baseUrl is omitted, pass apiKey to resolve from Portal.\n */\nexport function createRobots(config: RobotsConfig): () => Response | Promise<Response> {\n return function robots(): Response | Promise<Response> {\n const baseUrl = config.baseUrl\n if (baseUrl) {\n return buildRobotsResponse(baseUrl, config)\n }\n const apiKey = config.apiKey ?? (typeof process !== 'undefined' && process.env && process.env.SONOR_API_KEY)\n if (!apiKey) {\n return new Response('User-agent: *\\nDisallow: /', {\n status: 200,\n headers: { 'Content-Type': 'text/plain; charset=utf-8' },\n })\n }\n return getSiteConfig({ apiKey, apiUrl: config.apiUrl }).then((site) => {\n const url = site?.site_url ?? 'https://example.com'\n return buildRobotsResponse(url, config)\n })\n }\n}\n"]}
@@ -2,9 +2,9 @@
2
2
  'use strict';
3
3
 
4
4
  var chunkG2WC3CXW_js = require('../chunk-G2WC3CXW.js');
5
- var chunkH65OX263_js = require('../chunk-H65OX263.js');
6
- require('../chunk-4WBTM6YE.js');
7
- require('../chunk-5TXXTYXL.js');
5
+ var chunkPRTXAIIC_js = require('../chunk-PRTXAIIC.js');
6
+ require('../chunk-UWHCHYCX.js');
7
+ require('../chunk-5O7JSWT6.js');
8
8
  require('../chunk-SNAQBZPT.js');
9
9
  var react = require('react');
10
10
  var jsxRuntime = require('react/jsx-runtime');
@@ -39,7 +39,7 @@ function useSiteSearch(options = {}) {
39
39
  const apiUrl = typeof window !== "undefined" ? window.__SITE_KIT_API_URL__ || "https://api.sonor.io" : "https://api.sonor.io";
40
40
  const apiKey = typeof window !== "undefined" ? window.__SITE_KIT_API_KEY__ : void 0;
41
41
  const resolvedSite = site ?? (typeof window !== "undefined" ? window.__SITE_KIT_SITE__ : void 0);
42
- const res = await chunkH65OX263_js.sonorFetch(
42
+ const res = await chunkPRTXAIIC_js.sonorFetch(
43
43
  `${apiUrl}${chunkG2WC3CXW_js.SEARCH_ENDPOINT}`,
44
44
  {
45
45
  method: "POST",
@@ -1,9 +1,9 @@
1
1
  'use client';
2
2
  import { SEARCH_ENDPOINT } from '../chunk-75A4KY4X.mjs';
3
3
  export { SEARCH_ENDPOINT } from '../chunk-75A4KY4X.mjs';
4
- import { sonorFetch } from '../chunk-XLPU3TEE.mjs';
5
- import '../chunk-ABZGEHTC.mjs';
6
- import '../chunk-QRBPT6Z6.mjs';
4
+ import { sonorFetch } from '../chunk-7THZOAUR.mjs';
5
+ import '../chunk-PUAXHYBL.mjs';
6
+ import '../chunk-HRMGITUZ.mjs';
7
7
  import '../chunk-BEXTDHO4.mjs';
8
8
  import { useState, useRef, useCallback, useEffect } from 'react';
9
9
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -3,9 +3,11 @@ import type { ManagedContentProps, ManagedContentBlock } from './types';
3
3
  /**
4
4
  * Get content block data without rendering
5
5
  *
6
- * Useful when you need to access the raw data
6
+ * Useful when you need to access the raw data. `site` is the sub-site host
7
+ * override for multi-site projects; it resolves from NEXT_PUBLIC_SITE_URL when
8
+ * omitted.
7
9
  */
8
- export declare function getManagedContentData(path: string, section: string): Promise<ManagedContentBlock | null>;
10
+ export declare function getManagedContentData(path: string, section: string, site?: string): Promise<ManagedContentBlock | null>;
9
11
  export declare function ManagedContent(props: ManagedContentProps): React.ReactElement;
10
12
  export default ManagedContent;
11
13
  //# sourceMappingURL=ManagedContent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ManagedContent.d.ts","sourceRoot":"","sources":["../../src/seo/ManagedContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAa,MAAM,SAAS,CAAA;AA8NlF;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAErC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,KAAK,CAAC,YAAY,CAM7E;eAEc,cAAc"}
1
+ {"version":3,"file":"ManagedContent.d.ts","sourceRoot":"","sources":["../../src/seo/ManagedContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAa,MAAM,SAAS,CAAA;AA+NlF;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAErC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,KAAK,CAAC,YAAY,CAM7E;eAEc,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"ManagedFAQ.d.ts","sourceRoot":"","sources":["../../src/seo/ManagedFAQ.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,KAAK,EAAE,eAAe,EAAW,MAAM,SAAS,CAAA;AA0OvD;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CAMrE;eAEc,UAAU"}
1
+ {"version":3,"file":"ManagedFAQ.d.ts","sourceRoot":"","sources":["../../src/seo/ManagedFAQ.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,KAAK,EAAE,eAAe,EAAW,MAAM,SAAS,CAAA;AA2OvD;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CAMrE;eAEc,UAAU"}
@@ -1 +1 @@
1
- {"version":3,"file":"ManagedInternalLinks.d.ts","sourceRoot":"","sources":["../../src/seo/ManagedInternalLinks.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,KAAK,EAAE,yBAAyB,EAAe,MAAM,SAAS,CAAA;AAuHrE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,KAAK,CAAC,YAAY,CAMzF;eAEc,oBAAoB"}
1
+ {"version":3,"file":"ManagedInternalLinks.d.ts","sourceRoot":"","sources":["../../src/seo/ManagedInternalLinks.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,KAAK,EAAE,yBAAyB,EAAe,MAAM,SAAS,CAAA;AAwHrE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,KAAK,CAAC,YAAY,CAMzF;eAEc,oBAAoB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ManagedSchema.d.ts","sourceRoot":"","sources":["../../src/seo/ManagedSchema.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAIjD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA2B,SAAQ,kBAAkB;IACpE,iDAAiD;IACjD,SAAS,CAAC,EAAE,aAAa,GAAG,OAAO,CAAA;IACnC,mDAAmD;IACnD,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;IAChC,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,0EAA0E;IAC1E,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED;;GAEG;AACH,eAAO,MAAM,2BAA2B,UAMvC,CAAA;AAkMD;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,SAAS,GAAG,SAAS,EAC3B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,SAAS,CAAC,EAAE,aAAa,GACxB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqBzB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA+BzB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,0BAA0B,GAAG,KAAK,CAAC,YAAY,CAMnF;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,YAAY,CAMzF;eAEc,aAAa"}
1
+ {"version":3,"file":"ManagedSchema.d.ts","sourceRoot":"","sources":["../../src/seo/ManagedSchema.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAKjD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA2B,SAAQ,kBAAkB;IACpE,iDAAiD;IACjD,SAAS,CAAC,EAAE,aAAa,GAAG,OAAO,CAAA;IACnC,mDAAmD;IACnD,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;IAChC,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,0EAA0E;IAC1E,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED;;GAEG;AACH,eAAO,MAAM,2BAA2B,UAMvC,CAAA;AAyMD;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,SAAS,GAAG,SAAS,EAC3B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,SAAS,CAAC,EAAE,aAAa,GACxB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqBzB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA+BzB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,0BAA0B,GAAG,KAAK,CAAC,YAAY,CAMnF;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,YAAY,CAMzF;eAEc,aAAa"}
@@ -1,19 +1,19 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunk2N27LCZH_js = require('../chunk-2N27LCZH.js');
5
- require('../chunk-JEOKDUPQ.js');
4
+ var chunkBER36QXU_js = require('../chunk-BER36QXU.js');
5
+ require('../chunk-R7GHP3FY.js');
6
6
  require('../chunk-5RNAUYWE.js');
7
- require('../chunk-H65OX263.js');
8
- require('../chunk-4WBTM6YE.js');
9
- require('../chunk-5TXXTYXL.js');
7
+ require('../chunk-PRTXAIIC.js');
8
+ require('../chunk-UWHCHYCX.js');
9
+ require('../chunk-5O7JSWT6.js');
10
10
  require('../chunk-SNAQBZPT.js');
11
11
 
12
12
 
13
13
 
14
14
  Object.defineProperty(exports, "SitemapSync", {
15
15
  enumerable: true,
16
- get: function () { return chunk2N27LCZH_js.SitemapSync; }
16
+ get: function () { return chunkBER36QXU_js.SitemapSync; }
17
17
  });
18
18
  //# sourceMappingURL=client.js.map
19
19
  //# sourceMappingURL=client.js.map
@@ -1,10 +1,10 @@
1
1
  'use client';
2
- export { SitemapSync } from '../chunk-JTF4DFUF.mjs';
3
- import '../chunk-QJU6HBSK.mjs';
2
+ export { SitemapSync } from '../chunk-B35OJ7FR.mjs';
3
+ import '../chunk-4LYW6PMU.mjs';
4
4
  import '../chunk-A6UYV475.mjs';
5
- import '../chunk-XLPU3TEE.mjs';
6
- import '../chunk-ABZGEHTC.mjs';
7
- import '../chunk-QRBPT6Z6.mjs';
5
+ import '../chunk-7THZOAUR.mjs';
6
+ import '../chunk-PUAXHYBL.mjs';
7
+ import '../chunk-HRMGITUZ.mjs';
8
8
  import '../chunk-BEXTDHO4.mjs';
9
9
  //# sourceMappingURL=client.mjs.map
10
10
  //# sourceMappingURL=client.mjs.map