@sonordev/site-kit 1.2.7 → 1.2.9

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 (259) hide show
  1. package/README.md +5 -3
  2. package/dist/analytics/index.js +6 -6
  3. package/dist/analytics/index.mjs +2 -2
  4. package/dist/{api-CWtoFJCO.d.mts → api-DTKSHh_w.d.mts} +1 -1
  5. package/dist/{api-CWtoFJCO.d.ts → api-DTKSHh_w.d.ts} +1 -1
  6. package/dist/blog/index.js +10 -10
  7. package/dist/blog/index.js.map +1 -1
  8. package/dist/blog/index.mjs +10 -10
  9. package/dist/blog/index.mjs.map +1 -1
  10. package/dist/blog/server.js +2 -2
  11. package/dist/blog/server.js.map +1 -1
  12. package/dist/blog/server.mjs +2 -2
  13. package/dist/blog/server.mjs.map +1 -1
  14. package/dist/{chunk-7RYCHO6D.mjs → chunk-2RHO4KSK.mjs} +9 -9
  15. package/dist/{chunk-7RYCHO6D.mjs.map → chunk-2RHO4KSK.mjs.map} +1 -1
  16. package/dist/{chunk-EEZCR6E6.js → chunk-2XOW276O.js} +5 -5
  17. package/dist/{chunk-EEZCR6E6.js.map → chunk-2XOW276O.js.map} +1 -1
  18. package/dist/{chunk-JTLOJLWQ.mjs → chunk-36Y7OWES.mjs} +4 -4
  19. package/dist/chunk-36Y7OWES.mjs.map +1 -0
  20. package/dist/{chunk-DQYMKR27.mjs → chunk-47Y3YSES.mjs} +10 -10
  21. package/dist/chunk-47Y3YSES.mjs.map +1 -0
  22. package/dist/{chunk-MV3QN7PW.mjs → chunk-5F7FFUPJ.mjs} +3 -3
  23. package/dist/{chunk-MV3QN7PW.mjs.map → chunk-5F7FFUPJ.mjs.map} +1 -1
  24. package/dist/{chunk-AFAO3TGS.mjs → chunk-5YDPPOUU.mjs} +10 -10
  25. package/dist/chunk-5YDPPOUU.mjs.map +1 -0
  26. package/dist/{chunk-D63MUKZ6.mjs → chunk-6YXRLC6W.mjs} +5 -5
  27. package/dist/chunk-6YXRLC6W.mjs.map +1 -0
  28. package/dist/{chunk-7RF6PVHA.mjs → chunk-7FKPJQVS.mjs} +33 -68
  29. package/dist/chunk-7FKPJQVS.mjs.map +1 -0
  30. package/dist/{chunk-BYLIU6XG.js → chunk-7ROZJDXE.js} +10 -10
  31. package/dist/chunk-7ROZJDXE.js.map +1 -0
  32. package/dist/{chunk-UWE5PCYJ.mjs → chunk-APZMXRI3.mjs} +3 -3
  33. package/dist/chunk-APZMXRI3.mjs.map +1 -0
  34. package/dist/{chunk-622GAQP5.js → chunk-BBITDUZQ.js} +6 -6
  35. package/dist/chunk-BBITDUZQ.js.map +1 -0
  36. package/dist/{chunk-DDKW2FNA.js → chunk-BFJDUTXK.js} +8 -8
  37. package/dist/chunk-BFJDUTXK.js.map +1 -0
  38. package/dist/chunk-C3A5HXHX.mjs +78 -0
  39. package/dist/chunk-C3A5HXHX.mjs.map +1 -0
  40. package/dist/{chunk-XZJOZJB6.js → chunk-CFEOOJUT.js} +12 -12
  41. package/dist/{chunk-XZJOZJB6.js.map → chunk-CFEOOJUT.js.map} +1 -1
  42. package/dist/{chunk-M2T6R7BA.mjs → chunk-DOSSLBNW.mjs} +4 -4
  43. package/dist/chunk-DOSSLBNW.mjs.map +1 -0
  44. package/dist/{chunk-OB7E654K.js → chunk-DY4K6X3A.js} +6 -6
  45. package/dist/chunk-DY4K6X3A.js.map +1 -0
  46. package/dist/{chunk-7UKPRW25.mjs → chunk-EISQ7LJG.mjs} +6 -6
  47. package/dist/chunk-EISQ7LJG.mjs.map +1 -0
  48. package/dist/{chunk-7557OTHW.js → chunk-EUNL6GAL.js} +5 -5
  49. package/dist/chunk-EUNL6GAL.js.map +1 -0
  50. package/dist/{chunk-KUGMH4ZF.js → chunk-G6VGUAK2.js} +4 -4
  51. package/dist/chunk-G6VGUAK2.js.map +1 -0
  52. package/dist/{chunk-XQQWI6WB.js → chunk-GVXZWXQ7.js} +10 -10
  53. package/dist/chunk-GVXZWXQ7.js.map +1 -0
  54. package/dist/{chunk-24277A3Q.mjs → chunk-HF2FWDBJ.mjs} +9 -9
  55. package/dist/chunk-HF2FWDBJ.mjs.map +1 -0
  56. package/dist/{chunk-72MQFHYJ.js → chunk-IFAW7JFO.js} +16 -16
  57. package/dist/chunk-IFAW7JFO.js.map +1 -0
  58. package/dist/{chunk-P3UWIUJS.mjs → chunk-IKIJEKU3.mjs} +16 -16
  59. package/dist/chunk-IKIJEKU3.mjs.map +1 -0
  60. package/dist/{chunk-PKN27UMH.mjs → chunk-JIDOXTX2.mjs} +3 -3
  61. package/dist/{chunk-PKN27UMH.mjs.map → chunk-JIDOXTX2.mjs.map} +1 -1
  62. package/dist/{chunk-7FUV73JZ.js → chunk-JM3ZR6LB.js} +9 -9
  63. package/dist/chunk-JM3ZR6LB.js.map +1 -0
  64. package/dist/{chunk-OIIKTGRL.mjs → chunk-JMNSED4O.mjs} +8 -8
  65. package/dist/chunk-JMNSED4O.mjs.map +1 -0
  66. package/dist/chunk-MG23BS36.js +82 -0
  67. package/dist/chunk-MG23BS36.js.map +1 -0
  68. package/dist/{chunk-TFLQX7K7.mjs → chunk-N24BPFF6.mjs} +6 -6
  69. package/dist/chunk-N24BPFF6.mjs.map +1 -0
  70. package/dist/{chunk-LIVWLY2P.js → chunk-PPRAW576.js} +3 -3
  71. package/dist/{chunk-LIVWLY2P.js.map → chunk-PPRAW576.js.map} +1 -1
  72. package/dist/chunk-QETK4P5G.mjs +142 -0
  73. package/dist/chunk-QETK4P5G.mjs.map +1 -0
  74. package/dist/{chunk-W4PALSGM.js → chunk-REMHGWXT.js} +3 -3
  75. package/dist/chunk-REMHGWXT.js.map +1 -0
  76. package/dist/{chunk-DW5UJKHH.js → chunk-RMOL4TZ6.js} +8 -8
  77. package/dist/chunk-RMOL4TZ6.js.map +1 -0
  78. package/dist/{chunk-KKU3K7RG.js → chunk-SLB5V4RT.js} +33 -67
  79. package/dist/chunk-SLB5V4RT.js.map +1 -0
  80. package/dist/{chunk-K23A4G76.mjs → chunk-SQSBAPWA.mjs} +8 -8
  81. package/dist/chunk-SQSBAPWA.mjs.map +1 -0
  82. package/dist/{chunk-WECQ6KOB.js → chunk-TG46LJFB.js} +4 -4
  83. package/dist/chunk-TG46LJFB.js.map +1 -0
  84. package/dist/{chunk-43GBM4SX.js → chunk-TKQLH33E.js} +3 -3
  85. package/dist/chunk-TKQLH33E.js.map +1 -0
  86. package/dist/{chunk-UYFDNX2F.js → chunk-TLHRV3LZ.js} +5 -5
  87. package/dist/chunk-TLHRV3LZ.js.map +1 -0
  88. package/dist/{chunk-6ZCISNAB.mjs → chunk-UPR5FEIO.mjs} +3 -3
  89. package/dist/chunk-UPR5FEIO.mjs.map +1 -0
  90. package/dist/chunk-VTECURKB.js +144 -0
  91. package/dist/chunk-VTECURKB.js.map +1 -0
  92. package/dist/{chunk-GCJXQ4AG.mjs → chunk-VZMDH3R4.mjs} +5 -5
  93. package/dist/chunk-VZMDH3R4.mjs.map +1 -0
  94. package/dist/{chunk-LBVWVP72.js → chunk-X4J33XQD.js} +7 -7
  95. package/dist/chunk-X4J33XQD.js.map +1 -0
  96. package/dist/{chunk-QXV4667R.mjs → chunk-XFOL6JDF.mjs} +5 -5
  97. package/dist/chunk-XFOL6JDF.mjs.map +1 -0
  98. package/dist/cli/index.js +80 -91
  99. package/dist/cli/index.js.map +1 -1
  100. package/dist/cli/index.mjs +76 -87
  101. package/dist/cli/index.mjs.map +1 -1
  102. package/dist/cms/index.d.mts +139 -0
  103. package/dist/cms/index.d.ts +139 -0
  104. package/dist/cms/index.js +409 -0
  105. package/dist/cms/index.js.map +1 -0
  106. package/dist/cms/index.mjs +388 -0
  107. package/dist/cms/index.mjs.map +1 -0
  108. package/dist/cms/server.d.mts +47 -0
  109. package/dist/cms/server.d.ts +47 -0
  110. package/dist/cms/server.js +21 -0
  111. package/dist/{server-api-GJPNRYUP.js.map → cms/server.js.map} +1 -1
  112. package/dist/cms/server.mjs +4 -0
  113. package/dist/{server-api-EWXKOQZA.mjs.map → cms/server.mjs.map} +1 -1
  114. package/dist/commerce/index.js +42 -42
  115. package/dist/commerce/index.mjs +1 -1
  116. package/dist/commerce/server.d.mts +1 -1
  117. package/dist/commerce/server.d.ts +1 -1
  118. package/dist/commerce/server.js.map +1 -1
  119. package/dist/commerce/server.mjs.map +1 -1
  120. package/dist/config/index.js +1 -1
  121. package/dist/config/index.js.map +1 -1
  122. package/dist/config/index.mjs +1 -1
  123. package/dist/config/index.mjs.map +1 -1
  124. package/dist/engage/index.js +4 -4
  125. package/dist/engage/index.mjs +1 -1
  126. package/dist/forms/index.js +5 -5
  127. package/dist/forms/index.js.map +1 -1
  128. package/dist/forms/index.mjs +5 -5
  129. package/dist/forms/index.mjs.map +1 -1
  130. package/dist/generators-DOFWGRXS.js +37 -0
  131. package/dist/{generators-DTMO36DV.js.map → generators-DOFWGRXS.js.map} +1 -1
  132. package/dist/generators-R62APO62.mjs +4 -0
  133. package/dist/{generators-2XKQMPKH.mjs.map → generators-R62APO62.mjs.map} +1 -1
  134. package/dist/images/index.d.mts +1 -1
  135. package/dist/images/index.d.ts +1 -1
  136. package/dist/images/index.js +11 -11
  137. package/dist/images/index.mjs +2 -2
  138. package/dist/images/server.d.mts +3 -3
  139. package/dist/images/server.d.ts +3 -3
  140. package/dist/images/server.js +4 -4
  141. package/dist/images/server.mjs +1 -1
  142. package/dist/index.d.mts +5 -5
  143. package/dist/index.d.ts +5 -5
  144. package/dist/index.js +81 -81
  145. package/dist/index.js.map +1 -1
  146. package/dist/index.mjs +28 -28
  147. package/dist/index.mjs.map +1 -1
  148. package/dist/layout/client.d.mts +18 -0
  149. package/dist/layout/client.d.ts +18 -0
  150. package/dist/layout/client.js +18 -0
  151. package/dist/layout/client.js.map +1 -0
  152. package/dist/layout/client.mjs +9 -0
  153. package/dist/layout/client.mjs.map +1 -0
  154. package/dist/layout/index.d.mts +4 -27
  155. package/dist/layout/index.d.ts +4 -27
  156. package/dist/layout/index.js +15 -145
  157. package/dist/layout/index.js.map +1 -1
  158. package/dist/layout/index.mjs +11 -141
  159. package/dist/layout/index.mjs.map +1 -1
  160. package/dist/llms/index.js +12 -12
  161. package/dist/llms/index.mjs +2 -2
  162. package/dist/manifest/index.js +4 -4
  163. package/dist/manifest/index.js.map +1 -1
  164. package/dist/manifest/index.mjs +3 -3
  165. package/dist/manifest/index.mjs.map +1 -1
  166. package/dist/middleware/index.js +3 -3
  167. package/dist/middleware/index.mjs +2 -2
  168. package/dist/{migrator-2MQHOFDQ.mjs → migrator-3WQB3KQ2.mjs} +3 -3
  169. package/dist/{migrator-2MQHOFDQ.mjs.map → migrator-3WQB3KQ2.mjs.map} +1 -1
  170. package/dist/migrator-HFVQYK5R.js +37 -0
  171. package/dist/{migrator-THJCF6MZ.js.map → migrator-HFVQYK5R.js.map} +1 -1
  172. package/dist/redirects/index.d.mts +2 -2
  173. package/dist/redirects/index.d.ts +2 -2
  174. package/dist/redirects/index.js +6 -6
  175. package/dist/redirects/index.mjs +2 -2
  176. package/dist/reputation/index.js +4 -4
  177. package/dist/reputation/index.mjs +1 -1
  178. package/dist/robots/index.d.mts +1 -1
  179. package/dist/robots/index.d.ts +1 -1
  180. package/dist/robots/index.js +3 -3
  181. package/dist/robots/index.js.map +1 -1
  182. package/dist/robots/index.mjs +2 -2
  183. package/dist/robots/index.mjs.map +1 -1
  184. package/dist/seo/index.d.mts +1 -1
  185. package/dist/seo/index.d.ts +1 -1
  186. package/dist/seo/index.js +43 -43
  187. package/dist/seo/index.js.map +1 -1
  188. package/dist/seo/index.mjs +6 -6
  189. package/dist/seo/index.mjs.map +1 -1
  190. package/dist/seo/register-sitemap-cli.js +18 -18
  191. package/dist/seo/register-sitemap-cli.js.map +1 -1
  192. package/dist/seo/register-sitemap-cli.mjs +18 -18
  193. package/dist/seo/register-sitemap-cli.mjs.map +1 -1
  194. package/dist/seo/server.d.mts +1 -1
  195. package/dist/seo/server.d.ts +1 -1
  196. package/dist/seo/server.js +10 -10
  197. package/dist/seo/server.js.map +1 -1
  198. package/dist/seo/server.mjs +8 -8
  199. package/dist/seo/server.mjs.map +1 -1
  200. package/dist/{server-api-GJPNRYUP.js → server-api-C5JXIROA.js} +21 -21
  201. package/dist/server-api-C5JXIROA.js.map +1 -0
  202. package/dist/{server-api-EWXKOQZA.mjs → server-api-HTSLBT6F.mjs} +3 -3
  203. package/dist/server-api-HTSLBT6F.mjs.map +1 -0
  204. package/dist/setup/client.js +7 -7
  205. package/dist/setup/client.mjs +2 -2
  206. package/dist/setup/index.js +9 -9
  207. package/dist/setup/index.mjs +3 -3
  208. package/dist/setup/server.js +2 -2
  209. package/dist/setup/server.mjs +1 -1
  210. package/dist/site-config/index.d.mts +1 -1
  211. package/dist/site-config/index.d.ts +1 -1
  212. package/dist/site-config/index.js +3 -3
  213. package/dist/site-config/index.mjs +1 -1
  214. package/dist/sitemap/index.d.mts +2 -2
  215. package/dist/sitemap/index.d.ts +2 -2
  216. package/dist/sitemap/index.js +10 -10
  217. package/dist/sitemap/index.js.map +1 -1
  218. package/dist/sitemap/index.mjs +8 -8
  219. package/dist/sitemap/index.mjs.map +1 -1
  220. package/dist/types-5RCOK10v.d.mts +25 -0
  221. package/dist/types-5RCOK10v.d.ts +25 -0
  222. package/dist/types-BG-x8yhh.d.mts +106 -0
  223. package/dist/types-BG-x8yhh.d.ts +106 -0
  224. package/package.json +13 -1
  225. package/dist/chunk-24277A3Q.mjs.map +0 -1
  226. package/dist/chunk-43GBM4SX.js.map +0 -1
  227. package/dist/chunk-622GAQP5.js.map +0 -1
  228. package/dist/chunk-6ZCISNAB.mjs.map +0 -1
  229. package/dist/chunk-72MQFHYJ.js.map +0 -1
  230. package/dist/chunk-7557OTHW.js.map +0 -1
  231. package/dist/chunk-7FUV73JZ.js.map +0 -1
  232. package/dist/chunk-7RF6PVHA.mjs.map +0 -1
  233. package/dist/chunk-7UKPRW25.mjs.map +0 -1
  234. package/dist/chunk-AFAO3TGS.mjs.map +0 -1
  235. package/dist/chunk-BYLIU6XG.js.map +0 -1
  236. package/dist/chunk-D63MUKZ6.mjs.map +0 -1
  237. package/dist/chunk-DDKW2FNA.js.map +0 -1
  238. package/dist/chunk-DQYMKR27.mjs.map +0 -1
  239. package/dist/chunk-DW5UJKHH.js.map +0 -1
  240. package/dist/chunk-GCJXQ4AG.mjs.map +0 -1
  241. package/dist/chunk-JTLOJLWQ.mjs.map +0 -1
  242. package/dist/chunk-K23A4G76.mjs.map +0 -1
  243. package/dist/chunk-KKU3K7RG.js.map +0 -1
  244. package/dist/chunk-KUGMH4ZF.js.map +0 -1
  245. package/dist/chunk-LBVWVP72.js.map +0 -1
  246. package/dist/chunk-M2T6R7BA.mjs.map +0 -1
  247. package/dist/chunk-OB7E654K.js.map +0 -1
  248. package/dist/chunk-OIIKTGRL.mjs.map +0 -1
  249. package/dist/chunk-P3UWIUJS.mjs.map +0 -1
  250. package/dist/chunk-QXV4667R.mjs.map +0 -1
  251. package/dist/chunk-TFLQX7K7.mjs.map +0 -1
  252. package/dist/chunk-UWE5PCYJ.mjs.map +0 -1
  253. package/dist/chunk-UYFDNX2F.js.map +0 -1
  254. package/dist/chunk-W4PALSGM.js.map +0 -1
  255. package/dist/chunk-WECQ6KOB.js.map +0 -1
  256. package/dist/chunk-XQQWI6WB.js.map +0 -1
  257. package/dist/generators-2XKQMPKH.mjs +0 -4
  258. package/dist/generators-DTMO36DV.js +0 -33
  259. package/dist/migrator-THJCF6MZ.js +0 -37
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkDDKW2FNA_js = require('../chunk-DDKW2FNA.js');
3
+ var chunkBFJDUTXK_js = require('../chunk-BFJDUTXK.js');
4
4
  require('../chunk-ZSMWDLMK.js');
