@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
@@ -1,13 +1,14 @@
1
1
  import { createRequire } from 'node:module';
2
2
  import { createFederation, InProcessMessageQueue, MemoryKvStore } from '@fedify/fedify';
3
- import { Announce, Article, Create, Delete, Follow, Like, Undo } from '@fedify/vocab';
4
- import { readSiteSettings } from '../admin/settings.js';
5
- import { siteActor } from './actor.js';
6
- import { isFederatedDocument, postArticle, postCreateActivity } from './article.js';
3
+ import { Accept, Announce, Create, Delete, Follow, Like, Reject, Undo } from '@fedify/vocab';
4
+ import { countUsers, listUsers } from '../admin/accounts.js';
5
+ import { authorNames } from '../web/authors.js';
6
+ import { userActor, userByUsername } from './actor.js';
7
+ import { isFederatedDocument, postCreateActivity } from './article.js';
7
8
  import { followersPage, lastFollowersCursor } from './followers.js';
8
- import { handleDelete, handleFollow, handleLoggedActivity, handleUndo } from './inbox.js';
9
- import { loadActorKeyPairs, SITE_ACTOR_IDENTIFIER } from './keys.js';
10
- import { ACTOR_PATH, federationOrigin, FOLLOWERS_PATH, FOLLOWING_PATH, INBOX_PATH, NODEINFO_PATH, OUTBOX_PATH, POST_OBJECT_PATH, postObjectId, SHARED_INBOX_PATH, } from './paths.js';
9
+ import { handleAccept, handleDelete, handleFollow, handleLoggedActivity, handleReject, handleUndo, } from './inbox.js';
10
+ import { loadActorKeyPairs } from './keys.js';
11
+ import { ACTOR_PATH, federationOrigin, FOLLOWERS_PATH, FOLLOWING_PATH, INBOX_PATH, NODEINFO_PATH, OUTBOX_PATH, SHARED_INBOX_PATH, } from './paths.js';
11
12
  /** The `software.name` this CMS reports in NodeInfo. Lower case, as the schema demands. */
12
13
  export const SOFTWARE_NAME = 'geekity-cms';
13
14
  /**
@@ -19,14 +20,18 @@ export const SOFTWARE_NAME = 'geekity-cms';
19
20
  */
20
21
  export const OUTBOX_PAGE_SIZE = 20;
21
22
  /**
22
- * Build the site's `Federation` object: the actor, its keys, the post objects,
23
- * the outbox, WebFinger and NodeInfo.
23
+ * Build the site's `Federation` object: one actor per user, their keys, their
24
+ * collections, WebFinger's neighbours and NodeInfo.
25
+ *
26
+ * A post's object is not here — it is its permalink (decision-13), served by
27
+ * the middleware in `mount.ts`, which also owns `/.well-known/webfinger`
28
+ * (doc-8) because Fedify's own cannot publish the aliases decision-14 wants.
24
29
  *
25
30
  * It is a factory rather than a module-level singleton so the KV store and the
26
31
  * queue are arguments (decision-5), so a test can build one per data directory,
27
32
  * and so a site that outgrows the in-memory pair changes a call rather than
28
- * this file. The followers come out of SQLite; the following collection is
29
- * empty, and doc-4 says it always will be.
33
+ * this file. The followers come out of SQLite, per user; the following
34
+ * collection is empty, and doc-4 says it always will be.
30
35
  */
