guile-fediverse.texi
1 | \input texinfo |
2 | @setfilename guile-fediverse.info |
3 | @documentencoding UTF-8 |
4 | @settitle guile-fediverse |
5 | |
6 | @include version.texi |
7 | |
8 | @copying |
9 | Copyright @copyright{} 2020 Julien Lepiller |
10 | |
11 | @quotation |
12 | Permission is granted to copy, distribute and/or modify this document |
13 | under the terms of the GNU Free Documentation License, Version 1.3 or |
14 | any later version published by the Free Software Foundation; with no |
15 | Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A |
16 | copy of the license is included in the section entitled ``GNU Free |
17 | Documentation License''. |
18 | @end quotation |
19 | @end copying |
20 | |
21 | @titlepage |
22 | @end titlepage |
23 | |
24 | @contents |
25 | |
26 | @node Top |
27 | @top guile-fediverse |
28 | |
29 | This document describes guile-fediverse version @value{VERSION}, a guile |
30 | implementation of some algorithms and specifications used in the Fediverse. |
31 | |
32 | @menu |
33 | * Introduction:: What is the Fediverse? |
34 | * API Reference:: Description of the library interface. |
35 | |
36 | @detailmenu |
37 | --- The Detailed Node Listing --- |
38 | |
39 | API Reference |
40 | |
41 | * ActivityStreams API:: Encoding and Decoding Activities. |
42 | * Webfinger API:: Finding resource locations. |
43 | |
44 | @end detailmenu |
45 | @end menu |
46 | |
47 | @node Introduction |
48 | @chapter Introduction |
49 | |
50 | The Fediverse is a collection of applications and servers that provide a social |
51 | media platform and similar services. They individually work as a platform, |
52 | with users (identities) and services and collectivelly form a bigger social |
53 | network, the Fedivere, by the use of different federating protocols. Some |
54 | of them are implemented in this library. |
55 | |
56 | If you are new to the concept of the Fediverse, you should try out one of the |
57 | great servers that provide service for Mastodon (the most well-known server), |
58 | Pleroma (a micro-blogging platform), Peertube (a video sharing platform), and |
59 | many more! With one account on one of these platforms, you can interact with |
60 | any account on any of these other platforms. Imagine commenting a Peertube |
61 | video from Mastodon and sharing it with a friend on Pleroma :) |
62 | |
63 | @node API Reference |
64 | @chapter API Reference |
65 | |
66 | @node ActivityStreams API |
67 | @section ActivityStreams API |
68 | |
69 | TODO |
70 | |
71 | @node Webfinger API |
72 | @section Webfinger API |
73 | |
74 | Webfinger is a protocol that allows you to query resource location at a |
75 | well-known end-point. The protocol is described in detail in |
76 | @uref{RFC 7033, https://tools.ietf.org/html/rfc7033}. |
77 | |
78 | This library provides a small interface to use this protocol in the |
79 | @code{(webfinger webfinger)} module. |
80 | |
81 | First of all, webfinger answers are in the form of a @dfn{JRD} record, meaning |
82 | JSON Resource Descriptor. This record is encoded in the @code{<jrd-record>} |
83 | data type: |
84 | |
85 | @deffn {Datatype} <jrd-record> |
86 | |
87 | @table @asis |
88 | @item @code{subject} |
89 | The resource that was requested and for which the answer is given. This is |
90 | a URI, as a string. |
91 | |
92 | @item @code{aliases} |
93 | A list of zero or more URI as strings, that identify the same entity. |
94 | |
95 | @item @code{properties} |
96 | A list of key-value pairs (an alist) whose keys and values are strings. This |
97 | represents a set of properties on the subject that the webfinger server wants |
98 | to give you. |
99 | |
100 | @item @code{links} |
101 | A list of links that correspond to the location of the requested identity. These |
102 | links are objects of type @code{<link-record>}. |
103 | |
104 | @end table |
105 | @end deffn |
106 | |
107 | @deffn {Datatype} <link-record> |
108 | |
109 | @table @asis |
110 | @item @code{rel} |
111 | A string that is either a URI or a registered relation type, as defined at |
112 | @url{http://www.iana.org/assignments/link-relations/}. |
113 | |
114 | @item @code{type} |
115 | A string that represents the MIME/Type of the content accessible through the |
116 | link. |
117 | |
118 | @item @code{href} |
119 | A string that represents the URI at which you can find of the requested |
120 | resource. |
121 | |
122 | @item @code{titles} |
123 | An association list where keys are strings that represent a language name and |
124 | value represents the title for the content of the link in that language. |
125 | |
126 | @item @code{properties} |
127 | A list of key-value pairs (an alist) whose keys and values are strings. This |
128 | represents a set of properties on the link that the webfinger server wants |
129 | to give you. |
130 | |
131 | @end table |
132 | @end deffn |
133 | |
134 | The library provides two procedures to retrieve data from a webfinger server. |
135 | A low-level procedure that can query anything and a higher-level procedure to |
136 | specifically query actor objects to a Fediverse server. |
137 | |
138 | @deffn {Scheme Procedure} webfinger-query @var{server} @var{resource} @ |
139 | [@var{rel}] |
140 | Queries a webfinger @var{server} for @var{resource}, which must be a URI, |
141 | represented as a string. Returns a @code{jrd-record} object. |
142 | |
143 | @end deffn |
144 | |
145 | @deffn {Scheme Procedure} find-actor-object @var{user} @var{server} |
146 | Queries a webfinger @var{server} for the actor object of @@@var{user}@@@var{server}. |
147 | Note that @var{server} should be a string that represents the server name, but |
148 | has no scheme. The procedure returns a string that corresponds to the best |
149 | link returned by the webfinger server (determined by the type when available). |
150 | |
151 | This queries the resource ``acct:@var{user}@@@var{server}'' to the server. |
152 | @end deffn |
153 | |
154 | @bye |
155 |