summaryrefslogtreecommitdiff
path: root/docs/api/boot.md
blob: 88f2d5bdaa985af2341a1b7d6cf2a964cba8da6c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# Client initialization

```mermaid
---
Client lifecycle
---
sequenceDiagram
	actor Andrea
	participant API

	Andrea ->>+ API : GET /api/boot
	API -->- Andrea : Snapshot, resume_point=23

	Andrea ->>+ API : GET /api/events?resume_point=23
	loop
	API -) Andrea : Event
	end
	API <<->>- Andrea: Disconnect
```


Client initialization serves three purposes:

* It confirms that the client's [identity token](./authentication.md) is valid, and tells the client what login that token is associated with.
* It provides an initial snapshot of the state of the service.
* It provides a resume point for the [event stream](./events.md), which allows clients to consume events starting from the moment the snapshot was created.


## `GET /api/boot`

Returns the information needed to initialize a client.

This method is also the recommended way to validate the client's identity token, and to check that the service is fully configured.

### Success

This endpoint will respond with a status of `200 Okay` when successful. The body of the response will be a JSON object containing the initial state for the client:

```json
{
	"login": {
		"name": "example username",
		"id": "L1234abcd",
	},
	"resume_point": 1312,
	"logins": [
		{
			"id": "L1234abcd",
			"name": "example username"
		}
	],
	"channels": [
		{
			"name": "nonsense and such",
			"id": "C1234abcd",
		}
	],
	"messages": [
		{
			"at": "2024-09-27T23:19:10.208147Z",
			"channel": "C1234abcd",
			"sender": "L1234abcd",
			"id": "M1312acab",
			"body": "beep"
		}
	]
}
```

The response will include the following fields:

| Field          | Type            | Description |
|:---------------|:----------------|:--|
| `login`        | object          | The details of the caller's identity. |
| `resume_point` | integer         | A resume point for [events](./events.md), such that the event stream will begin immediately after the included snapshot. |
| `logins`       | array of object | A snapshot of the logins present in the service. |
| `channels`     | array of object | A snapshot of the channels present in the service. |
| `messages`     | array of object | A snapshot of the messages present in the service. |

The `login` object will include the following fields:

| Field  | Type   | Description |
|:-------|:-------|:--|
| `name` | string | The name of the caller's login identity. |
| `id`   | string | The ID of the caller's login identity. |


Each element of the `logins` array describes a distinct login, and will include the following fields:

| Field  | Type   | Description |
|:-------|:-------|:--|
| `name` | string | The name for the login. |
| `id`   | string | A unique identifier for the login. This can be used to associate the login with other events, or to make API calls targeting the login. |

Each element of the `channels` array describes a distinct channel, and will include the following fields:

| Field  | Type   | Description |
|:-------|:-------|:--|
| `name` | string | The name for the channel. |
| `id`   | string | A unique identifier for the channel. This can be used to associate the channel with other events, or to make API calls targeting the channel. |

Each element of the `messages` array describes a distinct message, and will include the following fields:

| Field     | Type      | Description |
|:----------|:----------|:--|
| `at`      | timestamp | The moment the message was sent. |
| `channel` | string    | The ID of the channel the message was sent to. |
| `sender`  | string    | The ID of the login that sent the message. |
| `id`      | string    | A unique identifier for the message. This can be used to associate the message with other events, or to make API calls targeting the message. |
| `body`    | string    | The text of the message. |