5
5
  var fs = require('fs');
6
6
  var path = require('path');
@@ -23,7 +23,7 @@ function createLLMsTxtHandler(options = {}) {
23
23
  });
24
24
  }
25
25
  }
26
- const { markdown, metadata } = await chunkDDKW2FNA_js.generateLLMsTxt(generateOptions);
26
+ const { markdown, metadata } = await chunkBFJDUTXK_js.generateLLMsTxt(generateOptions);
27
27
  return new Response(markdown, {
28
28
  status: 200,
29
29
  headers: {
@@ -59,7 +59,7 @@ function createLLMsFullTxtHandler(options = {}) {
59
59
  });
60
60
  }
61
61
  }
62
- const { markdown, metadata } = await chunkDDKW2FNA_js.generateLLMsFullTxt(generateOptions);
62
+ const { markdown, metadata } = await chunkBFJDUTXK_js.generateLLMsFullTxt(generateOptions);
63
63
  return new Response(markdown, {
64
64
  status: 200,
65
65
  headers: {
@@ -527,39 +527,39 @@ function AEOCitedContent({
527
527
 
528
528
  Object.defineProperty(exports, "generateLLMsFullTxt", {
529
529
  enumerable: true,
530
- get: function () { return chunkDDKW2FNA_js.generateLLMsFullTxt; }
530
+ get: function () { return chunkBFJDUTXK_js.generateLLMsFullTxt; }
531
531
  });
532
532
  Object.defineProperty(exports, "generateLLMsTxt", {
533
533
  enumerable: true,
534
- get: function () { return chunkDDKW2FNA_js.generateLLMsTxt; }
534
+ get: function () { return chunkBFJDUTXK_js.generateLLMsTxt; }
535
535
  });
536
536
  Object.defineProperty(exports, "getBusinessInfo", {
537
537
  enumerable: true,
538
- get: function () { return chunkDDKW2FNA_js.getBusinessInfo; }
538
+ get: function () { return chunkBFJDUTXK_js.getBusinessInfo; }
539
539
  });
540
540
  Object.defineProperty(exports, "getFAQItems", {
541
541
  enumerable: true,
542
- get: function () { return chunkDDKW2FNA_js.getFAQItems; }
542
+ get: function () { return chunkBFJDUTXK_js.getFAQItems; }
543
543
  });
544
544
  Object.defineProperty(exports, "getLLMsData", {
545
545
  enumerable: true,
546
- get: function () { return chunkDDKW2FNA_js.getLLMsData; }
546
+ get: function () { return chunkBFJDUTXK_js.getLLMsData; }
547
547
  });
548
548
  Object.defineProperty(exports, "getOptimizedLLMsTxt", {
549
549
  enumerable: true,
550
- get: function () { return chunkDDKW2FNA_js.getOptimizedLLMsTxt; }
550
+ get: function () { return chunkBFJDUTXK_js.getOptimizedLLMsTxt; }
551
551
  });
552
552
  Object.defineProperty(exports, "getPageSummaries", {
553
553
  enumerable: true,
554
- get: function () { return chunkDDKW2FNA_js.getPageSummaries; }
554
+ get: function () { return chunkBFJDUTXK_js.getPageSummaries; }
555
555
  });
556
556
  Object.defineProperty(exports, "getServices", {
557
557
  enumerable: true,
558
- get: function () { return chunkDDKW2FNA_js.getServices; }
558
+ get: function () { return chunkBFJDUTXK_js.getServices; }
559
559
  });
560
560
  Object.defineProperty(exports, "writeLLMsTxtToPublic", {
561
561
  enumerable: true,
562
- get: function () { return chunkDDKW2FNA_js.writeLLMsTxtToPublic; }
562
+ get: function () { return chunkBFJDUTXK_js.writeLLMsTxtToPublic; }
563
563
  });
564
564
  exports.AEOBlock = AEOBlock;
565
565
  exports.AEOCitedContent = AEOCitedContent;
@@ -1,5 +1,5 @@
1
- import { generateLLMsTxt, generateLLMsFullTxt } from '../chunk-OIIKTGRL.mjs';
2
- export { generateLLMsFullTxt, generateLLMsTxt, getBusinessInfo, getFAQItems, getLLMsData, getOptimizedLLMsTxt, getPageSummaries, getServices, writeLLMsTxtToPublic } from '../chunk-OIIKTGRL.mjs';
1
+ import { generateLLMsTxt, generateLLMsFullTxt } from '../chunk-JMNSED4O.mjs';
2
+ export { generateLLMsFullTxt, generateLLMsTxt, getBusinessInfo, getFAQItems, getLLMsData, getOptimizedLLMsTxt, getPageSummaries, getServices, writeLLMsTxtToPublic } from '../chunk-JMNSED4O.mjs';
3
3
  import '../chunk-4XPGGLVP.mjs';
4
4
  import { existsSync, readFileSync } from 'fs';
5
5
  import { join } from 'path';
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunk7557OTHW_js = require('../chunk-7557OTHW.js');
3
+ var chunkEUNL6GAL_js = require('../chunk-EUNL6GAL.js');
4
4
  require('../chunk-ZSMWDLMK.js');
5
5
 
6
6
  // src/manifest/index.ts
@@ -25,13 +25,13 @@ async function fetchProjectInfo(apiKey, apiUrl) {
25
25
  }
26
26
  function createManifest(config) {
27
27
  return async function GET() {
28
- const apiKey = config?.apiKey ?? process.env.UPTRADE_API_KEY ?? process.env.NEXT_PUBLIC_UPTRADE_API_KEY ?? "";
29
- const apiUrl = config?.apiUrl ?? process.env.UPTRADE_API_URL ?? process.env.NEXT_PUBLIC_UPTRADE_API_URL ?? "https://api.uptrademedia.com";
28
+ const apiKey = config?.apiKey ?? process.env.SONOR_API_KEY ?? process.env.UPTRADE_API_KEY ?? process.env.NEXT_PUBLIC_UPTRADE_API_KEY ?? "";
29
+ const apiUrl = config?.apiUrl ?? process.env.SONOR_API_URL ?? process.env.UPTRADE_API_URL ?? process.env.NEXT_PUBLIC_UPTRADE_API_URL ?? "https://api.sonor.io";
30
30
  let project = null;
31
31
  if (apiKey) {
32
32
  project = await fetchProjectInfo(apiKey, apiUrl);
33
33
  }
34
- apiKey ? await chunk7557OTHW_js.getSiteConfig({ apiKey, apiUrl }).catch(() => null) : null;
34
+ apiKey ? await chunkEUNL6GAL_js.getSiteConfig({ apiKey, apiUrl }).catch(() => null) : null;
35
35
  const name = config?.name ?? project?.name ?? "My Site";
36
36
  const shortName = config?.shortName ?? name.split(/\s+/)[0] ?? name;
37
37
  const description = config?.description ?? project?.description ?? "";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/manifest/index.ts"],"names":["getSiteConfig"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @sonordev/site-kit/manifest\n *\n * PWA manifest generator. Fetches project name, description, brand colors,\n * and logo from Portal to generate a compliant Web App Manifest.\n *\n * @example\n * ```ts\n * // app/manifest.webmanifest/route.ts\n * import { createManifest } from '@sonordev/site-kit/manifest'\n * export const GET = createManifest()\n * ```\n *\n * @example With overrides:\n * ```ts\n * export const GET = createManifest({\n * display: 'fullscreen',\n * themeColor: '#1a1a2e',\n * categories: ['business', 'productivity'],\n * })\n * ```\n */\n\nimport { getSiteConfig } from '../site-config'\n\nexport interface ManifestConfig {\n /** App name. Defaults to Portal project name. */\n name?: string\n /** Short name for home screen. Defaults to first word of name. */\n shortName?: string\n /** App description. Defaults to Portal project description. */\n description?: string\n /** Theme color for browser chrome. Defaults to Portal brand color or #4bbf39. */\n themeColor?: string\n /** Background color for splash screen. Default: '#ffffff' */\n backgroundColor?: string\n /** Display mode. Default: 'standalone' */\n display?: 'standalone' | 'fullscreen' | 'minimal-ui' | 'browser'\n /** Orientation preference. Default: 'any' */\n orientation?: 'portrait-primary' | 'landscape-primary' | 'any'\n /** Start URL. Default: '/' */\n startUrl?: string\n /** Scope. Default: '/' */\n scope?: string\n /** App categories */\n categories?: string[]\n /** Custom icons. If not provided, derived from Portal logo. */\n icons?: Array<{\n src: string\n sizes: string\n type: string\n purpose?: string\n }>\n /** Portal API key. Defaults from env. */\n apiKey?: string\n /** Portal API URL. Defaults from env. */\n apiUrl?: string\n}\n\ninterface ProjectInfo {\n site_url?: string\n domain?: string\n name?: string\n description?: string\n logo_url?: string\n brand_primary?: string\n}\n\nasync function fetchProjectInfo(\n apiKey: string,\n apiUrl: string,\n): Promise<ProjectInfo | null> {\n try {\n const fetchOptions: RequestInit & Record<string, unknown> = {\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n },\n }\n // Next.js fetch extension for ISR caching\n ;(fetchOptions as any).next = { revalidate: 3600 }\n const res = await fetch(\n `${apiUrl}/api/public/seo/project-info`,\n fetchOptions,\n )\n if (!res.ok) return null\n return await res.json()\n } catch {\n return null\n }\n}\n\n/**\n * Create a route handler that serves the PWA manifest.\n * Fetches project data from Portal and merges with config overrides.\n */\nexport function createManifest(\n config?: ManifestConfig,\n): () => Promise<Response> {\n return async function GET(): Promise<Response> {\n const apiKey =\n config?.apiKey ??\n process.env.UPTRADE_API_KEY ??\n process.env.NEXT_PUBLIC_UPTRADE_API_KEY ??\n ''\n const apiUrl =\n config?.apiUrl ??\n process.env.UPTRADE_API_URL ??\n process.env.NEXT_PUBLIC_UPTRADE_API_URL ??\n 'https://api.uptrademedia.com'\n\n // Fetch project info for defaults\n let project: ProjectInfo | null = null\n if (apiKey) {\n project = await fetchProjectInfo(apiKey, apiUrl)\n }\n\n // Also try getSiteConfig for site_url\n const siteConfig = apiKey\n ? await getSiteConfig({ apiKey, apiUrl }).catch(() => null)\n : null\n\n const name = config?.name ?? project?.name ?? 'My Site'\n const shortName =\n config?.shortName ?? name.split(/\\s+/)[0] ?? name\n const description =\n config?.description ?? project?.description ?? ''\n const themeColor =\n config?.themeColor ?? project?.brand_primary ?? '#4bbf39'\n const backgroundColor = config?.backgroundColor ?? '#ffffff'\n const startUrl = config?.startUrl ?? '/'\n\n // Build icons array\n const logoUrl = project?.logo_url\n const icons =\n config?.icons ??\n (logoUrl\n ? [\n {\n src: logoUrl,\n sizes: '192x192',\n type: 'image/png',\n },\n {\n src: logoUrl,\n sizes: '512x512',\n type: 'image/png',\n },\n {\n src: logoUrl,\n sizes: '512x512',\n type: 'image/png',\n purpose: 'maskable',\n },\n ]\n : [])\n\n const manifest = {\n name,\n short_name: shortName,\n description,\n start_url: startUrl,\n scope: config?.scope ?? '/',\n display: config?.display ?? 'standalone',\n orientation: config?.orientation ?? 'any',\n theme_color: themeColor,\n background_color: backgroundColor,\n icons,\n ...(config?.categories?.length\n ? { categories: config.categories }\n : {}),\n }\n\n return new Response(JSON.stringify(manifest, null, 2), {\n status: 200,\n headers: {\n 'Content-Type': 'application/manifest+json',\n 'Cache-Control':\n 'public, max-age=86400, s-maxage=86400',\n },\n })\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/manifest/index.ts"],"names":["getSiteConfig"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @sonordev/site-kit/manifest\n *\n * PWA manifest generator. Fetches project name, description, brand colors,\n * and logo from Portal to generate a compliant Web App Manifest.\n *\n * @example\n * ```ts\n * // app/manifest.webmanifest/route.ts\n * import { createManifest } from '@sonordev/site-kit/manifest'\n * export const GET = createManifest()\n * ```\n *\n * @example With overrides:\n * ```ts\n * export const GET = createManifest({\n * display: 'fullscreen',\n * themeColor: '#1a1a2e',\n * categories: ['business', 'productivity'],\n * })\n * ```\n */\n\nimport { getSiteConfig } from '../site-config'\n\nexport interface ManifestConfig {\n /** App name. Defaults to Portal project name. */\n name?: string\n /** Short name for home screen. Defaults to first word of name. */\n shortName?: string\n /** App description. Defaults to Portal project description. */\n description?: string\n /** Theme color for browser chrome. Defaults to Portal brand color or #4bbf39. */\n themeColor?: string\n /** Background color for splash screen. Default: '#ffffff' */\n backgroundColor?: string\n /** Display mode. Default: 'standalone' */\n display?: 'standalone' | 'fullscreen' | 'minimal-ui' | 'browser'\n /** Orientation preference. Default: 'any' */\n orientation?: 'portrait-primary' | 'landscape-primary' | 'any'\n /** Start URL. Default: '/' */\n startUrl?: string\n /** Scope. Default: '/' */\n scope?: string\n /** App categories */\n categories?: string[]\n /** Custom icons. If not provided, derived from Portal logo. */\n icons?: Array<{\n src: string\n sizes: string\n type: string\n purpose?: string\n }>\n /** Portal API key. Defaults from env. */\n apiKey?: string\n /** Portal API URL. Defaults from env. */\n apiUrl?: string\n}\n\ninterface ProjectInfo {\n site_url?: string\n domain?: string\n name?: string\n description?: string\n logo_url?: string\n brand_primary?: string\n}\n\nasync function fetchProjectInfo(\n apiKey: string,\n apiUrl: string,\n): Promise<ProjectInfo | null> {\n try {\n const fetchOptions: RequestInit & Record<string, unknown> = {\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n },\n }\n // Next.js fetch extension for ISR caching\n ;(fetchOptions as any).next = { revalidate: 3600 }\n const res = await fetch(\n `${apiUrl}/api/public/seo/project-info`,\n fetchOptions,\n )\n if (!res.ok) return null\n return await res.json()\n } catch {\n return null\n }\n}\n\n/**\n * Create a route handler that serves the PWA manifest.\n * Fetches project data from Portal and merges with config overrides.\n */\nexport function createManifest(\n config?: ManifestConfig,\n): () => Promise<Response> {\n return async function GET(): Promise<Response> {\n const apiKey =\n config?.apiKey ??\n process.env.SONOR_API_KEY ??\n process.env.UPTRADE_API_KEY ??\n process.env.NEXT_PUBLIC_UPTRADE_API_KEY ??\n ''\n const apiUrl =\n config?.apiUrl ??\n process.env.SONOR_API_URL ??\n process.env.UPTRADE_API_URL ??\n process.env.NEXT_PUBLIC_UPTRADE_API_URL ??\n 'https://api.sonor.io'\n\n // Fetch project info for defaults\n let project: ProjectInfo | null = null\n if (apiKey) {\n project = await fetchProjectInfo(apiKey, apiUrl)\n }\n\n // Also try getSiteConfig for site_url\n const siteConfig = apiKey\n ? await getSiteConfig({ apiKey, apiUrl }).catch(() => null)\n : null\n\n const name = config?.name ?? project?.name ?? 'My Site'\n const shortName =\n config?.shortName ?? name.split(/\\s+/)[0] ?? name\n const description =\n config?.description ?? project?.description ?? ''\n const themeColor =\n config?.themeColor ?? project?.brand_primary ?? '#4bbf39'\n const backgroundColor = config?.backgroundColor ?? '#ffffff'\n const startUrl = config?.startUrl ?? '/'\n\n // Build icons array\n const logoUrl = project?.logo_url\n const icons =\n config?.icons ??\n (logoUrl\n ? [\n {\n src: logoUrl,\n sizes: '192x192',\n type: 'image/png',\n },\n {\n src: logoUrl,\n sizes: '512x512',\n type: 'image/png',\n },\n {\n src: logoUrl,\n sizes: '512x512',\n type: 'image/png',\n purpose: 'maskable',\n },\n ]\n : [])\n\n const manifest = {\n name,\n short_name: shortName,\n description,\n start_url: startUrl,\n scope: config?.scope ?? '/',\n display: config?.display ?? 'standalone',\n orientation: config?.orientation ?? 'any',\n theme_color: themeColor,\n background_color: backgroundColor,\n icons,\n ...(config?.categories?.length\n ? { categories: config.categories }\n : {}),\n }\n\n return new Response(JSON.stringify(manifest, null, 2), {\n status: 200,\n headers: {\n 'Content-Type': 'application/manifest+json',\n 'Cache-Control':\n 'public, max-age=86400, s-maxage=86400',\n },\n })\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { getSiteConfig } from '../chunk-GCJXQ4AG.mjs';
1
+ import { getSiteConfig } from '../chunk-VZMDH3R4.mjs';
2
2
  import '../chunk-4XPGGLVP.mjs';
3
3
 
4
4
  // src/manifest/index.ts
@@ -23,8 +23,8 @@ async function fetchProjectInfo(apiKey, apiUrl) {
23
23
  }
24
24
  function createManifest(config) {
25
25
  return async function GET() {
26
- const apiKey = config?.apiKey ?? process.env.UPTRADE_API_KEY ?? process.env.NEXT_PUBLIC_UPTRADE_API_KEY ?? "";
27
- const apiUrl = config?.apiUrl ?? process.env.UPTRADE_API_URL ?? process.env.NEXT_PUBLIC_UPTRADE_API_URL ?? "https://api.uptrademedia.com";
26
+ const apiKey = config?.apiKey ?? process.env.SONOR_API_KEY ?? process.env.UPTRADE_API_KEY ?? process.env.NEXT_PUBLIC_UPTRADE_API_KEY ?? "";
27
+ const apiUrl = config?.apiUrl ?? process.env.SONOR_API_URL ?? process.env.UPTRADE_API_URL ?? process.env.NEXT_PUBLIC_UPTRADE_API_URL ?? "https://api.sonor.io";
28
28
  let project = null;
29
29
  if (apiKey) {
30
30
  project = await fetchProjectInfo(apiKey, apiUrl);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/manifest/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @sonordev/site-kit/manifest\n *\n * PWA manifest generator. Fetches project name, description, brand colors,\n * and logo from Portal to generate a compliant Web App Manifest.\n *\n * @example\n * ```ts\n * // app/manifest.webmanifest/route.ts\n * import { createManifest } from '@sonordev/site-kit/manifest'\n * export const GET = createManifest()\n * ```\n *\n * @example With overrides:\n * ```ts\n * export const GET = createManifest({\n * display: 'fullscreen',\n * themeColor: '#1a1a2e',\n * categories: ['business', 'productivity'],\n * })\n * ```\n */\n\nimport { getSiteConfig } from '../site-config'\n\nexport interface ManifestConfig {\n /** App name. Defaults to Portal project name. */\n name?: string\n /** Short name for home screen. Defaults to first word of name. */\n shortName?: string\n /** App description. Defaults to Portal project description. */\n description?: string\n /** Theme color for browser chrome. Defaults to Portal brand color or #4bbf39. */\n themeColor?: string\n /** Background color for splash screen. Default: '#ffffff' */\n backgroundColor?: string\n /** Display mode. Default: 'standalone' */\n display?: 'standalone' | 'fullscreen' | 'minimal-ui' | 'browser'\n /** Orientation preference. Default: 'any' */\n orientation?: 'portrait-primary' | 'landscape-primary' | 'any'\n /** Start URL. Default: '/' */\n startUrl?: string\n /** Scope. Default: '/' */\n scope?: string\n /** App categories */\n categories?: string[]\n /** Custom icons. If not provided, derived from Portal logo. */\n icons?: Array<{\n src: string\n sizes: string\n type: string\n purpose?: string\n }>\n /** Portal API key. Defaults from env. */\n apiKey?: string\n /** Portal API URL. Defaults from env. */\n apiUrl?: string\n}\n\ninterface ProjectInfo {\n site_url?: string\n domain?: string\n name?: string\n description?: string\n logo_url?: string\n brand_primary?: string\n}\n\nasync function fetchProjectInfo(\n apiKey: string,\n apiUrl: string,\n): Promise<ProjectInfo | null> {\n try {\n const fetchOptions: RequestInit & Record<string, unknown> = {\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n },\n }\n // Next.js fetch extension for ISR caching\n ;(fetchOptions as any).next = { revalidate: 3600 }\n const res = await fetch(\n `${apiUrl}/api/public/seo/project-info`,\n fetchOptions,\n )\n if (!res.ok) return null\n return await res.json()\n } catch {\n return null\n }\n}\n\n/**\n * Create a route handler that serves the PWA manifest.\n * Fetches project data from Portal and merges with config overrides.\n */\nexport function createManifest(\n config?: ManifestConfig,\n): () => Promise<Response> {\n return async function GET(): Promise<Response> {\n const apiKey =\n config?.apiKey ??\n process.env.UPTRADE_API_KEY ??\n process.env.NEXT_PUBLIC_UPTRADE_API_KEY ??\n ''\n const apiUrl =\n config?.apiUrl ??\n process.env.UPTRADE_API_URL ??\n process.env.NEXT_PUBLIC_UPTRADE_API_URL ??\n 'https://api.uptrademedia.com'\n\n // Fetch project info for defaults\n let project: ProjectInfo | null = null\n if (apiKey) {\n project = await fetchProjectInfo(apiKey, apiUrl)\n }\n\n // Also try getSiteConfig for site_url\n const siteConfig = apiKey\n ? await getSiteConfig({ apiKey, apiUrl }).catch(() => null)\n : null\n\n const name = config?.name ?? project?.name ?? 'My Site'\n const shortName =\n config?.shortName ?? name.split(/\\s+/)[0] ?? name\n const description =\n config?.description ?? project?.description ?? ''\n const themeColor =\n config?.themeColor ?? project?.brand_primary ?? '#4bbf39'\n const backgroundColor = config?.backgroundColor ?? '#ffffff'\n const startUrl = config?.startUrl ?? '/'\n\n // Build icons array\n const logoUrl = project?.logo_url\n const icons =\n config?.icons ??\n (logoUrl\n ? [\n {\n src: logoUrl,\n sizes: '192x192',\n type: 'image/png',\n },\n {\n src: logoUrl,\n sizes: '512x512',\n type: 'image/png',\n },\n {\n src: logoUrl,\n sizes: '512x512',\n type: 'image/png',\n purpose: 'maskable',\n },\n ]\n : [])\n\n const manifest = {\n name,\n short_name: shortName,\n description,\n start_url: startUrl,\n scope: config?.scope ?? '/',\n display: config?.display ?? 'standalone',\n orientation: config?.orientation ?? 'any',\n theme_color: themeColor,\n background_color: backgroundColor,\n icons,\n ...(config?.categories?.length\n ? { categories: config.categories }\n : {}),\n }\n\n return new Response(JSON.stringify(manifest, null, 2), {\n status: 200,\n headers: {\n 'Content-Type': 'application/manifest+json',\n 'Cache-Control':\n 'public, max-age=86400, s-maxage=86400',\n },\n })\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/manifest/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @sonordev/site-kit/manifest\n *\n * PWA manifest generator. Fetches project name, description, brand colors,\n * and logo from Portal to generate a compliant Web App Manifest.\n *\n * @example\n * ```ts\n * // app/manifest.webmanifest/route.ts\n * import { createManifest } from '@sonordev/site-kit/manifest'\n * export const GET = createManifest()\n * ```\n *\n * @example With overrides:\n * ```ts\n * export const GET = createManifest({\n * display: 'fullscreen',\n * themeColor: '#1a1a2e',\n * categories: ['business', 'productivity'],\n * })\n * ```\n */\n\nimport { getSiteConfig } from '../site-config'\n\nexport interface ManifestConfig {\n /** App name. Defaults to Portal project name. */\n name?: string\n /** Short name for home screen. Defaults to first word of name. */\n shortName?: string\n /** App description. Defaults to Portal project description. */\n description?: string\n /** Theme color for browser chrome. Defaults to Portal brand color or #4bbf39. */\n themeColor?: string\n /** Background color for splash screen. Default: '#ffffff' */\n backgroundColor?: string\n /** Display mode. Default: 'standalone' */\n display?: 'standalone' | 'fullscreen' | 'minimal-ui' | 'browser'\n /** Orientation preference. Default: 'any' */\n orientation?: 'portrait-primary' | 'landscape-primary' | 'any'\n /** Start URL. Default: '/' */\n startUrl?: string\n /** Scope. Default: '/' */\n scope?: string\n /** App categories */\n categories?: string[]\n /** Custom icons. If not provided, derived from Portal logo. */\n icons?: Array<{\n src: string\n sizes: string\n type: string\n purpose?: string\n }>\n /** Portal API key. Defaults from env. */\n apiKey?: string\n /** Portal API URL. Defaults from env. */\n apiUrl?: string\n}\n\ninterface ProjectInfo {\n site_url?: string\n domain?: string\n name?: string\n description?: string\n logo_url?: string\n brand_primary?: string\n}\n\nasync function fetchProjectInfo(\n apiKey: string,\n apiUrl: string,\n): Promise<ProjectInfo | null> {\n try {\n const fetchOptions: RequestInit & Record<string, unknown> = {\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n },\n }\n // Next.js fetch extension for ISR caching\n ;(fetchOptions as any).next = { revalidate: 3600 }\n const res = await fetch(\n `${apiUrl}/api/public/seo/project-info`,\n fetchOptions,\n )\n if (!res.ok) return null\n return await res.json()\n } catch {\n return null\n }\n}\n\n/**\n * Create a route handler that serves the PWA manifest.\n * Fetches project data from Portal and merges with config overrides.\n */\nexport function createManifest(\n config?: ManifestConfig,\n): () => Promise<Response> {\n return async function GET(): Promise<Response> {\n const apiKey =\n config?.apiKey ??\n process.env.SONOR_API_KEY ??\n process.env.UPTRADE_API_KEY ??\n process.env.NEXT_PUBLIC_UPTRADE_API_KEY ??\n ''\n const apiUrl =\n config?.apiUrl ??\n process.env.SONOR_API_URL ??\n process.env.UPTRADE_API_URL ??\n process.env.NEXT_PUBLIC_UPTRADE_API_URL ??\n 'https://api.sonor.io'\n\n // Fetch project info for defaults\n let project: ProjectInfo | null = null\n if (apiKey) {\n project = await fetchProjectInfo(apiKey, apiUrl)\n }\n\n // Also try getSiteConfig for site_url\n const siteConfig = apiKey\n ? await getSiteConfig({ apiKey, apiUrl }).catch(() => null)\n : null\n\n const name = config?.name ?? project?.name ?? 'My Site'\n const shortName =\n config?.shortName ?? name.split(/\\s+/)[0] ?? name\n const description =\n config?.description ?? project?.description ?? ''\n const themeColor =\n config?.themeColor ?? project?.brand_primary ?? '#4bbf39'\n const backgroundColor = config?.backgroundColor ?? '#ffffff'\n const startUrl = config?.startUrl ?? '/'\n\n // Build icons array\n const logoUrl = project?.logo_url\n const icons =\n config?.icons ??\n (logoUrl\n ? [\n {\n src: logoUrl,\n sizes: '192x192',\n type: 'image/png',\n },\n {\n src: logoUrl,\n sizes: '512x512',\n type: 'image/png',\n },\n {\n src: logoUrl,\n sizes: '512x512',\n type: 'image/png',\n purpose: 'maskable',\n },\n ]\n : [])\n\n const manifest = {\n name,\n short_name: shortName,\n description,\n start_url: startUrl,\n scope: config?.scope ?? '/',\n display: config?.display ?? 'standalone',\n orientation: config?.orientation ?? 'any',\n theme_color: themeColor,\n background_color: backgroundColor,\n icons,\n ...(config?.categories?.length\n ? { categories: config.categories }\n : {}),\n }\n\n return new Response(JSON.stringify(manifest, null, 2), {\n status: 200,\n headers: {\n 'Content-Type': 'application/manifest+json',\n 'Cache-Control':\n 'public, max-age=86400, s-maxage=86400',\n },\n })\n }\n}\n"]}
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  var chunk3MYZS6PD_js = require('../chunk-3MYZS6PD.js');
4
- var chunkLBVWVP72_js = require('../chunk-LBVWVP72.js');
5
- require('../chunk-7557OTHW.js');
4
+ var chunkX4J33XQD_js = require('../chunk-X4J33XQD.js');
5
+ require('../chunk-EUNL6GAL.js');
6
6
  require('../chunk-ZSMWDLMK.js');
7
7
  var server = require('next/server');
8
8
 
@@ -20,7 +20,7 @@ function createMiddleware(config) {
20
20
  }
21
21
  if (config?.redirects !== false) {
22
22
  const redirectConfig = typeof config?.redirects === "object" ? config.redirects : {};
23
- const redirect = await chunkLBVWVP72_js.handleManagedRedirects(
23
+ const redirect = await chunkX4J33XQD_js.handleManagedRedirects(
24
24
  request,
25
25
  redirectConfig
26
26
  );
@@ -1,6 +1,6 @@
1
1
  import { buildSecurityHeaders } from '../chunk-6BIPAKL4.mjs';
2
- import { handleManagedRedirects } from '../chunk-QXV4667R.mjs';
3
- import '../chunk-GCJXQ4AG.mjs';
2
+ import { handleManagedRedirects } from '../chunk-XFOL6JDF.mjs';
3
+ import '../chunk-VZMDH3R4.mjs';
4
4
  import '../chunk-4XPGGLVP.mjs';
5
5
  import { NextResponse } from 'next/server';
6
6
 
@@ -1,4 +1,4 @@
1
- export { migrateAnalytics, migrateFAQ, migrateFile, migrateFiles, migrateMetadata, migrateSchema, migrateSitemap } from './chunk-24277A3Q.mjs';
1
+ export { migrateAnalytics, migrateFAQ, migrateFile, migrateFiles, migrateMetadata, migrateSchema, migrateSitemap } from './chunk-HF2FWDBJ.mjs';
2
2
  import './chunk-4XPGGLVP.mjs';
3
- //# sourceMappingURL=migrator-2MQHOFDQ.mjs.map
4
- //# sourceMappingURL=migrator-2MQHOFDQ.mjs.map
3
+ //# sourceMappingURL=migrator-3WQB3KQ2.mjs.map
4
+ //# sourceMappingURL=migrator-3WQB3KQ2.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"migrator-2MQHOFDQ.mjs"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"migrator-3WQB3KQ2.mjs"}
@@ -0,0 +1,37 @@
1
+ 'use strict';
2
+
3
+ var chunkJM3ZR6LB_js = require('./chunk-JM3ZR6LB.js');
4
+ require('./chunk-ZSMWDLMK.js');
5
+
6
+
7
+
8
+ Object.defineProperty(exports, "migrateAnalytics", {
9
+ enumerable: true,
10
+ get: function () { return chunkJM3ZR6LB_js.migrateAnalytics; }
11
+ });
12
+ Object.defineProperty(exports, "migrateFAQ", {
13
+ enumerable: true,
14
+ get: function () { return chunkJM3ZR6LB_js.migrateFAQ; }
15
+ });
16
+ Object.defineProperty(exports, "migrateFile", {
17
+ enumerable: true,
18
+ get: function () { return chunkJM3ZR6LB_js.migrateFile; }
19
+ });
20
+ Object.defineProperty(exports, "migrateFiles", {
21
+ enumerable: true,
22
+ get: function () { return chunkJM3ZR6LB_js.migrateFiles; }
23
+ });
24
+ Object.defineProperty(exports, "migrateMetadata", {
25
+ enumerable: true,
26
+ get: function () { return chunkJM3ZR6LB_js.migrateMetadata; }
27
+ });
28
+ Object.defineProperty(exports, "migrateSchema", {
29
+ enumerable: true,
30
+ get: function () { return chunkJM3ZR6LB_js.migrateSchema; }
31
+ });
32
+ Object.defineProperty(exports, "migrateSitemap", {
33
+ enumerable: true,
34
+ get: function () { return chunkJM3ZR6LB_js.migrateSitemap; }
35
+ });
36
+ //# sourceMappingURL=migrator-HFVQYK5R.js.map
37
+ //# sourceMappingURL=migrator-HFVQYK5R.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"migrator-THJCF6MZ.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"migrator-HFVQYK5R.js"}
@@ -12,8 +12,8 @@ import { NextRequest, NextResponse } from 'next/server';
12
12
  *
13
13
  * export async function middleware(request: NextRequest) {
14
14
  * const redirect = await handleManagedRedirects(request, {
15
- * apiKey: process.env.NEXT_PUBLIC_UPTRADE_API_KEY,
16
- * portalApiUrl: process.env.NEXT_PUBLIC_UPTRADE_API_URL,
15
+ * apiKey: process.env.SONOR_API_KEY,
16
+ * portalApiUrl: process.env.SONOR_API_URL,
17
17
  * })
18
18
  * if (redirect) return redirect
19
19
  * return NextResponse.next()
@@ -12,8 +12,8 @@ import { NextRequest, NextResponse } from 'next/server';
12
12
  *
13
13
  * export async function middleware(request: NextRequest) {
14
14
  * const redirect = await handleManagedRedirects(request, {
15
- * apiKey: process.env.NEXT_PUBLIC_UPTRADE_API_KEY,
16
- * portalApiUrl: process.env.NEXT_PUBLIC_UPTRADE_API_URL,
15
+ * apiKey: process.env.SONOR_API_KEY,
16
+ * portalApiUrl: process.env.SONOR_API_URL,
17
17
  * })
18
18
  * if (redirect) return redirect
19
19
  * return NextResponse.next()
@@ -1,26 +1,26 @@
1
1
  'use strict';
2
2
 
3
- var chunkLBVWVP72_js = require('../chunk-LBVWVP72.js');
4
- require('../chunk-7557OTHW.js');
3
+ var chunkX4J33XQD_js = require('../chunk-X4J33XQD.js');
4
+ require('../chunk-EUNL6GAL.js');
5
5
  require('../chunk-ZSMWDLMK.js');
6
6
 
7
7
 
8
8
 
9
9
  Object.defineProperty(exports, "clearRedirectCache", {
10
10
  enumerable: true,
11
- get: function () { return chunkLBVWVP72_js.clearRedirectCache; }
11
+ get: function () { return chunkX4J33XQD_js.clearRedirectCache; }
12
12
  });
13
13
  Object.defineProperty(exports, "fetchRedirectRules", {
14
14
  enumerable: true,
15
- get: function () { return chunkLBVWVP72_js.fetchRedirectRules; }
15
+ get: function () { return chunkX4J33XQD_js.fetchRedirectRules; }
16
16
  });
17
17
  Object.defineProperty(exports, "generateNextRedirects", {
18
18
  enumerable: true,
19
- get: function () { return chunkLBVWVP72_js.generateNextRedirects; }
19
+ get: function () { return chunkX4J33XQD_js.generateNextRedirects; }
20
20
  });
21
21
  Object.defineProperty(exports, "handleManagedRedirects", {
22
22
  enumerable: true,
23
- get: function () { return chunkLBVWVP72_js.handleManagedRedirects; }
23
+ get: function () { return chunkX4J33XQD_js.handleManagedRedirects; }
24
24
  });
25
25
  //# sourceMappingURL=index.js.map
26
26
  //# sourceMappingURL=index.js.map
@@ -1,5 +1,5 @@
1
- export { clearRedirectCache, fetchRedirectRules, generateNextRedirects, handleManagedRedirects } from '../chunk-QXV4667R.mjs';
2
- import '../chunk-GCJXQ4AG.mjs';
1
+ export { clearRedirectCache, fetchRedirectRules, generateNextRedirects, handleManagedRedirects } from '../chunk-XFOL6JDF.mjs';
2
+ import '../chunk-VZMDH3R4.mjs';
3
3
  import '../chunk-4XPGGLVP.mjs';
4
4
  //# sourceMappingURL=index.mjs.map
5
5
  //# sourceMappingURL=index.mjs.map
@@ -1,21 +1,21 @@
1
1
  'use strict';
2
2
 
3
- var chunk43GBM4SX_js = require('../chunk-43GBM4SX.js');
3
+ var chunkTKQLH33E_js = require('../chunk-TKQLH33E.js');
4
4
  require('../chunk-ZSMWDLMK.js');
5
5
 
6
6
 
7
7
 
8
8
  Object.defineProperty(exports, "TestimonialSection", {
9
9
  enumerable: true,
10
- get: function () { return chunk43GBM4SX_js.TestimonialSection; }
10
+ get: function () { return chunkTKQLH33E_js.TestimonialSection; }
11
11
  });
12
12
  Object.defineProperty(exports, "fetchReviewStats", {
13
13
  enumerable: true,
14
- get: function () { return chunk43GBM4SX_js.fetchReviewStats; }
14
+ get: function () { return chunkTKQLH33E_js.fetchReviewStats; }
15
15
  });
16
16
  Object.defineProperty(exports, "fetchReviews", {
17
17
  enumerable: true,
18
- get: function () { return chunk43GBM4SX_js.fetchReviews; }
18
+ get: function () { return chunkTKQLH33E_js.fetchReviews; }
19
19
  });
20
20
  //# sourceMappingURL=index.js.map
21
21
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- export { TestimonialSection, fetchReviewStats, fetchReviews } from '../chunk-UWE5PCYJ.mjs';
1
+ export { TestimonialSection, fetchReviewStats, fetchReviews } from '../chunk-APZMXRI3.mjs';
2
2
  import '../chunk-4XPGGLVP.mjs';
3
3
  //# sourceMappingURL=index.mjs.map
4
4
  //# sourceMappingURL=index.mjs.map
@@ -7,7 +7,7 @@
7
7
  * @example
8
8
  * // app/robots.txt/route.ts (API key only)
9
9
  * import { createRobots } from '@sonordev/site-kit/robots'
10
- * export const GET = createRobots({ apiKey: process.env.NEXT_PUBLIC_UPTRADE_API_KEY })
10
+ * export const GET = createRobots({ apiKey: process.env.SONOR_API_KEY })
11
11
  *
12
12
  * @example
13
13
  * // With explicit baseUrl
@@ -7,7 +7,7 @@
7
7
  * @example
8
8
  * // app/robots.txt/route.ts (API key only)
9
9
  * import { createRobots } from '@sonordev/site-kit/robots'
10
- * export const GET = createRobots({ apiKey: process.env.NEXT_PUBLIC_UPTRADE_API_KEY })
10
+ * export const GET = createRobots({ apiKey: process.env.SONOR_API_KEY })
11
11
  *
12
12
  * @example
13
13
  * // With explicit baseUrl
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunk7557OTHW_js = require('../chunk-7557OTHW.js');
3
+ var chunkEUNL6GAL_js = require('../chunk-EUNL6GAL.js');
4
4
  require('../chunk-ZSMWDLMK.js');
5
5
 
6
6
  // src/robots/index.ts
@@ -33,14 +33,14 @@ function createRobots(config) {
33
33
  if (baseUrl) {
34
34
  return buildRobotsResponse(baseUrl, config);
35
35
  }
36
- const apiKey = config.apiKey ?? (typeof process !== "undefined" && process.env && (process.env.NEXT_PUBLIC_UPTRADE_API_KEY || process.env.UPTRADE_API_KEY));
36
+ const apiKey = config.apiKey ?? (typeof process !== "undefined" && process.env && (process.env.SONOR_API_KEY || process.env.UPTRADE_API_KEY || process.env.NEXT_PUBLIC_UPTRADE_API_KEY));
37
37
  if (!apiKey) {
38
38
  return new Response("User-agent: *\nDisallow: /", {
39
39
  status: 200,
40
40
  headers: { "Content-Type": "text/plain; charset=utf-8" }
41
41
  });
42
42
  }
43
- return chunk7557OTHW_js.getSiteConfig({ apiKey, apiUrl: config.apiUrl }).then((site) => {
43
+ return chunkEUNL6GAL_js.getSiteConfig({ apiKey, apiUrl: config.apiUrl }).then((site) => {
44
44
  const url = site?.site_url ?? "https://example.com";
45
45
  return buildRobotsResponse(url, config);
46
46
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/robots/index.ts"],"names":["getSiteConfig"],"mappings":";;;;;;AAmCA,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,KAAA,MAAW,CAAA,IAAK,MAAA,CAAO,QAAA,IAAY,EAAC,EAAG;AACrC,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,MAAA,CAAO,MAAA,KAAW,OAAO,OAAA,KAAY,WAAA,IAAe,OAAA,CAAQ,GAAA,KAAQ,OAAA,CAAQ,GAAA,CAAI,2BAAA,IAA+B,OAAA,CAAQ,GAAA,CAAI,eAAA,CAAA,CAAA;AAC1I,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,OAAOA,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.NEXT_PUBLIC_UPTRADE_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'\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 /** Paths to disallow (e.g. ['/admin', '/api']) */\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 for (const p of config.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.NEXT_PUBLIC_UPTRADE_API_KEY || process.env.UPTRADE_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":["getSiteConfig"],"mappings":";;;;;;AAmCA,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,KAAA,MAAW,CAAA,IAAK,MAAA,CAAO,QAAA,IAAY,EAAC,EAAG;AACrC,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,MAAA,CAAO,MAAA,KAAW,OAAO,YAAY,WAAA,IAAe,OAAA,CAAQ,GAAA,KAAQ,OAAA,CAAQ,IAAI,aAAA,IAAiB,OAAA,CAAQ,GAAA,CAAI,eAAA,IAAmB,QAAQ,GAAA,CAAI,2BAAA,CAAA,CAAA;AAC3J,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,OAAOA,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'\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 /** Paths to disallow (e.g. ['/admin', '/api']) */\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 for (const p of config.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 || process.env.UPTRADE_API_KEY || process.env.NEXT_PUBLIC_UPTRADE_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,4 +1,4 @@
1
- import { getSiteConfig } from '../chunk-GCJXQ4AG.mjs';
1
+ import { getSiteConfig } from '../chunk-VZMDH3R4.mjs';
2
2
  import '../chunk-4XPGGLVP.mjs';
3
3
 
4
4
  // src/robots/index.ts
@@ -31,7 +31,7 @@ function createRobots(config) {
31
31
  if (baseUrl) {
32
32
  return buildRobotsResponse(baseUrl, config);
33
33
  }
34
- const apiKey = config.apiKey ?? (typeof process !== "undefined" && process.env && (process.env.NEXT_PUBLIC_UPTRADE_API_KEY || process.env.UPTRADE_API_KEY));
34
+ const apiKey = config.apiKey ?? (typeof process !== "undefined" && process.env && (process.env.SONOR_API_KEY || process.env.UPTRADE_API_KEY || process.env.NEXT_PUBLIC_UPTRADE_API_KEY));
35
35
  if (!apiKey) {
36
36
  return new Response("User-agent: *\nDisallow: /", {
37
37
  status: 200,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/robots/index.ts"],"names":[],"mappings":";;;;AAmCA,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,KAAA,MAAW,CAAA,IAAK,MAAA,CAAO,QAAA,IAAY,EAAC,EAAG;AACrC,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,MAAA,CAAO,MAAA,KAAW,OAAO,OAAA,KAAY,WAAA,IAAe,OAAA,CAAQ,GAAA,KAAQ,OAAA,CAAQ,GAAA,CAAI,2BAAA,IAA+B,OAAA,CAAQ,GAAA,CAAI,eAAA,CAAA,CAAA;AAC1I,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.NEXT_PUBLIC_UPTRADE_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'\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 /** Paths to disallow (e.g. ['/admin', '/api']) */\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 for (const p of config.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.NEXT_PUBLIC_UPTRADE_API_KEY || process.env.UPTRADE_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":";;;;AAmCA,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,KAAA,MAAW,CAAA,IAAK,MAAA,CAAO,QAAA,IAAY,EAAC,EAAG;AACrC,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,MAAA,CAAO,MAAA,KAAW,OAAO,YAAY,WAAA,IAAe,OAAA,CAAQ,GAAA,KAAQ,OAAA,CAAQ,IAAI,aAAA,IAAiB,OAAA,CAAQ,GAAA,CAAI,eAAA,IAAmB,QAAQ,GAAA,CAAI,2BAAA,CAAA,CAAA;AAC3J,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'\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 /** Paths to disallow (e.g. ['/admin', '/api']) */\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 for (const p of config.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 || process.env.UPTRADE_API_KEY || process.env.NEXT_PUBLIC_UPTRADE_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"]}
@@ -519,7 +519,7 @@ declare function ManagedNoScripts({ path, }: {
519
519
  */
520
520
 
521
521
  interface LocationPageContentProps {
522
- /** Uptrade project ID */
522
+ /** Sonor project ID */
523
523
  projectId: string;
524
524
  /** Page path (e.g., /areas/seattle-wa/plumbing) */
525
525
  path: string;
@@ -519,7 +519,7 @@ declare function ManagedNoScripts({ path, }: {
519
519
  */
520
520
 
521
521
  interface LocationPageContentProps {
522
- /** Uptrade project ID */
522
+ /** Sonor project ID */
523
523
  projectId: string;
524
524
  /** Page path (e.g., /areas/seattle-wa/plumbing) */
525
525
  path: string;