guile-fediverse/doc/guile-fediverse.texi

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