@fedify/fedify 2.0.0-dev.1908 → 2.0.0-dev.196

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 (266) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +68 -35
  3. package/dist/{builder-GG0LDRaK.js → builder-R1Sfe-tb.js} +5 -3
  4. package/dist/{client-BsGzbnV-.d.ts → client-CUTUGgvJ.d.ts} +18 -18
  5. package/dist/{client-pY7-3icS.js → client-Dg7OfUDA.js} +28 -23
  6. package/dist/{client-94iWEfQa.d.cts → client-by-PEGAJ.d.cts} +18 -18
  7. package/dist/compat/mod.cjs +1 -1
  8. package/dist/compat/mod.d.cts +6 -10
  9. package/dist/compat/mod.d.ts +6 -10
  10. package/dist/compat/mod.js +1 -1
  11. package/dist/compat/transformers.test.js +22 -21
  12. package/dist/context-Bns6uTJq.js +109 -0
  13. package/dist/{context-V-XS2_6O.d.ts → context-C7vzWilY.d.ts} +63 -65
  14. package/dist/{context-PxGADCsD.d.cts → context-CrB9RFy5.d.cts} +63 -65
  15. package/dist/deno-i60L3ZJW.js +117 -0
  16. package/dist/{testing-bgnt5CjE.js → dist-B5f6a8Tt.js} +90 -110
  17. package/dist/{docloader-Buj0Y50A.js → docloader-BuOglEYx.js} +3 -3
  18. package/dist/{esm-vPU_GxaY.js → esm-DGl7uK1r.js} +32 -17
  19. package/dist/federation/builder.test.js +7 -5
  20. package/dist/federation/collection.test.js +2 -3
  21. package/dist/federation/handler.test.js +110 -22
  22. package/dist/federation/idempotency.test.js +23 -22
  23. package/dist/federation/inbox.test.js +4 -3
  24. package/dist/federation/keycache.test.js +4 -4
  25. package/dist/federation/kv.test.js +56 -3
  26. package/dist/federation/middleware.test.js +95 -93
  27. package/dist/federation/mod.cjs +8 -10
  28. package/dist/federation/mod.d.cts +7 -11
  29. package/dist/federation/mod.d.ts +7 -11
  30. package/dist/federation/mod.js +8 -11
  31. package/dist/federation/mq.test.js +5 -6
  32. package/dist/federation/negotiation.test.js +2 -3
  33. package/dist/federation/retry.test.js +2 -3
  34. package/dist/federation/router.test.js +2 -2
  35. package/dist/federation/send.test.js +51 -9
  36. package/dist/{webfinger/handler.test.js → federation/webfinger.test.js} +24 -22
  37. package/dist/{federation-CRpdnOMS.cjs → federation-B431K2gm.cjs} +22 -0
  38. package/dist/{federation-jcR8-ZxP.js → federation-BbZwNNWj.js} +28 -6
  39. package/dist/{http-ByZmUHwe.js → http-B5BgMxiO.js} +119 -9
  40. package/dist/{http-CTi-owaL.cjs → http-B_jtB30-.cjs} +132 -16
  41. package/dist/{http-M8k5mKc0.d.cts → http-ClB3pLcL.d.cts} +1 -1
  42. package/dist/{http-BbO0ejuk.d.ts → http-DLBDPal9.d.ts} +1 -1
  43. package/dist/{http-DO88HCOK.js → http-uzkhnm0W.js} +3 -2
  44. package/dist/{inbox-BwIgnk8R.js → inbox-CxrUTds4.js} +2 -1
  45. package/dist/{key-CrKmngwF.js → key-DBHCloAO.js} +3 -3
  46. package/dist/{keycache-CFv8xdnH.js → keycache-DRxpZ5r9.js} +1 -1
  47. package/dist/{keys-B2yaEG79.js → keys-ZbcByPg9.js} +1 -1
  48. package/dist/{kv-Bxr0Q87_.d.cts → kv-B4vFhIYL.d.cts} +30 -1
  49. package/dist/{kv-BKNZ-Tb-.d.ts → kv-CYySNrsn.d.ts} +30 -1
  50. package/dist/{kv-CRZrzyXm.js → kv-QzKcOQgP.js} +22 -0
  51. package/dist/{kv-cache-DN9pfMBe.js → kv-cache-BEeqyGER.js} +14 -1
  52. package/dist/{kv-cache-CykGg2IP.js → kv-cache-BqWqxam4.js} +2 -2
  53. package/dist/{kv-cache-BbklA4EG.cjs → kv-cache-DY6hQ8Rf.cjs} +2 -2
  54. package/dist/{ld-Ckl2k3lF.js → ld-CZgNIUGN.js} +4 -3
  55. package/dist/{middleware-X0RaVmfv.cjs → middleware-BaoVtoMl.cjs} +210 -194
  56. package/dist/{middleware-Dv90Gwc-.js → middleware-BqPcChYv.js} +164 -154
  57. package/dist/middleware-CnrWiFJI.cjs +12 -0
  58. package/dist/{middleware-CdPISvYD.js → middleware-CxwWsgSo.js} +162 -165
  59. package/dist/middleware-DoFisLae.js +26 -0
  60. package/dist/middleware-ZN9cd_L8.js +12 -0
  61. package/dist/{mod-DMpuiKXi.d.cts → mod-0p9zUdzg.d.cts} +6 -6
  62. package/dist/mod-0qnPv4EC.d.cts +62 -0
  63. package/dist/{mod-DgxG-byT.d.cts → mod-BrS8tiad.d.cts} +2 -2
  64. package/dist/mod-C3SOvTD1.d.ts +64 -0
  65. package/dist/{mod-BoRKfJPE.d.cts → mod-D6pS5_xJ.d.cts} +4 -4
  66. package/dist/{mod-D5Z2tISD.d.ts → mod-jOa7W503.d.ts} +2 -2
  67. package/dist/{mod-Cdo6SYlJ.d.ts → mod-waqu-BL_.d.ts} +4 -4
  68. package/dist/{mod-aAE2wOWV.d.ts → mod-xc20HhMD.d.ts} +6 -6
  69. package/dist/mod.cjs +11 -93
  70. package/dist/mod.d.cts +11 -15
  71. package/dist/mod.d.ts +11 -15
  72. package/dist/mod.js +11 -15
  73. package/dist/nodeinfo/client.test.js +3 -4
  74. package/dist/nodeinfo/handler.test.js +22 -21
  75. package/dist/nodeinfo/mod.cjs +2 -2
  76. package/dist/nodeinfo/mod.d.cts +2 -2
  77. package/dist/nodeinfo/mod.d.ts +2 -2
  78. package/dist/nodeinfo/mod.js +2 -2
  79. package/dist/nodeinfo/types.test.js +2 -3
  80. package/dist/otel/exporter.test.js +893 -0
  81. package/dist/otel/mod.cjs +256 -0
  82. package/dist/otel/mod.d.cts +230 -0
  83. package/dist/otel/mod.d.ts +232 -0
  84. package/dist/otel/mod.js +255 -0
  85. package/dist/{owner-C8UEs7je.js → owner-BDvRiO5T.js} +44 -8
  86. package/dist/{owner-kQRGVXG1.d.ts → owner-BgI8C-VY.d.ts} +1 -2
  87. package/dist/{owner-B4HbyP8s.d.cts → owner-C-zfmVAD.d.cts} +1 -2
  88. package/dist/{proof-CDW6KgLA.js → proof-DzFse-Bn.js} +46 -11
  89. package/dist/{proof-CWKgvgzL.js → proof-XEPY5YKg.js} +3 -2
  90. package/dist/{proof-yc6sVqKg.cjs → proof-vmNsq1AQ.cjs} +63 -28
  91. package/dist/router-D9eI0s4b.js +118 -0
  92. package/dist/{send-z5jueBCW.js → send-BdhhZ2MN.js} +9 -4
  93. package/dist/sig/http.test.js +6 -7
  94. package/dist/sig/key.test.js +5 -5
  95. package/dist/sig/ld.test.js +6 -6
  96. package/dist/sig/mod.cjs +3 -5
  97. package/dist/sig/mod.d.cts +3 -5
  98. package/dist/sig/mod.d.ts +3 -5
  99. package/dist/sig/mod.js +3 -5
  100. package/dist/sig/owner.test.js +29 -6
  101. package/dist/sig/proof.test.js +6 -6
  102. package/dist/testing/mod.d.ts +70 -6999
  103. package/dist/testing/mod.js +4 -3
  104. package/dist/{transformers-CoBS-oFG.cjs → transformers-BjBg6Lag.cjs} +2 -2
  105. package/dist/{transformers-BFT6d7J5.js → transformers-N_ip_y4P.js} +2 -2
  106. package/dist/{types-BtUjyi5y.js → types-8l28uC8o.js} +30 -25
  107. package/dist/{types-CWgzGaqk.cjs → types-B6z6CqIz.cjs} +30 -25
  108. package/dist/{types-C2XVl6gj.js → types-CPz01LGH.js} +3 -3
  109. package/dist/utils/docloader.test.js +7 -8
  110. package/dist/utils/kv-cache.test.js +5 -3
  111. package/dist/utils/mod.cjs +3 -5
  112. package/dist/utils/mod.d.cts +3 -4
  113. package/dist/utils/mod.d.ts +3 -4
  114. package/dist/utils/mod.js +3 -5
  115. package/package.json +25 -36
  116. package/dist/actor-C6x8UgbE.cjs +0 -42079
  117. package/dist/actor-C76CDThG.js +0 -41647
  118. package/dist/actor-DqFajh9s.d.ts +0 -130
  119. package/dist/actor-DrFLTQdj.js +0 -146
  120. package/dist/actor-f2NtjyCg.d.cts +0 -128
  121. package/dist/fixtures/activitypub.academy/users/brauca_darradiul.json +0 -83
  122. package/dist/fixtures/example.com/announce.json +0 -6
  123. package/dist/fixtures/example.com/collection.json +0 -19
  124. package/dist/fixtures/example.com/create.json +0 -6
  125. package/dist/fixtures/example.com/cross-origin-actor.json +0 -6
  126. package/dist/fixtures/example.com/hong-gildong.json +0 -11
  127. package/dist/fixtures/example.com/invite.json +0 -7
  128. package/dist/fixtures/example.com/key.json +0 -7
  129. package/dist/fixtures/example.com/key2.json +0 -6
  130. package/dist/fixtures/example.com/object.json +0 -6
  131. package/dist/fixtures/example.com/orderedcollectionpage.json +0 -24
  132. package/dist/fixtures/example.com/paged/a.json +0 -13
  133. package/dist/fixtures/example.com/paged/b.json +0 -16
  134. package/dist/fixtures/example.com/paged-collection.json +0 -6
  135. package/dist/fixtures/example.com/person.json +0 -22
  136. package/dist/fixtures/example.com/person2.json +0 -40
  137. package/dist/fixtures/example.com/test.json +0 -5
  138. package/dist/fixtures/example.com/users/handle.json +0 -16
  139. package/dist/fixtures/example.com/wrong-type.json +0 -3
  140. package/dist/fixtures/media.example.com/avatars/test-avatar.jpg.json +0 -6
  141. package/dist/fixtures/oeee.cafe/ap/users/3609fd4e-d51d-4db8-9f04-4189815864dd.json +0 -24
  142. package/dist/fixtures/remote.domain/users/bob.json +0 -20
  143. package/dist/fixtures/server.example/users/alice.json +0 -20
  144. package/dist/fixtures/w3id.org/identity/v1.json +0 -152
  145. package/dist/fixtures/w3id.org/security/data-integrity/v1.json +0 -74
  146. package/dist/fixtures/w3id.org/security/multikey/v1.json +0 -35
  147. package/dist/fixtures/w3id.org/security/v1.json +0 -50
  148. package/dist/fixtures/wizard.casa/users/hongminhee.json +0 -69
  149. package/dist/fixtures/www.w3.org/ns/activitystreams.json +0 -379
  150. package/dist/fixtures/www.w3.org/ns/did/v1.json +0 -58
  151. package/dist/lookup-D17ydBQd.cjs +0 -265
  152. package/dist/lookup-DrCNfWHm.js +0 -253
  153. package/dist/lookup-yP6Lo5JV.js +0 -42178
  154. package/dist/middleware-BSCsvvh-.js +0 -26
  155. package/dist/middleware-GFpHLL1X.cjs +0 -15
  156. package/dist/middleware-pl3iXZpj.js +0 -15
  157. package/dist/mod-BlVovdcy.d.ts +0 -309
  158. package/dist/mod-BxRCHTz-.d.cts +0 -307
  159. package/dist/mod-C58MZ7Wx.d.cts +0 -113
  160. package/dist/mod-CcDPcLJW.d.cts +0 -1
  161. package/dist/mod-Ds0mpFZU.d.ts +0 -115
  162. package/dist/mod-bjzj5QIb.d.ts +0 -2
  163. package/dist/src/vocab/accept.yaml +0 -15
  164. package/dist/src/vocab/activity.yaml +0 -98
  165. package/dist/src/vocab/add.yaml +0 -16
  166. package/dist/src/vocab/announce.yaml +0 -30
  167. package/dist/src/vocab/application.yaml +0 -324
  168. package/dist/src/vocab/arrive.yaml +0 -15
  169. package/dist/src/vocab/article.yaml +0 -46
  170. package/dist/src/vocab/audio.yaml +0 -11
  171. package/dist/src/vocab/block.yaml +0 -16
  172. package/dist/src/vocab/chatmessage.yaml +0 -50
  173. package/dist/src/vocab/collection.yaml +0 -154
  174. package/dist/src/vocab/collectionpage.yaml +0 -55
  175. package/dist/src/vocab/create.yaml +0 -28
  176. package/dist/src/vocab/dataintegrityproof.yaml +0 -56
  177. package/dist/src/vocab/delete.yaml +0 -27
  178. package/dist/src/vocab/didservice.yaml +0 -22
  179. package/dist/src/vocab/dislike.yaml +0 -14
  180. package/dist/src/vocab/document.yaml +0 -31
  181. package/dist/src/vocab/emoji.yaml +0 -12
  182. package/dist/src/vocab/emojireact.yaml +0 -17
  183. package/dist/src/vocab/endpoints.yaml +0 -85
  184. package/dist/src/vocab/event.yaml +0 -11
  185. package/dist/src/vocab/export.yaml +0 -9
  186. package/dist/src/vocab/flag.yaml +0 -15
  187. package/dist/src/vocab/follow.yaml +0 -19
  188. package/dist/src/vocab/group.yaml +0 -324
  189. package/dist/src/vocab/hashtag.yaml +0 -14
  190. package/dist/src/vocab/ignore.yaml +0 -14
  191. package/dist/src/vocab/image.yaml +0 -9
  192. package/dist/src/vocab/intransitiveactivity.yaml +0 -15
  193. package/dist/src/vocab/invite.yaml +0 -14
  194. package/dist/src/vocab/join.yaml +0 -14
  195. package/dist/src/vocab/key.yaml +0 -28
  196. package/dist/src/vocab/leave.yaml +0 -14
  197. package/dist/src/vocab/like.yaml +0 -16
  198. package/dist/src/vocab/link.yaml +0 -101
  199. package/dist/src/vocab/listen.yaml +0 -12
  200. package/dist/src/vocab/mention.yaml +0 -9
  201. package/dist/src/vocab/move.yaml +0 -15
  202. package/dist/src/vocab/multikey.yaml +0 -36
  203. package/dist/src/vocab/note.yaml +0 -48
  204. package/dist/src/vocab/object.yaml +0 -404
  205. package/dist/src/vocab/offer.yaml +0 -15
  206. package/dist/src/vocab/orderedcollection.yaml +0 -39
  207. package/dist/src/vocab/orderedcollectionpage.yaml +0 -50
  208. package/dist/src/vocab/organization.yaml +0 -324
  209. package/dist/src/vocab/page.yaml +0 -11
  210. package/dist/src/vocab/person.yaml +0 -324
  211. package/dist/src/vocab/place.yaml +0 -75
  212. package/dist/src/vocab/profile.yaml +0 -26
  213. package/dist/src/vocab/propertyvalue.yaml +0 -32
  214. package/dist/src/vocab/question.yaml +0 -103
  215. package/dist/src/vocab/read.yaml +0 -13
  216. package/dist/src/vocab/reject.yaml +0 -14
  217. package/dist/src/vocab/relationship.yaml +0 -52
  218. package/dist/src/vocab/remove.yaml +0 -14
  219. package/dist/src/vocab/service.yaml +0 -324
  220. package/dist/src/vocab/source.yaml +0 -26
  221. package/dist/src/vocab/tentativeaccept.yaml +0 -14
  222. package/dist/src/vocab/tentativereject.yaml +0 -14
  223. package/dist/src/vocab/tombstone.yaml +0 -24
  224. package/dist/src/vocab/travel.yaml +0 -16
  225. package/dist/src/vocab/undo.yaml +0 -26
  226. package/dist/src/vocab/update.yaml +0 -58
  227. package/dist/src/vocab/video.yaml +0 -11
  228. package/dist/src/vocab/view.yaml +0 -13
  229. package/dist/testing/docloader.test.js +0 -22
  230. package/dist/vocab/actor.test.js +0 -5963
  231. package/dist/vocab/lookup.test.d.ts +0 -3
  232. package/dist/vocab/lookup.test.js +0 -454
  233. package/dist/vocab/mod.cjs +0 -86
  234. package/dist/vocab/mod.d.cts +0 -4
  235. package/dist/vocab/mod.d.ts +0 -6
  236. package/dist/vocab/mod.js +0 -9
  237. package/dist/vocab/type.test.d.ts +0 -3
  238. package/dist/vocab/type.test.js +0 -24
  239. package/dist/vocab/vocab.test.d.ts +0 -3
  240. package/dist/vocab/vocab.test.js +0 -9397
  241. package/dist/vocab-B4wXNBv8.js +0 -255
  242. package/dist/vocab-BCWe1Ih5.d.ts +0 -14905
  243. package/dist/vocab-CeDBzu-f.d.cts +0 -14903
  244. package/dist/vocab-Hqae4yux.cjs +0 -291
  245. package/dist/webfinger/handler.test.d.ts +0 -3
  246. package/dist/webfinger/lookup.test.d.ts +0 -3
  247. package/dist/webfinger/lookup.test.js +0 -193
  248. package/dist/webfinger/mod.cjs +0 -8
  249. package/dist/webfinger/mod.d.cts +0 -2
  250. package/dist/webfinger/mod.d.ts +0 -4
  251. package/dist/webfinger/mod.js +0 -8
  252. package/dist/webfinger-C72Y8lrh.js +0 -4
  253. package/dist/webfinger-vAtLmxOF.cjs +0 -4
  254. /package/dist/{collection-BzWsN9pB.js → collection-CcnIw1qY.js} +0 -0
  255. /package/dist/{testing/docloader.test.d.ts → federation/webfinger.test.d.ts} +0 -0
  256. /package/dist/{mod-CVgZgliM.d.ts → mod-1E3W847c.d.ts} +0 -0
  257. /package/dist/{mod-B-hUPT2N.d.cts → mod-C81L6_lQ.d.cts} +0 -0
  258. /package/dist/{negotiation-C4nFufNk.js → negotiation-5NPJL6zp.js} +0 -0
  259. /package/dist/{nodeinfo-BnthBobC.js → nodeinfo-BlLsRSiT.js} +0 -0
  260. /package/dist/{nodeinfo-CdN0rEnZ.cjs → nodeinfo-DuMYTpbZ.cjs} +0 -0
  261. /package/dist/{vocab/actor.test.d.ts → otel/exporter.test.d.ts} +0 -0
  262. /package/dist/{retry-CfF8Gn4d.js → retry-D4GJ670a.js} +0 -0
  263. /package/dist/{sig-C34-oHBl.js → sig-CwuONEzF.js} +0 -0
  264. /package/dist/{sig-YYj5tCnr.cjs → sig-DeXX2xnj.cjs} +0 -0
  265. /package/dist/{utils-DyRU1gdZ.cjs → utils-Db0ZmjcD.cjs} +0 -0
  266. /package/dist/{utils-D-Va7aXC.js → utils-Wranxuoe.js} +0 -0
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright 2024–2025 Hong Minhee
3
+ Copyright 2024–2026 Hong Minhee
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy of
6
6
  this software and associated documentation files (the "Software"), to deal in
