@we8/cms 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/README.md +78 -0
  2. package/dist/auth/auth.d.ts +87 -0
  3. package/dist/auth/auth.d.ts.map +1 -0
  4. package/dist/auth/auth.js +90 -0
  5. package/dist/auth/auth.js.map +1 -0
  6. package/dist/auth/routes.admin.d.ts +22 -0
  7. package/dist/auth/routes.admin.d.ts.map +1 -0
  8. package/dist/auth/routes.admin.js +106 -0
  9. package/dist/auth/routes.admin.js.map +1 -0
  10. package/dist/auth/schema.d.ts +1395 -0
  11. package/dist/auth/schema.d.ts.map +1 -0
  12. package/dist/auth/schema.js +76 -0
  13. package/dist/auth/schema.js.map +1 -0
  14. package/dist/env.d.ts +64 -0
  15. package/dist/env.d.ts.map +1 -0
  16. package/dist/env.js +48 -0
  17. package/dist/env.js.map +1 -0
  18. package/dist/index.d.ts +22 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +170 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/keys/middleware.d.ts +54 -0
  23. package/dist/keys/middleware.d.ts.map +1 -0
  24. package/dist/keys/middleware.js +84 -0
  25. package/dist/keys/middleware.js.map +1 -0
  26. package/dist/keys/routes.admin.d.ts +16 -0
  27. package/dist/keys/routes.admin.d.ts.map +1 -0
  28. package/dist/keys/routes.admin.js +34 -0
  29. package/dist/keys/routes.admin.js.map +1 -0
  30. package/dist/keys/service.d.ts +36 -0
  31. package/dist/keys/service.d.ts.map +1 -0
  32. package/dist/keys/service.js +120 -0
  33. package/dist/keys/service.js.map +1 -0
  34. package/dist/lib/bots.d.ts +24 -0
  35. package/dist/lib/bots.d.ts.map +1 -0
  36. package/dist/lib/bots.js +79 -0
  37. package/dist/lib/bots.js.map +1 -0
  38. package/dist/lib/email.d.ts +62 -0
  39. package/dist/lib/email.d.ts.map +1 -0
  40. package/dist/lib/email.js +64 -0
  41. package/dist/lib/email.js.map +1 -0
  42. package/dist/lib/errors.d.ts +12 -0
  43. package/dist/lib/errors.d.ts.map +1 -0
  44. package/dist/lib/errors.js +23 -0
  45. package/dist/lib/errors.js.map +1 -0
  46. package/dist/lib/notify.d.ts +20 -0
  47. package/dist/lib/notify.d.ts.map +1 -0
  48. package/dist/lib/notify.js +60 -0
  49. package/dist/lib/notify.js.map +1 -0
  50. package/dist/lib/retention.d.ts +15 -0
  51. package/dist/lib/retention.d.ts.map +1 -0
  52. package/dist/lib/retention.js +40 -0
  53. package/dist/lib/retention.js.map +1 -0
  54. package/dist/lib/sanitize.d.ts +14 -0
  55. package/dist/lib/sanitize.d.ts.map +1 -0
  56. package/dist/lib/sanitize.js +145 -0
  57. package/dist/lib/sanitize.js.map +1 -0
  58. package/dist/lib/turnstile.d.ts +7 -0
  59. package/dist/lib/turnstile.d.ts.map +1 -0
  60. package/dist/lib/turnstile.js +32 -0
  61. package/dist/lib/turnstile.js.map +1 -0
  62. package/dist/lib/validate.d.ts +11 -0
  63. package/dist/lib/validate.d.ts.map +1 -0
  64. package/dist/lib/validate.js +22 -0
  65. package/dist/lib/validate.js.map +1 -0
  66. package/dist/lib/word-count.d.ts +7 -0
  67. package/dist/lib/word-count.d.ts.map +1 -0
  68. package/dist/lib/word-count.js +14 -0
  69. package/dist/lib/word-count.js.map +1 -0
  70. package/dist/middleware/auth.d.ts +46 -0
  71. package/dist/middleware/auth.d.ts.map +1 -0
  72. package/dist/middleware/auth.js +60 -0
  73. package/dist/middleware/auth.js.map +1 -0
  74. package/dist/middleware/cors.d.ts +33 -0
  75. package/dist/middleware/cors.d.ts.map +1 -0
  76. package/dist/middleware/cors.js +55 -0
  77. package/dist/middleware/cors.js.map +1 -0
  78. package/dist/middleware/module-gate.d.ts +11 -0
  79. package/dist/middleware/module-gate.d.ts.map +1 -0
  80. package/dist/middleware/module-gate.js +18 -0
  81. package/dist/middleware/module-gate.js.map +1 -0
  82. package/dist/middleware/rate-limit.d.ts +13 -0
  83. package/dist/middleware/rate-limit.d.ts.map +1 -0
  84. package/dist/middleware/rate-limit.js +30 -0
  85. package/dist/middleware/rate-limit.js.map +1 -0
  86. package/dist/middleware/request-id.d.ts +8 -0
  87. package/dist/middleware/request-id.d.ts.map +1 -0
  88. package/dist/middleware/request-id.js +11 -0
  89. package/dist/middleware/request-id.js.map +1 -0
  90. package/dist/modules/aeo/checks.d.ts +41 -0
  91. package/dist/modules/aeo/checks.d.ts.map +1 -0
  92. package/dist/modules/aeo/checks.js +127 -0
  93. package/dist/modules/aeo/checks.js.map +1 -0
  94. package/dist/modules/aeo/llms.d.ts +24 -0
  95. package/dist/modules/aeo/llms.d.ts.map +1 -0
  96. package/dist/modules/aeo/llms.js +92 -0
  97. package/dist/modules/aeo/llms.js.map +1 -0
  98. package/dist/modules/aeo/routes.admin.d.ts +12 -0
  99. package/dist/modules/aeo/routes.admin.d.ts.map +1 -0
  100. package/dist/modules/aeo/routes.admin.js +37 -0
  101. package/dist/modules/aeo/routes.admin.js.map +1 -0
  102. package/dist/modules/analytics/db.d.ts +24 -0
  103. package/dist/modules/analytics/db.d.ts.map +1 -0
  104. package/dist/modules/analytics/db.js +24 -0
  105. package/dist/modules/analytics/db.js.map +1 -0
  106. package/dist/modules/analytics/routes.admin.d.ts +6 -0
  107. package/dist/modules/analytics/routes.admin.d.ts.map +1 -0
  108. package/dist/modules/analytics/routes.admin.js +21 -0
  109. package/dist/modules/analytics/routes.admin.js.map +1 -0
  110. package/dist/modules/analytics/routes.public.d.ts +6 -0
  111. package/dist/modules/analytics/routes.public.d.ts.map +1 -0
  112. package/dist/modules/analytics/routes.public.js +33 -0
  113. package/dist/modules/analytics/routes.public.js.map +1 -0
  114. package/dist/modules/analytics/service.d.ts +16 -0
  115. package/dist/modules/analytics/service.d.ts.map +1 -0
  116. package/dist/modules/analytics/service.js +148 -0
  117. package/dist/modules/analytics/service.js.map +1 -0
  118. package/dist/modules/authors/routes.admin.d.ts +6 -0
  119. package/dist/modules/authors/routes.admin.d.ts.map +1 -0
  120. package/dist/modules/authors/routes.admin.js +29 -0
  121. package/dist/modules/authors/routes.admin.js.map +1 -0
  122. package/dist/modules/authors/routes.public.d.ts +6 -0
  123. package/dist/modules/authors/routes.public.d.ts.map +1 -0
  124. package/dist/modules/authors/routes.public.js +11 -0
  125. package/dist/modules/authors/routes.public.js.map +1 -0
  126. package/dist/modules/authors/service.d.ts +26 -0
  127. package/dist/modules/authors/service.d.ts.map +1 -0
  128. package/dist/modules/authors/service.js +116 -0
  129. package/dist/modules/authors/service.js.map +1 -0
  130. package/dist/modules/content/db.d.ts +127 -0
  131. package/dist/modules/content/db.d.ts.map +1 -0
  132. package/dist/modules/content/db.js +203 -0
  133. package/dist/modules/content/db.js.map +1 -0
  134. package/dist/modules/content/publish.d.ts +38 -0
  135. package/dist/modules/content/publish.d.ts.map +1 -0
  136. package/dist/modules/content/publish.js +184 -0
  137. package/dist/modules/content/publish.js.map +1 -0
  138. package/dist/modules/content/routes.admin.d.ts +8 -0
  139. package/dist/modules/content/routes.admin.d.ts.map +1 -0
  140. package/dist/modules/content/routes.admin.js +122 -0
  141. package/dist/modules/content/routes.admin.js.map +1 -0
  142. package/dist/modules/content/routes.public.d.ts +6 -0
  143. package/dist/modules/content/routes.public.d.ts.map +1 -0
  144. package/dist/modules/content/routes.public.js +56 -0
  145. package/dist/modules/content/routes.public.js.map +1 -0
  146. package/dist/modules/content/service.d.ts +137 -0
  147. package/dist/modules/content/service.d.ts.map +1 -0
  148. package/dist/modules/content/service.js +348 -0
  149. package/dist/modules/content/service.js.map +1 -0
  150. package/dist/modules/forms/db.d.ts +42 -0
  151. package/dist/modules/forms/db.d.ts.map +1 -0
  152. package/dist/modules/forms/db.js +62 -0
  153. package/dist/modules/forms/db.js.map +1 -0
  154. package/dist/modules/forms/forms-routes.admin.d.ts +6 -0
  155. package/dist/modules/forms/forms-routes.admin.d.ts.map +1 -0
  156. package/dist/modules/forms/forms-routes.admin.js +37 -0
  157. package/dist/modules/forms/forms-routes.admin.js.map +1 -0
  158. package/dist/modules/forms/forms-service.d.ts +18 -0
  159. package/dist/modules/forms/forms-service.d.ts.map +1 -0
  160. package/dist/modules/forms/forms-service.js +121 -0
  161. package/dist/modules/forms/forms-service.js.map +1 -0
  162. package/dist/modules/forms/routes.public.d.ts +6 -0
  163. package/dist/modules/forms/routes.public.d.ts.map +1 -0
  164. package/dist/modules/forms/routes.public.js +41 -0
  165. package/dist/modules/forms/routes.public.js.map +1 -0
  166. package/dist/modules/forms/submissions-routes.admin.d.ts +6 -0
  167. package/dist/modules/forms/submissions-routes.admin.d.ts.map +1 -0
  168. package/dist/modules/forms/submissions-routes.admin.js +46 -0
  169. package/dist/modules/forms/submissions-routes.admin.js.map +1 -0
  170. package/dist/modules/forms/submissions-service.d.ts +45 -0
  171. package/dist/modules/forms/submissions-service.d.ts.map +1 -0
  172. package/dist/modules/forms/submissions-service.js +174 -0
  173. package/dist/modules/forms/submissions-service.js.map +1 -0
  174. package/dist/modules/media/db.d.ts +15 -0
  175. package/dist/modules/media/db.d.ts.map +1 -0
  176. package/dist/modules/media/db.js +24 -0
  177. package/dist/modules/media/db.js.map +1 -0
  178. package/dist/modules/media/routes.admin.d.ts +6 -0
  179. package/dist/modules/media/routes.admin.d.ts.map +1 -0
  180. package/dist/modules/media/routes.admin.js +30 -0
  181. package/dist/modules/media/routes.admin.js.map +1 -0
  182. package/dist/modules/media/routes.public.d.ts +6 -0
  183. package/dist/modules/media/routes.public.d.ts.map +1 -0
  184. package/dist/modules/media/routes.public.js +35 -0
  185. package/dist/modules/media/routes.public.js.map +1 -0
  186. package/dist/modules/media/service.d.ts +32 -0
  187. package/dist/modules/media/service.d.ts.map +1 -0
  188. package/dist/modules/media/service.js +99 -0
  189. package/dist/modules/media/service.js.map +1 -0
  190. package/dist/modules/openapi/spec.d.ts +21 -0
  191. package/dist/modules/openapi/spec.d.ts.map +1 -0
  192. package/dist/modules/openapi/spec.js +468 -0
  193. package/dist/modules/openapi/spec.js.map +1 -0
  194. package/dist/modules/seo/jsonld.d.ts +25 -0
  195. package/dist/modules/seo/jsonld.d.ts.map +1 -0
  196. package/dist/modules/seo/jsonld.js +67 -0
  197. package/dist/modules/seo/jsonld.js.map +1 -0
  198. package/dist/modules/seo/routes.public.d.ts +6 -0
  199. package/dist/modules/seo/routes.public.d.ts.map +1 -0
  200. package/dist/modules/seo/routes.public.js +39 -0
  201. package/dist/modules/seo/routes.public.js.map +1 -0
  202. package/dist/modules/seo/sitemap.d.ts +3 -0
  203. package/dist/modules/seo/sitemap.d.ts.map +1 -0
  204. package/dist/modules/seo/sitemap.js +39 -0
  205. package/dist/modules/seo/sitemap.js.map +1 -0
  206. package/dist/modules/settings/routes.admin.d.ts +12 -0
  207. package/dist/modules/settings/routes.admin.d.ts.map +1 -0
  208. package/dist/modules/settings/routes.admin.js +27 -0
  209. package/dist/modules/settings/routes.admin.js.map +1 -0
  210. package/dist/modules/site-documents/routes.admin.d.ts +10 -0
  211. package/dist/modules/site-documents/routes.admin.d.ts.map +1 -0
  212. package/dist/modules/site-documents/routes.admin.js +29 -0
  213. package/dist/modules/site-documents/routes.admin.js.map +1 -0
  214. package/dist/modules/site-documents/routes.public.d.ts +6 -0
  215. package/dist/modules/site-documents/routes.public.d.ts.map +1 -0
  216. package/dist/modules/site-documents/routes.public.js +16 -0
  217. package/dist/modules/site-documents/routes.public.js.map +1 -0
  218. package/dist/modules/site-documents/service.d.ts +11 -0
  219. package/dist/modules/site-documents/service.d.ts.map +1 -0
  220. package/dist/modules/site-documents/service.js +42 -0
  221. package/dist/modules/site-documents/service.js.map +1 -0
  222. package/dist/modules/webhooks/dispatch.d.ts +14 -0
  223. package/dist/modules/webhooks/dispatch.d.ts.map +1 -0
  224. package/dist/modules/webhooks/dispatch.js +84 -0
  225. package/dist/modules/webhooks/dispatch.js.map +1 -0
  226. package/dist/shared/constants.d.ts +79 -0
  227. package/dist/shared/constants.d.ts.map +1 -0
  228. package/dist/shared/constants.js +89 -0
  229. package/dist/shared/constants.js.map +1 -0
  230. package/dist/shared/envelope.d.ts +37 -0
  231. package/dist/shared/envelope.d.ts.map +1 -0
  232. package/dist/shared/envelope.js +46 -0
  233. package/dist/shared/envelope.js.map +1 -0
  234. package/dist/shared/hash.d.ts +2 -0
  235. package/dist/shared/hash.d.ts.map +1 -0
  236. package/dist/shared/hash.js +8 -0
  237. package/dist/shared/hash.js.map +1 -0
  238. package/dist/shared/index.d.ts +13 -0
  239. package/dist/shared/index.d.ts.map +1 -0
  240. package/dist/shared/index.js +13 -0
  241. package/dist/shared/index.js.map +1 -0
  242. package/dist/shared/schemas/aeo.d.ts +182 -0
  243. package/dist/shared/schemas/aeo.d.ts.map +1 -0
  244. package/dist/shared/schemas/aeo.js +43 -0
  245. package/dist/shared/schemas/aeo.js.map +1 -0
  246. package/dist/shared/schemas/analytics.d.ts +277 -0
  247. package/dist/shared/schemas/analytics.d.ts.map +1 -0
  248. package/dist/shared/schemas/analytics.js +74 -0
  249. package/dist/shared/schemas/analytics.js.map +1 -0
  250. package/dist/shared/schemas/api-key.d.ts +77 -0
  251. package/dist/shared/schemas/api-key.d.ts.map +1 -0
  252. package/dist/shared/schemas/api-key.js +27 -0
  253. package/dist/shared/schemas/api-key.js.map +1 -0
  254. package/dist/shared/schemas/author.d.ts +147 -0
  255. package/dist/shared/schemas/author.d.ts.map +1 -0
  256. package/dist/shared/schemas/author.js +27 -0
  257. package/dist/shared/schemas/author.js.map +1 -0
  258. package/dist/shared/schemas/form.d.ts +341 -0
  259. package/dist/shared/schemas/form.d.ts.map +1 -0
  260. package/dist/shared/schemas/form.js +117 -0
  261. package/dist/shared/schemas/form.js.map +1 -0
  262. package/dist/shared/schemas/index.d.ts +12 -0
  263. package/dist/shared/schemas/index.d.ts.map +1 -0
  264. package/dist/shared/schemas/index.js +12 -0
  265. package/dist/shared/schemas/index.js.map +1 -0
  266. package/dist/shared/schemas/media.d.ts +42 -0
  267. package/dist/shared/schemas/media.d.ts.map +1 -0
  268. package/dist/shared/schemas/media.js +16 -0
  269. package/dist/shared/schemas/media.js.map +1 -0
  270. package/dist/shared/schemas/pagination.d.ts +34 -0
  271. package/dist/shared/schemas/pagination.d.ts.map +1 -0
  272. package/dist/shared/schemas/pagination.js +21 -0
  273. package/dist/shared/schemas/pagination.js.map +1 -0
  274. package/dist/shared/schemas/post.d.ts +862 -0
  275. package/dist/shared/schemas/post.d.ts.map +1 -0
  276. package/dist/shared/schemas/post.js +187 -0
  277. package/dist/shared/schemas/post.js.map +1 -0
  278. package/dist/shared/schemas/settings.d.ts +839 -0
  279. package/dist/shared/schemas/settings.d.ts.map +1 -0
  280. package/dist/shared/schemas/settings.js +202 -0
  281. package/dist/shared/schemas/settings.js.map +1 -0
  282. package/dist/shared/schemas/site-document.d.ts +38 -0
  283. package/dist/shared/schemas/site-document.d.ts.map +1 -0
  284. package/dist/shared/schemas/site-document.js +21 -0
  285. package/dist/shared/schemas/site-document.js.map +1 -0
  286. package/dist/shared/schemas/webhook.d.ts +39 -0
  287. package/dist/shared/schemas/webhook.d.ts.map +1 -0
  288. package/dist/shared/schemas/webhook.js +20 -0
  289. package/dist/shared/schemas/webhook.js.map +1 -0
  290. package/dist/spa.d.ts +9 -0
  291. package/dist/spa.d.ts.map +1 -0
  292. package/dist/spa.js +57 -0
  293. package/dist/spa.js.map +1 -0
  294. package/migrations/0001_settings.sql +39 -0
  295. package/migrations/0002_content.sql +135 -0
  296. package/migrations/0003_forms.sql +35 -0
  297. package/migrations/0004_analytics.sql +42 -0
  298. package/migrations/0005_media.sql +17 -0
  299. package/migrations/0006_site_documents.sql +18 -0
  300. package/migrations/0007_auth.sql +81 -0
  301. package/migrations/0008_api_keys.sql +20 -0
  302. package/package.json +68 -0
  303. package/scripts/bundle-admin.mjs +54 -0
  304. package/seed/local.sql +63 -0
