this repo has no description
1pub mod api;
2pub mod auth;
3pub mod config;
4pub mod notifications;
5pub mod oauth;
6pub mod plc;
7pub mod repo;
8pub mod state;
9pub mod storage;
10pub mod sync;
11
12use axum::{
13 Router,
14 routing::{any, get, post},
15};
16use state::AppState;
17
18pub fn app(state: AppState) -> Router {
19 Router::new()
20 .route("/health", get(api::server::health))
21 .route("/xrpc/_health", get(api::server::health))
22 .route(
23 "/xrpc/com.atproto.server.describeServer",
24 get(api::server::describe_server),
25 )
26 .route(
27 "/xrpc/com.atproto.server.createAccount",
28 post(api::identity::create_account),
29 )
30 .route(
31 "/xrpc/com.atproto.server.createSession",
32 post(api::server::create_session),
33 )
34 .route(
35 "/xrpc/com.atproto.server.getSession",
36 get(api::server::get_session),
37 )
38 .route(
39 "/xrpc/com.atproto.server.deleteSession",
40 post(api::server::delete_session),
41 )
42 .route(
43 "/xrpc/com.atproto.server.refreshSession",
44 post(api::server::refresh_session),
45 )
46 .route(
47 "/xrpc/com.atproto.server.getServiceAuth",
48 get(api::server::get_service_auth),
49 )
50 .route(
51 "/xrpc/com.atproto.identity.resolveHandle",
52 get(api::identity::resolve_handle),
53 )
54 .route(
55 "/xrpc/com.atproto.repo.createRecord",
56 post(api::repo::create_record),
57 )
58 .route(
59 "/xrpc/com.atproto.repo.putRecord",
60 post(api::repo::put_record),
61 )
62 .route(
63 "/xrpc/com.atproto.repo.getRecord",
64 get(api::repo::get_record),
65 )
66 .route(
67 "/xrpc/com.atproto.repo.deleteRecord",
68 post(api::repo::delete_record),
69 )
70 .route(
71 "/xrpc/com.atproto.repo.listRecords",
72 get(api::repo::list_records),
73 )
74 .route(
75 "/xrpc/com.atproto.repo.describeRepo",
76 get(api::repo::describe_repo),
77 )
78 .route(
79 "/xrpc/com.atproto.repo.uploadBlob",
80 post(api::repo::upload_blob),
81 )
82 .route(
83 "/xrpc/com.atproto.repo.applyWrites",
84 post(api::repo::apply_writes),
85 )
86 .route(
87 "/xrpc/com.atproto.sync.getLatestCommit",
88 get(sync::get_latest_commit),
89 )
90 .route(
91 "/xrpc/com.atproto.sync.listRepos",
92 get(sync::list_repos),
93 )
94 .route(
95 "/xrpc/com.atproto.sync.getBlob",
96 get(sync::get_blob),
97 )
98 .route(
99 "/xrpc/com.atproto.sync.listBlobs",
100 get(sync::list_blobs),
101 )
102 .route(
103 "/xrpc/com.atproto.sync.getRepoStatus",
104 get(sync::get_repo_status),
105 )
106 .route(
107 "/xrpc/com.atproto.server.checkAccountStatus",
108 get(api::server::check_account_status),
109 )
110 .route(
111 "/xrpc/com.atproto.identity.getRecommendedDidCredentials",
112 get(api::identity::get_recommended_did_credentials),
113 )
114 .route(
115 "/xrpc/com.atproto.repo.listMissingBlobs",
116 get(api::repo::list_missing_blobs),
117 )
118 .route(
119 "/xrpc/com.atproto.sync.notifyOfUpdate",
120 post(sync::notify_of_update),
121 )
122 .route(
123 "/xrpc/com.atproto.sync.requestCrawl",
124 post(sync::request_crawl),
125 )
126 .route(
127 "/xrpc/com.atproto.sync.getBlocks",
128 get(sync::get_blocks),
129 )
130 .route(
131 "/xrpc/com.atproto.sync.getRepo",
132 get(sync::get_repo),
133 )
134 .route(
135 "/xrpc/com.atproto.sync.getRecord",
136 get(sync::get_record),
137 )
138 .route(
139 "/xrpc/com.atproto.sync.subscribeRepos",
140 get(sync::subscribe_repos),
141 )
142 .route(
143 "/xrpc/com.atproto.moderation.createReport",
144 post(api::moderation::create_report),
145 )
146 .route(
147 "/xrpc/com.atproto.admin.getAccountInfo",
148 get(api::admin::get_account_info),
149 )
150 .route(
151 "/xrpc/com.atproto.admin.getAccountInfos",
152 get(api::admin::get_account_infos),
153 )
154 .route(
155 "/xrpc/com.atproto.server.activateAccount",
156 post(api::server::activate_account),
157 )
158 .route(
159 "/xrpc/com.atproto.server.deactivateAccount",
160 post(api::server::deactivate_account),
161 )
162 .route(
163 "/xrpc/com.atproto.server.requestAccountDelete",
164 post(api::server::request_account_delete),
165 )
166 .route(
167 "/xrpc/com.atproto.server.deleteAccount",
168 post(api::server::delete_account),
169 )
170 .route(
171 "/xrpc/com.atproto.server.requestPasswordReset",
172 post(api::server::request_password_reset),
173 )
174 .route(
175 "/xrpc/com.atproto.server.resetPassword",
176 post(api::server::reset_password),
177 )
178 .route(
179 "/xrpc/com.atproto.server.requestEmailUpdate",
180 post(api::server::request_email_update),
181 )
182 .route(
183 "/xrpc/com.atproto.server.confirmEmail",
184 post(api::server::confirm_email),
185 )
186 .route(
187 "/xrpc/com.atproto.server.updateEmail",
188 post(api::server::update_email),
189 )
190 .route(
191 "/xrpc/com.atproto.server.reserveSigningKey",
192 post(api::server::reserve_signing_key),
193 )
194 .route(
195 "/xrpc/com.atproto.identity.updateHandle",
196 post(api::identity::update_handle),
197 )
198 .route(
199 "/xrpc/com.atproto.identity.requestPlcOperationSignature",
200 post(api::identity::request_plc_operation_signature),
201 )
202 .route(
203 "/xrpc/com.atproto.identity.signPlcOperation",
204 post(api::identity::sign_plc_operation),
205 )
206 .route(
207 "/xrpc/com.atproto.identity.submitPlcOperation",
208 post(api::identity::submit_plc_operation),
209 )
210 .route(
211 "/xrpc/com.atproto.repo.importRepo",
212 post(api::repo::import_repo),
213 )
214 .route(
215 "/xrpc/com.atproto.admin.deleteAccount",
216 post(api::admin::delete_account),
217 )
218 .route(
219 "/xrpc/com.atproto.admin.updateAccountEmail",
220 post(api::admin::update_account_email),
221 )
222 .route(
223 "/xrpc/com.atproto.admin.updateAccountHandle",
224 post(api::admin::update_account_handle),
225 )
226 .route(
227 "/xrpc/com.atproto.admin.updateAccountPassword",
228 post(api::admin::update_account_password),
229 )
230 .route(
231 "/xrpc/com.atproto.server.listAppPasswords",
232 get(api::server::list_app_passwords),
233 )
234 .route(
235 "/xrpc/com.atproto.server.createAppPassword",
236 post(api::server::create_app_password),
237 )
238 .route(
239 "/xrpc/com.atproto.server.revokeAppPassword",
240 post(api::server::revoke_app_password),
241 )
242 .route(
243 "/xrpc/com.atproto.server.createInviteCode",
244 post(api::server::create_invite_code),
245 )
246 .route(
247 "/xrpc/com.atproto.server.createInviteCodes",
248 post(api::server::create_invite_codes),
249 )
250 .route(
251 "/xrpc/com.atproto.server.getAccountInviteCodes",
252 get(api::server::get_account_invite_codes),
253 )
254 .route(
255 "/xrpc/com.atproto.admin.getInviteCodes",
256 get(api::admin::get_invite_codes),
257 )
258 .route(
259 "/xrpc/com.atproto.admin.disableAccountInvites",
260 post(api::admin::disable_account_invites),
261 )
262 .route(
263 "/xrpc/com.atproto.admin.enableAccountInvites",
264 post(api::admin::enable_account_invites),
265 )
266 .route(
267 "/xrpc/com.atproto.admin.disableInviteCodes",
268 post(api::admin::disable_invite_codes),
269 )
270 .route(
271 "/xrpc/com.atproto.admin.getSubjectStatus",
272 get(api::admin::get_subject_status),
273 )
274 .route(
275 "/xrpc/com.atproto.admin.updateSubjectStatus",
276 post(api::admin::update_subject_status),
277 )
278 .route(
279 "/xrpc/com.atproto.admin.sendEmail",
280 post(api::admin::send_email),
281 )
282 .route(
283 "/xrpc/app.bsky.actor.getPreferences",
284 get(api::actor::get_preferences),
285 )
286 .route(
287 "/xrpc/app.bsky.actor.putPreferences",
288 post(api::actor::put_preferences),
289 )
290 .route(
291 "/xrpc/app.bsky.actor.getProfile",
292 get(api::actor::get_profile),
293 )
294 .route(
295 "/xrpc/app.bsky.actor.getProfiles",
296 get(api::actor::get_profiles),
297 )
298 // I know I know, I'm not supposed to implement appview endpoints. Leave me be
299 .route(
300 "/xrpc/app.bsky.feed.getTimeline",
301 get(api::feed::get_timeline),
302 )
303 .route("/.well-known/did.json", get(api::identity::well_known_did))
304 .route("/u/{handle}/did.json", get(api::identity::user_did_doc))
305 // OAuth 2.1 endpoints
306 .route(
307 "/.well-known/oauth-protected-resource",
308 get(oauth::endpoints::oauth_protected_resource),
309 )
310 .route(
311 "/.well-known/oauth-authorization-server",
312 get(oauth::endpoints::oauth_authorization_server),
313 )
314 .route("/oauth/jwks", get(oauth::endpoints::oauth_jwks))
315 .route(
316 "/oauth/par",
317 post(oauth::endpoints::pushed_authorization_request),
318 )
319 .route("/oauth/authorize", get(oauth::endpoints::authorize_get))
320 .route("/oauth/authorize", post(oauth::endpoints::authorize_post))
321 .route("/oauth/token", post(oauth::endpoints::token_endpoint))
322 .route("/oauth/revoke", post(oauth::endpoints::revoke_token))
323 .route("/oauth/introspect", post(oauth::endpoints::introspect_token))
324 .route("/xrpc/{*method}", any(api::proxy::proxy_handler))
325 .with_state(state)
326}