A decentralized music tracking and discovery platform built on AT Protocol 馃幍 rocksky.app
spotify atproto lastfm musicbrainz scrobbling listenbrainz
96
fork

Configure Feed

Select the types of activity you want to include in your feed.

at feat/pgpull 44 lines 1.6 kB view raw
1import { JoseKey } from "@atproto/jwk-jose"; 2import { NodeOAuthClient } from "@atproto/oauth-client-node"; 3import type { Database } from "../db"; 4import { env } from "../lib/env"; 5import { SessionStore, StateStore } from "./storage"; 6 7export const createClient = async (db: Database) => { 8 const publicUrl = env.PUBLIC_URL; 9 const url = publicUrl || `http://127.0.0.1:${env.PORT}`; 10 const enc = encodeURIComponent; 11 return new NodeOAuthClient({ 12 clientMetadata: { 13 client_name: "AT Protocol Express App", 14 client_id: publicUrl 15 ? `${url}/client-metadata.json` 16 : `http://localhost?redirect_uri=${enc( 17 `${url}/oauth/callback`, 18 )}&scope=${enc("atproto transition:generic")}`, 19 client_uri: url, 20 redirect_uris: [`${url}/oauth/callback`], 21 scope: "atproto transition:generic", 22 grant_types: ["authorization_code", "refresh_token"], 23 response_types: ["code"], 24 application_type: "web", 25 token_endpoint_auth_method: url.startsWith("https") 26 ? "private_key_jwt" 27 : "none", 28 token_endpoint_auth_signing_alg: url.startsWith("https") 29 ? "ES256" 30 : undefined, 31 dpop_bound_access_tokens: true, 32 jwks_uri: url.startsWith("https") ? `${url}/jwks.json` : undefined, 33 }, 34 keyset: url.startsWith("https") 35 ? await Promise.all([ 36 JoseKey.fromImportable(env.PRIVATE_KEY_1), 37 JoseKey.fromImportable(env.PRIVATE_KEY_2), 38 JoseKey.fromImportable(env.PRIVATE_KEY_3), 39 ]) 40 : undefined, 41 stateStore: new StateStore(db), 42 sessionStore: new SessionStore(db), 43 }); 44};