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