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