31
36
  export function createSiteFederation(options) {
32
37
  const federation = createFederation({
@@ -42,57 +47,81 @@ export function createSiteFederation(options) {
42
47
  : { allowPrivateAddress: options.allowPrivateAddress }),
43
48
  ...options.federationOptions,
44
49
  });
50
+ /** The user a dispatcher's identifier names, off the context's data dir. */
51
+ function actorFor(context, identifier) {
52
+ return userByUsername(context.data.config.dataDir, identifier);
53
+ }
45
54
  federation
46
55
  .setActorDispatcher(ACTOR_PATH, async (context, identifier) => {
47
- if (identifier !== SITE_ACTOR_IDENTIFIER)
56
+ const user = actorFor(context, identifier);
57
+ if (user === undefined)
48
58
  return null;
49
- const settings = readSiteSettings(context.data.admin);
50
- return await siteActor(context, identifier, {
51
- settings,
52
- baseUrl: context.data.config.baseUrl,
53
- });
59
+ return await userActor(context, user, { baseUrl: context.data.config.baseUrl });
54
60
  })
55
- // WebFinger asks for a username; this is what turns the handle somebody
56
- // typed into the identifier the URLs are built from, and what makes the
57
- // handle a setting rather than part of the actor's id.
58
- .mapHandle((context, username) => username === readSiteSettings(context.data.admin).actorHandle ? SITE_ACTOR_IDENTIFIER : null)
59
- .setKeyPairsDispatcher(async (context, identifier) => identifier === SITE_ACTOR_IDENTIFIER
60
- ? await loadActorKeyPairs(context.data.admin, identifier)
61
- : []);
62
- // A post's ActivityStreams object. `null` is a 404, which is what a draft, a
63
- // trashed post, a page and a slug that names nothing all get: the object
64
- // dispatcher is the only thing that decides whether an object exists, so it
65
- // cannot disagree with the outbox about it.
66
- federation.setObjectDispatcher(Article, POST_OBJECT_PATH, (context, values) => {
67
- const document = federatedObject(context.data.store, values.slug, context.data.config.baseUrl);
68
- return document === undefined ? null : postArticle(context, document);
69
- });
61
+ // WebFinger asks for a username, and a user's username *is* their
62
+ // identifier now, so this is the identity function over the people who
63
+ // exist. It stays registered because Fedify's own lookups — `parseUri`,
64
+ // the collection URIs — go through it, even though `mount.ts` answers
65
+ // `/.well-known/webfinger` itself.
66
+ .mapHandle((context, username) => (actorFor(context, username) === undefined ? null : username))
67
+ .setKeyPairsDispatcher(async (context, identifier) => actorFor(context, identifier) === undefined
68
+ ? []
69
+ : await loadActorKeyPairs(context.data.config.dataDir, identifier));
70
+ // No object dispatcher for posts. decision-13 makes a post's id its
71
+ // permalink, which Fedify never minted and cannot route: the permalink
72
+ // middleware in `mount.ts` answers an ActivityStreams request there, and
73
+ // `isFederatedDocument` is the one rule it and the outbox both read, so they
74
+ // cannot disagree about what exists.
75
+ /** Every stored `author` string that reads as this user (TASK-67). */
76
+ function namesOf(context, user) {
77
+ return authorNames(listUsers(context.data.config.dataDir), user);
78
+ }
70
79
  federation
71
- .setOutboxDispatcher(OUTBOX_PATH, (context, identifier, cursor) => identifier === SITE_ACTOR_IDENTIFIER ? outboxPage(context, cursor) : null)
72
- .setCounter((context, identifier) => identifier === SITE_ACTOR_IDENTIFIER ? context.data.store.counts().posts : null)
80
+ .setOutboxDispatcher(OUTBOX_PATH, (context, identifier, cursor) => {
81
+ const user = actorFor(context, identifier);
82
+ return user === undefined ? null : outboxPage(context, namesOf(context, user), cursor);
83
+ })
84
+ .setCounter((context, identifier) => {
85
+ const user = actorFor(context, identifier);
86
+ return user === undefined ? null : context.data.store.countByAuthor(namesOf(context, user));
87
+ })
73
88
  // Paging is cursor-based, and the cursor is an offset, so the first page
74
89
  // is always the start of the archive and the last is wherever the archive
75
90
  // currently ends.
76
- .setFirstCursor((_context, identifier) => (identifier === SITE_ACTOR_IDENTIFIER ? '0' : null))
91
+ .setFirstCursor((context, identifier) => actorFor(context, identifier) === undefined ? null : '0')
77
92
  .setLastCursor((context, identifier) => {
78
- if (identifier !== SITE_ACTOR_IDENTIFIER)
93
+ const user = actorFor(context, identifier);
94
+ if (user === undefined)
79
95
  return null;
80
- const total = context.data.store.counts().posts;
96
+ const total = context.data.store.countByAuthor(namesOf(context, user));
81
97
  return String(total === 0 ? 0 : Math.floor((total - 1) / OUTBOX_PAGE_SIZE) * OUTBOX_PAGE_SIZE);
82
98
  });
83
- // The followers, straight out of SQLite and paged like the outbox. Fedify
84
- // renders each one as its actor id, and hands the same rows — inbox and
85
- // shared inbox included — to `ctx.sendActivity(…, 'followers', …)`, so this
86
- // one dispatcher is both what a peer reads and where delivery fans out to.
99
+ // One user's followers, straight out of SQLite and paged like the outbox.
100
+ // Fedify renders each one as its actor id, and hands the same rows — inbox
101
+ // and shared inbox included — to `ctx.sendActivity(…, 'followers', …)`, so
102
+ // this one dispatcher is both what a peer reads and where delivery would fan
103
+ // out to.
87
104
  federation
88
- .setFollowersDispatcher(FOLLOWERS_PATH, (context, identifier, cursor) => identifier === SITE_ACTOR_IDENTIFIER ? followersPage(context, cursor) : null)
89
- .setCounter((context, identifier) => identifier === SITE_ACTOR_IDENTIFIER ? context.data.admin.countFollowers() : null)
90
- .setFirstCursor((_context, identifier) => (identifier === SITE_ACTOR_IDENTIFIER ? '0' : null))
91
- .setLastCursor((context, identifier) => identifier === SITE_ACTOR_IDENTIFIER
92
- ? lastFollowersCursor(context.data.admin.countFollowers())
93
- : null);
94
- // Always empty, and always will be: doc-4 says the site follows nobody.
95
- federation.setFollowingDispatcher(FOLLOWING_PATH, (_context, identifier) => identifier === SITE_ACTOR_IDENTIFIER ? { items: [] } : null);
105
+ .setFollowersDispatcher(FOLLOWERS_PATH, (context, identifier, cursor) => {
106
+ const user = actorFor(context, identifier);
107
+ return user === undefined ? null : followersPage(context, user.username, cursor);
108
+ })
109
+ .setCounter((context, identifier) => {
110
+ const user = actorFor(context, identifier);
111
+ return user === undefined ? null : context.data.admin.countFollowers(user.username);
112
+ })
113
+ .setFirstCursor((context, identifier) => actorFor(context, identifier) === undefined ? null : '0')
114
+ .setLastCursor((context, identifier) => {
115
+ const user = actorFor(context, identifier);
116
+ return user === undefined
117
+ ? null
118
+ : lastFollowersCursor(context.data.admin.countFollowers(user.username));
119
+ });
120
+ // Always empty: doc-4 says a blog's author follows nobody through this CMS,
121
+ // and the one thing the site does follow — a relay (FEP-ae0c) — is a
122
+ // subscription rather than a relationship anybody reads this collection to
123
+ // learn about.
124
+ federation.setFollowingDispatcher(FOLLOWING_PATH, (context, identifier) => actorFor(context, identifier) === undefined ? null : { items: [] });
96
125
  // The inbox, personal and shared. Fedify has already verified the signature
97
126
  // by the time a listener runs — an unsigned or badly signed delivery never
98
127
  // reaches one — so a handler may trust that the activity's actor really sent
@@ -100,7 +129,15 @@ export function createSiteFederation(options) {
100
129
  // which is what doc-4 asks for everything past these five.
101
130
  federation
102
131
  .setInboxListeners(INBOX_PATH, SHARED_INBOX_PATH)
132
+ // `per-origin` rather than Fedify's default `per-inbox`, which folds the
133
+ // recipient identifier into the key. The WordPress compatibility switch
134
+ // (TASK-70) mounts a second set of inboxes over the same KV store, where
135
+ // the same person is `2` rather than their username, and one `Follow`
136
+ // redelivered to both would otherwise be handled twice (doc-8).
137
+ .withIdempotency('per-origin')
103
138
  .on(Follow, handleFollow)
139
+ .on(Accept, handleAccept)
140
+ .on(Reject, handleReject)
104
141
  .on(Undo, handleUndo)
105
142
  .on(Delete, handleDelete)
106
143
  .on(Like, handleLoggedActivity)
@@ -114,7 +151,7 @@ export function createSiteFederation(options) {
114
151
  // A CMS is not a signup service; the admin makes accounts by hand.
115
152
  openRegistrations: false,
116
153
  usage: {
117
- users: { total: context.data.admin.countUsers() },
154
+ users: { total: countUsers(context.data.config.dataDir) },
118
155
  localPosts: counts.posts,
119
156
  localComments: 0,
120
157
  },
@@ -131,43 +168,27 @@ export function createSiteFederation(options) {
131
168
  */
132
169
  export function federatedPost(store, slug) {
133
170
  const document = store.getBySlug(slug);
134
- return document !== undefined && isFederatedDocument(document) ? document : undefined;
135
- }
136
- /**
137
- * The post whose ActivityStreams object is served at `/ap/posts/{slug}`.
138
- *
139
- * Nearly always the post with that slug. The exception is a post renamed after
140
- * it was announced: it keeps the id its old slug minted, written into
141
- * `activitypub.id` (doc-4), so the old URL has to keep answering or every
142
- * follower's copy points at a 404. That case is found by searching the
143
- * archive for the post holding the id, which is a walk rather than an index
144
- * lookup — the front matter is the source of truth (decision-1) and the index
145
- * has no column for it — but it is only reached when the slug itself does not
146
- * answer.
147
- */
148
- export function federatedObject(store, slug, baseUrl) {
149
- const objectId = postObjectId(slug, baseUrl);
150
- const direct = federatedPost(store, slug);
151
- if (direct !== undefined) {
152
- const stored = direct.activitypub?.id;
153
- if (stored === undefined || stored === objectId)
154
- return direct;
155
- }
156
- return store.listPosts().find((post) => post.activitypub?.id === objectId);
171
+ return document !== undefined && isFederatedDocument(document, store.now())
172
+ ? document
173
+ : undefined;
157
174
  }
158
175
  /**
159
- * One page of the outbox: the `Create` that announced each post, newest first.
176
+ * One page of one user's outbox: the `Create` that announced each of their
177
+ * posts, newest first.
160
178
  *
161
179
  * The cursor is the offset into the archive as a decimal string. That keeps a
162
180
  * page URL meaning what it meant when it was minted, which a cursor derived
163
181
  * from the site's page size would not: the size is a setting somebody may
164
182
  * change between two requests.
183
+ *
184
+ * Exported for the WordPress compatibility federation (TASK-70), which serves
185
+ * the same page at the plugin's own outbox path.
165
186
  */
166
- function outboxPage(context, cursor) {
187
+ export function outboxPage(context, names, cursor) {
167
188
  const offset = cursorOffset(cursor);
168
189
  const { store } = context.data;
169
- const documents = store.listPosts({ limit: OUTBOX_PAGE_SIZE, offset });
170
- const total = store.counts().posts;
190
+ const documents = store.listByAuthor(names, { limit: OUTBOX_PAGE_SIZE, offset });
191
+ const total = store.countByAuthor(names);
171
192
  const next = offset + OUTBOX_PAGE_SIZE;
172
193
  return {
173
194
  items: documents.map((document) => postCreateActivity(context, document)),
@@ -1 +1 @@
1
- {"version":3,"file":"federation.js","sourceRoot":"","sources":["../../src/federation/federation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"federation.js","sourceRoot":"","sources":["../../src/federation/federation.ts"],"names":[],"mappings":"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"}
@@ -21,7 +21,8 @@ export declare const FOLLOWERS_PAGE_SIZE = 20;
21
21
  */
22
22
  export declare function followerRecipient(follower: Follower): Recipient;
23
23
  /**
24
- * The followers collection, newest follow first: one page of it, or all of it.
24
+ * One user's followers collection, newest follow first: one page of it, or all
25
+ * of it.
25
26
  *
26
27
  * A cursor is the offset into the list as a decimal string, exactly as the
27
28
  * outbox's is, so the two collections page the same way and a cursor keeps
@@ -34,7 +35,7 @@ export declare function followerRecipient(follower: Follower): Recipient;
34
35
  * reads never arrives here with `null`, because the first cursor is registered
35
36
  * and a registered first cursor is what makes the collection paged.
36
37
  */
37
- export declare function followersPage(context: Context<FederationContextData>, cursor: string | null): PageItems<Recipient>;
38
+ export declare function followersPage(context: Context<FederationContextData>, username: string, cursor: string | null): PageItems<Recipient>;
38
39
  /**
39
40
  * The cursor of the last page of the followers collection: the offset the
40
41
  * final whole page starts at, and `0` for a site nobody follows yet.
@@ -1 +1 @@
1
- {"version":3,"file":"followers.d.ts","sourceRoot":"","sources":["../../src/federation/followers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAE7D;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAQ/D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,OAAO,CAAC,qBAAqB,CAAC,EACvC,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,SAAS,CAAC,SAAS,CAAC,CAiBtB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIzD"}
1
+ {"version":3,"file":"followers.d.ts","sourceRoot":"","sources":["../../src/federation/followers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAE7D;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAQ/D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,OAAO,CAAC,qBAAqB,CAAC,EACvC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,SAAS,CAAC,SAAS,CAAC,CAiBtB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIzD"}
@@ -25,7 +25,8 @@ export function followerRecipient(follower) {
25
25
  };
26
26
  }
27
27
  /**
28
- * The followers collection, newest follow first: one page of it, or all of it.
28
+ * One user's followers collection, newest follow first: one page of it, or all
29
+ * of it.
29
30
  *
30
31
  * A cursor is the offset into the list as a decimal string, exactly as the
31
32
  * outbox's is, so the two collections page the same way and a cursor keeps
@@ -38,14 +39,14 @@ export function followerRecipient(follower) {
38
39
  * reads never arrives here with `null`, because the first cursor is registered
39
40
  * and a registered first cursor is what makes the collection paged.
40
41
  */
41
- export function followersPage(context, cursor) {
42
+ export function followersPage(context, username, cursor) {
42
43
  const { admin } = context.data;
43
44
  if (cursor === null) {
44
- return { items: admin.listFollowers().map(followerRecipient) };
45
+ return { items: admin.listFollowers(username).map(followerRecipient) };
45
46
  }
46
47
  const offset = cursorOffset(cursor);
47
- const followers = admin.listFollowers({ limit: FOLLOWERS_PAGE_SIZE, offset });
48
- const total = admin.countFollowers();
48
+ const followers = admin.listFollowers(username, { limit: FOLLOWERS_PAGE_SIZE, offset });
49
+ const total = admin.countFollowers(username);
49
50
  const next = offset + FOLLOWERS_PAGE_SIZE;
50
51
  return {
51
52
  items: followers.map(followerRecipient),
@@ -1 +1 @@
1
- {"version":3,"file":"followers.js","sourceRoot":"","sources":["../../src/federation/followers.ts"],"names":[],"mappings":"AAMA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAEtC;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAkB;IAClD,OAAO;QACL,EAAE,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC7B,OAAO,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;QAClC,SAAS,EAAE;YACT,WAAW,EAAE,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;SACtF;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAuC,EACvC,MAAqB;IAErB,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/B,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;IACjE,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,GAAG,mBAAmB,CAAC;IAE1C,OAAO;QACL,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC;QACvC,UAAU,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;QAC9C,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC,CAAC;KACnF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,OAAO,MAAM,CACX,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,mBAAmB,CAAC,GAAG,mBAAmB,CACtF,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,SAAS,YAAY,CAAC,MAAqB;IACzC,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,CAAC,CAAC;IAC1D,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"followers.js","sourceRoot":"","sources":["../../src/federation/followers.ts"],"names":[],"mappings":"AAMA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAEtC;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAkB;IAClD,OAAO;QACL,EAAE,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC7B,OAAO,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;QAClC,SAAS,EAAE;YACT,WAAW,EAAE,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;SACtF;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAuC,EACvC,QAAgB,EAChB,MAAqB;IAErB,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/B,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;IACzE,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC,CAAC;IACxF,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,MAAM,GAAG,mBAAmB,CAAC;IAE1C,OAAO;QACL,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC;QACvC,UAAU,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;QAC9C,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC,CAAC;KACnF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,OAAO,MAAM,CACX,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,mBAAmB,CAAC,GAAG,mBAAmB,CACtF,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,SAAS,YAAY,CAAC,MAAqB;IACzC,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,CAAC,CAAC;IAC1D,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC"}
@@ -0,0 +1,128 @@
1
+ import type { AdminStore } from '../admin/store.ts';
2
+ import type { ActorKeyAlgorithm } from './keys.ts';
3
+ /** What {@link importWordPressActor} is given. */
4
+ export interface ImportWordPressActorOptions {
5
+ /** The index the followers are written into as the files are written. */
6
+ readonly admin: AdminStore;
7
+ /** Where `users.json` and `keys/` live. */
8
+ readonly dataDir: string;
9
+ /** Where `_data/federation/{username}/followers.json` lives. */
10
+ readonly contentDir: string;
11
+ /** Which account on this site the plugin's actor becomes. */
12
+ readonly username: string;
13
+ /**
14
+ * The actor's id exactly as WordPress published it, query string and all:
15
+ * `https://example.com/?author=2`.
16
+ */
17
+ readonly actorId: string;
18
+ /** The WordPress user id, which is the number in every one of its paths. */
19
+ readonly wordpressActorId: number;
20
+ /** The private key as PEM, PKCS#1 or PKCS#8, as `wp` printed it. */
21
+ readonly privateKeyPem: string;
22
+ /**
23
+ * The public key as PEM, when the export carried one.
24
+ *
25
+ * Checked against the private half rather than stored: the public key is
26
+ * derivable, so the only thing a second file can tell us is whether the two
27
+ * halves of the export belong together — and a pair that does not is an
28
+ * export somebody got wrong, which is worth finding out now rather than
29
+ * after the DNS has moved.
30
+ */
31
+ readonly publicKeyPem?: string | undefined;
32
+ /**
33
+ * Where the followers come from.
34
+ *
35
+ * Left off, the plugin's public followers collection on the actor id's own
36
+ * origin, which is the whole point of running this before the DNS moves. A
37
+ * URL asks a different one; a path reads a saved collection out of a file,
38
+ * for a site that is already gone; `false` skips the step, for a run that is
39
+ * only there to put the key and the ids in place.
40
+ */
41
+ readonly followers?: string | false | undefined;
42
+ /** Replace a key pair this user already has. Refused without it. */
43
+ readonly force?: boolean | undefined;
44
+ }
45
+ /** What happened to one key file. */
46
+ export interface ImportedKey {
47
+ /** The file, absolute. */
48
+ readonly file: string;
49
+ /** Which pair it holds. */
50
+ readonly algorithm: ActorKeyAlgorithm;
51
+ /** What the run did with it. */
52
+ readonly state: 'imported' | 'generated' | 'unchanged' | 'replaced';
53
+ }
54
+ /** One follower the collection named and nothing could be made of. */
55
+ export interface UnreachableFollower {
56
+ /** The actor the collection named. */
57
+ readonly actor: string;
58
+ /** Why it was skipped, for the report. */
59
+ readonly reason: string;
60
+ }
61
+ /** What the followers step did. */
62
+ export interface FollowersImportReport {
63
+ /** The collection it read, or `undefined` when the step was skipped. */
64
+ readonly source: string | undefined;
65
+ /** Actors written into the file for the first time. */
66
+ readonly added: readonly string[];
67
+ /** Actors the file already held, with nothing about them changed. */
68
+ readonly unchanged: readonly string[];
69
+ /** Actors whose profile the file held and this run refreshed. */
70
+ readonly refreshed: readonly string[];
71
+ /**
72
+ * Actors that could not be turned into followers, and why.
73
+ *
74
+ * Reported rather than fatal: an instance that is down, or an account that
75
+ * has been deleted, must not stop the other hundred followers from coming
76
+ * across, and the owner can run the command again once it is back.
77
+ */
78
+ readonly failed: readonly UnreachableFollower[];
79
+ }
80
+ /** What the run did. */
81
+ export interface ImportWordPressActorReport {
82
+ /** Who was imported. */
83
+ readonly username: string;
84
+ /** The id their followers hold. */
85
+ readonly actorId: string;
86
+ /** The number the plugin's paths are built from. */
87
+ readonly wordpressActorId: number;
88
+ /**
89
+ * Whether the two ids had to be written, or the record already said so.
90
+ */
91
+ readonly identity: 'set' | 'unchanged';
92
+ /** One entry per key file, RSA first, as the key loader orders them. */
93
+ readonly keys: readonly ImportedKey[];
94
+ /** What came of the followers collection. */
95
+ readonly followers: FollowersImportReport;
96
+ /** Whether anything on disk is different because of this run. */
97
+ readonly changed: boolean;
98
+ }
99
+ /**
100
+ * Thrown when the user already has a key pair and this run was not told to
101
+ * replace it.
102
+ *
103
+ * Its own class because the answer is a flag rather than a correction, and
104
+ * because losing a private key is the one mistake this CMS cannot help with:
105
+ * every follower's server has cached the public half, and a new key means none
106
+ * of them can verify this person again.
107
+ */
108
+ export declare class ExistingKeyPairError extends Error {
109
+ readonly name = "ExistingKeyPairError";
110
+ /** The file that is already there. */
111
+ readonly file: string;
112
+ constructor(username: string, file: string);
113
+ }
114
+ /** Thrown when the PEM is not an RSA private key at all. */
115
+ export declare class UnusableKeyPemError extends Error {
116
+ readonly name = "UnusableKeyPemError";
117
+ constructor(message: string, options?: {
118
+ cause?: unknown;
119
+ });
120
+ }
121
+ /**
122
+ * Bring one WordPress actor's key pair across, and say what changed.
123
+ *
124
+ * Run twice with the same inputs it changes nothing and says so, which is what
125
+ * makes it safe to run again after a follower's server was down.
126
+ */
127
+ export declare function importWordPressActor(options: ImportWordPressActorOptions): Promise<ImportWordPressActorReport>;
128
+ //# sourceMappingURL=import-wordpress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-wordpress.d.ts","sourceRoot":"","sources":["../../src/federation/import-wordpress.ts"],"names":[],"mappings":"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"}