tangled
alpha
login
or
join now
vicwalker.dev.br
/
tranquil-pds
forked from
tranquil.farm/tranquil-pds
0
fork
atom
Our Personal Data Server from scratch!
0
fork
atom
overview
issues
pulls
pipelines
Other health endpoint
oyster.cafe
4 months ago
cd641a80
c09f0e99
+355
-39
14 changed files
expand all
collapse all
unified
split
.sqlx
query-1ea62c689410d98faa70a5a6075911a8eeed679b0e3d7bbd103732abc912f45e.json
query-3fae97c8a2551c1ef8db06c4cde5480e44c5f771397e01574d0026e5bac6af55.json
query-51809819130908ef3600e5843f6098fb510afb4c827a41bc3a32ad78ea10184c.json
query-5ddd4f1ab0b0d3389b343008f5161808df3cd63ef71e3711180b7ddb5feda6cd.json
query-7b6ca5155c645f2011364594833effe41494d0c855b0c9314ab56ea8b0fb4e6d.json
query-7ce9c5fb943b4217da17c041998263c0af7b77c8feecc654dde7a71fbab4e1ad.json
query-7d8993cdd6f859d38d1e017bbb2bd02278d75baec57b7d2c97ba590b52f8e2d9.json
query-c8e4a48f1944ea78e29ed9c87db0535a34adc5f0b573701f40ff00acb4a64c03.json
query-ef80f18f4b063df44bbe9bc4a382aabd2cf240669df450be8eeb814a79cb80c7.json
query-f710f54a5b20342e4bc09b94333f3ef8589de90e39419eeeb4de9721d97cdf48.json
query-f9d64855317e32857bf5aa19abe03ebd16ac9a737dee0d51384dc1be80d66c08.json
query-fb7eb6dcbe91352f2d154c384a93c6c55a91f735832618b464208b70d6a8f580.json
TODO.md
src
lib.rs
-17
.sqlx/query-1ea62c689410d98faa70a5a6075911a8eeed679b0e3d7bbd103732abc912f45e.json
reviewed
···
1
1
-
{
2
2
-
"db_name": "PostgreSQL",
3
3
-
"query": "INSERT INTO records (repo_id, collection, rkey, record_cid) VALUES ($1, $2, $3, $4)\n ON CONFLICT (repo_id, collection, rkey) DO UPDATE SET record_cid = $4, created_at = NOW()",
4
4
-
"describe": {
5
5
-
"columns": [],
6
6
-
"parameters": {
7
7
-
"Left": [
8
8
-
"Uuid",
9
9
-
"Text",
10
10
-
"Text",
11
11
-
"Text"
12
12
-
]
13
13
-
},
14
14
-
"nullable": []
15
15
-
},
16
16
-
"hash": "1ea62c689410d98faa70a5a6075911a8eeed679b0e3d7bbd103732abc912f45e"
17
17
-
}
+22
.sqlx/query-3fae97c8a2551c1ef8db06c4cde5480e44c5f771397e01574d0026e5bac6af55.json
reviewed
···
1
1
+
{
2
2
+
"db_name": "PostgreSQL",
3
3
+
"query": "\n SELECT r.repo_root_cid\n FROM repos r\n JOIN users u ON u.id = r.user_id\n WHERE u.did = $1\n ",
4
4
+
"describe": {
5
5
+
"columns": [
6
6
+
{
7
7
+
"ordinal": 0,
8
8
+
"name": "repo_root_cid",
9
9
+
"type_info": "Text"
10
10
+
}
11
11
+
],
12
12
+
"parameters": {
13
13
+
"Left": [
14
14
+
"Text"
15
15
+
]
16
16
+
},
17
17
+
"nullable": [
18
18
+
false
19
19
+
]
20
20
+
},
21
21
+
"hash": "3fae97c8a2551c1ef8db06c4cde5480e44c5f771397e01574d0026e5bac6af55"
22
22
+
}
+70
.sqlx/query-51809819130908ef3600e5843f6098fb510afb4c827a41bc3a32ad78ea10184c.json
reviewed
···
1
1
+
{
2
2
+
"db_name": "PostgreSQL",
3
3
+
"query": "\n SELECT seq, did, created_at, event_type, commit_cid, prev_cid, ops, blobs, blocks_cids\n FROM repo_seq\n WHERE seq > $1\n ORDER BY seq ASC\n ",
4
4
+
"describe": {
5
5
+
"columns": [
6
6
+
{
7
7
+
"ordinal": 0,
8
8
+
"name": "seq",
9
9
+
"type_info": "Int8"
10
10
+
},
11
11
+
{
12
12
+
"ordinal": 1,
13
13
+
"name": "did",
14
14
+
"type_info": "Text"
15
15
+
},
16
16
+
{
17
17
+
"ordinal": 2,
18
18
+
"name": "created_at",
19
19
+
"type_info": "Timestamptz"
20
20
+
},
21
21
+
{
22
22
+
"ordinal": 3,
23
23
+
"name": "event_type",
24
24
+
"type_info": "Text"
25
25
+
},
26
26
+
{
27
27
+
"ordinal": 4,
28
28
+
"name": "commit_cid",
29
29
+
"type_info": "Text"
30
30
+
},
31
31
+
{
32
32
+
"ordinal": 5,
33
33
+
"name": "prev_cid",
34
34
+
"type_info": "Text"
35
35
+
},
36
36
+
{
37
37
+
"ordinal": 6,
38
38
+
"name": "ops",
39
39
+
"type_info": "Jsonb"
40
40
+
},
41
41
+
{
42
42
+
"ordinal": 7,
43
43
+
"name": "blobs",
44
44
+
"type_info": "TextArray"
45
45
+
},
46
46
+
{
47
47
+
"ordinal": 8,
48
48
+
"name": "blocks_cids",
49
49
+
"type_info": "TextArray"
50
50
+
}
51
51
+
],
52
52
+
"parameters": {
53
53
+
"Left": [
54
54
+
"Int8"
55
55
+
]
56
56
+
},
57
57
+
"nullable": [
58
58
+
false,
59
59
+
false,
60
60
+
false,
61
61
+
false,
62
62
+
true,
63
63
+
true,
64
64
+
true,
65
65
+
true,
66
66
+
true
67
67
+
]
68
68
+
},
69
69
+
"hash": "51809819130908ef3600e5843f6098fb510afb4c827a41bc3a32ad78ea10184c"
70
70
+
}
+28
.sqlx/query-5ddd4f1ab0b0d3389b343008f5161808df3cd63ef71e3711180b7ddb5feda6cd.json
reviewed
···
1
1
+
{
2
2
+
"db_name": "PostgreSQL",
3
3
+
"query": "\n SELECT id, private_key_bytes\n FROM reserved_signing_keys\n WHERE public_key_did_key = $1\n AND used_at IS NULL\n AND expires_at > NOW()\n FOR UPDATE\n ",
4
4
+
"describe": {
5
5
+
"columns": [
6
6
+
{
7
7
+
"ordinal": 0,
8
8
+
"name": "id",
9
9
+
"type_info": "Uuid"
10
10
+
},
11
11
+
{
12
12
+
"ordinal": 1,
13
13
+
"name": "private_key_bytes",
14
14
+
"type_info": "Bytea"
15
15
+
}
16
16
+
],
17
17
+
"parameters": {
18
18
+
"Left": [
19
19
+
"Text"
20
20
+
]
21
21
+
},
22
22
+
"nullable": [
23
23
+
false,
24
24
+
false
25
25
+
]
26
26
+
},
27
27
+
"hash": "5ddd4f1ab0b0d3389b343008f5161808df3cd63ef71e3711180b7ddb5feda6cd"
28
28
+
}
+70
.sqlx/query-7b6ca5155c645f2011364594833effe41494d0c855b0c9314ab56ea8b0fb4e6d.json
reviewed
···
1
1
+
{
2
2
+
"db_name": "PostgreSQL",
3
3
+
"query": "\n SELECT seq, did, created_at, event_type, commit_cid, prev_cid, ops, blobs, blocks_cids\n FROM repo_seq\n WHERE seq = $1\n ",
4
4
+
"describe": {
5
5
+
"columns": [
6
6
+
{
7
7
+
"ordinal": 0,
8
8
+
"name": "seq",
9
9
+
"type_info": "Int8"
10
10
+
},
11
11
+
{
12
12
+
"ordinal": 1,
13
13
+
"name": "did",
14
14
+
"type_info": "Text"
15
15
+
},
16
16
+
{
17
17
+
"ordinal": 2,
18
18
+
"name": "created_at",
19
19
+
"type_info": "Timestamptz"
20
20
+
},
21
21
+
{
22
22
+
"ordinal": 3,
23
23
+
"name": "event_type",
24
24
+
"type_info": "Text"
25
25
+
},
26
26
+
{
27
27
+
"ordinal": 4,
28
28
+
"name": "commit_cid",
29
29
+
"type_info": "Text"
30
30
+
},
31
31
+
{
32
32
+
"ordinal": 5,
33
33
+
"name": "prev_cid",
34
34
+
"type_info": "Text"
35
35
+
},
36
36
+
{
37
37
+
"ordinal": 6,
38
38
+
"name": "ops",
39
39
+
"type_info": "Jsonb"
40
40
+
},
41
41
+
{
42
42
+
"ordinal": 7,
43
43
+
"name": "blobs",
44
44
+
"type_info": "TextArray"
45
45
+
},
46
46
+
{
47
47
+
"ordinal": 8,
48
48
+
"name": "blocks_cids",
49
49
+
"type_info": "TextArray"
50
50
+
}
51
51
+
],
52
52
+
"parameters": {
53
53
+
"Left": [
54
54
+
"Int8"
55
55
+
]
56
56
+
},
57
57
+
"nullable": [
58
58
+
false,
59
59
+
false,
60
60
+
false,
61
61
+
false,
62
62
+
true,
63
63
+
true,
64
64
+
true,
65
65
+
true,
66
66
+
true
67
67
+
]
68
68
+
},
69
69
+
"hash": "7b6ca5155c645f2011364594833effe41494d0c855b0c9314ab56ea8b0fb4e6d"
70
70
+
}
+28
.sqlx/query-7ce9c5fb943b4217da17c041998263c0af7b77c8feecc654dde7a71fbab4e1ad.json
reviewed
···
1
1
+
{
2
2
+
"db_name": "PostgreSQL",
3
3
+
"query": "\n INSERT INTO repo_seq (did, event_type, commit_cid, prev_cid, ops, blobs, blocks_cids)\n VALUES ($1, $2, $3, $4, $5, $6, $7)\n RETURNING seq\n ",
4
4
+
"describe": {
5
5
+
"columns": [
6
6
+
{
7
7
+
"ordinal": 0,
8
8
+
"name": "seq",
9
9
+
"type_info": "Int8"
10
10
+
}
11
11
+
],
12
12
+
"parameters": {
13
13
+
"Left": [
14
14
+
"Text",
15
15
+
"Text",
16
16
+
"Text",
17
17
+
"Text",
18
18
+
"Jsonb",
19
19
+
"TextArray",
20
20
+
"TextArray"
21
21
+
]
22
22
+
},
23
23
+
"nullable": [
24
24
+
false
25
25
+
]
26
26
+
},
27
27
+
"hash": "7ce9c5fb943b4217da17c041998263c0af7b77c8feecc654dde7a71fbab4e1ad"
28
28
+
}
+58
.sqlx/query-7d8993cdd6f859d38d1e017bbb2bd02278d75baec57b7d2c97ba590b52f8e2d9.json
reviewed
···
1
1
+
{
2
2
+
"db_name": "PostgreSQL",
3
3
+
"query": "\n SELECT s.did, k.key_bytes, u.id as user_id, u.email as current_email,\n u.email_confirmation_code, u.email_confirmation_code_expires_at,\n u.email_pending_verification\n FROM sessions s\n JOIN users u ON s.did = u.did\n JOIN user_keys k ON u.id = k.user_id\n WHERE s.access_jwt = $1\n ",
4
4
+
"describe": {
5
5
+
"columns": [
6
6
+
{
7
7
+
"ordinal": 0,
8
8
+
"name": "did",
9
9
+
"type_info": "Text"
10
10
+
},
11
11
+
{
12
12
+
"ordinal": 1,
13
13
+
"name": "key_bytes",
14
14
+
"type_info": "Bytea"
15
15
+
},
16
16
+
{
17
17
+
"ordinal": 2,
18
18
+
"name": "user_id",
19
19
+
"type_info": "Uuid"
20
20
+
},
21
21
+
{
22
22
+
"ordinal": 3,
23
23
+
"name": "current_email",
24
24
+
"type_info": "Text"
25
25
+
},
26
26
+
{
27
27
+
"ordinal": 4,
28
28
+
"name": "email_confirmation_code",
29
29
+
"type_info": "Text"
30
30
+
},
31
31
+
{
32
32
+
"ordinal": 5,
33
33
+
"name": "email_confirmation_code_expires_at",
34
34
+
"type_info": "Timestamptz"
35
35
+
},
36
36
+
{
37
37
+
"ordinal": 6,
38
38
+
"name": "email_pending_verification",
39
39
+
"type_info": "Text"
40
40
+
}
41
41
+
],
42
42
+
"parameters": {
43
43
+
"Left": [
44
44
+
"Text"
45
45
+
]
46
46
+
},
47
47
+
"nullable": [
48
48
+
false,
49
49
+
false,
50
50
+
false,
51
51
+
false,
52
52
+
true,
53
53
+
true,
54
54
+
true
55
55
+
]
56
56
+
},
57
57
+
"hash": "7d8993cdd6f859d38d1e017bbb2bd02278d75baec57b7d2c97ba590b52f8e2d9"
58
58
+
}
+25
.sqlx/query-c8e4a48f1944ea78e29ed9c87db0535a34adc5f0b573701f40ff00acb4a64c03.json
reviewed
···
1
1
+
{
2
2
+
"db_name": "PostgreSQL",
3
3
+
"query": "\n INSERT INTO reserved_signing_keys (did, public_key_did_key, private_key_bytes, expires_at)\n VALUES ($1, $2, $3, $4)\n RETURNING id\n ",
4
4
+
"describe": {
5
5
+
"columns": [
6
6
+
{
7
7
+
"ordinal": 0,
8
8
+
"name": "id",
9
9
+
"type_info": "Uuid"
10
10
+
}
11
11
+
],
12
12
+
"parameters": {
13
13
+
"Left": [
14
14
+
"Text",
15
15
+
"Text",
16
16
+
"Bytea",
17
17
+
"Timestamptz"
18
18
+
]
19
19
+
},
20
20
+
"nullable": [
21
21
+
false
22
22
+
]
23
23
+
},
24
24
+
"hash": "c8e4a48f1944ea78e29ed9c87db0535a34adc5f0b573701f40ff00acb4a64c03"
25
25
+
}
-22
.sqlx/query-ef80f18f4b063df44bbe9bc4a382aabd2cf240669df450be8eeb814a79cb80c7.json
reviewed
···
1
1
-
{
2
2
-
"db_name": "PostgreSQL",
3
3
-
"query": "SELECT record_cid FROM records WHERE repo_id = $1",
4
4
-
"describe": {
5
5
-
"columns": [
6
6
-
{
7
7
-
"ordinal": 0,
8
8
-
"name": "record_cid",
9
9
-
"type_info": "Text"
10
10
-
}
11
11
-
],
12
12
-
"parameters": {
13
13
-
"Left": [
14
14
-
"Uuid"
15
15
-
]
16
16
-
},
17
17
-
"nullable": [
18
18
-
false
19
19
-
]
20
20
-
},
21
21
-
"hash": "ef80f18f4b063df44bbe9bc4a382aabd2cf240669df450be8eeb814a79cb80c7"
22
22
-
}
+14
.sqlx/query-f710f54a5b20342e4bc09b94333f3ef8589de90e39419eeeb4de9721d97cdf48.json
reviewed
···
1
1
+
{
2
2
+
"db_name": "PostgreSQL",
3
3
+
"query": "UPDATE reserved_signing_keys SET used_at = NOW() WHERE id = $1",
4
4
+
"describe": {
5
5
+
"columns": [],
6
6
+
"parameters": {
7
7
+
"Left": [
8
8
+
"Uuid"
9
9
+
]
10
10
+
},
11
11
+
"nullable": []
12
12
+
},
13
13
+
"hash": "f710f54a5b20342e4bc09b94333f3ef8589de90e39419eeeb4de9721d97cdf48"
14
14
+
}
+23
.sqlx/query-f9d64855317e32857bf5aa19abe03ebd16ac9a737dee0d51384dc1be80d66c08.json
reviewed
···
1
1
+
{
2
2
+
"db_name": "PostgreSQL",
3
3
+
"query": "SELECT 1 as one FROM users WHERE LOWER(email) = $1 AND id != $2",
4
4
+
"describe": {
5
5
+
"columns": [
6
6
+
{
7
7
+
"ordinal": 0,
8
8
+
"name": "one",
9
9
+
"type_info": "Int4"
10
10
+
}
11
11
+
],
12
12
+
"parameters": {
13
13
+
"Left": [
14
14
+
"Text",
15
15
+
"Uuid"
16
16
+
]
17
17
+
},
18
18
+
"nullable": [
19
19
+
null
20
20
+
]
21
21
+
},
22
22
+
"hash": "f9d64855317e32857bf5aa19abe03ebd16ac9a737dee0d51384dc1be80d66c08"
23
23
+
}
+15
.sqlx/query-fb7eb6dcbe91352f2d154c384a93c6c55a91f735832618b464208b70d6a8f580.json
reviewed
···
1
1
+
{
2
2
+
"db_name": "PostgreSQL",
3
3
+
"query": "\n UPDATE users\n SET email = $1,\n email_pending_verification = NULL,\n email_confirmation_code = NULL,\n email_confirmation_code_expires_at = NULL,\n updated_at = NOW()\n WHERE id = $2\n ",
4
4
+
"describe": {
5
5
+
"columns": [],
6
6
+
"parameters": {
7
7
+
"Left": [
8
8
+
"Text",
9
9
+
"Uuid"
10
10
+
]
11
11
+
},
12
12
+
"nullable": []
13
13
+
},
14
14
+
"hash": "fb7eb6dcbe91352f2d154c384a93c6c55a91f735832618b464208b70d6a8f580"
15
15
+
}
+1
TODO.md
reviewed
···
5
5
## Server Infrastructure & Proxying
6
6
- [x] Health Check
7
7
- [x] Implement `GET /health` endpoint (returns "OK").
8
8
+
- [x] Implement `GET /xrpc/_health` endpoint (returns "OK").
8
9
- [x] Server Description
9
10
- [x] Implement `com.atproto.server.describeServer` (returns available user domains).
10
11
- [x] XRPC Proxying
+1
src/lib.rs
reviewed
···
15
15
pub fn app(state: AppState) -> Router {
16
16
Router::new()
17
17
.route("/health", get(api::server::health))
18
18
+
.route("/xrpc/_health", get(api::server::health))
18
19
.route(
19
20
"/xrpc/com.atproto.server.describeServer",
20
21
get(api::server::describe_server),