@geekity/cms 0.3.0 → 0.4.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 (637) hide show
  1. package/README.md +2091 -214
  2. package/admin/components/fields.njk +165 -0
  3. package/admin/layouts/base.njk +1 -1
  4. package/admin/layouts/settings-page.njk +26 -0
  5. package/admin/layouts/shell.njk +17 -3
  6. package/admin/pages/account/forgot.njk +47 -0
  7. package/admin/pages/account/login.njk +26 -0
  8. package/admin/pages/account/reset.njk +38 -0
  9. package/admin/pages/account/setup.njk +28 -0
  10. package/admin/pages/appearance/themes.njk +69 -0
  11. package/admin/pages/comments/all.njk +133 -0
  12. package/admin/{layouts/dashboard.njk → pages/dashboard/home.njk} +8 -15
  13. package/admin/{layouts/document-conflict.njk → pages/documents/conflict.njk} +1 -0
  14. package/admin/pages/documents/editor.njk +196 -0
  15. package/admin/{layouts/document-list.njk → pages/documents/list.njk} +19 -2
  16. package/admin/pages/documents/taxonomy.njk +95 -0
  17. package/admin/pages/federation/followers.njk +238 -0
  18. package/admin/pages/media/library.njk +160 -0
  19. package/admin/pages/messages/all.njk +110 -0
  20. package/admin/{layouts → pages}/placeholder.njk +5 -1
  21. package/admin/pages/settings/discussion.njk +99 -0
  22. package/admin/pages/settings/email.njk +203 -0
  23. package/admin/pages/settings/federation.njk +75 -0
  24. package/admin/pages/settings/general.njk +29 -0
  25. package/admin/pages/settings/permalinks.njk +50 -0
  26. package/admin/pages/settings/reading.njk +72 -0
  27. package/admin/pages/users/edit.njk +239 -0
  28. package/admin/pages/users/list.njk +48 -0
  29. package/admin/pages/users/new.njk +41 -0
  30. package/admin/static/admin.css +498 -3
  31. package/admin/static/copy.js +52 -0
  32. package/admin/static/editor.js +16 -16
  33. package/admin/static/slug.js +61 -0
  34. package/dist/admin/accounts.d.ts +413 -0
  35. package/dist/admin/accounts.d.ts.map +1 -0
  36. package/dist/admin/accounts.js +680 -0
  37. package/dist/admin/accounts.js.map +1 -0
  38. package/dist/admin/appearance.d.ts +80 -0
  39. package/dist/admin/appearance.d.ts.map +1 -0
  40. package/dist/admin/appearance.js +136 -0
  41. package/dist/admin/appearance.js.map +1 -0
  42. package/dist/admin/comments.d.ts +90 -0
  43. package/dist/admin/comments.d.ts.map +1 -0
  44. package/dist/admin/comments.js +244 -0
  45. package/dist/admin/comments.js.map +1 -0
  46. package/dist/admin/credentials.d.ts +26 -2
  47. package/dist/admin/credentials.d.ts.map +1 -1
  48. package/dist/admin/credentials.js +35 -2
  49. package/dist/admin/credentials.js.map +1 -1
  50. package/dist/admin/documents.d.ts +127 -10
  51. package/dist/admin/documents.d.ts.map +1 -1
  52. package/dist/admin/documents.js +360 -41
  53. package/dist/admin/documents.js.map +1 -1
  54. package/dist/admin/federation.d.ts +151 -50
  55. package/dist/admin/federation.d.ts.map +1 -1
  56. package/dist/admin/federation.js +225 -93
  57. package/dist/admin/federation.js.map +1 -1
  58. package/dist/admin/formatting.d.ts +20 -0
  59. package/dist/admin/formatting.d.ts.map +1 -0
  60. package/dist/admin/formatting.js +72 -0
  61. package/dist/admin/formatting.js.map +1 -0
  62. package/dist/admin/headers.d.ts +65 -0
  63. package/dist/admin/headers.d.ts.map +1 -0
  64. package/dist/admin/headers.js +104 -0
  65. package/dist/admin/headers.js.map +1 -0
  66. package/dist/admin/index.d.ts +38 -12
  67. package/dist/admin/index.d.ts.map +1 -1
  68. package/dist/admin/index.js +25 -7
  69. package/dist/admin/index.js.map +1 -1
  70. package/dist/admin/media.d.ts +168 -0
  71. package/dist/admin/media.d.ts.map +1 -0
  72. package/dist/admin/media.js +295 -0
  73. package/dist/admin/media.js.map +1 -0
  74. package/dist/admin/menu.d.ts +79 -0
  75. package/dist/admin/menu.d.ts.map +1 -0
  76. package/dist/admin/menu.js +126 -0
  77. package/dist/admin/menu.js.map +1 -0
  78. package/dist/admin/messages.d.ts +80 -0
  79. package/dist/admin/messages.d.ts.map +1 -0
  80. package/dist/admin/messages.js +152 -0
  81. package/dist/admin/messages.js.map +1 -0
  82. package/dist/admin/preview.d.ts.map +1 -1
  83. package/dist/admin/preview.js +31 -7
  84. package/dist/admin/preview.js.map +1 -1
  85. package/dist/admin/recovery.d.ts +92 -0
  86. package/dist/admin/recovery.d.ts.map +1 -0
  87. package/dist/admin/recovery.js +229 -0
  88. package/dist/admin/recovery.js.map +1 -0
  89. package/dist/admin/routes.d.ts +0 -20
  90. package/dist/admin/routes.d.ts.map +1 -1
  91. package/dist/admin/routes.js +155 -105
  92. package/dist/admin/routes.js.map +1 -1
  93. package/dist/admin/settings-discussion.d.ts +37 -0
  94. package/dist/admin/settings-discussion.d.ts.map +1 -0
  95. package/dist/admin/settings-discussion.js +117 -0
  96. package/dist/admin/settings-discussion.js.map +1 -0
  97. package/dist/admin/settings-email.d.ts +54 -0
  98. package/dist/admin/settings-email.d.ts.map +1 -0
  99. package/dist/admin/settings-email.js +189 -0
  100. package/dist/admin/settings-email.js.map +1 -0
  101. package/dist/admin/settings-federation.d.ts +39 -0
  102. package/dist/admin/settings-federation.d.ts.map +1 -0
  103. package/dist/admin/settings-federation.js +103 -0
  104. package/dist/admin/settings-federation.js.map +1 -0
  105. package/dist/admin/settings-general.d.ts +12 -0
  106. package/dist/admin/settings-general.d.ts.map +1 -0
  107. package/dist/admin/settings-general.js +48 -0
  108. package/dist/admin/settings-general.js.map +1 -0
  109. package/dist/admin/settings-page.d.ts +102 -0
  110. package/dist/admin/settings-page.d.ts.map +1 -0
  111. package/dist/admin/settings-page.js +126 -0
  112. package/dist/admin/settings-page.js.map +1 -0
  113. package/dist/admin/settings-pages.d.ts +19 -0
  114. package/dist/admin/settings-pages.d.ts.map +1 -0
  115. package/dist/admin/settings-pages.js +33 -0
  116. package/dist/admin/settings-pages.js.map +1 -0
  117. package/dist/admin/settings-permalinks.d.ts +16 -0
  118. package/dist/admin/settings-permalinks.d.ts.map +1 -0
  119. package/dist/admin/settings-permalinks.js +32 -0
  120. package/dist/admin/settings-permalinks.js.map +1 -0
  121. package/dist/admin/settings-reading.d.ts +33 -0
  122. package/dist/admin/settings-reading.d.ts.map +1 -0
  123. package/dist/admin/settings-reading.js +48 -0
  124. package/dist/admin/settings-reading.js.map +1 -0
  125. package/dist/admin/settings.d.ts +325 -96
  126. package/dist/admin/settings.d.ts.map +1 -1
  127. package/dist/admin/settings.js +650 -308
  128. package/dist/admin/settings.js.map +1 -1
  129. package/dist/admin/store.d.ts +606 -152
  130. package/dist/admin/store.d.ts.map +1 -1
  131. package/dist/admin/store.js +863 -268
  132. package/dist/admin/store.js.map +1 -1
  133. package/dist/admin/taxonomy.d.ts +114 -0
  134. package/dist/admin/taxonomy.d.ts.map +1 -0
  135. package/dist/admin/taxonomy.js +289 -0
  136. package/dist/admin/taxonomy.js.map +1 -0
  137. package/dist/admin/templates.d.ts +44 -14
  138. package/dist/admin/templates.d.ts.map +1 -1
  139. package/dist/admin/templates.js +44 -14
  140. package/dist/admin/templates.js.map +1 -1
  141. package/dist/admin/throttle.d.ts +84 -0
  142. package/dist/admin/throttle.d.ts.map +1 -0
  143. package/dist/admin/throttle.js +143 -0
  144. package/dist/admin/throttle.js.map +1 -0
  145. package/dist/admin/uploads.d.ts +28 -2
  146. package/dist/admin/uploads.d.ts.map +1 -1
  147. package/dist/admin/uploads.js +43 -4
  148. package/dist/admin/uploads.js.map +1 -1
  149. package/dist/admin/users.d.ts +100 -13
  150. package/dist/admin/users.d.ts.map +1 -1
  151. package/dist/admin/users.js +412 -39
  152. package/dist/admin/users.js.map +1 -1
  153. package/dist/cache.d.ts +141 -0
  154. package/dist/cache.d.ts.map +1 -0
  155. package/dist/cache.js +207 -0
  156. package/dist/cache.js.map +1 -0
  157. package/dist/cli.d.ts +14 -2
  158. package/dist/cli.d.ts.map +1 -1
  159. package/dist/cli.js +424 -21
  160. package/dist/cli.js.map +1 -1
  161. package/dist/comments/akismet.d.ts +130 -0
  162. package/dist/comments/akismet.d.ts.map +1 -0
  163. package/dist/comments/akismet.js +274 -0
  164. package/dist/comments/akismet.js.map +1 -0
  165. package/dist/comments/conversation.d.ts +29 -0
  166. package/dist/comments/conversation.d.ts.map +1 -0
  167. package/dist/comments/conversation.js +60 -0
  168. package/dist/comments/conversation.js.map +1 -0
  169. package/dist/comments/form.d.ts +75 -0
  170. package/dist/comments/form.d.ts.map +1 -0
  171. package/dist/comments/form.js +64 -0
  172. package/dist/comments/form.js.map +1 -0
  173. package/dist/comments/index.d.ts +15 -0
  174. package/dist/comments/index.d.ts.map +1 -0
  175. package/dist/comments/index.js +9 -0
  176. package/dist/comments/index.js.map +1 -0
  177. package/dist/comments/markdown.d.ts +8 -0
  178. package/dist/comments/markdown.d.ts.map +1 -0
  179. package/dist/comments/markdown.js +85 -0
  180. package/dist/comments/markdown.js.map +1 -0
  181. package/dist/comments/moderate.d.ts +71 -0
  182. package/dist/comments/moderate.d.ts.map +1 -0
  183. package/dist/comments/moderate.js +88 -0
  184. package/dist/comments/moderate.js.map +1 -0
  185. package/dist/comments/policy.d.ts +57 -0
  186. package/dist/comments/policy.d.ts.map +1 -0
  187. package/dist/comments/policy.js +80 -0
  188. package/dist/comments/policy.js.map +1 -0
  189. package/dist/comments/records.d.ts +266 -0
  190. package/dist/comments/records.d.ts.map +1 -0
  191. package/dist/comments/records.js +487 -0
  192. package/dist/comments/records.js.map +1 -0
  193. package/dist/comments/routes.d.ts +58 -0
  194. package/dist/comments/routes.d.ts.map +1 -0
  195. package/dist/comments/routes.js +177 -0
  196. package/dist/comments/routes.js.map +1 -0
  197. package/dist/comments/submission.d.ts +263 -0
  198. package/dist/comments/submission.d.ts.map +1 -0
  199. package/dist/comments/submission.js +241 -0
  200. package/dist/comments/submission.js.map +1 -0
  201. package/dist/config.d.ts +190 -5
  202. package/dist/config.d.ts.map +1 -1
  203. package/dist/config.js +118 -6
  204. package/dist/config.js.map +1 -1
  205. package/dist/contact/delivery.d.ts +60 -0
  206. package/dist/contact/delivery.d.ts.map +1 -0
  207. package/dist/contact/delivery.js +87 -0
  208. package/dist/contact/delivery.js.map +1 -0
  209. package/dist/contact/form.d.ts +130 -0
  210. package/dist/contact/form.d.ts.map +1 -0
  211. package/dist/contact/form.js +163 -0
  212. package/dist/contact/form.js.map +1 -0
  213. package/dist/contact/index.d.ts +17 -0
  214. package/dist/contact/index.d.ts.map +1 -0
  215. package/dist/contact/index.js +13 -0
  216. package/dist/contact/index.js.map +1 -0
  217. package/dist/contact/records.d.ts +124 -0
  218. package/dist/contact/records.d.ts.map +1 -0
  219. package/dist/contact/records.js +218 -0
  220. package/dist/contact/records.js.map +1 -0
  221. package/dist/contact/routes.d.ts +17 -0
  222. package/dist/contact/routes.d.ts.map +1 -0
  223. package/dist/contact/routes.js +127 -0
  224. package/dist/contact/routes.js.map +1 -0
  225. package/dist/contact/submission.d.ts +103 -0
  226. package/dist/contact/submission.d.ts.map +1 -0
  227. package/dist/contact/submission.js +166 -0
  228. package/dist/contact/submission.js.map +1 -0
  229. package/dist/content/document.d.ts +7 -2
  230. package/dist/content/document.d.ts.map +1 -1
  231. package/dist/content/document.js +1 -0
  232. package/dist/content/document.js.map +1 -1
  233. package/dist/content/index.d.ts +7 -2
  234. package/dist/content/index.d.ts.map +1 -1
  235. package/dist/content/index.js +4 -1
  236. package/dist/content/index.js.map +1 -1
  237. package/dist/content/markdown.d.ts.map +1 -1
  238. package/dist/content/markdown.js +24 -2
  239. package/dist/content/markdown.js.map +1 -1
  240. package/dist/content/parser.d.ts.map +1 -1
  241. package/dist/content/parser.js +11 -4
  242. package/dist/content/parser.js.map +1 -1
  243. package/dist/content/save.d.ts +5 -0
  244. package/dist/content/save.d.ts.map +1 -1
  245. package/dist/content/save.js +44 -1
  246. package/dist/content/save.js.map +1 -1
  247. package/dist/content/schedule.d.ts +125 -0
  248. package/dist/content/schedule.d.ts.map +1 -0
  249. package/dist/content/schedule.js +207 -0
  250. package/dist/content/schedule.js.map +1 -0
  251. package/dist/content/search.d.ts +64 -0
  252. package/dist/content/search.d.ts.map +1 -0
  253. package/dist/content/search.js +136 -0
  254. package/dist/content/search.js.map +1 -0
  255. package/dist/content/store.d.ts +202 -7
  256. package/dist/content/store.d.ts.map +1 -1
  257. package/dist/content/store.js +374 -67
  258. package/dist/content/store.js.map +1 -1
  259. package/dist/content/sync.d.ts +7 -1
  260. package/dist/content/sync.d.ts.map +1 -1
  261. package/dist/content/sync.js +18 -10
  262. package/dist/content/sync.js.map +1 -1
  263. package/dist/content/time.d.ts +56 -0
  264. package/dist/content/time.d.ts.map +1 -0
  265. package/dist/content/time.js +141 -0
  266. package/dist/content/time.js.map +1 -0
  267. package/dist/content/writer.d.ts.map +1 -1
  268. package/dist/content/writer.js +3 -0
  269. package/dist/content/writer.js.map +1 -1
  270. package/dist/env.d.ts +58 -4
  271. package/dist/env.d.ts.map +1 -1
  272. package/dist/federation/actor.d.ts +95 -41
  273. package/dist/federation/actor.d.ts.map +1 -1
  274. package/dist/federation/actor.js +180 -53
  275. package/dist/federation/actor.js.map +1 -1
  276. package/dist/federation/article.d.ts +44 -17
  277. package/dist/federation/article.d.ts.map +1 -1
  278. package/dist/federation/article.js +98 -46
  279. package/dist/federation/article.js.map +1 -1
  280. package/dist/federation/delivery.d.ts +63 -15
  281. package/dist/federation/delivery.d.ts.map +1 -1
  282. package/dist/federation/delivery.js +154 -80
  283. package/dist/federation/delivery.js.map +1 -1
  284. package/dist/federation/federation.d.ts +22 -17
  285. package/dist/federation/federation.d.ts.map +1 -1
  286. package/dist/federation/federation.js +98 -77
  287. package/dist/federation/federation.js.map +1 -1
  288. package/dist/federation/followers.d.ts +3 -2
  289. package/dist/federation/followers.d.ts.map +1 -1
  290. package/dist/federation/followers.js +6 -5
  291. package/dist/federation/followers.js.map +1 -1
  292. package/dist/federation/import-wordpress.d.ts +128 -0
  293. package/dist/federation/import-wordpress.d.ts.map +1 -0
  294. package/dist/federation/import-wordpress.js +426 -0
  295. package/dist/federation/import-wordpress.js.map +1 -0
  296. package/dist/federation/inbox.d.ts +36 -13
  297. package/dist/federation/inbox.d.ts.map +1 -1
  298. package/dist/federation/inbox.js +120 -49
  299. package/dist/federation/inbox.js.map +1 -1
  300. package/dist/federation/index.d.ts +22 -10
  301. package/dist/federation/index.d.ts.map +1 -1
  302. package/dist/federation/index.js +13 -8
  303. package/dist/federation/index.js.map +1 -1
  304. package/dist/federation/keys.d.ts +98 -20
  305. package/dist/federation/keys.d.ts.map +1 -1
  306. package/dist/federation/keys.js +269 -39
  307. package/dist/federation/keys.js.map +1 -1
  308. package/dist/federation/mount.d.ts +42 -10
  309. package/dist/federation/mount.d.ts.map +1 -1
  310. package/dist/federation/mount.js +266 -26
  311. package/dist/federation/mount.js.map +1 -1
  312. package/dist/federation/paths.d.ts +23 -35
  313. package/dist/federation/paths.d.ts.map +1 -1
  314. package/dist/federation/paths.js +26 -39
  315. package/dist/federation/paths.js.map +1 -1
  316. package/dist/federation/records.d.ts +223 -0
  317. package/dist/federation/records.d.ts.map +1 -0
  318. package/dist/federation/records.js +506 -0
  319. package/dist/federation/records.js.map +1 -0
  320. package/dist/federation/relays.d.ts +114 -0
  321. package/dist/federation/relays.d.ts.map +1 -0
  322. package/dist/federation/relays.js +290 -0
  323. package/dist/federation/relays.js.map +1 -0
  324. package/dist/federation/replies.d.ts +80 -0
  325. package/dist/federation/replies.d.ts.map +1 -0
  326. package/dist/federation/replies.js +166 -0
  327. package/dist/federation/replies.js.map +1 -0
  328. package/dist/federation/wordpress.d.ts +131 -0
  329. package/dist/federation/wordpress.d.ts.map +1 -0
  330. package/dist/federation/wordpress.js +341 -0
  331. package/dist/federation/wordpress.js.map +1 -0
  332. package/dist/files/atomic.d.ts +103 -0
  333. package/dist/files/atomic.d.ts.map +1 -0
  334. package/dist/files/atomic.js +150 -0
  335. package/dist/files/atomic.js.map +1 -0
  336. package/dist/files/index.d.ts +3 -0
  337. package/dist/files/index.d.ts.map +1 -0
  338. package/dist/files/index.js +2 -0
  339. package/dist/files/index.js.map +1 -0
  340. package/dist/forms/protection.d.ts +85 -0
  341. package/dist/forms/protection.d.ts.map +1 -0
  342. package/dist/forms/protection.js +116 -0
  343. package/dist/forms/protection.js.map +1 -0
  344. package/dist/images/icons.d.ts +59 -0
  345. package/dist/images/icons.d.ts.map +1 -0
  346. package/dist/images/icons.js +131 -0
  347. package/dist/images/icons.js.map +1 -0
  348. package/dist/images/index.d.ts +7 -0
  349. package/dist/images/index.d.ts.map +1 -0
  350. package/dist/images/index.js +4 -0
  351. package/dist/images/index.js.map +1 -0
  352. package/dist/images/markup.d.ts +47 -0
  353. package/dist/images/markup.d.ts.map +1 -0
  354. package/dist/images/markup.js +175 -0
  355. package/dist/images/markup.js.map +1 -0
  356. package/dist/images/paths.d.ts +34 -0
  357. package/dist/images/paths.d.ts.map +1 -0
  358. package/dist/images/paths.js +41 -0
  359. package/dist/images/paths.js.map +1 -0
  360. package/dist/images/variants.d.ts +104 -0
  361. package/dist/images/variants.d.ts.map +1 -0
  362. package/dist/images/variants.js +320 -0
  363. package/dist/images/variants.js.map +1 -0
  364. package/dist/index.d.ts +123 -19
  365. package/dist/index.d.ts.map +1 -1
  366. package/dist/index.js +327 -25
  367. package/dist/index.js.map +1 -1
  368. package/dist/init.d.ts +18 -0
  369. package/dist/init.d.ts.map +1 -1
  370. package/dist/init.js +34 -3
  371. package/dist/init.js.map +1 -1
  372. package/dist/mail/brevo.d.ts +35 -0
  373. package/dist/mail/brevo.d.ts.map +1 -0
  374. package/dist/mail/brevo.js +85 -0
  375. package/dist/mail/brevo.js.map +1 -0
  376. package/dist/mail/credentials.d.ts +62 -0
  377. package/dist/mail/credentials.d.ts.map +1 -0
  378. package/dist/mail/credentials.js +86 -0
  379. package/dist/mail/credentials.js.map +1 -0
  380. package/dist/mail/index.d.ts +15 -0
  381. package/dist/mail/index.d.ts.map +1 -0
  382. package/dist/mail/index.js +8 -0
  383. package/dist/mail/index.js.map +1 -0
  384. package/dist/mail/memory.d.ts +35 -0
  385. package/dist/mail/memory.d.ts.map +1 -0
  386. package/dist/mail/memory.js +29 -0
  387. package/dist/mail/memory.js.map +1 -0
  388. package/dist/mail/provider.d.ts +80 -0
  389. package/dist/mail/provider.d.ts.map +1 -0
  390. package/dist/mail/provider.js +23 -0
  391. package/dist/mail/provider.js.map +1 -0
  392. package/dist/mail/service.d.ts +156 -0
  393. package/dist/mail/service.d.ts.map +1 -0
  394. package/dist/mail/service.js +265 -0
  395. package/dist/mail/service.js.map +1 -0
  396. package/dist/mail/smtp.d.ts +39 -0
  397. package/dist/mail/smtp.d.ts.map +1 -0
  398. package/dist/mail/smtp.js +58 -0
  399. package/dist/mail/smtp.js.map +1 -0
  400. package/dist/mail/templates.d.ts +91 -0
  401. package/dist/mail/templates.d.ts.map +1 -0
  402. package/dist/mail/templates.js +69 -0
  403. package/dist/mail/templates.js.map +1 -0
  404. package/dist/notifications/comments.d.ts +66 -0
  405. package/dist/notifications/comments.d.ts.map +1 -0
  406. package/dist/notifications/comments.js +151 -0
  407. package/dist/notifications/comments.js.map +1 -0
  408. package/dist/notifications/digest.d.ts +135 -0
  409. package/dist/notifications/digest.d.ts.map +1 -0
  410. package/dist/notifications/digest.js +287 -0
  411. package/dist/notifications/digest.js.map +1 -0
  412. package/dist/notifications/index.d.ts +13 -0
  413. package/dist/notifications/index.d.ts.map +1 -0
  414. package/dist/notifications/index.js +8 -0
  415. package/dist/notifications/index.js.map +1 -0
  416. package/dist/notifications/links.d.ts +60 -0
  417. package/dist/notifications/links.d.ts.map +1 -0
  418. package/dist/notifications/links.js +63 -0
  419. package/dist/notifications/links.js.map +1 -0
  420. package/dist/notifications/optouts.d.ts +48 -0
  421. package/dist/notifications/optouts.d.ts.map +1 -0
  422. package/dist/notifications/optouts.js +93 -0
  423. package/dist/notifications/optouts.js.map +1 -0
  424. package/dist/notifications/preferences.d.ts +158 -0
  425. package/dist/notifications/preferences.d.ts.map +1 -0
  426. package/dist/notifications/preferences.js +195 -0
  427. package/dist/notifications/preferences.js.map +1 -0
  428. package/dist/notifications/routes.d.ts +28 -0
  429. package/dist/notifications/routes.d.ts.map +1 -0
  430. package/dist/notifications/routes.js +184 -0
  431. package/dist/notifications/routes.js.map +1 -0
  432. package/dist/notifications/tokens.d.ts +60 -0
  433. package/dist/notifications/tokens.d.ts.map +1 -0
  434. package/dist/notifications/tokens.js +125 -0
  435. package/dist/notifications/tokens.js.map +1 -0
  436. package/dist/notify.d.ts +84 -0
  437. package/dist/notify.d.ts.map +1 -0
  438. package/dist/notify.js +149 -0
  439. package/dist/notify.js.map +1 -0
  440. package/dist/web/archive.d.ts +49 -0
  441. package/dist/web/archive.d.ts.map +1 -0
  442. package/dist/web/archive.js +59 -0
  443. package/dist/web/archive.js.map +1 -0
  444. package/dist/web/assets.d.ts +6 -5
  445. package/dist/web/assets.d.ts.map +1 -1
  446. package/dist/web/assets.js +5 -7
  447. package/dist/web/assets.js.map +1 -1
  448. package/dist/web/authors.d.ts +143 -0
  449. package/dist/web/authors.d.ts.map +1 -0
  450. package/dist/web/authors.js +178 -0
  451. package/dist/web/authors.js.map +1 -0
  452. package/dist/web/comments.d.ts +60 -0
  453. package/dist/web/comments.d.ts.map +1 -0
  454. package/dist/web/comments.js +207 -0
  455. package/dist/web/comments.js.map +1 -0
  456. package/dist/web/context.d.ts +162 -28
  457. package/dist/web/context.d.ts.map +1 -1
  458. package/dist/web/context.js +123 -26
  459. package/dist/web/context.js.map +1 -1
  460. package/dist/web/conversation.d.ts +209 -0
  461. package/dist/web/conversation.d.ts.map +1 -0
  462. package/dist/web/conversation.js +557 -0
  463. package/dist/web/conversation.js.map +1 -0
  464. package/dist/web/documents.d.ts +36 -6
  465. package/dist/web/documents.d.ts.map +1 -1
  466. package/dist/web/documents.js +52 -10
  467. package/dist/web/documents.js.map +1 -1
  468. package/dist/web/feed-atom.d.ts +22 -0
  469. package/dist/web/feed-atom.d.ts.map +1 -0
  470. package/dist/web/feed-atom.js +83 -0
  471. package/dist/web/feed-atom.js.map +1 -0
  472. package/dist/web/feed-item.d.ts +145 -0
  473. package/dist/web/feed-item.d.ts.map +1 -0
  474. package/dist/web/feed-item.js +120 -0
  475. package/dist/web/feed-item.js.map +1 -0
  476. package/dist/web/feed-json.d.ts +79 -0
  477. package/dist/web/feed-json.d.ts.map +1 -0
  478. package/dist/web/feed-json.js +53 -0
  479. package/dist/web/feed-json.js.map +1 -0
  480. package/dist/web/feed-rss.d.ts +26 -0
  481. package/dist/web/feed-rss.d.ts.map +1 -0
  482. package/dist/web/feed-rss.js +203 -0
  483. package/dist/web/feed-rss.js.map +1 -0
  484. package/dist/web/feed-source.d.ts +244 -0
  485. package/dist/web/feed-source.d.ts.map +1 -0
  486. package/dist/web/feed-source.js +201 -0
  487. package/dist/web/feed-source.js.map +1 -0
  488. package/dist/web/feed-xml.d.ts +63 -0
  489. package/dist/web/feed-xml.d.ts.map +1 -0
  490. package/dist/web/feed-xml.js +116 -0
  491. package/dist/web/feed-xml.js.map +1 -0
  492. package/dist/web/feeds.d.ts +31 -96
  493. package/dist/web/feeds.d.ts.map +1 -1
  494. package/dist/web/feeds.js +94 -198
  495. package/dist/web/feeds.js.map +1 -1
  496. package/dist/web/health.d.ts +31 -0
  497. package/dist/web/health.d.ts.map +1 -0
  498. package/dist/web/health.js +44 -0
  499. package/dist/web/health.js.map +1 -0
  500. package/dist/web/index.d.ts +30 -10
  501. package/dist/web/index.d.ts.map +1 -1
  502. package/dist/web/index.js +18 -7
  503. package/dist/web/index.js.map +1 -1
  504. package/dist/web/navigation.d.ts +73 -0
  505. package/dist/web/navigation.d.ts.map +1 -0
  506. package/dist/web/navigation.js +110 -0
  507. package/dist/web/navigation.js.map +1 -0
  508. package/dist/web/negotiate.d.ts +9 -0
  509. package/dist/web/negotiate.d.ts.map +1 -1
  510. package/dist/web/negotiate.js +6 -1
  511. package/dist/web/negotiate.js.map +1 -1
  512. package/dist/web/recent.d.ts +43 -0
  513. package/dist/web/recent.d.ts.map +1 -0
  514. package/dist/web/recent.js +37 -0
  515. package/dist/web/recent.js.map +1 -0
  516. package/dist/web/render.d.ts +197 -9
  517. package/dist/web/render.d.ts.map +1 -1
  518. package/dist/web/render.js +334 -17
  519. package/dist/web/render.js.map +1 -1
  520. package/dist/web/routes.d.ts +25 -8
  521. package/dist/web/routes.d.ts.map +1 -1
  522. package/dist/web/routes.js +845 -93
  523. package/dist/web/routes.js.map +1 -1
  524. package/dist/web/sanitize.d.ts +19 -0
  525. package/dist/web/sanitize.d.ts.map +1 -0
  526. package/dist/web/sanitize.js +272 -0
  527. package/dist/web/sanitize.js.map +1 -0
  528. package/dist/web/search.d.ts +79 -0
  529. package/dist/web/search.d.ts.map +1 -0
  530. package/dist/web/search.js +94 -0
  531. package/dist/web/search.js.map +1 -0
  532. package/dist/web/sitemap.d.ts +120 -0
  533. package/dist/web/sitemap.d.ts.map +1 -0
  534. package/dist/web/sitemap.js +199 -0
  535. package/dist/web/sitemap.js.map +1 -0
  536. package/dist/web/taxonomy.d.ts +152 -0
  537. package/dist/web/taxonomy.d.ts.map +1 -0
  538. package/dist/web/taxonomy.js +237 -0
  539. package/dist/web/taxonomy.js.map +1 -0
  540. package/dist/web/templates.d.ts +54 -16
  541. package/dist/web/templates.d.ts.map +1 -1
  542. package/dist/web/templates.js +109 -28
  543. package/dist/web/templates.js.map +1 -1
  544. package/dist/web/themes.d.ts +205 -0
  545. package/dist/web/themes.d.ts.map +1 -0
  546. package/dist/web/themes.js +277 -0
  547. package/dist/web/themes.js.map +1 -0
  548. package/dist/webmention/discovery.d.ts +51 -0
  549. package/dist/webmention/discovery.d.ts.map +1 -0
  550. package/dist/webmention/discovery.js +176 -0
  551. package/dist/webmention/discovery.js.map +1 -0
  552. package/dist/webmention/html.d.ts +71 -0
  553. package/dist/webmention/html.d.ts.map +1 -0
  554. package/dist/webmention/html.js +285 -0
  555. package/dist/webmention/html.js.map +1 -0
  556. package/dist/webmention/index.d.ts +12 -0
  557. package/dist/webmention/index.d.ts.map +1 -0
  558. package/dist/webmention/index.js +8 -0
  559. package/dist/webmention/index.js.map +1 -0
  560. package/dist/webmention/links.d.ts +18 -0
  561. package/dist/webmention/links.d.ts.map +1 -0
  562. package/dist/webmention/links.js +64 -0
  563. package/dist/webmention/links.js.map +1 -0
  564. package/dist/webmention/microformats.d.ts +93 -0
  565. package/dist/webmention/microformats.d.ts.map +1 -0
  566. package/dist/webmention/microformats.js +376 -0
  567. package/dist/webmention/microformats.js.map +1 -0
  568. package/dist/webmention/receive.d.ts +141 -0
  569. package/dist/webmention/receive.d.ts.map +1 -0
  570. package/dist/webmention/receive.js +264 -0
  571. package/dist/webmention/receive.js.map +1 -0
  572. package/dist/webmention/routes.d.ts +37 -0
  573. package/dist/webmention/routes.d.ts.map +1 -0
  574. package/dist/webmention/routes.js +75 -0
  575. package/dist/webmention/routes.js.map +1 -0
  576. package/dist/webmention/service.d.ts +94 -0
  577. package/dist/webmention/service.d.ts.map +1 -0
  578. package/dist/webmention/service.js +207 -0
  579. package/dist/webmention/service.js.map +1 -0
  580. package/package.json +11 -6
  581. package/templates/site/content/_data/site.json +1 -0
  582. package/templates/site/content/posts/2026-01-01-hello-world.md +5 -3
  583. package/templates/site/geekity.config.ts +11 -1
  584. package/templates/site/tsconfig.json +1 -1
  585. package/themes/default/README.md +1096 -50
  586. package/themes/default/layouts/404.njk +2 -3
  587. package/themes/default/layouts/author.njk +37 -0
  588. package/themes/default/layouts/base.njk +172 -31
  589. package/themes/default/layouts/category.njk +27 -0
  590. package/themes/default/layouts/front-page.njk +57 -0
  591. package/themes/default/layouts/home.njk +17 -1
  592. package/themes/default/layouts/page.njk +57 -5
  593. package/themes/default/layouts/post.njk +78 -19
  594. package/themes/default/layouts/search.njk +57 -0
  595. package/themes/default/layouts/tag.njk +3 -6
  596. package/themes/default/mail/comment-digest.html.njk +37 -0
  597. package/themes/default/mail/comment-digest.subject.njk +3 -0
  598. package/themes/default/mail/comment-digest.txt.njk +40 -0
  599. package/themes/default/mail/comment-pending.html.njk +27 -0
  600. package/themes/default/mail/comment-pending.subject.njk +2 -0
  601. package/themes/default/mail/comment-pending.txt.njk +24 -0
  602. package/themes/default/mail/comment-reply.html.njk +21 -0
  603. package/themes/default/mail/comment-reply.subject.njk +2 -0
  604. package/themes/default/mail/comment-reply.txt.njk +22 -0
  605. package/themes/default/mail/contact-message.html.njk +24 -0
  606. package/themes/default/mail/contact-message.subject.njk +5 -0
  607. package/themes/default/mail/contact-message.txt.njk +20 -0
  608. package/themes/default/mail/password-changed.html.njk +18 -0
  609. package/themes/default/mail/password-changed.subject.njk +2 -0
  610. package/themes/default/mail/password-changed.txt.njk +17 -0
  611. package/themes/default/mail/password-reset.html.njk +22 -0
  612. package/themes/default/mail/password-reset.subject.njk +2 -0
  613. package/themes/default/mail/password-reset.txt.njk +18 -0
  614. package/themes/default/mail/test.html.njk +14 -0
  615. package/themes/default/mail/test.subject.njk +2 -0
  616. package/themes/default/mail/test.txt.njk +12 -0
  617. package/themes/default/partials/archive.njk +27 -0
  618. package/themes/default/partials/bio.njk +77 -0
  619. package/themes/default/partials/comment-form.njk +109 -0
  620. package/themes/default/partials/contact-form.njk +88 -0
  621. package/themes/default/partials/conversation.njk +139 -0
  622. package/themes/default/partials/feeds.njk +26 -0
  623. package/themes/default/partials/jsonld.njk +120 -0
  624. package/themes/default/partials/pagination.njk +12 -6
  625. package/themes/default/partials/post-list.njk +51 -18
  626. package/themes/default/partials/search-form.njk +17 -0
  627. package/themes/default/partials/tags.njk +26 -5
  628. package/themes/default/static/highlight.js +4 -0
  629. package/themes/default/static/style.css +1119 -194
  630. package/themes/default/theme.json +5 -0
  631. package/admin/layouts/document-editor.njk +0 -167
  632. package/admin/layouts/federation.njk +0 -145
  633. package/admin/layouts/login.njk +0 -23
  634. package/admin/layouts/settings.njk +0 -116
  635. package/admin/layouts/setup.njk +0 -27
  636. package/admin/layouts/users.njk +0 -91
  637. /package/admin/{layouts/_flash.njk → components/flash.njk} +0 -0
