@sonordev/site-kit 1.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/README.md +376 -0
  2. package/dist/SetupWizard-Cki06kB0.d.mts +12 -0
  3. package/dist/SetupWizard-Cki06kB0.d.ts +12 -0
  4. package/dist/analytics/index.d.mts +93 -0
  5. package/dist/analytics/index.d.ts +93 -0
  6. package/dist/analytics/index.js +89 -0
  7. package/dist/analytics/index.js.map +1 -0
  8. package/dist/analytics/index.mjs +71 -0
  9. package/dist/analytics/index.mjs.map +1 -0
  10. package/dist/api-CWtoFJCO.d.mts +137 -0
  11. package/dist/api-CWtoFJCO.d.ts +137 -0
  12. package/dist/blog/index.d.mts +305 -0
  13. package/dist/blog/index.d.ts +305 -0
  14. package/dist/blog/index.js +1578 -0
  15. package/dist/blog/index.js.map +1 -0
  16. package/dist/blog/index.mjs +1562 -0
  17. package/dist/blog/index.mjs.map +1 -0
  18. package/dist/blog/server.d.mts +229 -0
  19. package/dist/blog/server.d.ts +229 -0
  20. package/dist/blog/server.js +692 -0
  21. package/dist/blog/server.js.map +1 -0
  22. package/dist/blog/server.mjs +666 -0
  23. package/dist/blog/server.mjs.map +1 -0
  24. package/dist/chunk-24277A3Q.mjs +968 -0
  25. package/dist/chunk-24277A3Q.mjs.map +1 -0
  26. package/dist/chunk-373TK6TZ.js +321 -0
  27. package/dist/chunk-373TK6TZ.js.map +1 -0
  28. package/dist/chunk-3MYZS6PD.js +30 -0
  29. package/dist/chunk-3MYZS6PD.js.map +1 -0
  30. package/dist/chunk-43GBM4SX.js +283 -0
  31. package/dist/chunk-43GBM4SX.js.map +1 -0
  32. package/dist/chunk-4XPGGLVP.mjs +53 -0
  33. package/dist/chunk-4XPGGLVP.mjs.map +1 -0
  34. package/dist/chunk-622GAQP5.js +2008 -0
  35. package/dist/chunk-622GAQP5.js.map +1 -0
  36. package/dist/chunk-6BIPAKL4.mjs +28 -0
  37. package/dist/chunk-6BIPAKL4.mjs.map +1 -0
  38. package/dist/chunk-6ZCISNAB.mjs +343 -0
  39. package/dist/chunk-6ZCISNAB.mjs.map +1 -0
  40. package/dist/chunk-72MQFHYJ.js +1429 -0
  41. package/dist/chunk-72MQFHYJ.js.map +1 -0
  42. package/dist/chunk-7557OTHW.js +62 -0
  43. package/dist/chunk-7557OTHW.js.map +1 -0
  44. package/dist/chunk-7FUV73JZ.js +981 -0
  45. package/dist/chunk-7FUV73JZ.js.map +1 -0
  46. package/dist/chunk-7RF6PVHA.mjs +324 -0
  47. package/dist/chunk-7RF6PVHA.mjs.map +1 -0
  48. package/dist/chunk-7RYCHO6D.mjs +134 -0
  49. package/dist/chunk-7RYCHO6D.mjs.map +1 -0
  50. package/dist/chunk-7UKPRW25.mjs +1999 -0
  51. package/dist/chunk-7UKPRW25.mjs.map +1 -0
  52. package/dist/chunk-7URAOG2M.js +14864 -0
  53. package/dist/chunk-7URAOG2M.js.map +1 -0
  54. package/dist/chunk-AFAO3TGS.mjs +810 -0
  55. package/dist/chunk-AFAO3TGS.mjs.map +1 -0
  56. package/dist/chunk-BYLIU6XG.js +343 -0
  57. package/dist/chunk-BYLIU6XG.js.map +1 -0
  58. package/dist/chunk-D63MUKZ6.mjs +4423 -0
  59. package/dist/chunk-D63MUKZ6.mjs.map +1 -0
  60. package/dist/chunk-DDKW2FNA.js +390 -0
  61. package/dist/chunk-DDKW2FNA.js.map +1 -0
  62. package/dist/chunk-DQYMKR27.mjs +341 -0
  63. package/dist/chunk-DQYMKR27.mjs.map +1 -0
  64. package/dist/chunk-DW5UJKHH.js +221 -0
  65. package/dist/chunk-DW5UJKHH.js.map +1 -0
  66. package/dist/chunk-EEZCR6E6.js +50 -0
  67. package/dist/chunk-EEZCR6E6.js.map +1 -0
  68. package/dist/chunk-GCJXQ4AG.mjs +59 -0
  69. package/dist/chunk-GCJXQ4AG.mjs.map +1 -0
  70. package/dist/chunk-JGNQK2G6.mjs +14845 -0
  71. package/dist/chunk-JGNQK2G6.mjs.map +1 -0
  72. package/dist/chunk-JTLOJLWQ.mjs +563 -0
  73. package/dist/chunk-JTLOJLWQ.mjs.map +1 -0
  74. package/dist/chunk-K23A4G76.mjs +202 -0
  75. package/dist/chunk-K23A4G76.mjs.map +1 -0
  76. package/dist/chunk-KKU3K7RG.js +336 -0
  77. package/dist/chunk-KKU3K7RG.js.map +1 -0
  78. package/dist/chunk-KUGMH4ZF.js +571 -0
  79. package/dist/chunk-KUGMH4ZF.js.map +1 -0
  80. package/dist/chunk-LBVWVP72.js +110 -0
  81. package/dist/chunk-LBVWVP72.js.map +1 -0
  82. package/dist/chunk-LIVWLY2P.js +138 -0
  83. package/dist/chunk-LIVWLY2P.js.map +1 -0
  84. package/dist/chunk-M2T6R7BA.mjs +1003 -0
  85. package/dist/chunk-M2T6R7BA.mjs.map +1 -0
  86. package/dist/chunk-MV3QN7PW.mjs +47 -0
  87. package/dist/chunk-MV3QN7PW.mjs.map +1 -0
  88. package/dist/chunk-OB7E654K.js +72 -0
  89. package/dist/chunk-OB7E654K.js.map +1 -0
  90. package/dist/chunk-OIIKTGRL.mjs +380 -0
  91. package/dist/chunk-OIIKTGRL.mjs.map +1 -0
  92. package/dist/chunk-P3UWIUJS.mjs +1427 -0
  93. package/dist/chunk-P3UWIUJS.mjs.map +1 -0
  94. package/dist/chunk-PKN27UMH.mjs +136 -0
  95. package/dist/chunk-PKN27UMH.mjs.map +1 -0
  96. package/dist/chunk-QXV4667R.mjs +105 -0
  97. package/dist/chunk-QXV4667R.mjs.map +1 -0
  98. package/dist/chunk-S7FRYNSU.mjs +315 -0
  99. package/dist/chunk-S7FRYNSU.mjs.map +1 -0
  100. package/dist/chunk-TFLQX7K7.mjs +68 -0
  101. package/dist/chunk-TFLQX7K7.mjs.map +1 -0
  102. package/dist/chunk-UWE5PCYJ.mjs +279 -0
  103. package/dist/chunk-UWE5PCYJ.mjs.map +1 -0
  104. package/dist/chunk-UYFDNX2F.js +4469 -0
  105. package/dist/chunk-UYFDNX2F.js.map +1 -0
  106. package/dist/chunk-W4PALSGM.js +350 -0
  107. package/dist/chunk-W4PALSGM.js.map +1 -0
  108. package/dist/chunk-WECQ6KOB.js +1008 -0
  109. package/dist/chunk-WECQ6KOB.js.map +1 -0
  110. package/dist/chunk-XQQWI6WB.js +814 -0
  111. package/dist/chunk-XQQWI6WB.js.map +1 -0
  112. package/dist/chunk-XZJOZJB6.js +140 -0
  113. package/dist/chunk-XZJOZJB6.js.map +1 -0
  114. package/dist/chunk-ZSMWDLMK.js +63 -0
  115. package/dist/chunk-ZSMWDLMK.js.map +1 -0
  116. package/dist/cli/index.js +37243 -0
  117. package/dist/cli/index.js.map +1 -0
  118. package/dist/cli/index.mjs +37209 -0
  119. package/dist/cli/index.mjs.map +1 -0
  120. package/dist/commerce/index.d.mts +170 -0
  121. package/dist/commerce/index.d.ts +170 -0
  122. package/dist/commerce/index.js +174 -0
  123. package/dist/commerce/index.js.map +1 -0
  124. package/dist/commerce/index.mjs +5 -0
  125. package/dist/commerce/index.mjs.map +1 -0
  126. package/dist/commerce/server.d.mts +107 -0
  127. package/dist/commerce/server.d.ts +107 -0
  128. package/dist/commerce/server.js +187 -0
  129. package/dist/commerce/server.js.map +1 -0
  130. package/dist/commerce/server.mjs +177 -0
  131. package/dist/commerce/server.mjs.map +1 -0
  132. package/dist/config/index.d.mts +43 -0
  133. package/dist/config/index.d.ts +43 -0
  134. package/dist/config/index.js +66 -0
  135. package/dist/config/index.js.map +1 -0
  136. package/dist/config/index.mjs +64 -0
  137. package/dist/config/index.mjs.map +1 -0
  138. package/dist/engage/index.d.mts +33 -0
  139. package/dist/engage/index.d.ts +33 -0
  140. package/dist/engage/index.js +22 -0
  141. package/dist/engage/index.js.map +1 -0
  142. package/dist/engage/index.mjs +5 -0
  143. package/dist/engage/index.mjs.map +1 -0
  144. package/dist/forms/index.d.mts +437 -0
  145. package/dist/forms/index.d.ts +437 -0
  146. package/dist/forms/index.js +1168 -0
  147. package/dist/forms/index.js.map +1 -0
  148. package/dist/forms/index.mjs +1142 -0
  149. package/dist/forms/index.mjs.map +1 -0
  150. package/dist/generators-2XKQMPKH.mjs +4 -0
  151. package/dist/generators-2XKQMPKH.mjs.map +1 -0
  152. package/dist/generators-DTMO36DV.js +33 -0
  153. package/dist/generators-DTMO36DV.js.map +1 -0
  154. package/dist/images/index.d.mts +4 -0
  155. package/dist/images/index.d.ts +4 -0
  156. package/dist/images/index.js +46 -0
  157. package/dist/images/index.js.map +1 -0
  158. package/dist/images/index.mjs +5 -0
  159. package/dist/images/index.mjs.map +1 -0
  160. package/dist/images/server.d.mts +69 -0
  161. package/dist/images/server.d.ts +69 -0
  162. package/dist/images/server.js +21 -0
  163. package/dist/images/server.js.map +1 -0
  164. package/dist/images/server.mjs +4 -0
  165. package/dist/images/server.mjs.map +1 -0
  166. package/dist/index.d.mts +846 -0
  167. package/dist/index.d.ts +846 -0
  168. package/dist/index.js +2623 -0
  169. package/dist/index.js.map +1 -0
  170. package/dist/index.mjs +2416 -0
  171. package/dist/index.mjs.map +1 -0
  172. package/dist/layout/index.d.mts +53 -0
  173. package/dist/layout/index.d.ts +53 -0
  174. package/dist/layout/index.js +187 -0
  175. package/dist/layout/index.js.map +1 -0
  176. package/dist/layout/index.mjs +185 -0
  177. package/dist/layout/index.mjs.map +1 -0
  178. package/dist/llms/index.d.mts +448 -0
  179. package/dist/llms/index.d.ts +448 -0
  180. package/dist/llms/index.js +581 -0
  181. package/dist/llms/index.js.map +1 -0
  182. package/dist/llms/index.mjs +529 -0
  183. package/dist/llms/index.mjs.map +1 -0
  184. package/dist/manifest/index.d.mts +62 -0
  185. package/dist/manifest/index.d.ts +62 -0
  186. package/dist/manifest/index.js +85 -0
  187. package/dist/manifest/index.js.map +1 -0
  188. package/dist/manifest/index.mjs +83 -0
  189. package/dist/manifest/index.mjs.map +1 -0
  190. package/dist/middleware/index.d.mts +63 -0
  191. package/dist/middleware/index.d.ts +63 -0
  192. package/dist/middleware/index.js +54 -0
  193. package/dist/middleware/index.js.map +1 -0
  194. package/dist/middleware/index.mjs +51 -0
  195. package/dist/middleware/index.mjs.map +1 -0
  196. package/dist/migrator-2MQHOFDQ.mjs +4 -0
  197. package/dist/migrator-2MQHOFDQ.mjs.map +1 -0
  198. package/dist/migrator-THJCF6MZ.js +37 -0
  199. package/dist/migrator-THJCF6MZ.js.map +1 -0
  200. package/dist/redirects/index.d.mts +78 -0
  201. package/dist/redirects/index.d.ts +78 -0
  202. package/dist/redirects/index.js +26 -0
  203. package/dist/redirects/index.js.map +1 -0
  204. package/dist/redirects/index.mjs +5 -0
  205. package/dist/redirects/index.mjs.map +1 -0
  206. package/dist/reputation/index.d.mts +57 -0
  207. package/dist/reputation/index.d.ts +57 -0
  208. package/dist/reputation/index.js +21 -0
  209. package/dist/reputation/index.js.map +1 -0
  210. package/dist/reputation/index.mjs +4 -0
  211. package/dist/reputation/index.mjs.map +1 -0
  212. package/dist/robots/index.d.mts +38 -0
  213. package/dist/robots/index.d.ts +38 -0
  214. package/dist/robots/index.js +52 -0
  215. package/dist/robots/index.js.map +1 -0
  216. package/dist/robots/index.mjs +50 -0
  217. package/dist/robots/index.mjs.map +1 -0
  218. package/dist/routing-B5XS-6_W.d.mts +118 -0
  219. package/dist/routing-DZYzyDHw.d.ts +118 -0
  220. package/dist/scanner-GAF5PO5F.js +53 -0
  221. package/dist/scanner-GAF5PO5F.js.map +1 -0
  222. package/dist/scanner-LKJKW7IT.mjs +4 -0
  223. package/dist/scanner-LKJKW7IT.mjs.map +1 -0
  224. package/dist/securityHeaders-nwZ6nP4g.d.mts +24 -0
  225. package/dist/securityHeaders-nwZ6nP4g.d.ts +24 -0
  226. package/dist/seo/index.d.mts +600 -0
  227. package/dist/seo/index.d.ts +600 -0
  228. package/dist/seo/index.js +883 -0
  229. package/dist/seo/index.js.map +1 -0
  230. package/dist/seo/index.mjs +773 -0
  231. package/dist/seo/index.mjs.map +1 -0
  232. package/dist/seo/register-sitemap-cli.js +151 -0
  233. package/dist/seo/register-sitemap-cli.js.map +1 -0
  234. package/dist/seo/register-sitemap-cli.mjs +144 -0
  235. package/dist/seo/register-sitemap-cli.mjs.map +1 -0
  236. package/dist/seo/server.d.mts +107 -0
  237. package/dist/seo/server.d.ts +107 -0
  238. package/dist/seo/server.js +207 -0
  239. package/dist/seo/server.js.map +1 -0
  240. package/dist/seo/server.mjs +186 -0
  241. package/dist/seo/server.mjs.map +1 -0
  242. package/dist/server-api-EWXKOQZA.mjs +4 -0
  243. package/dist/server-api-EWXKOQZA.mjs.map +1 -0
  244. package/dist/server-api-GJPNRYUP.js +81 -0
  245. package/dist/server-api-GJPNRYUP.js.map +1 -0
  246. package/dist/setup/client.d.mts +60 -0
  247. package/dist/setup/client.d.ts +60 -0
  248. package/dist/setup/client.js +31 -0
  249. package/dist/setup/client.js.map +1 -0
  250. package/dist/setup/client.mjs +6 -0
  251. package/dist/setup/client.mjs.map +1 -0
  252. package/dist/setup/index.d.mts +5 -0
  253. package/dist/setup/index.d.ts +5 -0
  254. package/dist/setup/index.js +35 -0
  255. package/dist/setup/index.js.map +1 -0
  256. package/dist/setup/index.mjs +6 -0
  257. package/dist/setup/index.mjs.map +1 -0
  258. package/dist/setup/server.d.mts +14 -0
  259. package/dist/setup/server.d.ts +14 -0
  260. package/dist/setup/server.js +13 -0
  261. package/dist/setup/server.js.map +1 -0
  262. package/dist/setup/server.mjs +4 -0
  263. package/dist/setup/server.mjs.map +1 -0
  264. package/dist/site-config/index.d.mts +24 -0
  265. package/dist/site-config/index.d.ts +24 -0
  266. package/dist/site-config/index.js +17 -0
  267. package/dist/site-config/index.js.map +1 -0
  268. package/dist/site-config/index.mjs +4 -0
  269. package/dist/site-config/index.mjs.map +1 -0
  270. package/dist/sitemap/index.d.mts +96 -0
  271. package/dist/sitemap/index.d.ts +96 -0
  272. package/dist/sitemap/index.js +288 -0
  273. package/dist/sitemap/index.js.map +1 -0
  274. package/dist/sitemap/index.mjs +285 -0
  275. package/dist/sitemap/index.mjs.map +1 -0
  276. package/dist/socket-loader-J26QHHOB.js +16 -0
  277. package/dist/socket-loader-J26QHHOB.js.map +1 -0
  278. package/dist/socket-loader-R7S2YJ2J.mjs +14 -0
  279. package/dist/socket-loader-R7S2YJ2J.mjs.map +1 -0
  280. package/dist/types-0dmq3k20.d.mts +168 -0
  281. package/dist/types-0dmq3k20.d.ts +168 -0
  282. package/dist/types-Blb2QNkV.d.mts +263 -0
  283. package/dist/types-Blb2QNkV.d.ts +263 -0
  284. package/dist/types-BnCwwUX3.d.mts +250 -0
  285. package/dist/types-BnCwwUX3.d.ts +250 -0
  286. package/dist/types-CGlnp43R.d.mts +312 -0
  287. package/dist/types-CGlnp43R.d.ts +312 -0
  288. package/dist/types-D08004rU.d.mts +179 -0
  289. package/dist/types-D08004rU.d.ts +179 -0
  290. package/dist/types-DNSYU7qI.d.mts +127 -0
  291. package/dist/types-DNSYU7qI.d.ts +127 -0
  292. package/dist/types-KZP_VWZp.d.mts +266 -0
  293. package/dist/types-KZP_VWZp.d.ts +266 -0
  294. package/dist/useEventModal-BVTx69XE.d.mts +274 -0
  295. package/dist/useEventModal-Dx1dItTJ.d.ts +274 -0
  296. package/dist/web-vitals-444RLW3B.js +252 -0
  297. package/dist/web-vitals-444RLW3B.js.map +1 -0
  298. package/dist/web-vitals-KPICZIEF.mjs +241 -0
  299. package/dist/web-vitals-KPICZIEF.mjs.map +1 -0
  300. package/package.json +192 -0