package/README.md CHANGED
@@ -1,8 +1,7 @@
1
1
  <!-- deno-fmt-ignore-file -->
2
2
 
3
- ![](./logo.svg)
4
- Fedify: an ActivityPub server framework
5
- =======================================
3
+ ![](./logo.svg) Fedify: an ActivityPub server framework
4
+ =======================================================
6
5
 
7
6
  [![JSR][JSR badge]][JSR]
8
7
  [![npm][npm badge]][npm]
@@ -16,7 +15,7 @@ Fedify: an ActivityPub server framework
16
15
 
17
16
  Fedify is a TypeScript library for building federated server apps
18
17
  powered by [ActivityPub] and other standards, so-called [fediverse].[^1]
19
- It aims to eliminate the complexity and redundant boilerplate code when
18
+ It aims to eliminate the complexity and boilerplate code when
20
19
  building a federated server app, so that you can focus on your business logic
21
20
  and user experience.
22
21
 
@@ -29,20 +28,20 @@ Currently, Fedify provides the following features out of the box:
29
28
  - [Object Integrity Proofs][FEP-8b32] & [Linked Data Signatures]
30
29
  - Middlewares for handling webhooks
31
30
  - [NodeInfo] protocol
32
- - Special touch for interoperability with Mastodon and few other popular
33
- fediverse software
31
+ - Enhanced interoperability with Mastodon and other popular fediverse
32
+ software
34
33
  - Integration with various web frameworks
