tangled
alpha
login
or
join now
t1c.dev
/
rocksky
forked from
rocksky.app/rocksky
2
fork
atom
A decentralized music tracking and discovery platform built on AT Protocol 🎵
2
fork
atom
overview
issues
pulls
pipelines
Serve OAuth client metadata and JWKS
tsiry-sandratraina.com
1 month ago
041a9d1d
fb28db8c
+55
1 changed file
expand all
collapse all
unified
split
apps
app-proxy
src
index.ts
+55
apps/app-proxy/src/index.ts
···
11
* Learn more at https://developers.cloudflare.com/workers/
12
*/
13
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
14
export default {
15
async fetch(request, env, ctx): Promise<Response> {
16
const url = new URL(request.url);
···
19
const API_ROUTES = ['/login', '/profile', '/token', '/now-playing', '/ws', '/oauth-client-metadata.json', '/jwks.json'];
20
21
console.log('Request URL:', url.pathname, url.pathname === '/client-metadata.json');
0
0
0
0
0
0
0
0
22
23
if (
24
API_ROUTES.includes(url.pathname) ||
···
11
* Learn more at https://developers.cloudflare.com/workers/
12
*/
13
14
+
const metadata = {
15
+
redirect_uris: ['https://rocksky.app/oauth/callback'],
16
+
response_types: ['code'],
17
+
grant_types: ['authorization_code', 'refresh_token'],
18
+
scope:
19
+
'atproto repo:app.rocksky.album repo:app.rocksky.artist repo:app.rocksky.graph.follow repo:app.rocksky.like repo:app.rocksky.playlist repo:app.rocksky.scrobble repo:app.rocksky.shout repo:app.rocksky.song repo:app.rocksky.feed.generator repo:fm.teal.alpha.feed.play repo:fm.teal.alpha.actor.status',
20
+
token_endpoint_auth_method: 'private_key_jwt',
21
+
token_endpoint_auth_signing_alg: 'ES256',
22
+
jwks_uri: 'https://rocksky.app/jwks.json',
23
+
application_type: 'web',
24
+
client_id: 'https://rocksky.app/oauth-client-metadata.json',
25
+
client_name: 'Rocksky',
26
+
client_uri: 'https://rocksky.app',
27
+
dpop_bound_access_tokens: true,
28
+
};
29
+
30
+
const jwks = {
31
+
keys: [
32
+
{
33
+
kty: 'EC',
34
+
use: 'sig',
35
+
alg: 'ES256',
36
+
kid: '2dfa3fd9-57b3-4738-ac27-9e6dadec13b7',
37
+
crv: 'P-256',
38
+
x: 'V_00KDnoEPsNqbt0y2Ke8v27Mv9WP70JylDUD5rvIek',
39
+
y: 'HAyjaQeA2DU6wjZO0ggTadUS6ij1rmiYTxzmWeBKfRc',
40
+
},
41
+
{
42
+
kty: 'EC',
43
+
use: 'sig',
44
+
alg: 'ES256',
45
+
kid: '5e816ff2-6bff-4177-b1c0-67ad3cd3e7cd',
46
+
crv: 'P-256',
47
+
x: 'YwEY5NsoYQVB_G7xPYMl9sUtxRbcPFNffnZcTS5nbPQ',
48
+
y: '5n5mybPvISyYAnRv1Ii1geqKfXv2GA8p9Xemwx2a8CM',
49
+
},
50
+
{
51
+
kty: 'EC',
52
+
use: 'sig',
53
+
kid: 'a1067a48-a54a-43a0-9758-4d55b51fdd8b',
54
+
crv: 'P-256',
55
+
x: 'yq17Nd2DGcjP1i9I0NN3RBmgSbLQUZOtG6ec5GaqzmU',
56
+
y: 'ieIU9mcfaZwAW5b3WgJkIRgddymG_ckcZ0n1XjbEIvc',
57
+
},
58
+
],
59
+
};
60
+
61
export default {
62
async fetch(request, env, ctx): Promise<Response> {
63
const url = new URL(request.url);
···
66
const API_ROUTES = ['/login', '/profile', '/token', '/now-playing', '/ws', '/oauth-client-metadata.json', '/jwks.json'];
67
68
console.log('Request URL:', url.pathname, url.pathname === '/client-metadata.json');
69
+
70
+
if (url.pathname === '/oauth-client-metadata.json') {
71
+
return Response.json(metadata);
72
+
}
73
+
74
+
if (url.pathname === '/jwks.json') {
75
+
return Response.json(jwks);
76
+
}
77
78
if (
79
API_ROUTES.includes(url.pathname) ||