@@ -0,0 +1,600 @@
1
+ import { G as GetManagedMetadataOptions, M as ManagedMetadataResult, k as GetABVariantOptions, j as ABTestResult, b as ManagedSchemaProps, d as ManagedFAQProps, f as ManagedInternalLinksProps, h as ManagedContentProps, g as ManagedContentBlock, o as ManagedScriptsProps } from '../types-KZP_VWZp.mjs';
2
+ export { A as ABTest, F as FAQItem, m as GetRedirectOptions, q as GetRobotsOptions, s as GetSitemapEntriesOptions, c as ManagedFAQData, e as ManagedLink, l as ManagedRedirect, n as ManagedScript, R as RedirectResult, p as RobotsDirective, S as SEOPageData, a as SchemaMarkup, r as SitemapEntry, U as UptradeSEOConfig } from '../types-KZP_VWZp.mjs';
3
+ import { ResolvingMetadata, Metadata } from 'next';
4
+ export { g as generateSitemap, a as getRedirect, b as getRobotsDirective, i as isIndexable } from '../routing-B5XS-6_W.mjs';
5
+ import * as React from 'react';
6
+
7
+ /**
8
+ * @sonordev/site-kit/seo - Server-Only API Functions
9
+ *
10
+ * SECURITY: These functions use private environment variables
11
+ * and should ONLY be imported in server-side code (RSC, API routes, server actions).
12
+ *
13
+ * DO NOT import this file in client components or it will expose API keys.
14
+ */
15
+
16
+ /**
17
+ * Fetch SEO page data - cached per request
18
+ * @server-only
19
+ */
20
+ declare const getSEOPageData: (path: string) => Promise<{
21
+ page: any;
22
+ project: any;
23
+ }>;
24
+ /**
25
+ * Fetch schema markups for a page - cached per request
26
+ * @server-only
27
+ */
28
+ declare const getSchemaMarkups: (path: string, options?: {
29
+ includeTypes?: string[];
30
+ excludeTypes?: string[];
31
+ }) => Promise<any[]>;
32
+ /**
33
+ * Fetch FAQ data for a page - cached per request
34
+ * @server-only
35
+ */
36
+ declare const getFAQData: (path: string) => Promise<any>;
37
+ /**
38
+ * Fetch internal links for a page - cached per request
39
+ * @server-only
40
+ */
41
+ declare const getInternalLinks: (sourcePath: string, options?: {
42
+ position?: string;
43
+ limit?: number;
44
+ }) => Promise<any[]>;
45
+ /**
46
+ * Fetch content block - cached per request
47
+ * @server-only
48
+ */
49
+ declare const getContentBlock: (path: string, section: string) => Promise<any>;
50
+ /**
51
+ * Fetch A/B test and determine variant - cached per request
52
+ * @server-only
53
+ */
54
+ declare const getABTest: (path: string, field: string) => Promise<any>;
55
+ /**
56
+ * Record A/B test impression
57
+ * @server-only
58
+ */
59
+ declare function recordABImpression(testId: string, variant: 'a' | 'b', sessionId?: string): Promise<void>;
60
+ /**
61
+ * Fetch redirect for a path - cached per request
62
+ * @server-only
63
+ */
64
+ declare const getRedirectData: (path: string) => Promise<any>;
65
+ /**
66
+ * Fetch managed scripts - cached per request
67
+ * @server-only
68
+ */
69
+ declare const getManagedScripts: (position: string, currentPath?: string) => Promise<any[]>;
70
+ /**
71
+ * Fetch robots directive for a page - cached per request
72
+ * @server-only
73
+ */
74
+ declare const getRobotsData: (path: string) => Promise<any>;
75
+ /**
76
+ * Fetch sitemap entries - cached per request
77
+ * @server-only
78
+ */
79
+ declare const getSitemapEntries: (options?: {
80
+ publishedOnly?: boolean;
81
+ }) => Promise<any[]>;
82
+ /**
83
+ * Register/sync sitemap entries from the client site
84
+ * Call this at build time to populate seo_pages from your sitemap.xml
85
+ * @server-only
86
+ *
87
+ * @example
88
+ * ```ts
89
+ * // scripts/register-sitemap.ts (run at build time)
90
+ * import { registerSitemap } from '@sonordev/seo/server'
91
+ *
92
+ * await registerSitemap([
93
+ * { path: '/', priority: 1.0, changefreq: 'daily' },
94
+ * { path: '/about', priority: 0.8, changefreq: 'weekly' },
95
+ * ])
96
+ * ```
97
+ */
98
+ declare function registerSitemap(entries: Array<{
99
+ path: string;
100
+ title?: string;
101
+ priority?: number;
102
+ changefreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never';
103
+ }>): Promise<{
104
+ success: boolean;
105
+ created: number;
106
+ updated: number;
107
+ }>;
108
+ /**
109
+ * Entity types for the knowledge graph
110
+ */
111
+ type EntityType = 'organization' | 'person' | 'service' | 'product' | 'location' | 'concept' | 'credential';
112
+ /**
113
+ * Entity from the knowledge graph
114
+ */
115
+ interface SEOEntity {
116
+ id: string;
117
+ project_id: string;
118
+ entity_type: EntityType;
119
+ name: string;
120
+ slug: string;
121
+ properties: Record<string, unknown>;
122
+ knows_about: string[];
123
+ same_as: string[];
124
+ schema_type?: string;
125
+ is_primary: boolean;
126
+ }
127
+ /**
128
+ * Fetch entities for a project - cached per request
129
+ * Returns the entity graph for enhanced schema markup
130
+ * @server-only
131
+ */
132
+ declare const getEntities: (options?: {
133
+ type?: EntityType;
134
+ }) => Promise<SEOEntity[]>;
135
+ /**
136
+ * Fetch primary entity (the business) - cached per request
137
+ * @server-only
138
+ */
139
+ declare const getPrimaryEntity: () => Promise<SEOEntity | null>;
140
+ /**
141
+ * Fetch entity-enhanced schema for a page
142
+ * Returns Organization schema with knowsAbout, areaServed, employee, etc.
143
+ * @server-only
144
+ */
145
+ declare const getEntityEnhancedSchema: (pagePath: string) => Promise<object[]>;
146
+ /**
147
+ * Get AI visibility score for a page
148
+ * @server-only
149
+ */
150
+ declare const getVisibilityScore: (pagePath: string) => Promise<{
151
+ overall_score: number;
152
+ entity_coverage: number;
153
+ answer_density: number;
154
+ chunk_readability: number;
155
+ authority_signals: number;
156
+ schema_completeness: number;
157
+ } | null>;
158
+ /**
159
+ * Get AI visibility summary for project
160
+ * @server-only
161
+ */
162
+ declare const getVisibilitySummary: () => Promise<{
163
+ overall_score: number;
164
+ total_entities: number;
165
+ pages_analyzed: number;
166
+ top_recommendations: Array<{
167
+ priority: string;
168
+ type: string;
169
+ message: string;
170
+ }>;
171
+ } | null>;
172
+
173
+ /**
174
+ * Get managed metadata for a page
175
+ *
176
+ * Use in generateMetadata() to fetch Portal-managed SEO data
177
+ *
178
+ * @example
179
+ * ```tsx
180
+ * export async function generateMetadata({ params }) {
181
+ * return getManagedMetadata({
182
+ * projectId: process.env.UPTRADE_PROJECT_ID!,
183
+ * path: `/services/${params.slug}`,
184
+ * fallback: {
185
+ * title: 'Our Services',
186
+ * description: 'Learn about our services'
187
+ * }
188
+ * })
189
+ * }
190
+ * ```
191
+ */
192
+ declare function getManagedMetadata(options: GetManagedMetadataOptions): Promise<ManagedMetadataResult>;
193
+ /**
194
+ * Get A/B test variant for a field
195
+ *
196
+ * @example
197
+ * ```tsx
198
+ * const variant = await getABVariant({
199
+ * projectId: process.env.UPTRADE_PROJECT_ID!,
200
+ * path: '/pricing',
201
+ * field: 'title',
202
+ * sessionId: cookies().get('session_id')?.value
203
+ * })
204
+ *
205
+ * if (variant) {
206
+ * // Use variant.value instead of default
207
+ * }
208
+ * ```
209
+ */
210
+ declare function getABVariant(options: GetABVariantOptions): Promise<ABTestResult | null>;
211
+ /**
212
+ * Get managed metadata with A/B test support
213
+ *
214
+ * Automatically applies running A/B test variants to metadata
215
+ */
216
+ declare function getManagedMetadataWithAB(options: GetManagedMetadataOptions & {
217
+ sessionId?: string;
218
+ }): Promise<ManagedMetadataResult>;
219
+
220
+ /**
221
+ * @sonordev/site-kit/seo - withManagedMetadata
222
+ *
223
+ * Higher-order function that wraps Next.js generateMetadata to auto-merge
224
+ * Portal-managed SEO data. Portal values serve as defaults; page-level
225
+ * metadata returned by the caller takes priority.
226
+ *
227
+ * @example Zero-config (Portal manages everything):
228
+ * ```ts
229
+ * export const generateMetadata = withManagedMetadata('/about')
230
+ * ```
231
+ *
232
+ * @example With local overrides:
233
+ * ```ts
234
+ * export const generateMetadata = withManagedMetadata('/about', async () => ({
235
+ * title: 'About Us',
236
+ * }))
237
+ * ```
238
+ *
239
+ * @example Dynamic paths:
240
+ * ```ts
241
+ * export const generateMetadata = withManagedMetadata(
242
+ * async ({ params }) => `/services/${(await params).slug}`
243
+ * )
244
+ * ```
245
+ */
246
+
247
+ type MetadataArgs = {
248
+ params: Promise<Record<string, string>>;
249
+ searchParams?: Promise<Record<string, string>>;
250
+ };
251
+ type PathResolver = string | ((args: MetadataArgs) => string | Promise<string>);
252
+ type PageMetadataFn = (args: MetadataArgs, parent: ResolvingMetadata) => Promise<Metadata> | Metadata;
253
+ /**
254
+ * Wrap generateMetadata to auto-merge Portal managed metadata.
255
+ *
256
+ * - `path` can be a static string or a function that derives the path
257
+ * from the page's params.
258
+ * - `pageMetadata` (optional) returns page-specific overrides.
259
+ * Anything it returns wins over Portal values.
260
+ */
261
+ declare function withManagedMetadata(path: PathResolver, pageMetadata?: PageMetadataFn): (args: MetadataArgs, parent: ResolvingMetadata) => Promise<Metadata>;
262
+
263
+ /**
264
+ * Speakable configuration for schema markup
265
+ */
266
+ interface SpeakableSpec {
267
+ /** CSS selectors for speakable content */
268
+ cssSelector?: string[];
269
+ /** XPath selectors for speakable content */
270
+ xpath?: string[];
271
+ }
272
+ /**
273
+ * Extended schema props with speakable and entity support
274
+ */
275
+ interface EnhancedManagedSchemaProps extends ManagedSchemaProps {
276
+ /** Add speakable specification to page schema */
277
+ speakable?: SpeakableSpec | boolean;
278
+ /** Page type for speakable (WebPage or Article) */
279
+ pageType?: 'WebPage' | 'Article';
280
+ /** Page name for speakable schema */
281
+ pageName?: string;
282
+ /** Page URL for speakable schema */
283
+ pageUrl?: string;
284
+ /** Include entity-enhanced schema from knowledge graph (AI Visibility) */
285
+ includeEntityGraph?: boolean;
286
+ }
287
+ /**
288
+ * ManagedSchema - Server Component that injects JSON-LD schema
289
+ *
290
+ * Fetches schema markup from Portal and renders as script tags.
291
+ * Now with speakable support for voice assistants and AI systems.
292
+ *
293
+ * @example
294
+ * ```tsx
295
+ * // app/services/[slug]/page.tsx
296
+ * import { ManagedSchema } from '@sonordev/seo'
297
+ *
298
+ * export default async function ServicePage({ params }) {
299
+ * return (
300
+ * <>
301
+ * <ManagedSchema
302
+ * projectId={process.env.UPTRADE_PROJECT_ID!}
303
+ * path={`/services/${params.slug}`}
304
+ * speakable={true}
305
+ * pageName="Family Law Services"
306
+ * pageUrl="https://example.com/services/family-law"
307
+ * />
308
+ * <main>...</main>
309
+ * </>
310
+ * )
311
+ * }
312
+ * ```
313
+ */
314
+ declare function ManagedSchema({ path, additionalSchemas, includeTypes, excludeTypes, speakable, pageType, pageName, pageUrl, includeEntityGraph, }: EnhancedManagedSchemaProps): Promise<React.ReactElement | null>;
315
+ /**
316
+ * LLMSchema - Server Component that injects LLM-optimized structured data
317
+ *
318
+ * This component renders AI-visibility optimized data that helps LLM crawlers
319
+ * (like ChatGPT, Claude, Perplexity) better understand page content.
320
+ *
321
+ * The schema includes:
322
+ * - Detailed description (100-200 words for context)
323
+ * - Keywords and topics
324
+ * - Target audience
325
+ * - Content relationships
326
+ *
327
+ * @example
328
+ * ```tsx
329
+ * import { LLMSchema } from '@sonordev/seo'
330
+ *
331
+ * export default async function ServicePage({ params }) {
332
+ * return (
333
+ * <>
334
+ * <LLMSchema
335
+ * projectId={process.env.UPTRADE_PROJECT_ID!}
336
+ * path={`/services/${params.slug}`}
337
+ * />
338
+ * <main>...</main>
339
+ * </>
340
+ * )
341
+ * }
342
+ * ```
343
+ */
344
+ declare function LLMSchema({ path, }: {
345
+ projectId?: string;
346
+ path: string;
347
+ }): Promise<React.ReactElement | null>;
348
+ /**
349
+ * Generate schema for a specific type with managed data
350
+ *
351
+ * Helper to create common schema types
352
+ */
353
+ declare function createSchema(type: string, data: Record<string, unknown>): Record<string, unknown>;
354
+ /**
355
+ * Create BreadcrumbList schema from path
356
+ */
357
+ declare function createBreadcrumbSchema(baseUrl: string, path: string, labels?: Record<string, string>): Record<string, unknown>;
358
+
359
+ /**
360
+ * ManagedFAQ - Server Component that renders FAQ section with schema
361
+ *
362
+ * Fetches FAQ content from Portal and renders with optional schema injection
363
+ *
364
+ * @example
365
+ * ```tsx
366
+ * // app/services/plumbing/page.tsx
367
+ * import { ManagedFAQ } from '@sonordev/seo'
368
+ *
369
+ * export default async function PlumbingPage() {
370
+ * return (
371
+ * <main>
372
+ * <h1>Plumbing Services</h1>
373
+ * <section>
374
+ * <ManagedFAQ
375
+ * projectId={process.env.UPTRADE_PROJECT_ID!}
376
+ * path="/services/plumbing"
377
+ * showTitle
378
+ * includeSchema
379
+ * />
380
+ * </section>
381
+ * </main>
382
+ * )
383
+ * }
384
+ * ```
385
+ */
386
+ declare function ManagedFAQ({ path, className, renderItem, includeSchema, showTitle, }: ManagedFAQProps): Promise<React.ReactElement | null>;
387
+
388
+ /**
389
+ * ManagedInternalLinks - Server Component for AI-suggested internal links
390
+ *
391
+ * Fetches internal link suggestions from Portal and renders them
392
+ *
393
+ * @example
394
+ * ```tsx
395
+ * // In your article component
396
+ * import { ManagedInternalLinks } from '@sonordev/seo'
397
+ *
398
+ * export default async function BlogPost({ params }) {
399
+ * return (
400
+ * <article>
401
+ * <p>Your content here...</p>
402
+ *
403
+ * <ManagedInternalLinks
404
+ * projectId={process.env.UPTRADE_PROJECT_ID!}
405
+ * path={`/blog/${params.slug}`}
406
+ * position="bottom"
407
+ * limit={5}
408
+ * />
409
+ * </article>
410
+ * )
411
+ * }
412
+ * ```
413
+ */
414
+ declare function ManagedInternalLinks({ path, position, limit, className, renderLink, }: ManagedInternalLinksProps): Promise<React.ReactElement | null>;
415
+
416
+ /**
417
+ * ManagedContent - Server Component for CMS-controlled content blocks
418
+ *
419
+ * Fetches content sections from Portal and renders them
420
+ * Supports HTML, Markdown, JSON, and React component references
421
+ *
422
+ * @example
423
+ * ```tsx
424
+ * // Hero section managed by Portal
425
+ * import { ManagedContent } from '@sonordev/seo'
426
+ *
427
+ * export default async function ServicePage({ params }) {
428
+ * return (
429
+ * <main>
430
+ * <ManagedContent
431
+ * projectId={process.env.UPTRADE_PROJECT_ID!}
432
+ * path={`/services/${params.slug}`}
433
+ * section="hero"
434
+ * fallback={<DefaultHero />}
435
+ * />
436
+ *
437
+ * <ManagedContent
438
+ * projectId={process.env.UPTRADE_PROJECT_ID!}
439
+ * path={`/services/${params.slug}`}
440
+ * section="features"
441
+ * />
442
+ *
443
+ * <ManagedContent
444
+ * projectId={process.env.UPTRADE_PROJECT_ID!}
445
+ * path={`/services/${params.slug}`}
446
+ * section="cta"
447
+ * />
448
+ * </main>
449
+ * )
450
+ * }
451
+ * ```
452
+ */
453
+ declare function ManagedContent({ path, section, fallback, className, components, injectEntityAnnotations: shouldInjectEntities, }: ManagedContentProps): Promise<React.ReactElement | null>;
454
+ /**
455
+ * Get content block data without rendering
456
+ *
457
+ * Useful when you need to access the raw data
458
+ */
459
+ declare function getManagedContentData(path: string, section: string): Promise<ManagedContentBlock | null>;
460
+
461
+ /**
462
+ * ManagedScripts - Server Component for injecting tracking/analytics scripts
463
+ *
464
+ * Fetches scripts from Portal and renders them in the appropriate position
465
+ *
466
+ * @example
467
+ * ```tsx
468
+ * // app/layout.tsx
469
+ * import { ManagedScripts } from '@sonordev/seo'
470
+ *
471
+ * export default function RootLayout({ children }) {
472
+ * return (
473
+ * <html>
474
+ * <head>
475
+ * <ManagedScripts
476
+ * projectId={process.env.UPTRADE_PROJECT_ID!}
477
+ * position="head"
478
+ * />
479
+ * </head>
480
+ * <body>
481
+ * <ManagedScripts
482
+ * projectId={process.env.UPTRADE_PROJECT_ID!}
483
+ * position="body-start"
484
+ * />
485
+ * {children}
486
+ * <ManagedScripts
487
+ * projectId={process.env.UPTRADE_PROJECT_ID!}
488
+ * position="body-end"
489
+ * />
490
+ * </body>
491
+ * </html>
492
+ * )
493
+ * }
494
+ * ```
495
+ */
496
+ declare function ManagedScripts({ position, path, }: ManagedScriptsProps): Promise<React.ReactElement | null>;
497
+ /**
498
+ * NoScript fallback component
499
+ *
500
+ * Use for adding noscript content (like Google Tag Manager noscript)
501
+ */
502
+ declare function ManagedNoScripts({ path, }: {
503
+ projectId?: string;
504
+ path?: string;
505
+ }): Promise<React.ReactElement | null>;
506
+
507
+ /**
508
+ * LocationPageContent - Server Component for fetching location page sections
509
+ *
510
+ * Usage:
511
+ * <LocationPageContent
512
+ * projectId="uuid"
513
+ * path="/areas/seattle-wa/plumbing"
514
+ * section="hero"
515
+ * />
516
+ *
517
+ * This component fetches content from seo_location_pages.sections for a given
518
+ * path and section, making it editable in Portal without code deploys.
519
+ */
520
+
521
+ interface LocationPageContentProps {
522
+ /** Uptrade project ID */
523
+ projectId: string;
524
+ /** Page path (e.g., /areas/seattle-wa/plumbing) */
525
+ path: string;
526
+ /** Section ID or type to fetch (e.g., "hero", "intro", "services") */
527
+ section: string;
528
+ /** Fallback content if section not found */
529
+ fallback?: React.ReactNode;
530
+ /** Additional className for wrapper */
531
+ className?: string;
532
+ /** Custom renderer for the section data */
533
+ render?: (data: LocationSectionData) => React.ReactNode;
534
+ }
535
+ interface LocationSectionData {
536
+ type: string;
537
+ content: any;
538
+ }
539
+ interface HeroSectionContent {
540
+ title: string;
541
+ subtitle?: string;
542
+ cta_text?: string;
543
+ cta_href?: string;
544
+ stats?: Array<{
545
+ label: string;
546
+ value: string;
547
+ }>;
548
+ background_image?: string;
549
+ }
550
+ interface ServiceGridContent {
551
+ services: Array<{
552
+ title: string;
553
+ description: string;
554
+ href: string;
555
+ icon?: string;
556
+ }>;
557
+ }
558
+ interface TextSectionContent {
559
+ heading?: string;
560
+ paragraphs: string[];
561
+ html?: string;
562
+ }
563
+ /**
564
+ * Fetch location page section content from Portal
565
+ * Cached with React's cache() for request deduplication
566
+ */
567
+ declare const getLocationSection: (projectId: string, path: string, section: string) => Promise<LocationSectionData | null>;
568
+ /**
569
+ * LocationPageContent - Server Component
570
+ *
571
+ * Fetches and renders a section of a location page from Portal.
572
+ * Content is fully editable in Portal → SEO → Location Pages.
573
+ */
574
+ declare function LocationPageContent({ projectId, path, section, fallback, className, render, }: LocationPageContentProps): Promise<React.ReactElement | null>;
575
+
576
+ /**
577
+ * SitemapSync - Automatically sync sitemap.xml to Portal API
578
+ *
579
+ * Client-only component. Lives at package root so the main entry does not
580
+ * pull in seo/ (and server-only code). For use in SiteKitProvider and
581
+ * from @sonordev/site-kit/seo.
582
+ *
583
+ * @example
584
+ * ```tsx
585
+ * import { SitemapSync } from '@sonordev/site-kit'
586
+ * // or
587
+ * import { SitemapSync } from '@sonordev/site-kit/seo'
588
+ * ```
589
+ */
590
+ interface SitemapSyncProps {
591
+ /** Custom sitemap URL (defaults to /sitemap.xml) */
592
+ sitemapUrl?: string;
593
+ /** How often to re-sync in minutes (0 = only on mount, default: 60) */
594
+ syncInterval?: number;
595
+ /** Enable debug logging */
596
+ debug?: boolean;
597
+ }
598
+ declare function SitemapSync({ sitemapUrl, syncInterval, debug, }: SitemapSyncProps): null;
599
+
600
+ export { ABTestResult, type EntityType, GetABVariantOptions, GetManagedMetadataOptions, LLMSchema, type HeroSectionContent as LocationHeroContent, LocationPageContent, type LocationPageContentProps, type LocationSectionData, type ServiceGridContent as LocationServicesContent, type TextSectionContent as LocationTextContent, ManagedContent, ManagedContentBlock, ManagedContentProps, ManagedFAQ, ManagedFAQProps, ManagedInternalLinks, ManagedInternalLinksProps, ManagedMetadataResult, ManagedNoScripts, ManagedSchema, ManagedSchemaProps, ManagedScripts, ManagedScriptsProps, type SEOEntity, SitemapSync, createBreadcrumbSchema, createSchema, getABTest, getABVariant, getContentBlock, getEntities, getEntityEnhancedSchema, getFAQData, getInternalLinks, getLocationSection, getManagedContentData, getManagedMetadata, getManagedMetadataWithAB, getManagedScripts, getPrimaryEntity, getRedirectData, getRobotsData, getSEOPageData, getSchemaMarkups, getSitemapEntries, getVisibilityScore, getVisibilitySummary, recordABImpression, registerSitemap, withManagedMetadata };