35
34
  - CLI toolchain for testing and debugging
36
35
 
37
36
  If you want to know more about the project, please take a look at the following
38
37
  resources:
39
38
 
40
- - [Installation](https://fedify.dev/install)
39
+ - [Installation]
41
40
  - Tutorials:
42
- [Learning the basics](https://fedify.dev/tutorial/basics) &
43
- [Creating a microblog](https://fedify.dev/tutorial/microblog)
41
+ [Learning the basics] &
42
+ [Creating a microblog]
44
43
  - [API reference][JSR]
45
- - [Examples](https://github.com/fedify-dev/fedify/tree/main/examples)
44
+ - [Examples]
46
45
 
47
46
  If you have any questions, suggestions, or feedback, please feel free to
48
47
  join our [Matrix chat space][Matrix] or [Discord server][Discord] or
@@ -51,16 +50,16 @@ join our [Matrix chat space][Matrix] or [Discord server][Discord] or
51
50
  [^1]: You may already know some of the networks in the fediverse, such as
52
51
  [Mastodon], [Lemmy], [Pixelfed], [PeerTube], and so on.
53
52
 
54
- [JSR]: https://jsr.io/@fedify/fedify
55
53
  [JSR badge]: https://jsr.io/badges/@fedify/fedify
56
- [npm]: https://www.npmjs.com/package/@fedify/fedify
54
+ [JSR]: https://jsr.io/@fedify/fedify
57
55
  [npm badge]: https://img.shields.io/npm/v/@fedify/fedify?logo=npm
58
- [GitHub Actions]: https://github.com/fedify-dev/fedify/actions/workflows/build.yaml
56
+ [npm]: https://www.npmjs.com/package/@fedify/fedify
59
57
  [GitHub Actions badge]: https://github.com/fedify-dev/fedify/actions/workflows/build.yaml/badge.svg
60
- [Matrix]: https://matrix.to/#/#fedify:matrix.org
58
+ [GitHub Actions]: https://github.com/fedify-dev/fedify/actions/workflows/build.yaml
61
59
  [Matrix badge]: https://img.shields.io/matrix/fedify%3Amatrix.org?logo=matrix
62
- [Discord]: https://discord.gg/bhtwpzURwd
60
+ [Matrix]: https://matrix.to/#/#fedify:matrix.org
63
61
  [Discord badge]: https://img.shields.io/discord/1295652627505217647?logo=discord&cacheSeconds=60
62
+ [Discord]: https://discord.gg/bhtwpzURwd
64
63
  [@fedify@hollo.social badge]: https://fedi-badge.deno.dev/@fedify@hollo.social/followers.svg
65
64
  [@fedify@hollo.social]: https://hollo.social/@fedify
66
65
  [Fedify Demo]: https://dash.deno.com/playground/fedify-demo
@@ -73,8 +72,13 @@ join our [Matrix chat space][Matrix] or [Discord server][Discord] or
73
72
  [FEP-8b32]: https://w3id.org/fep/8b32
74
73
  [Linked Data Signatures]: https://web.archive.org/web/20170923124140/https://w3c-dvcg.github.io/ld-signatures/
75
74
  [NodeInfo]: https://nodeinfo.diaspora.software/
75
+ [Installation]: https://fedify.dev/install
76
+ [Learning the basics]: https://fedify.dev/tutorial/basics
77
+ [Creating a microblog]: https://fedify.dev/tutorial/microblog
78
+ [Examples]: https://github.com/fedify-dev/fedify/tree/main/examples
76
79
  [GitHub Discussions]: https://github.com/fedify-dev/fedify/discussions
77
80
  [#Fedify]: https://mastodon.social/tags/fedify
81
+
78
82
  [Mastodon]: https://joinmastodon.org/
79
83
  [Lemmy]: https://join-lemmy.org/
80
84
  [Pixelfed]: https://pixelfed.org/
@@ -85,30 +89,38 @@ Packages
85
89
  --------
86
90
 
87
91
  Fedify is a monorepo that contains several packages, each of which provides
88
- different features and functionalities. The main package is *@fedify/fedify*,
92
+ different features. The main package is *@fedify/fedify*,
89
93
  which provides the core functionality of the framework. Other packages provide
90
94
  integrations with various web frameworks, database drivers, and other features.
91
95
  Here is the list of packages:
92
96
 
93
- | Package | JSR | npm | Description |
94
- | --------------------------------------- | ---------------------------- | ---------------------------- | --------------------------------------- |
95
- | [@fedify/fedify](/packages/fedify/) | [JSR] | [npm] | The core framework of Fedify |
96
- | [@fedify/cli](/packages/cli/) | [JSR][jsr:@fedify/cli] | [npm][npm:@fedify/cli] | CLI toolchain for testing and debugging |
97
- | [@fedify/amqp](/packages/amqp/) | [JSR][jsr:@fedify/amqp] | [npm][npm:@fedify/amqp] | AMQP/RabbitMQ driver |
98
- | [@fedify/cfworkers](/packages/cfworkers/) | [JSR][jsr:@fedify/cfworkers] | [npm][npm:@fedify/cfworkers] | Cloudflare Workers integration |
99
- | [@fedify/denokv](/packages/denokv/) | [JSR][jsr:@fedify/denokv] | | Deno KV integration |
100
- | [@fedify/elysia](/packages/elysia/) | | [npm][npm:@fedify/elysia] | Elysia integration |
101
- | [@fedify/express](/packages/express/) | [JSR][jsr:@fedify/express] | [npm][npm:@fedify/express] | Express integration |
102
- | [@fedify/h3](/packages/h3/) | [JSR][jsr:@fedify/h3] | [npm][npm:@fedify/h3] | H3 integration |
103
- | [@fedify/hono](/packages/hono/) | [JSR][jsr:@fedify/hono] | [npm][npm:@fedify/hono] | Hono integration |
104
- | [@fedify/koa](/packages/koa/) | [JSR][jsr:@fedify/koa] | [npm][npm:@fedify/koa] | Koa integration |
105
- | [@fedify/nestjs](/packages/nestjs/) | | [npm][npm:@fedify/nestjs] | NestJS integration |
106
- | [@fedify/next](/packages/next/) | | [npm][npm:@fedify/next] | Next.js integration |
107
- | [@fedify/postgres](/packages/postgres/) | [JSR][jsr:@fedify/postgres] | [npm][npm:@fedify/postgres] | PostgreSQL driver |
108
- | [@fedify/redis](/packages/redis/) | [JSR][jsr:@fedify/redis] | [npm][npm:@fedify/redis] | Redis driver |
109
- | [@fedify/sqlite](/packages/sqlite/) | [JSR][jsr:@fedify/sqlite] | [npm][npm:@fedify/sqlite] | SQLite driver |
110
- | [@fedify/sveltekit](/packages/sveltekit/) | [JSR][jsr:@fedify/sveltekit] | [npm][npm:@fedify/sveltekit] | SvelteKit integration |
111
- | [@fedify/testing](/packages/testing/) | [JSR][jsr:@fedify/testing] | [npm][npm:@fedify/testing] | Testing utilities |
97
+ | Package | JSR | npm | Description |
98
+ | ------------------------------------------------- | -------------------------------- | -------------------------------- | ---------------------------------------- |
99
+ | [@fedify/fedify](/packages/fedify/) | [JSR] | [npm] | The core framework of Fedify |
100
+ | [@fedify/cli](/packages/cli/) | [JSR][jsr:@fedify/cli] | [npm][npm:@fedify/cli] | CLI toolchain for testing and debugging |
101
+ | [@fedify/amqp](/packages/amqp/) | [JSR][jsr:@fedify/amqp] | [npm][npm:@fedify/amqp] | AMQP/RabbitMQ driver |
102
+ | [@fedify/cfworkers](/packages/cfworkers/) | [JSR][jsr:@fedify/cfworkers] | [npm][npm:@fedify/cfworkers] | Cloudflare Workers integration |
103
+ | [@fedify/denokv](/packages/denokv/) | [JSR][jsr:@fedify/denokv] | | Deno KV integration |
104
+ | [@fedify/elysia](/packages/elysia/) | | [npm][npm:@fedify/elysia] | Elysia integration |
105
+ | [@fedify/express](/packages/express/) | [JSR][jsr:@fedify/express] | [npm][npm:@fedify/express] | Express integration |
106
+ | [@fedify/fastify](/packages/fastify/) | [JSR][jsr:@fedify/fastify] | [npm][npm:@fedify/fastify] | Fastify integration |
107
+ | [@fedify/fresh](/packages/fresh/) | [JSR][jsr:@fedify/fresh] | | Fresh integration |
108
+ | [@fedify/h3](/packages/h3/) | [JSR][jsr:@fedify/h3] | [npm][npm:@fedify/h3] | H3 integration |
109
+ | [@fedify/hono](/packages/hono/) | [JSR][jsr:@fedify/hono] | [npm][npm:@fedify/hono] | Hono integration |
110
+ | [@fedify/koa](/packages/koa/) | [JSR][jsr:@fedify/koa] | [npm][npm:@fedify/koa] | Koa integration |
111
+ | [@fedify/lint](/packages/lint/) | [JSR][jsr:@fedify/lint] | [npm][npm:@fedify/lint] | Linting utilities |
112
+ | [@fedify/nestjs](/packages/nestjs/) | | [npm][npm:@fedify/nestjs] | NestJS integration |
113
+ | [@fedify/next](/packages/next/) | | [npm][npm:@fedify/next] | Next.js integration |
114
+ | [@fedify/postgres](/packages/postgres/) | [JSR][jsr:@fedify/postgres] | [npm][npm:@fedify/postgres] | PostgreSQL driver |
115
+ | [@fedify/redis](/packages/redis/) | [JSR][jsr:@fedify/redis] | [npm][npm:@fedify/redis] | Redis driver |
116
+ | [@fedify/relay](/packages/relay/) | [JSR][jsr:@fedify/relay] | [npm][npm:@fedify/relay] | ActivityPub relay support |
117
+ | [@fedify/sqlite](/packages/sqlite/) | [JSR][jsr:@fedify/sqlite] | [npm][npm:@fedify/sqlite] | SQLite driver |
118
+ | [@fedify/sveltekit](/packages/sveltekit/) | [JSR][jsr:@fedify/sveltekit] | [npm][npm:@fedify/sveltekit] | SvelteKit integration |
119
+ | [@fedify/testing](/packages/testing/) | [JSR][jsr:@fedify/testing] | [npm][npm:@fedify/testing] | Testing utilities |
120
+ | [@fedify/vocab](/packages/vocab/) | [JSR][jsr:@fedify/vocab] | [npm][npm:@fedify/vocab] | Activity Vocabulary library |
121
+ | [@fedify/vocab-runtime](/packages/vocab-runtime/) | [JSR][jsr:@fedify/vocab-runtime] | [npm][npm:@fedify/vocab-runtime] | Runtime library for code-generated vocab |
122
+ | [@fedify/vocab-tools](/packages/vocab-tools/) | [JSR][jsr:@fedify/vocab-tools] | [npm][npm:@fedify/vocab-tools] | Code generation tools for Activity Vocab |
123
+ | [@fedify/webfinger](/packages/webfinger/) | [JSR][jsr:@fedify/webfinger] | [npm][npm:@fedify/webfinger] | WebFinger client library for ActivityPub |
112
124
 
113
125
  [jsr:@fedify/cli]: https://jsr.io/@fedify/cli
114
126
  [npm:@fedify/cli]: https://www.npmjs.com/package/@fedify/cli
@@ -120,24 +132,39 @@ Here is the list of packages:
120
132
  [npm:@fedify/elysia]: https://www.npmjs.com/package/@fedify/elysia
121
133
  [jsr:@fedify/express]: https://jsr.io/@fedify/express
122
134
  [npm:@fedify/express]: https://www.npmjs.com/package/@fedify/express
135
+ [jsr:@fedify/fastify]: https://jsr.io/@fedify/fastify
136
+ [npm:@fedify/fastify]: https://www.npmjs.com/package/@fedify/fastify
137
+ [jsr:@fedify/fresh]: https://jsr.io/@fedify/fresh
123
138
  [jsr:@fedify/h3]: https://jsr.io/@fedify/h3
124
139
  [npm:@fedify/h3]: https://www.npmjs.com/package/@fedify/h3
125
140
  [jsr:@fedify/hono]: https://jsr.io/@fedify/hono
126
141
  [npm:@fedify/hono]: https://www.npmjs.com/package/@fedify/hono
127
142
  [jsr:@fedify/koa]: https://jsr.io/@fedify/koa
128
143
  [npm:@fedify/koa]: https://www.npmjs.com/package/@fedify/koa
144
+ [jsr:@fedify/lint]: https://jsr.io/@fedify/lint
145
+ [npm:@fedify/lint]: https://www.npmjs.com/package/@fedify/lint
129
146
  [npm:@fedify/nestjs]: https://www.npmjs.com/package/@fedify/nestjs
130
147
  [npm:@fedify/next]: https://www.npmjs.com/package/@fedify/next
131
148
  [jsr:@fedify/postgres]: https://jsr.io/@fedify/postgres
132
149
  [npm:@fedify/postgres]: https://www.npmjs.com/package/@fedify/postgres
133
150
  [jsr:@fedify/redis]: https://jsr.io/@fedify/redis
134
151
  [npm:@fedify/redis]: https://www.npmjs.com/package/@fedify/redis
152
+ [jsr:@fedify/relay]: https://jsr.io/@fedify/relay
153
+ [npm:@fedify/relay]: https://www.npmjs.com/package/@fedify/relay
135
154
  [jsr:@fedify/sqlite]: https://jsr.io/@fedify/sqlite
136
155
  [npm:@fedify/sqlite]: https://www.npmjs.com/package/@fedify/sqlite
137
156
  [jsr:@fedify/sveltekit]: https://jsr.io/@fedify/sveltekit
138
157
  [npm:@fedify/sveltekit]: https://www.npmjs.com/package/@fedify/sveltekit
139
158
  [jsr:@fedify/testing]: https://jsr.io/@fedify/testing
140
159
  [npm:@fedify/testing]: https://www.npmjs.com/package/@fedify/testing
160
+ [jsr:@fedify/vocab]: https://jsr.io/@fedify/vocab
161
+ [npm:@fedify/vocab]: https://www.npmjs.com/package/@fedify/vocab
162
+ [jsr:@fedify/vocab-runtime]: https://jsr.io/@fedify/vocab-runtime
163
+ [npm:@fedify/vocab-runtime]: https://www.npmjs.com/package/@fedify/vocab-runtime
164
+ [jsr:@fedify/vocab-tools]: https://jsr.io/@fedify/vocab-tools
165
+ [npm:@fedify/vocab-tools]: https://www.npmjs.com/package/@fedify/vocab-tools
166
+ [jsr:@fedify/webfinger]: https://jsr.io/@fedify/webfinger
167
+ [npm:@fedify/webfinger]: https://www.npmjs.com/package/@fedify/webfinger
141
168
 
142
169
 
143
170
  Sponsors
@@ -149,7 +176,10 @@ financial contributors:[^2]
149
176
 
150
177
  [^2]: Those lists are automatically updated every hour.
151
178
 
179
+ <!-- hongdown-disable -->
180
+
152
181
  <!-- cSpell: disable -->
182
+
153
183
  <!-- DO NOT EDIT(h3): this section is automatically generated by the script -->
154
184
 
155
185
  ### Corporate sponsors
@@ -172,8 +202,11 @@ Robin Riley, yamanoku, Encyclia, taye, okin, Andy Piper, box464, Evan Prodromou,
172
202
  Robin Riley, Markus P, Nils Bergmann, Rameez
173
203
 
174
204
  <!-- /DO NOT EDIT -->
205
+
175
206
  <!-- cSpell: enable -->
176
207
 
208
+ <!-- hongdown-enable -->
209
+
177
210
  ### Become a sponsor
178
211
 
179
212
  We welcome financial contributions to help us maintain and improve this project.
@@ -3,9 +3,11 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { Router, RouterError, deno_default, getTypeId } from "./lookup-yP6Lo5JV.js";
7
- import { InboxListenerSet } from "./inbox-BwIgnk8R.js";
6
+ import { deno_default } from "./deno-i60L3ZJW.js";
7
+ import { Router, RouterError } from "./router-D9eI0s4b.js";
8
+ import { InboxListenerSet } from "./inbox-CxrUTds4.js";
8
9
  import { getLogger } from "@logtape/logtape";
10
+ import { getTypeId } from "@fedify/vocab";
9
11
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
10
12
 
11
13
  //#region src/federation/builder.ts
@@ -42,7 +44,7 @@ var FederationBuilderImpl = class {
42
44
  this.collectionTypeIds = {};
43
45
  }
44
46
  async build(options) {
45
- const { FederationImpl } = await import("./middleware-BSCsvvh-.js");
47
+ const { FederationImpl } = await import("./middleware-DoFisLae.js");
46
48
  const f = new FederationImpl(options);
47
49
  const trailingSlashInsensitiveValue = f.router.trailingSlashInsensitive;
48
50
  f.router = this.router.clone();
@@ -16,29 +16,29 @@ interface NodeInfo {
16
16
  /**
17
17
  * Metadata about server software in use.
18
18
  */
19
- software: Software;
19
+ readonly software: Software;
20
20
  /**
21
21
  * The protocols supported on this server. At least one protocol must be
22
22
  * supported.
23
23
  */
24
- protocols: Protocol[];
24
+ readonly protocols: readonly Protocol[];
25
25
  /**
26
26
  * The third party sites this server can connect to via their application API.
27
27
  */
28
- services?: Services;
28
+ readonly services?: Services;
29
29
  /**
30
30
  * Whether this server allows open self-registration. Defaults to `false`.
31
31
  */
32
- openRegistrations?: boolean;
32
+ readonly openRegistrations?: boolean;
33
33
  /**
34
34
  * Usage statistics for this server.
35
35
  */
36
- usage: Usage;
36
+ readonly usage: Usage;
37
37
  /**
38
38
  * Free form key value pairs for software specific values.
39
39
  * Clients should not rely on any specific key present.
40
40
  */
41
- metadata?: Record<string, JsonValue>;
41
+ readonly metadata?: Readonly<Record<string, JsonValue>>;
42
42
  }
43
43
  /**
44
44
  * Metadata about server software in use.
@@ -48,19 +48,19 @@ interface Software {
48
48
  * The canonical name of this server software. This must comply with
49
49
  * pattern `/^[a-z0-9-]+$/`.
50
50
  */
51
- name: string;
51
+ readonly name: string;
52
52
  /**
53
53
  * The version of this server software.
54
54
  */
55
- version: string;
55
+ readonly version: string;
56
56
  /**
57
57
  * The URL of the source code repository of this server software.
58
58
  */
59
- repository?: URL;
59
+ readonly repository?: URL;
60
60
  /**
61
61
  * The URL of the homepage of this server software.
62
62
  */
63
- homepage?: URL;
63
+ readonly homepage?: URL;
64
64
  }
65
65
  /**
66
66
  * The protocols supported on this server.
@@ -74,12 +74,12 @@ interface Services {
74
74
  * The third party sites this server can retrieve messages from for combined
75
75
  * display with regular traffic.
76
76
  */
77
- inbound?: InboundService[];
77
+ readonly inbound?: readonly InboundService[];
78
78
  /**
79
79
  * The third party sites this server can publish messages to on the behalf
80
80
  * of a user.
81
81
  */
82
- outbound?: OutboundService[];
82
+ readonly outbound?: readonly OutboundService[];
83
83
  }
84
84
  /**
85
85
  * The third party sites this server can retrieve messages from for combined
@@ -98,33 +98,33 @@ interface Usage {
98
98
  /**
99
99
  * Statistics about the users of this server.
100
100
  */
101
- users: {
101
+ readonly users: {
102
102
  /**
103
103
  * The total amount of on this server registered users. This number
104
104
  * has to be an integer greater than or equal to zero.
105
105
  */
106
- total?: number;
106
+ readonly total?: number;
107
107
  /**
108
108
  * The amount of users that signed in at least once in the last 180 days.
109
109
  * This number has to be an integer greater than or equal to zero.
110
110
  */
111
- activeHalfyear?: number;
111
+ readonly activeHalfyear?: number;
112
112
  /**
113
113
  * The amount of users that signed in at least once in the last 30 days.
114
114
  * This number has to be an integer greater than or equal to zero.
115
115
  */
116
- activeMonth?: number;
116
+ readonly activeMonth?: number;
117
117
  };
118
118
  /**
119
119
  * The amount of posts that were made by users that are registered on this
120
120
  * server. This number has to be an integer greater than or equal to zero.
121
121
  */
122
- localPosts: number;
122
+ readonly localPosts: number;
123
123
  /**
124
124
  * The amount of comments that were made by users that are registered on this
125
125
  * server. This number has to be an integer greater than or equal to zero.
126
126
  */
127
- localComments: number;
127
+ readonly localComments: number;
128
128
  }
129
129
  /**
130
130
  * Converts a {@link NodeInfo} object to a JSON value.
@@ -3,8 +3,8 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { getUserAgent } from "@fedify/vocab-runtime";
7
6
  import { getLogger } from "@logtape/logtape";
7
+ import { getUserAgent } from "@fedify/vocab-runtime";
8
8
 
9
9
  //#region src/nodeinfo/client.ts
10
10
  const logger = getLogger([
@@ -111,15 +111,14 @@ function parseNodeInfo(data, options = {}) {
111
111
  if (typeof data.metadata === "object" && data.metadata != null) metadata = Object.fromEntries(Object.entries(data.metadata));
112
112
  else if (!options.tryBestEffort) return null;
113
113
  }
114
- const result = {
114
+ return {
115
115
  software,
116
116
  protocols,
117
- usage
117
+ usage,
118
+ ...services != null && { services },
119
+ ...openRegistrations != null && { openRegistrations },
120
+ ...metadata != null && { metadata }
118
121
  };
119
- if (services != null) result.services = services;
120
- if (openRegistrations != null) result.openRegistrations = openRegistrations;
121
- if (metadata != null) result.metadata = metadata;
122
- return result;
123
122
  }
124
123
  function parseSoftware(data, options = {}) {
125
124
  if (typeof data !== "object" || data == null) {
@@ -155,13 +154,12 @@ function parseSoftware(data, options = {}) {
155
154
  }
156
155
  else if (!options.tryBestEffort) return null;
157
156
  }
158
- const result = {
157
+ return {
159
158
  name,
160
- version
159
+ version,
160
+ ...repository != null && { repository },
161
+ ...homepage != null && { homepage }
161
162
  };
162
- if (repository != null) result.repository = repository;
163
- if (homepage != null) result.homepage = homepage;
164
- return result;
165
163
  }
166
164
  function parseProtocol(data) {
167
165
  if (data === "activitypub" || data === "buddycloud" || data === "dfrn" || data === "diaspora" || data === "libertree" || data === "ostatus" || data === "pumpio" || data === "tent" || data === "xmpp" || data === "zot") return data;
@@ -184,10 +182,10 @@ function parseServices(data, options = {}) {
184
182
  outbound = os.filter((o) => o != null);
185
183
  if (os.length > outbound.length && !options.tryBestEffort) return null;
186
184
  }
187
- const result = {};
188
- if (inbound != null) result.inbound = inbound;
189
- if (outbound != null) result.outbound = outbound;
190
- return result;
185
+ return {
186
+ ...inbound != null && { inbound },
187
+ ...outbound != null && { outbound }
188
+ };
191
189
  }
192
190
  function parseInboundService(data) {
193
191
  if (data === "atom1.0" || data === "gnusocial" || data === "imap" || data === "pnut" || data === "pop3" || data === "pumpio" || data === "rss2.0" || data === "twitter") return data;
@@ -199,33 +197,40 @@ function parseOutboundService(data) {
199
197
  }
200
198
  function parseUsage(data, options = {}) {
201
199
  if (typeof data !== "object" || data == null) return null;
202
- const users = {};
200
+ let total;
201
+ let activeHalfyear;
202
+ let activeMonth;
203
203
  if ("users" in data && typeof data.users === "object" && data.users != null) {
204
- if ("total" in data.users) if (typeof data.users.total === "number") users.total = data.users.total;
204
+ if ("total" in data.users) if (typeof data.users.total === "number") total = data.users.total;
205
205
  else {
206
206
  if (!options.tryBestEffort) return null;
207
207
  if (typeof data.users.total === "string") {
208
208
  const n = parseInt(data.users.total);
209
- if (!isNaN(n)) users.total = n;
209
+ if (!isNaN(n)) total = n;
210
210
  }
211
211
  }
212
- if ("activeHalfyear" in data.users) if (typeof data.users.activeHalfyear === "number") users.activeHalfyear = data.users.activeHalfyear;
212
+ if ("activeHalfyear" in data.users) if (typeof data.users.activeHalfyear === "number") activeHalfyear = data.users.activeHalfyear;
213
213
  else {
214
214
  if (!options.tryBestEffort) return null;
215
215
  if (typeof data.users.activeHalfyear === "string") {
216
216
  const n = parseInt(data.users.activeHalfyear);
217
- if (!isNaN(n)) users.activeHalfyear = n;
217
+ if (!isNaN(n)) activeHalfyear = n;
218
218
  }
219
219
  }
220
- if ("activeMonth" in data.users) if (typeof data.users.activeMonth === "number") users.activeMonth = data.users.activeMonth;
220
+ if ("activeMonth" in data.users) if (typeof data.users.activeMonth === "number") activeMonth = data.users.activeMonth;
221
221
  else {
222
222
  if (!options.tryBestEffort) return null;
223
223
  if (typeof data.users.activeMonth === "string") {
224
224
  const n = parseInt(data.users.activeMonth);
225
- if (!isNaN(n)) users.activeMonth = n;
225
+ if (!isNaN(n)) activeMonth = n;
226
226
  }
227
227
  }
228
228
  } else if (!options.tryBestEffort) return null;
229
+ const users = {
230
+ ...total != null && { total },
231
+ ...activeHalfyear != null && { activeHalfyear },
232
+ ...activeMonth != null && { activeMonth }
233
+ };
229
234
  let localPosts = 0;
230
235
  if ("localPosts" in data) if (typeof data.localPosts === "number") localPosts = data.localPosts;
231
236
  else {
@@ -14,29 +14,29 @@ interface NodeInfo {
14
14
  /**
15
15
  * Metadata about server software in use.
16
16
  */
17
- software: Software;
17
+ readonly software: Software;
18
18
  /**
19
19
  * The protocols supported on this server. At least one protocol must be
20
20
  * supported.
21
21
  */
22
- protocols: Protocol[];
22
+ readonly protocols: readonly Protocol[];
23
23
  /**
24
24
  * The third party sites this server can connect to via their application API.
25
25
  */
26
- services?: Services;
26
+ readonly services?: Services;
27
27
  /**
28
28
  * Whether this server allows open self-registration. Defaults to `false`.
29
29
  */
30
- openRegistrations?: boolean;
30
+ readonly openRegistrations?: boolean;
31
31
  /**
32
32
  * Usage statistics for this server.
33
33
  */
34
- usage: Usage;
34
+ readonly usage: Usage;
35
35
  /**
36
36
  * Free form key value pairs for software specific values.
37
37
  * Clients should not rely on any specific key present.
38
38
  */
39
- metadata?: Record<string, JsonValue>;
39
+ readonly metadata?: Readonly<Record<string, JsonValue>>;
40
40
  }
41
41
  /**
42
42
  * Metadata about server software in use.
@@ -46,19 +46,19 @@ interface Software {
46
46
  * The canonical name of this server software. This must comply with
47
47
  * pattern `/^[a-z0-9-]+$/`.
48
48
  */
49
- name: string;
49
+ readonly name: string;
50
50
  /**
51
51
  * The version of this server software.
52
52
  */
53
- version: string;
53
+ readonly version: string;
54
54
  /**
55
55
  * The URL of the source code repository of this server software.
56
56
  */
57
- repository?: URL;
57
+ readonly repository?: URL;
58
58
  /**
59
59
  * The URL of the homepage of this server software.
60
60
  */
61
- homepage?: URL;
61
+ readonly homepage?: URL;
62
62
  }
63
63
  /**
64
64
  * The protocols supported on this server.
@@ -72,12 +72,12 @@ interface Services {
72
72
  * The third party sites this server can retrieve messages from for combined
73
73
  * display with regular traffic.
74
74
  */
75
- inbound?: InboundService[];
75
+ readonly inbound?: readonly InboundService[];
76
76
  /**
77
77
  * The third party sites this server can publish messages to on the behalf
78
78
  * of a user.
79
79
  */
80
- outbound?: OutboundService[];
80
+ readonly outbound?: readonly OutboundService[];
81
81
  }
82
82
  /**
83
83
  * The third party sites this server can retrieve messages from for combined
@@ -96,33 +96,33 @@ interface Usage {
96
96
  /**
97
97
  * Statistics about the users of this server.
98
98
  */
99
- users: {
99
+ readonly users: {
100
100
  /**
101
101
  * The total amount of on this server registered users. This number
102
102
  * has to be an integer greater than or equal to zero.
103
103
  */
104
- total?: number;
104
+ readonly total?: number;
105
105
  /**
106
106
  * The amount of users that signed in at least once in the last 180 days.
107
107
  * This number has to be an integer greater than or equal to zero.
108
108
  */
109
- activeHalfyear?: number;
109
+ readonly activeHalfyear?: number;
110
110
  /**
111
111
  * The amount of users that signed in at least once in the last 30 days.
112
112
  * This number has to be an integer greater than or equal to zero.
113
113
  */
114
- activeMonth?: number;
114
+ readonly activeMonth?: number;
115
115
  };
116
116
  /**
117
117
  * The amount of posts that were made by users that are registered on this
118
118
  * server. This number has to be an integer greater than or equal to zero.
119
119
  */
120
- localPosts: number;
120
+ readonly localPosts: number;
121
121
  /**
122
122
  * The amount of comments that were made by users that are registered on this
123
123
  * server. This number has to be an integer greater than or equal to zero.
124
124
  */
125
- localComments: number;
125
+ readonly localComments: number;
126
126
  }
127
127
  /**
128
128
  * Converts a {@link NodeInfo} object to a JSON value.
@@ -2,7 +2,7 @@
2
2
  const { Temporal } = require("@js-temporal/polyfill");
3
3
  const { URLPattern } = require("urlpattern-polyfill");
4
4
 
5
- const require_transformers = require('../transformers-CoBS-oFG.cjs');
5
+ const require_transformers = require('../transformers-BjBg6Lag.cjs');
6
6
  require('../compat-DmDDELst.cjs');
7
7
 
8
8
  exports.actorDehydrator = require_transformers.actorDehydrator;
@@ -1,11 +1,7 @@
1
- import "../client-94iWEfQa.cjs";
2
- import "../vocab-CeDBzu-f.cjs";
3
- import "../actor-f2NtjyCg.cjs";
4
- import "../http-M8k5mKc0.cjs";
5
- import "../owner-B4HbyP8s.cjs";
6
- import "../mod-BxRCHTz-.cjs";
7
- import "../mod-C58MZ7Wx.cjs";
8
- import { ActivityTransformer } from "../context-PxGADCsD.cjs";
9
- import "../kv-Bxr0Q87_.cjs";
10
- import { actorDehydrator, autoIdAssigner, getDefaultActivityTransformers } from "../mod-BoRKfJPE.cjs";
1
+ import "../client-by-PEGAJ.cjs";
2
+ import "../http-ClB3pLcL.cjs";
3
+ import "../owner-C-zfmVAD.cjs";
4
+ import { ActivityTransformer } from "../context-CrB9RFy5.cjs";
5
+ import "../kv-B4vFhIYL.cjs";
6
+ import { actorDehydrator, autoIdAssigner, getDefaultActivityTransformers } from "../mod-D6pS5_xJ.cjs";
11
7
  export { ActivityTransformer, actorDehydrator, autoIdAssigner, getDefaultActivityTransformers };
@@ -1,13 +1,9 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
- import "../client-BsGzbnV-.js";
4
- import "../vocab-BCWe1Ih5.js";
5
- import "../actor-DqFajh9s.js";
6
- import "../http-BbO0ejuk.js";
7
- import "../owner-kQRGVXG1.js";
8
- import "../mod-BlVovdcy.js";
9
- import "../mod-Ds0mpFZU.js";
10
- import { ActivityTransformer } from "../context-V-XS2_6O.js";
11
- import "../kv-BKNZ-Tb-.js";
12
- import { actorDehydrator, autoIdAssigner, getDefaultActivityTransformers } from "../mod-Cdo6SYlJ.js";
3
+ import "../client-CUTUGgvJ.js";
4
+ import "../http-DLBDPal9.js";
5
+ import "../owner-BgI8C-VY.js";
6
+ import { ActivityTransformer } from "../context-C7vzWilY.js";
7
+ import "../kv-CYySNrsn.js";
8
+ import { actorDehydrator, autoIdAssigner, getDefaultActivityTransformers } from "../mod-waqu-BL_.js";
13
9
  export { ActivityTransformer, actorDehydrator, autoIdAssigner, getDefaultActivityTransformers };
@@ -2,7 +2,7 @@
2
2
  import { Temporal } from "@js-temporal/polyfill";
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
 
5
- import { actorDehydrator, autoIdAssigner, getDefaultActivityTransformers } from "../transformers-BFT6d7J5.js";
5
+ import { actorDehydrator, autoIdAssigner, getDefaultActivityTransformers } from "../transformers-N_ip_y4P.js";
6
6
  import "../compat-nxUqe4Z-.js";
7
7
 
8
8
  export { actorDehydrator, autoIdAssigner, getDefaultActivityTransformers };