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