package/dist/init.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAW,aAAa,CACpD,IAAI,GAAG,CAAC,oBAAoB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAC/C,CAAC;AAEF;;;;GAIG;AACH,MAAM,QAAQ,GAAgC,IAAI,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;AA0BrF,gEAAgE;AAChE,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAG1B,SAAS;IAFZ,IAAI,GAAG,wBAAwB,CAAC;IAElD,YAAqB,SAAiB;QACpC,KAAK,CACH,GAAG,SAAS,2HAA2H,CACxI,CAAC;yBAHiB,SAAS;IAI9B,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAwB;IACrD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAEvD,IAAI,CAAC,CAAC,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAAE,MAAM,IAAI,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAEtF,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,EAAE,CAAC,iBAAiB,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5D,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;QACtC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC;QAC5B,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC9C,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,WAAW,EAAE,CAAC,OAAO;KAClD,CAAC,CAAC;IACH,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EACpC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,EAC7C,MAAM,CACP,CAAC;IACF,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,EAAE,YAAY,EAAE,EAAE,MAAM,CAAC,CAAC;IAErF,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;AACjE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO;QACL,yEAAyE;QACzE,EAAE;QACF,sEAAsE;QACtE,oBAAoB;QACpB,cAAc;QACd,iBAAiB;QACjB,EAAE;QACF,2EAA2E;QAC3E,4EAA4E;QAC5E,sBAAsB;QACtB,oBAAoB;QACpB,4BAA4B;QAC5B,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,OAA0C;IACrE,MAAM,SAAS,GAAG,WAAW,EAAE,CAAC,eAAe,IAAI,EAAE,CAAC;IAEtD,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,GAAG,EAAE,qBAAqB;YAC1B,KAAK,EAAE,eAAe;YACtB,IAAI,EAAE,cAAc;SACrB;QACD,YAAY,EAAE;YACZ,cAAc,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE;SACtC;QACD,eAAe,EAAE;YACf,aAAa,EAAE,SAAS,CAAC,aAAa,CAAC,IAAI,SAAS;YACpD,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS;YAClC,UAAU,EAAE,SAAS,CAAC,YAAY,CAAC,IAAI,QAAQ;SAChD;KACF,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,KAAK,UAAU,gBAAgB,CAAC,SAAiB;IAC/C,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GAAI,KAAmC,EAAE,IAAI,CAAC;QACxD,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,WAAW;IAIzB,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,OAAO,OAAO,CAAC,iBAAiB,CAG/B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { MailProvider } from './provider.ts';
2
+ /**
3
+ * Brevo's transactional API, as one {@link MailProvider}.
4
+ *
5
+ * The HTTP half of sending: one POST with a JSON body and an `api-key` header,
6
+ * no connection to keep open and no TLS negotiation to get wrong, which is why
7
+ * it is the provider a site on a host that blocks port 587 can still use.
8
+ *
9
+ * Nothing here reads a file or a setting. The key is handed in, because the
10
+ * service reads `data/mail.json` on every send and builds the provider from
11
+ * what it found — so a key pasted into the settings screen sends the next
12
+ * message without a restart.
13
+ */
14
+ /** The endpoint Brevo documents for a transactional message. */
15
+ export declare const BREVO_ENDPOINT = "https://api.brevo.com/v3/smtp/email";
16
+ /**
17
+ * How long Brevo has to answer before the call is abandoned.
18
+ *
19
+ * Sending happens off the request that caused it, so this is not somebody
20
+ * waiting on a page — but an abandoned call is a failure the service can
21
+ * retry, and a hung one is a queue that never moves again.
22
+ */
23
+ export declare const BREVO_TIMEOUT_MS = 15000;
24
+ /** What {@link createBrevoProvider} needs. */
25
+ export interface BrevoProviderOptions {
26
+ /** The account's API key, `xkeysib-…`. */
27
+ apiKey: string;
28
+ /** The HTTP client. Defaults to the global `fetch`; a test hands in its own. */
29
+ fetch?: typeof fetch | undefined;
30
+ /** How long Brevo has to answer. */
31
+ timeoutMs?: number | undefined;
32
+ }
33
+ /** A provider that hands each message to Brevo. */
34
+ export declare function createBrevoProvider(options: BrevoProviderOptions): MailProvider;
35
+ //# sourceMappingURL=brevo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brevo.d.ts","sourceRoot":"","sources":["../../src/mail/brevo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA6B,YAAY,EAAgB,MAAM,eAAe,CAAC;AAE3F;;;;;;;;;;;GAWG;AAEH,gEAAgE;AAChE,eAAO,MAAM,cAAc,wCAAwC,CAAC;AAEpE;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,QAAS,CAAC;AAEvC,8CAA8C;AAC9C,MAAM,WAAW,oBAAoB;IACnC,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,KAAK,CAAC,EAAE,OAAO,KAAK,GAAG,SAAS,CAAC;IACjC,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,mDAAmD;AACnD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,YAAY,CA6B/E"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Brevo's transactional API, as one {@link MailProvider}.
3
+ *
4
+ * The HTTP half of sending: one POST with a JSON body and an `api-key` header,
5
+ * no connection to keep open and no TLS negotiation to get wrong, which is why
6
+ * it is the provider a site on a host that blocks port 587 can still use.
7
+ *
8
+ * Nothing here reads a file or a setting. The key is handed in, because the
9
+ * service reads `data/mail.json` on every send and builds the provider from
10
+ * what it found — so a key pasted into the settings screen sends the next
11
+ * message without a restart.
12
+ */
13
+ /** The endpoint Brevo documents for a transactional message. */
14
+ export const BREVO_ENDPOINT = 'https://api.brevo.com/v3/smtp/email';
15
+ /**
16
+ * How long Brevo has to answer before the call is abandoned.
17
+ *
18
+ * Sending happens off the request that caused it, so this is not somebody
19
+ * waiting on a page — but an abandoned call is a failure the service can
20
+ * retry, and a hung one is a queue that never moves again.
21
+ */
22
+ export const BREVO_TIMEOUT_MS = 15_000;
23
+ /** A provider that hands each message to Brevo. */
24
+ export function createBrevoProvider(options) {
25
+ const call = options.fetch ?? globalThis.fetch;
26
+ return {
27
+ name: 'brevo',
28
+ async deliver(message) {
29
+ const response = await call(BREVO_ENDPOINT, {
30
+ method: 'POST',
31
+ headers: {
32
+ 'api-key': options.apiKey,
33
+ 'content-type': 'application/json',
34
+ accept: 'application/json',
35
+ },
36
+ body: JSON.stringify(bodyFor(message)),
37
+ signal: AbortSignal.timeout(options.timeoutMs ?? BREVO_TIMEOUT_MS),
38
+ });
39
+ const said = await response.text();
40
+ if (!response.ok) {
41
+ // Brevo's own words, not a summary of them: `sender is missing` is
42
+ // what tells somebody which field of the settings screen to fix, and
43
+ // a status on its own never has.
44
+ throw new Error(`Brevo answered ${String(response.status)}: ${said.trim()}`);
45
+ }
46
+ return { messageId: messageIdOf(said) };
47
+ },
48
+ };
49
+ }
50
+ /** The message as Brevo's `POST /v3/smtp/email` documents it. */
51
+ function bodyFor(message) {
52
+ return {
53
+ sender: recipient(message.from),
54
+ to: message.to.map(recipient),
55
+ ...(message.replyTo === undefined ? {} : { replyTo: recipient(message.replyTo) }),
56
+ subject: message.subject,
57
+ textContent: message.text,
58
+ // Left out rather than sent empty: a message with an empty `htmlContent`
59
+ // is a multipart message whose HTML half is blank, which is worse in a
60
+ // reader than a message that never claimed to have one.
61
+ ...(message.html === undefined || message.html === '' ? {} : { htmlContent: message.html }),
62
+ };
63
+ }
64
+ /** One address as Brevo spells it: `email`, and `name` only when there is one. */
65
+ function recipient(address) {
66
+ return {
67
+ email: address.address,
68
+ ...(address.name === undefined || address.name === '' ? {} : { name: address.name }),
69
+ };
70
+ }
71
+ /** The `messageId` out of an accepted answer, or nothing when it carried none. */
72
+ function messageIdOf(body) {
73
+ let parsed;
74
+ try {
75
+ parsed = JSON.parse(body);
76
+ }
77
+ catch {
78
+ return undefined;
79
+ }
80
+ if (typeof parsed !== 'object' || parsed === null)
81
+ return undefined;
82
+ const id = parsed['messageId'];
83
+ return typeof id === 'string' && id !== '' ? id : undefined;
84
+ }
85
+ //# sourceMappingURL=brevo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brevo.js","sourceRoot":"","sources":["../../src/mail/brevo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * What a site needs to prove it may send: `data/mail.json`.
3
+ *
4
+ * A credential, not a setting, so it lives where the Akismet key and the
5
+ * password hashes live — under `data/` at mode `0600` — and never in
6
+ * `content/_data/site.json`, which is public, in git and published with the
7
+ * site. Which provider is in use, who mail is from and where a reply goes are
8
+ * settings and are in `site.json`; the key and the SMTP password are here.
9
+ *
10
+ * Read on every send, like the Akismet key, so a credential pasted into the
11
+ * settings screen sends the next message and one removed stops sending at
12
+ * once, neither of them needing a restart.
13
+ */
14
+ /** Where the credentials live, under `dataDir`. */
15
+ export declare const MAIL_CREDENTIALS_FILE = "mail.json";
16
+ /** Brevo's half: one API key. */
17
+ export interface BrevoCredential {
18
+ /** The account's API key, `xkeysib-…`. */
19
+ readonly apiKey: string;
20
+ }
21
+ /** SMTP's half: the whole connection, because all of it is a credential. */
22
+ export interface SmtpCredential {
23
+ /** The server's hostname. */
24
+ readonly host: string;
25
+ /** The port: 587 for submission with STARTTLS, 465 for implicit TLS. */
26
+ readonly port: number;
27
+ /** Whether the connection is TLS from the first byte, which is port 465. */
28
+ readonly secure: boolean;
29
+ /** The username. Empty for a server that wants no credentials. */
30
+ readonly user: string;
31
+ /** The password. */
32
+ readonly password: string;
33
+ }
34
+ /**
35
+ * The file's whole contents: at most one entry per provider.
36
+ *
37
+ * Both may be present at once, and that is deliberate — a site trying SMTP
38
+ * after Brevo should be able to switch the `mailProvider` setting back without
39
+ * having to paste a key in again.
40
+ */
41
+ export interface MailCredentials {
42
+ /** Brevo's key, when the site has one. */
43
+ readonly brevo?: BrevoCredential | undefined;
44
+ /** The SMTP connection, when the site has one. */
45
+ readonly smtp?: SmtpCredential | undefined;
46
+ }
47
+ /** Where one site's credential file is. */
48
+ export declare function mailCredentialsPath(dataDir: string): string;
49
+ /**
50
+ * The stored credentials, or an empty object when the site has none.
51
+ *
52
+ * Read tolerantly and synchronously, like every other file this CMS treats as
53
+ * truth: a file that will not parse, or an entry missing the one field that
54
+ * makes it usable, is a site with no mail rather than a site that will not
55
+ * boot.
56
+ */
57
+ export declare function readMailCredentials(dataDir: string): MailCredentials;
58
+ /** Write the credentials, private to the account the site runs as. */
59
+ export declare function writeMailCredentials(dataDir: string, credentials: MailCredentials): Promise<void>;
60
+ /** Forget them, which is how a site stops sending mail entirely. */
61
+ export declare function removeMailCredentials(dataDir: string): Promise<void>;
62
+ //# sourceMappingURL=credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/mail/credentials.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;GAYG;AAEH,mDAAmD;AACnD,eAAO,MAAM,qBAAqB,cAAc,CAAC;AAEjD,iCAAiC;AACjC,MAAM,WAAW,eAAe;IAC9B,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC7B,6BAA6B;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oBAAoB;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,0CAA0C;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IAC7C,kDAAkD;IAClD,QAAQ,CAAC,IAAI,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;CAC5C;AAED,2CAA2C;AAC3C,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAkBpE;AAED,sEAAsE;AACtE,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,eAAe,GAC3B,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,oEAAoE;AACpE,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1E"}
@@ -0,0 +1,86 @@
1
+ import { rm } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { readFileIfPresentSync, writeFileAtomically } from '../files/atomic.js';
4
+ /**
5
+ * What a site needs to prove it may send: `data/mail.json`.
6
+ *
7
+ * A credential, not a setting, so it lives where the Akismet key and the
8
+ * password hashes live — under `data/` at mode `0600` — and never in
9
+ * `content/_data/site.json`, which is public, in git and published with the
10
+ * site. Which provider is in use, who mail is from and where a reply goes are
11
+ * settings and are in `site.json`; the key and the SMTP password are here.
12
+ *
13
+ * Read on every send, like the Akismet key, so a credential pasted into the
14
+ * settings screen sends the next message and one removed stops sending at
15
+ * once, neither of them needing a restart.
16
+ */
17
+ /** Where the credentials live, under `dataDir`. */
18
+ export const MAIL_CREDENTIALS_FILE = 'mail.json';
19
+ /** Where one site's credential file is. */
20
+ export function mailCredentialsPath(dataDir) {
21
+ return path.join(dataDir, MAIL_CREDENTIALS_FILE);
22
+ }
23
+ /**
24
+ * The stored credentials, or an empty object when the site has none.
25
+ *
26
+ * Read tolerantly and synchronously, like every other file this CMS treats as
27
+ * truth: a file that will not parse, or an entry missing the one field that
28
+ * makes it usable, is a site with no mail rather than a site that will not
29
+ * boot.
30
+ */
31
+ export function readMailCredentials(dataDir) {
32
+ const raw = readFileIfPresentSync(mailCredentialsPath(dataDir));
33
+ if (raw === undefined)
34
+ return {};
35
+ let parsed;
36
+ try {
37
+ parsed = JSON.parse(raw);
38
+ }
39
+ catch {
40
+ return {};
41
+ }
42
+ if (typeof parsed !== 'object' || parsed === null)
43
+ return {};
44
+ const file = parsed;
45
+ return {
46
+ ...(brevoIn(file['brevo']) === undefined ? {} : { brevo: brevoIn(file['brevo']) }),
47
+ ...(smtpIn(file['smtp']) === undefined ? {} : { smtp: smtpIn(file['smtp']) }),
48
+ };
49
+ }
50
+ /** Write the credentials, private to the account the site runs as. */
51
+ export async function writeMailCredentials(dataDir, credentials) {
52
+ await writeFileAtomically(mailCredentialsPath(dataDir), `${JSON.stringify(credentials, null, 2)}\n`, { mode: 0o600 });
53
+ }
54
+ /** Forget them, which is how a site stops sending mail entirely. */
55
+ export async function removeMailCredentials(dataDir) {
56
+ await rm(mailCredentialsPath(dataDir), { force: true });
57
+ }
58
+ /** One Brevo entry, or nothing when it carries no key. */
59
+ function brevoIn(value) {
60
+ if (typeof value !== 'object' || value === null)
61
+ return undefined;
62
+ const entry = value;
63
+ const apiKey = typeof entry['apiKey'] === 'string' ? entry['apiKey'].trim() : '';
64
+ return apiKey === '' ? undefined : { apiKey };
65
+ }
66
+ /** One SMTP entry, or nothing when it names no host to connect to. */
67
+ function smtpIn(value) {
68
+ if (typeof value !== 'object' || value === null)
69
+ return undefined;
70
+ const entry = value;
71
+ const host = typeof entry['host'] === 'string' ? entry['host'].trim() : '';
72
+ if (host === '')
73
+ return undefined;
74
+ const port = Number(entry['port']);
75
+ const secure = entry['secure'] === true;
76
+ return {
77
+ host,
78
+ // 465 when the connection is TLS from the first byte, 587 otherwise:
79
+ // the two submission ports, so a file that lost its port still connects.
80
+ port: Number.isInteger(port) && port > 0 && port < 65536 ? port : secure ? 465 : 587,
81
+ secure,
82
+ user: typeof entry['user'] === 'string' ? entry['user'] : '',
83
+ password: typeof entry['password'] === 'string' ? entry['password'] : '',
84
+ };
85
+ }
86
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/mail/credentials.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export { BREVO_ENDPOINT, BREVO_TIMEOUT_MS, createBrevoProvider } from './brevo.ts';
2
+ export type { BrevoProviderOptions } from './brevo.ts';
3
+ export { MAIL_CREDENTIALS_FILE, mailCredentialsPath, readMailCredentials, removeMailCredentials, writeMailCredentials, } from './credentials.ts';
4
+ export type { BrevoCredential, MailCredentials, SmtpCredential } from './credentials.ts';
5
+ export { createMemoryMailProvider } from './memory.ts';
6
+ export type { MemoryMailProvider } from './memory.ts';
7
+ export { MAIL_PROVIDERS } from './provider.ts';
8
+ export type { MailAddress, MailDelivery, MailProvider, MailProviderName, OutgoingMail, } from './provider.ts';
9
+ export { createMailService, DEFAULT_MAIL_ATTEMPTS, defaultMailBackoffMs } from './service.ts';
10
+ export type { CreateMailServiceOptions, MailLogger, MailRecipient, MailResult, MailService, RawMail, TemplateMail, } from './service.ts';
11
+ export { createSmtpProvider, SMTP_TIMEOUT_MS } from './smtp.ts';
12
+ export type { SmtpProviderOptions } from './smtp.ts';
13
+ export { createMailTemplates, mailTemplateFiles } from './templates.ts';
14
+ export type { CreateMailTemplatesOptions, MailTemplateFiles, MailTemplates, RenderedMail, } from './templates.ts';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mail/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACnF,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,YAAY,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAC9F,YAAY,EACV,wBAAwB,EACxB,UAAU,EACV,aAAa,EACb,UAAU,EACV,WAAW,EACX,OAAO,EACP,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAChE,YAAY,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxE,YAAY,EACV,0BAA0B,EAC1B,iBAAiB,EACjB,aAAa,EACb,YAAY,GACb,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,8 @@
1
+ export { BREVO_ENDPOINT, BREVO_TIMEOUT_MS, createBrevoProvider } from './brevo.js';
2
+ export { MAIL_CREDENTIALS_FILE, mailCredentialsPath, readMailCredentials, removeMailCredentials, writeMailCredentials, } from './credentials.js';
3
+ export { createMemoryMailProvider } from './memory.js';
4
+ export { MAIL_PROVIDERS } from './provider.js';
5
+ export { createMailService, DEFAULT_MAIL_ATTEMPTS, defaultMailBackoffMs } from './service.js';
6
+ export { createSmtpProvider, SMTP_TIMEOUT_MS } from './smtp.js';
7
+ export { createMailTemplates, mailTemplateFiles } from './templates.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mail/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEnF,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAQ/C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAU9F,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEhE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { MailProvider, OutgoingMail } from './provider.ts';
2
+ /**
3
+ * A {@link MailProvider} that keeps every message instead of sending it.
4
+ *
5
+ * Exported from the package rather than hidden in a test directory, because
6
+ * every feature that emails needs one: a test of a password reset, a
7
+ * moderation notice or a contact form wants to read the message that would
8
+ * have gone out, and stubbing `fetch` or standing up an SMTP server to do that
9
+ * would be testing the provider all over again.
10
+ *
11
+ * Name it as `mailProvider` in the config and it wins outright over whatever
12
+ * `data/mail.json` and the settings say, exactly as a `commentChecker` does:
13
+ *
14
+ * ```ts
15
+ * const provider = createMemoryMailProvider();
16
+ * const cms = createCms({ mail: { provider } });
17
+ * // …
18
+ * assert.match(provider.sent[0].subject, /Reset your password/);
19
+ * ```
20
+ */
21
+ /** A provider that remembers, and can be told to fail. */
22
+ export interface MemoryMailProvider extends MailProvider {
23
+ /** Every message it was given, in the order they were sent. */
24
+ readonly sent: readonly OutgoingMail[];
25
+ /** Forget them all. */
26
+ clear(): void;
27
+ /**
28
+ * Refuse the next `count` messages, so a test can watch the service retry.
29
+ * A message refused is not a message sent: it never joins {@link sent}.
30
+ */
31
+ failNext(count: number, error?: string): void;
32
+ }
33
+ /** Build one. */
34
+ export declare function createMemoryMailProvider(): MemoryMailProvider;
35
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/mail/memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE9E;;;;;;;;;;;;;;;;;;GAkBG;AAEH,0DAA0D;AAC1D,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,EAAE,SAAS,YAAY,EAAE,CAAC;IACvC,uBAAuB;IACvB,KAAK,IAAI,IAAI,CAAC;IACd;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/C;AAED,iBAAiB;AACjB,wBAAgB,wBAAwB,IAAI,kBAAkB,CA8B7D"}
@@ -0,0 +1,29 @@
1
+ /** Build one. */
2
+ export function createMemoryMailProvider() {
3
+ const sent = [];
4
+ let failures = 0;
5
+ let failure = 'the memory mail provider was told to fail';
6
+ return {
7
+ name: 'memory',
8
+ sent,
9
+ clear() {
10
+ sent.length = 0;
11
+ },
12
+ failNext(count, error) {
13
+ failures = count;
14
+ if (error !== undefined)
15
+ failure = error;
16
+ },
17
+ deliver(message) {
18
+ if (failures > 0) {
19
+ failures -= 1;
20
+ return Promise.reject(new Error(failure));
21
+ }
22
+ sent.push(message);
23
+ // Ids that count from one, so a test can assert on the one it expects
24
+ // rather than on whatever a random generator produced.
25
+ return Promise.resolve({ messageId: `memory-${String(sent.length)}` });
26
+ },
27
+ };
28
+ }
29
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/mail/memory.ts"],"names":[],"mappings":"AAmCA,iBAAiB;AACjB,MAAM,UAAU,wBAAwB;IACtC,MAAM,IAAI,GAAmB,EAAE,CAAC;IAChC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,OAAO,GAAG,2CAA2C,CAAC;IAE1D,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,IAAI;QAEJ,KAAK;YACH,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAClB,CAAC;QAED,QAAQ,CAAC,KAAK,EAAE,KAAK;YACnB,QAAQ,GAAG,KAAK,CAAC;YACjB,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,GAAG,KAAK,CAAC;QAC3C,CAAC;QAED,OAAO,CAAC,OAAqB;YAC3B,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;gBACjB,QAAQ,IAAI,CAAC,CAAC;gBACd,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5C,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnB,sEAAsE;YACtE,uDAAuD;YACvD,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,UAAU,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QACzE,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * The seam every way of sending email goes through.
3
+ *
4
+ * The CMS knows about mail services the way it knows about spam services
5
+ * (doc-6): one interface, and nothing else. Two implementations ship — Brevo's
6
+ * transactional API and plain SMTP through nodemailer — and a site may hand in
7
+ * its own, which is what {@link createMemoryMailProvider} is for in a test.
8
+ *
9
+ * A provider has exactly one job: hand this message to something that will
10
+ * carry it, and either say what it was given as an id or throw. It decides
11
+ * nothing about retries, queueing, templates or whether the site is configured
12
+ * to send at all; that is {@link MailService}'s, and keeping it there is what
13
+ * makes a second provider a file rather than a redesign.
14
+ */
15
+ /** Which of the ways of sending a site has chosen. */
16
+ export type MailProviderName =
17
+ /** The site sends no mail. `send` is a logged no-op. */
18
+ 'none'
19
+ /** Brevo's transactional HTTP API. */
20
+ | 'brevo'
21
+ /** Any SMTP server, through nodemailer. */
22
+ | 'smtp'
23
+ /** The in-memory provider a test observes. */
24
+ | 'memory';
25
+ /**
26
+ * The providers a site may choose on the settings screen, in the order the
27
+ * form offers them.
28
+ *
29
+ * `memory` is not among them: it is a test double a site names in its config,
30
+ * not something anybody should be able to switch a live site to from a form.
31
+ */
32
+ export declare const MAIL_PROVIDERS: readonly MailProviderName[];
33
+ /** Somebody a message is from, to, or answered to. */
34
+ export interface MailAddress {
35
+ /** The address itself, `ada@example.com`. */
36
+ readonly address: string;
37
+ /** The display name, when there is one. */
38
+ readonly name?: string | undefined;
39
+ }
40
+ /**
41
+ * One message, as a provider receives it: addresses settled, templates already
42
+ * rendered, nothing left to decide.
43
+ */
44
+ export interface OutgoingMail {
45
+ /** Who it is from. */
46
+ readonly from: MailAddress;
47
+ /** Who it is to. At least one. */
48
+ readonly to: readonly MailAddress[];
49
+ /** Where a reply should go, when that is not the sender. */
50
+ readonly replyTo?: MailAddress | undefined;
51
+ /** The subject line. */
52
+ readonly subject: string;
53
+ /** The plain text body, which every message has. */
54
+ readonly text: string;
55
+ /** The HTML twin, when the template has one. */
56
+ readonly html?: string | undefined;
57
+ }
58
+ /** What a provider says about a message it accepted. */
59
+ export interface MailDelivery {
60
+ /**
61
+ * The id the provider gave it, when it gave one. It is what makes a message
62
+ * findable in the provider's own logs, which is the whole reason the service
63
+ * writes it down.
64
+ */
65
+ readonly messageId?: string | undefined;
66
+ }
67
+ /** Something that carries a message. */
68
+ export interface MailProvider {
69
+ /** Which kind it is, for the log and for the settings screen. */
70
+ readonly name: MailProviderName;
71
+ /**
72
+ * Hand the message over.
73
+ *
74
+ * Throws when it was not accepted — a refusal, a timeout, a connection that
75
+ * would not open. The service catches it, logs it and decides whether to try
76
+ * again, so a provider never has to know how patient the site is.
77
+ */
78
+ deliver(message: OutgoingMail): Promise<MailDelivery>;
79
+ }
80
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/mail/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,sDAAsD;AACtD,MAAM,MAAM,gBAAgB;AAC1B,wDAAwD;AACtD,MAAM;AACR,sCAAsC;GACpC,OAAO;AACT,2CAA2C;GACzC,MAAM;AACR,8CAA8C;GAC5C,QAAQ,CAAC;AAEb;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,EAAE,SAAS,gBAAgB,EAA8B,CAAC;AAErF,sDAAsD;AACtD,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,sBAAsB;IACtB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,kCAAkC;IAClC,QAAQ,CAAC,EAAE,EAAE,SAAS,WAAW,EAAE,CAAC;IACpC,4DAA4D;IAC5D,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC3C,wBAAwB;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,oDAAoD;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,wDAAwD;AACxD,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAED,wCAAwC;AACxC,MAAM,WAAW,YAAY;IAC3B,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC;;;;;;OAMG;IACH,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACvD"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * The seam every way of sending email goes through.
3
+ *
4
+ * The CMS knows about mail services the way it knows about spam services
5
+ * (doc-6): one interface, and nothing else. Two implementations ship — Brevo's
6
+ * transactional API and plain SMTP through nodemailer — and a site may hand in
7
+ * its own, which is what {@link createMemoryMailProvider} is for in a test.
8
+ *
9
+ * A provider has exactly one job: hand this message to something that will
10
+ * carry it, and either say what it was given as an id or throw. It decides
11
+ * nothing about retries, queueing, templates or whether the site is configured
12
+ * to send at all; that is {@link MailService}'s, and keeping it there is what
13
+ * makes a second provider a file rather than a redesign.
14
+ */
15
+ /**
16
+ * The providers a site may choose on the settings screen, in the order the
17
+ * form offers them.
18
+ *
19
+ * `memory` is not among them: it is a test double a site names in its config,
20
+ * not something anybody should be able to switch a live site to from a form.
21
+ */
22
+ export const MAIL_PROVIDERS = ['none', 'brevo', 'smtp'];
23
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/mail/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAaH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAgC,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC"}