@@ -0,0 +1,839 @@
1
+ import { z } from 'zod';
2
+ import { type PostType } from '../constants.js';
3
+ export declare const moduleFlagsSchema: z.ZodObject<{
4
+ content: z.ZodDefault<z.ZodBoolean>;
5
+ forms: z.ZodDefault<z.ZodBoolean>;
6
+ analytics: z.ZodDefault<z.ZodBoolean>;
7
+ media: z.ZodDefault<z.ZodBoolean>;
8
+ seo: z.ZodDefault<z.ZodBoolean>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ content: boolean;
11
+ analytics: boolean;
12
+ forms: boolean;
13
+ media: boolean;
14
+ seo: boolean;
15
+ }, {
16
+ content?: boolean | undefined;
17
+ analytics?: boolean | undefined;
18
+ forms?: boolean | undefined;
19
+ media?: boolean | undefined;
20
+ seo?: boolean | undefined;
21
+ }>;
22
+ export declare const retentionSettingsSchema: z.ZodObject<{
23
+ visits: z.ZodDefault<z.ZodNumber>;
24
+ consent: z.ZodDefault<z.ZodNumber>;
25
+ }, "strip", z.ZodTypeAny, {
26
+ visits: number;
27
+ consent: number;
28
+ }, {
29
+ visits?: number | undefined;
30
+ consent?: number | undefined;
31
+ }>;
32
+ export declare const turnstileSettingsSchema: z.ZodObject<{
33
+ enabled: z.ZodDefault<z.ZodBoolean>;
34
+ sitekey: z.ZodOptional<z.ZodString>;
35
+ }, "strip", z.ZodTypeAny, {
36
+ enabled: boolean;
37
+ sitekey?: string | undefined;
38
+ }, {
39
+ enabled?: boolean | undefined;
40
+ sitekey?: string | undefined;
41
+ }>;
42
+ /** schema.org Organization, minimal shape. Used as JSON-LD `publisher` on post detail responses. */
43
+ export declare const publisherSettingsSchema: z.ZodObject<{
44
+ name: z.ZodString;
45
+ logoUrl: z.ZodOptional<z.ZodString>;
46
+ }, "strip", z.ZodTypeAny, {
47
+ name: string;
48
+ logoUrl?: string | undefined;
49
+ }, {
50
+ name: string;
51
+ logoUrl?: string | undefined;
52
+ }>;
53
+ /**
54
+ * Per-type URL sections: a PARTIAL map from post type to the path prefix the
55
+ * site serves that section at, e.g. `{ blog: "/insights", news: "/newsroom" }`.
56
+ * Types absent from the map fall back to `postsPathPrefix`, the universal
57
+ * prefix, so an empty map behaves exactly as a site with one section does. All
58
+ * fields optional, so the object replaces wholesale on update. Explicit
59
+ * optional keys instead of z.record: a record with an enum key types as a FULL
60
+ * Record while parsing partially, a lie the resolver would trip on.
61
+ */
62
+ export declare const contentPathsSchema: z.ZodObject<{
63
+ blog: z.ZodOptional<z.ZodString>;
64
+ article: z.ZodOptional<z.ZodString>;
65
+ news: z.ZodOptional<z.ZodString>;
66
+ research: z.ZodOptional<z.ZodString>;
67
+ whitepaper: z.ZodOptional<z.ZodString>;
68
+ 'case-study': z.ZodOptional<z.ZodString>;
69
+ }, "strip", z.ZodTypeAny, {
70
+ blog?: string | undefined;
71
+ article?: string | undefined;
72
+ news?: string | undefined;
73
+ research?: string | undefined;
74
+ whitepaper?: string | undefined;
75
+ 'case-study'?: string | undefined;
76
+ }, {
77
+ blog?: string | undefined;
78
+ article?: string | undefined;
79
+ news?: string | undefined;
80
+ research?: string | undefined;
81
+ whitepaper?: string | undefined;
82
+ 'case-study'?: string | undefined;
83
+ }>;
84
+ export type ContentPaths = z.infer<typeof contentPathsSchema>;
85
+ /**
86
+ * THE resolution rule, defined once: a type's own path, else the legacy
87
+ * universal prefix. Sitemap, JSON-LD, the public site config, and the astro
88
+ * postUrl helper must all route through this so they can never disagree.
89
+ */
90
+ export declare function resolveContentPath(type: PostType, settings: {
91
+ contentPaths?: ContentPaths | undefined;
92
+ postsPathPrefix: string;
93
+ }): string;
94
+ /** The fully-resolved map served in the public site config (every type has a path). */
95
+ export declare function resolveAllContentPaths(settings: {
96
+ contentPaths?: ContentPaths | undefined;
97
+ postsPathPrefix: string;
98
+ }): Record<PostType, string>;
99
+ /**
100
+ * Site-level SEO FALLBACKS: a template's own values always win, and these fill
101
+ * the gaps when it omits one (the code-first merge lives in @we8/astro, not
102
+ * here). titleTemplate uses "%s" as the page-title placeholder, e.g.
103
+ * "%s | Acme Co". discourageSearchEngines is advertised in the public site
104
+ * config so a template can emit a disallow robots.txt and a noindex tag; this
105
+ * package only stores and serves it.
106
+ */
107
+ export declare const seoSettingsSchema: z.ZodObject<{
108
+ defaultTitle: z.ZodOptional<z.ZodString>;
109
+ titleTemplate: z.ZodOptional<z.ZodString>;
110
+ metaDescription: z.ZodOptional<z.ZodString>;
111
+ ogTitle: z.ZodOptional<z.ZodString>;
112
+ ogDescription: z.ZodOptional<z.ZodString>;
113
+ ogImageUrl: z.ZodOptional<z.ZodString>;
114
+ twitterHandle: z.ZodOptional<z.ZodString>;
115
+ discourageSearchEngines: z.ZodDefault<z.ZodBoolean>;
116
+ }, "strip", z.ZodTypeAny, {
117
+ discourageSearchEngines: boolean;
118
+ ogTitle?: string | undefined;
119
+ ogDescription?: string | undefined;
120
+ ogImageUrl?: string | undefined;
121
+ defaultTitle?: string | undefined;
122
+ titleTemplate?: string | undefined;
123
+ metaDescription?: string | undefined;
124
+ twitterHandle?: string | undefined;
125
+ }, {
126
+ ogTitle?: string | undefined;
127
+ ogDescription?: string | undefined;
128
+ ogImageUrl?: string | undefined;
129
+ defaultTitle?: string | undefined;
130
+ titleTemplate?: string | undefined;
131
+ metaDescription?: string | undefined;
132
+ twitterHandle?: string | undefined;
133
+ discourageSearchEngines?: boolean | undefined;
134
+ }>;
135
+ /**
136
+ * Brand asset slots: media URLs for the minimal icon set (favicon.ico,
137
+ * icon.svg, apple-touch-icon, 192 and 512 plus maskable) and the display logos.
138
+ * Every slot is optional and the object defaults to `{}`, so a site owner who
139
+ * never opens the Brand screen still gets a fully-formed object rather than
140
+ * undefined, and consumers never need optional chaining. The OG default is not
141
+ * duplicated here; `seo.ogImageUrl` already covers it. Generating the icon set
142
+ * from one source image is out of scope, since it drags in image resizing;
143
+ * each slot is an already-correctly-sized upload.
144
+ */
145
+ export declare const brandSettingsSchema: z.ZodObject<{
146
+ logoUrl: z.ZodOptional<z.ZodString>;
147
+ logoDarkUrl: z.ZodOptional<z.ZodString>;
148
+ iconSvgUrl: z.ZodOptional<z.ZodString>;
149
+ faviconIcoUrl: z.ZodOptional<z.ZodString>;
150
+ appleTouchIconUrl: z.ZodOptional<z.ZodString>;
151
+ icon192Url: z.ZodOptional<z.ZodString>;
152
+ icon512Url: z.ZodOptional<z.ZodString>;
153
+ icon512MaskUrl: z.ZodOptional<z.ZodString>;
154
+ }, "strip", z.ZodTypeAny, {
155
+ logoUrl?: string | undefined;
156
+ logoDarkUrl?: string | undefined;
157
+ iconSvgUrl?: string | undefined;
158
+ faviconIcoUrl?: string | undefined;
159
+ appleTouchIconUrl?: string | undefined;
160
+ icon192Url?: string | undefined;
161
+ icon512Url?: string | undefined;
162
+ icon512MaskUrl?: string | undefined;
163
+ }, {
164
+ logoUrl?: string | undefined;
165
+ logoDarkUrl?: string | undefined;
166
+ iconSvgUrl?: string | undefined;
167
+ faviconIcoUrl?: string | undefined;
168
+ appleTouchIconUrl?: string | undefined;
169
+ icon192Url?: string | undefined;
170
+ icon512Url?: string | undefined;
171
+ icon512MaskUrl?: string | undefined;
172
+ }>;
173
+ /**
174
+ * AEO settings (0.1 headline feature). `siteSummary` is the one sentence an
175
+ * answer engine should be able to lift about the site as a whole; it heads the
176
+ * generated llms.txt and is the site-level counterpart of a post's
177
+ * `answerSummary`. The generated document can be turned off entirely, and the
178
+ * post cap bounds it so a large site does not publish a megabyte of index.
179
+ */
180
+ export declare const aeoSettingsSchema: z.ZodObject<{
181
+ siteSummary: z.ZodOptional<z.ZodString>;
182
+ llmsTxtEnabled: z.ZodDefault<z.ZodBoolean>;
183
+ llmsTxtMaxPosts: z.ZodDefault<z.ZodNumber>;
184
+ }, "strip", z.ZodTypeAny, {
185
+ llmsTxtEnabled: boolean;
186
+ llmsTxtMaxPosts: number;
187
+ siteSummary?: string | undefined;
188
+ }, {
189
+ siteSummary?: string | undefined;
190
+ llmsTxtEnabled?: boolean | undefined;
191
+ llmsTxtMaxPosts?: number | undefined;
192
+ }>;
193
+ export declare const siteSettingsSchema: z.ZodObject<{
194
+ allowedOrigins: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
195
+ modules: z.ZodDefault<z.ZodObject<{
196
+ content: z.ZodDefault<z.ZodBoolean>;
197
+ forms: z.ZodDefault<z.ZodBoolean>;
198
+ analytics: z.ZodDefault<z.ZodBoolean>;
199
+ media: z.ZodDefault<z.ZodBoolean>;
200
+ seo: z.ZodDefault<z.ZodBoolean>;
201
+ }, "strip", z.ZodTypeAny, {
202
+ content: boolean;
203
+ analytics: boolean;
204
+ forms: boolean;
205
+ media: boolean;
206
+ seo: boolean;
207
+ }, {
208
+ content?: boolean | undefined;
209
+ analytics?: boolean | undefined;
210
+ forms?: boolean | undefined;
211
+ media?: boolean | undefined;
212
+ seo?: boolean | undefined;
213
+ }>>;
214
+ webhooks: z.ZodDefault<z.ZodArray<z.ZodObject<{
215
+ url: z.ZodString;
216
+ events: z.ZodArray<z.ZodEnum<["post.published", "post.unpublished", "form.submission.created"]>, "many">;
217
+ secret: z.ZodString;
218
+ }, "strip", z.ZodTypeAny, {
219
+ url: string;
220
+ events: ("post.published" | "post.unpublished" | "form.submission.created")[];
221
+ secret: string;
222
+ }, {
223
+ url: string;
224
+ events: ("post.published" | "post.unpublished" | "form.submission.created")[];
225
+ secret: string;
226
+ }>, "many">>;
227
+ notifyEmails: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
228
+ retentionDays: z.ZodDefault<z.ZodObject<{
229
+ visits: z.ZodDefault<z.ZodNumber>;
230
+ consent: z.ZodDefault<z.ZodNumber>;
231
+ }, "strip", z.ZodTypeAny, {
232
+ visits: number;
233
+ consent: number;
234
+ }, {
235
+ visits?: number | undefined;
236
+ consent?: number | undefined;
237
+ }>>;
238
+ turnstile: z.ZodDefault<z.ZodObject<{
239
+ enabled: z.ZodDefault<z.ZodBoolean>;
240
+ sitekey: z.ZodOptional<z.ZodString>;
241
+ }, "strip", z.ZodTypeAny, {
242
+ enabled: boolean;
243
+ sitekey?: string | undefined;
244
+ }, {
245
+ enabled?: boolean | undefined;
246
+ sitekey?: string | undefined;
247
+ }>>;
248
+ sitemapStatic: z.ZodDefault<z.ZodArray<z.ZodObject<{
249
+ path: z.ZodString;
250
+ changefreq: z.ZodOptional<z.ZodString>;
251
+ priority: z.ZodOptional<z.ZodNumber>;
252
+ }, "strip", z.ZodTypeAny, {
253
+ path: string;
254
+ changefreq?: string | undefined;
255
+ priority?: number | undefined;
256
+ }, {
257
+ path: string;
258
+ changefreq?: string | undefined;
259
+ priority?: number | undefined;
260
+ }>, "many">>;
261
+ /**
262
+ * Where the frontend serves individual posts, e.g. "/insights" for
263
+ * SITE_URL + "/insights/:slug". Needed to build absolute sitemap <loc> URLs
264
+ * and the JSON-LD `mainEntityOfPage`.
265
+ */
266
+ postsPathPrefix: z.ZodDefault<z.ZodString>;
267
+ contentPaths: z.ZodDefault<z.ZodObject<{
268
+ blog: z.ZodOptional<z.ZodString>;
269
+ article: z.ZodOptional<z.ZodString>;
270
+ news: z.ZodOptional<z.ZodString>;
271
+ research: z.ZodOptional<z.ZodString>;
272
+ whitepaper: z.ZodOptional<z.ZodString>;
273
+ 'case-study': z.ZodOptional<z.ZodString>;
274
+ }, "strip", z.ZodTypeAny, {
275
+ blog?: string | undefined;
276
+ article?: string | undefined;
277
+ news?: string | undefined;
278
+ research?: string | undefined;
279
+ whitepaper?: string | undefined;
280
+ 'case-study'?: string | undefined;
281
+ }, {
282
+ blog?: string | undefined;
283
+ article?: string | undefined;
284
+ news?: string | undefined;
285
+ research?: string | undefined;
286
+ whitepaper?: string | undefined;
287
+ 'case-study'?: string | undefined;
288
+ }>>;
289
+ publisher: z.ZodOptional<z.ZodObject<{
290
+ name: z.ZodString;
291
+ logoUrl: z.ZodOptional<z.ZodString>;
292
+ }, "strip", z.ZodTypeAny, {
293
+ name: string;
294
+ logoUrl?: string | undefined;
295
+ }, {
296
+ name: string;
297
+ logoUrl?: string | undefined;
298
+ }>>;
299
+ seo: z.ZodDefault<z.ZodObject<{
300
+ defaultTitle: z.ZodOptional<z.ZodString>;
301
+ titleTemplate: z.ZodOptional<z.ZodString>;
302
+ metaDescription: z.ZodOptional<z.ZodString>;
303
+ ogTitle: z.ZodOptional<z.ZodString>;
304
+ ogDescription: z.ZodOptional<z.ZodString>;
305
+ ogImageUrl: z.ZodOptional<z.ZodString>;
306
+ twitterHandle: z.ZodOptional<z.ZodString>;
307
+ discourageSearchEngines: z.ZodDefault<z.ZodBoolean>;
308
+ }, "strip", z.ZodTypeAny, {
309
+ discourageSearchEngines: boolean;
310
+ ogTitle?: string | undefined;
311
+ ogDescription?: string | undefined;
312
+ ogImageUrl?: string | undefined;
313
+ defaultTitle?: string | undefined;
314
+ titleTemplate?: string | undefined;
315
+ metaDescription?: string | undefined;
316
+ twitterHandle?: string | undefined;
317
+ }, {
318
+ ogTitle?: string | undefined;
319
+ ogDescription?: string | undefined;
320
+ ogImageUrl?: string | undefined;
321
+ defaultTitle?: string | undefined;
322
+ titleTemplate?: string | undefined;
323
+ metaDescription?: string | undefined;
324
+ twitterHandle?: string | undefined;
325
+ discourageSearchEngines?: boolean | undefined;
326
+ }>>;
327
+ aeo: z.ZodDefault<z.ZodObject<{
328
+ siteSummary: z.ZodOptional<z.ZodString>;
329
+ llmsTxtEnabled: z.ZodDefault<z.ZodBoolean>;
330
+ llmsTxtMaxPosts: z.ZodDefault<z.ZodNumber>;
331
+ }, "strip", z.ZodTypeAny, {
332
+ llmsTxtEnabled: boolean;
333
+ llmsTxtMaxPosts: number;
334
+ siteSummary?: string | undefined;
335
+ }, {
336
+ siteSummary?: string | undefined;
337
+ llmsTxtEnabled?: boolean | undefined;
338
+ llmsTxtMaxPosts?: number | undefined;
339
+ }>>;
340
+ gaMeasurementId: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodLiteral<"">]>>;
341
+ brand: z.ZodDefault<z.ZodObject<{
342
+ logoUrl: z.ZodOptional<z.ZodString>;
343
+ logoDarkUrl: z.ZodOptional<z.ZodString>;
344
+ iconSvgUrl: z.ZodOptional<z.ZodString>;
345
+ faviconIcoUrl: z.ZodOptional<z.ZodString>;
346
+ appleTouchIconUrl: z.ZodOptional<z.ZodString>;
347
+ icon192Url: z.ZodOptional<z.ZodString>;
348
+ icon512Url: z.ZodOptional<z.ZodString>;
349
+ icon512MaskUrl: z.ZodOptional<z.ZodString>;
350
+ }, "strip", z.ZodTypeAny, {
351
+ logoUrl?: string | undefined;
352
+ logoDarkUrl?: string | undefined;
353
+ iconSvgUrl?: string | undefined;
354
+ faviconIcoUrl?: string | undefined;
355
+ appleTouchIconUrl?: string | undefined;
356
+ icon192Url?: string | undefined;
357
+ icon512Url?: string | undefined;
358
+ icon512MaskUrl?: string | undefined;
359
+ }, {
360
+ logoUrl?: string | undefined;
361
+ logoDarkUrl?: string | undefined;
362
+ iconSvgUrl?: string | undefined;
363
+ faviconIcoUrl?: string | undefined;
364
+ appleTouchIconUrl?: string | undefined;
365
+ icon192Url?: string | undefined;
366
+ icon512Url?: string | undefined;
367
+ icon512MaskUrl?: string | undefined;
368
+ }>>;
369
+ }, "strip", z.ZodTypeAny, {
370
+ notifyEmails: string[];
371
+ seo: {
372
+ discourageSearchEngines: boolean;
373
+ ogTitle?: string | undefined;
374
+ ogDescription?: string | undefined;
375
+ ogImageUrl?: string | undefined;
376
+ defaultTitle?: string | undefined;
377
+ titleTemplate?: string | undefined;
378
+ metaDescription?: string | undefined;
379
+ twitterHandle?: string | undefined;
380
+ };
381
+ allowedOrigins: string[];
382
+ modules: {
383
+ content: boolean;
384
+ analytics: boolean;
385
+ forms: boolean;
386
+ media: boolean;
387
+ seo: boolean;
388
+ };
389
+ webhooks: {
390
+ url: string;
391
+ events: ("post.published" | "post.unpublished" | "form.submission.created")[];
392
+ secret: string;
393
+ }[];
394
+ retentionDays: {
395
+ visits: number;
396
+ consent: number;
397
+ };
398
+ turnstile: {
399
+ enabled: boolean;
400
+ sitekey?: string | undefined;
401
+ };
402
+ sitemapStatic: {
403
+ path: string;
404
+ changefreq?: string | undefined;
405
+ priority?: number | undefined;
406
+ }[];
407
+ postsPathPrefix: string;
408
+ contentPaths: {
409
+ blog?: string | undefined;
410
+ article?: string | undefined;
411
+ news?: string | undefined;
412
+ research?: string | undefined;
413
+ whitepaper?: string | undefined;
414
+ 'case-study'?: string | undefined;
415
+ };
416
+ aeo: {
417
+ llmsTxtEnabled: boolean;
418
+ llmsTxtMaxPosts: number;
419
+ siteSummary?: string | undefined;
420
+ };
421
+ brand: {
422
+ logoUrl?: string | undefined;
423
+ logoDarkUrl?: string | undefined;
424
+ iconSvgUrl?: string | undefined;
425
+ faviconIcoUrl?: string | undefined;
426
+ appleTouchIconUrl?: string | undefined;
427
+ icon192Url?: string | undefined;
428
+ icon512Url?: string | undefined;
429
+ icon512MaskUrl?: string | undefined;
430
+ };
431
+ publisher?: {
432
+ name: string;
433
+ logoUrl?: string | undefined;
434
+ } | undefined;
435
+ gaMeasurementId?: string | undefined;
436
+ }, {
437
+ notifyEmails?: string[] | undefined;
438
+ seo?: {
439
+ ogTitle?: string | undefined;
440
+ ogDescription?: string | undefined;
441
+ ogImageUrl?: string | undefined;
442
+ defaultTitle?: string | undefined;
443
+ titleTemplate?: string | undefined;
444
+ metaDescription?: string | undefined;
445
+ twitterHandle?: string | undefined;
446
+ discourageSearchEngines?: boolean | undefined;
447
+ } | undefined;
448
+ allowedOrigins?: string[] | undefined;
449
+ modules?: {
450
+ content?: boolean | undefined;
451
+ analytics?: boolean | undefined;
452
+ forms?: boolean | undefined;
453
+ media?: boolean | undefined;
454
+ seo?: boolean | undefined;
455
+ } | undefined;
456
+ webhooks?: {
457
+ url: string;
458
+ events: ("post.published" | "post.unpublished" | "form.submission.created")[];
459
+ secret: string;
460
+ }[] | undefined;
461
+ retentionDays?: {
462
+ visits?: number | undefined;
463
+ consent?: number | undefined;
464
+ } | undefined;
465
+ turnstile?: {
466
+ enabled?: boolean | undefined;
467
+ sitekey?: string | undefined;
468
+ } | undefined;
469
+ sitemapStatic?: {
470
+ path: string;
471
+ changefreq?: string | undefined;
472
+ priority?: number | undefined;
473
+ }[] | undefined;
474
+ postsPathPrefix?: string | undefined;
475
+ contentPaths?: {
476
+ blog?: string | undefined;
477
+ article?: string | undefined;
478
+ news?: string | undefined;
479
+ research?: string | undefined;
480
+ whitepaper?: string | undefined;
481
+ 'case-study'?: string | undefined;
482
+ } | undefined;
483
+ publisher?: {
484
+ name: string;
485
+ logoUrl?: string | undefined;
486
+ } | undefined;
487
+ aeo?: {
488
+ siteSummary?: string | undefined;
489
+ llmsTxtEnabled?: boolean | undefined;
490
+ llmsTxtMaxPosts?: number | undefined;
491
+ } | undefined;
492
+ gaMeasurementId?: string | undefined;
493
+ brand?: {
494
+ logoUrl?: string | undefined;
495
+ logoDarkUrl?: string | undefined;
496
+ iconSvgUrl?: string | undefined;
497
+ faviconIcoUrl?: string | undefined;
498
+ appleTouchIconUrl?: string | undefined;
499
+ icon192Url?: string | undefined;
500
+ icon512Url?: string | undefined;
501
+ icon512MaskUrl?: string | undefined;
502
+ } | undefined;
503
+ }>;
504
+ export declare const siteSettingsUpdateInputSchema: z.ZodObject<{
505
+ allowedOrigins: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString, "many">>>;
506
+ webhooks: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{
507
+ url: z.ZodString;
508
+ events: z.ZodArray<z.ZodEnum<["post.published", "post.unpublished", "form.submission.created"]>, "many">;
509
+ secret: z.ZodString;
510
+ }, "strip", z.ZodTypeAny, {
511
+ url: string;
512
+ events: ("post.published" | "post.unpublished" | "form.submission.created")[];
513
+ secret: string;
514
+ }, {
515
+ url: string;
516
+ events: ("post.published" | "post.unpublished" | "form.submission.created")[];
517
+ secret: string;
518
+ }>, "many">>>;
519
+ notifyEmails: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString, "many">>>;
520
+ sitemapStatic: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{
521
+ path: z.ZodString;
522
+ changefreq: z.ZodOptional<z.ZodString>;
523
+ priority: z.ZodOptional<z.ZodNumber>;
524
+ }, "strip", z.ZodTypeAny, {
525
+ path: string;
526
+ changefreq?: string | undefined;
527
+ priority?: number | undefined;
528
+ }, {
529
+ path: string;
530
+ changefreq?: string | undefined;
531
+ priority?: number | undefined;
532
+ }>, "many">>>;
533
+ postsPathPrefix: z.ZodOptional<z.ZodDefault<z.ZodString>>;
534
+ contentPaths: z.ZodOptional<z.ZodDefault<z.ZodObject<{
535
+ blog: z.ZodOptional<z.ZodString>;
536
+ article: z.ZodOptional<z.ZodString>;
537
+ news: z.ZodOptional<z.ZodString>;
538
+ research: z.ZodOptional<z.ZodString>;
539
+ whitepaper: z.ZodOptional<z.ZodString>;
540
+ 'case-study': z.ZodOptional<z.ZodString>;
541
+ }, "strip", z.ZodTypeAny, {
542
+ blog?: string | undefined;
543
+ article?: string | undefined;
544
+ news?: string | undefined;
545
+ research?: string | undefined;
546
+ whitepaper?: string | undefined;
547
+ 'case-study'?: string | undefined;
548
+ }, {
549
+ blog?: string | undefined;
550
+ article?: string | undefined;
551
+ news?: string | undefined;
552
+ research?: string | undefined;
553
+ whitepaper?: string | undefined;
554
+ 'case-study'?: string | undefined;
555
+ }>>>;
556
+ publisher: z.ZodOptional<z.ZodOptional<z.ZodObject<{
557
+ name: z.ZodString;
558
+ logoUrl: z.ZodOptional<z.ZodString>;
559
+ }, "strip", z.ZodTypeAny, {
560
+ name: string;
561
+ logoUrl?: string | undefined;
562
+ }, {
563
+ name: string;
564
+ logoUrl?: string | undefined;
565
+ }>>>;
566
+ seo: z.ZodOptional<z.ZodDefault<z.ZodObject<{
567
+ defaultTitle: z.ZodOptional<z.ZodString>;
568
+ titleTemplate: z.ZodOptional<z.ZodString>;
569
+ metaDescription: z.ZodOptional<z.ZodString>;
570
+ ogTitle: z.ZodOptional<z.ZodString>;
571
+ ogDescription: z.ZodOptional<z.ZodString>;
572
+ ogImageUrl: z.ZodOptional<z.ZodString>;
573
+ twitterHandle: z.ZodOptional<z.ZodString>;
574
+ discourageSearchEngines: z.ZodDefault<z.ZodBoolean>;
575
+ }, "strip", z.ZodTypeAny, {
576
+ discourageSearchEngines: boolean;
577
+ ogTitle?: string | undefined;
578
+ ogDescription?: string | undefined;
579
+ ogImageUrl?: string | undefined;
580
+ defaultTitle?: string | undefined;
581
+ titleTemplate?: string | undefined;
582
+ metaDescription?: string | undefined;
583
+ twitterHandle?: string | undefined;
584
+ }, {
585
+ ogTitle?: string | undefined;
586
+ ogDescription?: string | undefined;
587
+ ogImageUrl?: string | undefined;
588
+ defaultTitle?: string | undefined;
589
+ titleTemplate?: string | undefined;
590
+ metaDescription?: string | undefined;
591
+ twitterHandle?: string | undefined;
592
+ discourageSearchEngines?: boolean | undefined;
593
+ }>>>;
594
+ gaMeasurementId: z.ZodOptional<z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodLiteral<"">]>>>;
595
+ brand: z.ZodOptional<z.ZodDefault<z.ZodObject<{
596
+ logoUrl: z.ZodOptional<z.ZodString>;
597
+ logoDarkUrl: z.ZodOptional<z.ZodString>;
598
+ iconSvgUrl: z.ZodOptional<z.ZodString>;
599
+ faviconIcoUrl: z.ZodOptional<z.ZodString>;
600
+ appleTouchIconUrl: z.ZodOptional<z.ZodString>;
601
+ icon192Url: z.ZodOptional<z.ZodString>;
602
+ icon512Url: z.ZodOptional<z.ZodString>;
603
+ icon512MaskUrl: z.ZodOptional<z.ZodString>;
604
+ }, "strip", z.ZodTypeAny, {
605
+ logoUrl?: string | undefined;
606
+ logoDarkUrl?: string | undefined;
607
+ iconSvgUrl?: string | undefined;
608
+ faviconIcoUrl?: string | undefined;
609
+ appleTouchIconUrl?: string | undefined;
610
+ icon192Url?: string | undefined;
611
+ icon512Url?: string | undefined;
612
+ icon512MaskUrl?: string | undefined;
613
+ }, {
614
+ logoUrl?: string | undefined;
615
+ logoDarkUrl?: string | undefined;
616
+ iconSvgUrl?: string | undefined;
617
+ faviconIcoUrl?: string | undefined;
618
+ appleTouchIconUrl?: string | undefined;
619
+ icon192Url?: string | undefined;
620
+ icon512Url?: string | undefined;
621
+ icon512MaskUrl?: string | undefined;
622
+ }>>>;
623
+ } & {
624
+ modules: z.ZodOptional<z.ZodObject<{
625
+ content: z.ZodBoolean;
626
+ forms: z.ZodBoolean;
627
+ analytics: z.ZodBoolean;
628
+ media: z.ZodBoolean;
629
+ seo: z.ZodBoolean;
630
+ }, "strip", z.ZodTypeAny, {
631
+ content: boolean;
632
+ analytics: boolean;
633
+ forms: boolean;
634
+ media: boolean;
635
+ seo: boolean;
636
+ }, {
637
+ content: boolean;
638
+ analytics: boolean;
639
+ forms: boolean;
640
+ media: boolean;
641
+ seo: boolean;
642
+ }>>;
643
+ retentionDays: z.ZodOptional<z.ZodObject<{
644
+ visits: z.ZodNumber;
645
+ consent: z.ZodNumber;
646
+ }, "strip", z.ZodTypeAny, {
647
+ visits: number;
648
+ consent: number;
649
+ }, {
650
+ visits: number;
651
+ consent: number;
652
+ }>>;
653
+ turnstile: z.ZodOptional<z.ZodObject<{
654
+ enabled: z.ZodBoolean;
655
+ sitekey: z.ZodOptional<z.ZodString>;
656
+ }, "strip", z.ZodTypeAny, {
657
+ enabled: boolean;
658
+ sitekey?: string | undefined;
659
+ }, {
660
+ enabled: boolean;
661
+ sitekey?: string | undefined;
662
+ }>>;
663
+ aeo: z.ZodOptional<z.ZodObject<{
664
+ siteSummary: z.ZodOptional<z.ZodString>;
665
+ llmsTxtEnabled: z.ZodBoolean;
666
+ llmsTxtMaxPosts: z.ZodNumber;
667
+ }, "strip", z.ZodTypeAny, {
668
+ llmsTxtEnabled: boolean;
669
+ llmsTxtMaxPosts: number;
670
+ siteSummary?: string | undefined;
671
+ }, {
672
+ llmsTxtEnabled: boolean;
673
+ llmsTxtMaxPosts: number;
674
+ siteSummary?: string | undefined;
675
+ }>>;
676
+ }, "strip", z.ZodTypeAny, {
677
+ notifyEmails?: string[] | undefined;
678
+ seo?: {
679
+ discourageSearchEngines: boolean;
680
+ ogTitle?: string | undefined;
681
+ ogDescription?: string | undefined;
682
+ ogImageUrl?: string | undefined;
683
+ defaultTitle?: string | undefined;
684
+ titleTemplate?: string | undefined;
685
+ metaDescription?: string | undefined;
686
+ twitterHandle?: string | undefined;
687
+ } | undefined;
688
+ allowedOrigins?: string[] | undefined;
689
+ modules?: {
690
+ content: boolean;
691
+ analytics: boolean;
692
+ forms: boolean;
693
+ media: boolean;
694
+ seo: boolean;
695
+ } | undefined;
696
+ webhooks?: {
697
+ url: string;
698
+ events: ("post.published" | "post.unpublished" | "form.submission.created")[];
699
+ secret: string;
700
+ }[] | undefined;
701
+ retentionDays?: {
702
+ visits: number;
703
+ consent: number;
704
+ } | undefined;
705
+ turnstile?: {
706
+ enabled: boolean;
707
+ sitekey?: string | undefined;
708
+ } | undefined;
709
+ sitemapStatic?: {
710
+ path: string;
711
+ changefreq?: string | undefined;
712
+ priority?: number | undefined;
713
+ }[] | undefined;
714
+ postsPathPrefix?: string | undefined;
715
+ contentPaths?: {
716
+ blog?: string | undefined;
717
+ article?: string | undefined;
718
+ news?: string | undefined;
719
+ research?: string | undefined;
720
+ whitepaper?: string | undefined;
721
+ 'case-study'?: string | undefined;
722
+ } | undefined;
723
+ publisher?: {
724
+ name: string;
725
+ logoUrl?: string | undefined;
726
+ } | undefined;
727
+ aeo?: {
728
+ llmsTxtEnabled: boolean;
729
+ llmsTxtMaxPosts: number;
730
+ siteSummary?: string | undefined;
731
+ } | undefined;
732
+ gaMeasurementId?: string | undefined;
733
+ brand?: {
734
+ logoUrl?: string | undefined;
735
+ logoDarkUrl?: string | undefined;
736
+ iconSvgUrl?: string | undefined;
737
+ faviconIcoUrl?: string | undefined;
738
+ appleTouchIconUrl?: string | undefined;
739
+ icon192Url?: string | undefined;
740
+ icon512Url?: string | undefined;
741
+ icon512MaskUrl?: string | undefined;
742
+ } | undefined;
743
+ }, {
744
+ notifyEmails?: string[] | undefined;
745
+ seo?: {
746
+ ogTitle?: string | undefined;
747
+ ogDescription?: string | undefined;
748
+ ogImageUrl?: string | undefined;
749
+ defaultTitle?: string | undefined;
750
+ titleTemplate?: string | undefined;
751
+ metaDescription?: string | undefined;
752
+ twitterHandle?: string | undefined;
753
+ discourageSearchEngines?: boolean | undefined;
754
+ } | undefined;
755
+ allowedOrigins?: string[] | undefined;
756
+ modules?: {
757
+ content: boolean;
758
+ analytics: boolean;
759
+ forms: boolean;
760
+ media: boolean;
761
+ seo: boolean;
762
+ } | undefined;
763
+ webhooks?: {
764
+ url: string;
765
+ events: ("post.published" | "post.unpublished" | "form.submission.created")[];
766
+ secret: string;
767
+ }[] | undefined;
768
+ retentionDays?: {
769
+ visits: number;
770
+ consent: number;
771
+ } | undefined;
772
+ turnstile?: {
773
+ enabled: boolean;
774
+ sitekey?: string | undefined;
775
+ } | undefined;
776
+ sitemapStatic?: {
777
+ path: string;
778
+ changefreq?: string | undefined;
779
+ priority?: number | undefined;
780
+ }[] | undefined;
781
+ postsPathPrefix?: string | undefined;
782
+ contentPaths?: {
783
+ blog?: string | undefined;
784
+ article?: string | undefined;
785
+ news?: string | undefined;
786
+ research?: string | undefined;
787
+ whitepaper?: string | undefined;
788
+ 'case-study'?: string | undefined;
789
+ } | undefined;
790
+ publisher?: {
791
+ name: string;
792
+ logoUrl?: string | undefined;
793
+ } | undefined;
794
+ aeo?: {
795
+ llmsTxtEnabled: boolean;
796
+ llmsTxtMaxPosts: number;
797
+ siteSummary?: string | undefined;
798
+ } | undefined;
799
+ gaMeasurementId?: string | undefined;
800
+ brand?: {
801
+ logoUrl?: string | undefined;
802
+ logoDarkUrl?: string | undefined;
803
+ iconSvgUrl?: string | undefined;
804
+ faviconIcoUrl?: string | undefined;
805
+ appleTouchIconUrl?: string | undefined;
806
+ icon192Url?: string | undefined;
807
+ icon512Url?: string | undefined;
808
+ icon512MaskUrl?: string | undefined;
809
+ } | undefined;
810
+ }>;
811
+ /**
812
+ * The public site-config payload (GET /v1/site): the site's identity card for
813
+ * templates and SDKs. `name` derives from publisher.name, since there is no
814
+ * separate site-name binding; the code-first merge over `seo` lives in
815
+ * @we8/astro, not here.
816
+ */
817
+ export interface SiteConfig {
818
+ name: string | null;
819
+ siteUrl: string;
820
+ seo: SeoSettings;
821
+ publisher: PublisherSettings | null;
822
+ /** The universal prefix, used for any type without its own path. */
823
+ postsPathPrefix: string;
824
+ /** FULLY resolved per-type paths (every type present; resolveAllContentPaths). */
825
+ contentPaths: Record<PostType, string>;
826
+ /** null when unconfigured; "" is never served, it is normalized at the boundary. */
827
+ gaMeasurementId: string | null;
828
+ brand: BrandSettings;
829
+ }
830
+ export type ModuleFlags = z.infer<typeof moduleFlagsSchema>;
831
+ export type RetentionSettings = z.infer<typeof retentionSettingsSchema>;
832
+ export type TurnstileSettings = z.infer<typeof turnstileSettingsSchema>;
833
+ export type PublisherSettings = z.infer<typeof publisherSettingsSchema>;
834
+ export type SeoSettings = z.infer<typeof seoSettingsSchema>;
835
+ export type BrandSettings = z.infer<typeof brandSettingsSchema>;
836
+ export type AeoSettings = z.infer<typeof aeoSettingsSchema>;
837
+ export type SiteSettings = z.infer<typeof siteSettingsSchema>;
838
+ export type SiteSettingsUpdateInput = z.infer<typeof siteSettingsUpdateInputSchema>;
839
+ //# sourceMappingURL=settings.d.ts.map