From d5c6508a387040488e9bcb32d968cbb2eeedaa2c Mon Sep 17 00:00:00 2001 From: pfych Date: Sat, 7 Feb 2026 10:24:26 +1100 Subject: [PATCH] Migrate well-known endpoint --- infrastructure/api/api-stack.ts | 3 +++ infrastructure/app.ts | 1 + infrastructure/site/site-stack.ts | 3 ++- packages/api/src/router.ts | 2 ++ packages/api/src/routes/wellknown.ts | 12 ++++++++++++ packages/api/src/services/wellknown/wellknown.ts | 15 +++++++++++++++ 6 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 packages/api/src/routes/wellknown.ts create mode 100644 packages/api/src/services/wellknown/wellknown.ts diff --git a/infrastructure/api/api-stack.ts b/infrastructure/api/api-stack.ts index cab852b..a8cdbc5 100644 --- a/infrastructure/api/api-stack.ts +++ b/infrastructure/api/api-stack.ts @@ -19,6 +19,8 @@ import { import { HttpOrigin } from 'aws-cdk-lib/aws-cloudfront-origins'; export class ApiStack extends Stack { + public readonly apiDomain: string; + constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); @@ -45,6 +47,7 @@ export class ApiStack extends Stack { }); const originDomain = Fn.select(2, Fn.split('/', fnUrl.url)); + this.apiDomain = originDomain; const lambdaOrigin = new HttpOrigin(originDomain); const distribution = new Distribution(this, 'ApiDistribution', { diff --git a/infrastructure/app.ts b/infrastructure/app.ts index b984a7e..330013a 100644 --- a/infrastructure/app.ts +++ b/infrastructure/app.ts @@ -17,4 +17,5 @@ const siteStack = new SiteStack(app, 'StaticSiteSiteStack', { env: env, domainNames: ['pfy.ch', 'www.pfy.ch'], certificateArn: `arn:aws:acm:us-east-1:317407877616:certificate/c0256784-16a4-4a13-a0b6-293e82e6a8e6`, + apiDomain: apiStack.apiDomain, }); diff --git a/infrastructure/site/site-stack.ts b/infrastructure/site/site-stack.ts index 19499c2..e5e7761 100644 --- a/infrastructure/site/site-stack.ts +++ b/infrastructure/site/site-stack.ts @@ -24,6 +24,7 @@ import { Certificate } from 'aws-cdk-lib/aws-certificatemanager'; export interface SiteStackProps extends StackProps { domainNames: string[]; certificateArn: string; + apiDomain: string; } export class SiteStack extends Stack { @@ -47,7 +48,7 @@ export class SiteStack extends Stack { ); // Create API origin - const apiOrigin = new HttpOrigin('api.pfy.ch', { + const apiOrigin = new HttpOrigin(props.apiDomain, { originId: 'apiOrigin', }); diff --git a/packages/api/src/router.ts b/packages/api/src/router.ts index 389d9f5..1e23d32 100644 --- a/packages/api/src/router.ts +++ b/packages/api/src/router.ts @@ -3,6 +3,7 @@ import { ping } from './services/ping'; import { plexRouter } from './routes/plex'; import { logger } from 'web-shared/src/lib/logger'; import { lastfmRouter } from './routes/lastfm'; +import { wellKnownRouter } from './routes/wellknown'; export const router = new Hono(); router.use('*', async (c, next) => { @@ -16,3 +17,4 @@ router.use('*', async (c, next) => { router.get('/', ping); router.route('/plex', plexRouter); router.route('/lastfm', lastfmRouter); +router.route('/.well-known', wellKnownRouter); diff --git a/packages/api/src/routes/wellknown.ts b/packages/api/src/routes/wellknown.ts new file mode 100644 index 0000000..ae3f9b8 --- /dev/null +++ b/packages/api/src/routes/wellknown.ts @@ -0,0 +1,12 @@ +import { Hono } from 'hono'; +import { getAtProtoDid, getWebFinger } from '../services/wellknown/wellknown'; + +export const wellKnownRouter = new Hono(); + +wellKnownRouter.get('/webfinger', async (c) => { + return c.json(getWebFinger()); +}); + +wellKnownRouter.get('/atproto-did', async (c) => { + return c.text(getAtProtoDid()); +}); diff --git a/packages/api/src/services/wellknown/wellknown.ts b/packages/api/src/services/wellknown/wellknown.ts new file mode 100644 index 0000000..92c55d2 --- /dev/null +++ b/packages/api/src/services/wellknown/wellknown.ts @@ -0,0 +1,15 @@ +export const getWebFinger = () => ({ + subject: 'acct:contact@pfy.ch', + links: [ + { + rel: 'http://openid.net/specs/connect/1.0/issuer', + href: 'https://auth.pfy.ch', + }, + { + rel: 'http://webfinger.net/rel/profile-page', + href: 'https://pfy.ch/about.html', + }, + ], +}); + +export const getAtProtoDid = () => 'did:plc:lpxtxymhlfbs5foxba7mfewt'; -- 2.51.2