From 2bf015523532b5ed6e32d64e8708f1fc6b2b8f60 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Sat, 19 Sep 2026 17:46:26 +0100 Subject: [PATCH] fix: use kit useRuntimeConfig for build-time atproto credentials --- modules/shared/airspace.ts | 10 ++++------ modules/sync/providers/standard-site.ts | 10 ++++------ 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/modules/shared/airspace.ts b/modules/shared/airspace.ts index c23c9f59..be5a0035 100644 --- a/modules/shared/airspace.ts +++ b/modules/shared/airspace.ts @@ -3,16 +3,15 @@ * runtime exists and so can't use `server/utils/airspace.ts`. * * Identity comes from `runtimeConfig.atproto`, populated by `modules/atproto`, - * so no handle resolution happens here. */ import { createAirspace, passwordSession } from 'airspace' import type { Identity } from 'airspace' -import { useNuxt } from 'nuxt/kit' +import { useRuntimeConfig } from 'nuxt/kit' import { collections } from '../../shared/collections.ts' function identity () { - const config = useNuxt().options.runtimeConfig + const config = useRuntimeConfig() const did = config.atproto.did const service = config.public.atproto.service if (!did || !service) { @@ -35,11 +34,10 @@ export function useBuildAirspace () { * `NUXT_ATPROTO_PASSWORD`; the PDS and DID are already resolved. */ export async function useBuildAirspaceWithSession () { - const config = useNuxt().options.runtimeConfig - const { handle, password } = config.atproto + const { handle, password } = useRuntimeConfig().atproto const { service } = identity() if (!handle || !password) { - throw new Error('atproto credentials are not configured (NUXT_ATPROTO_PASSWORD and social.networks.bluesky.identifier).') + throw new Error(`atproto credentials are not configured (missing ${!handle ? 'social.networks.bluesky.identifier' : 'NUXT_ATPROTO_PASSWORD'}).`) } return createAirspace({ identity: identity(), diff --git a/modules/sync/providers/standard-site.ts b/modules/sync/providers/standard-site.ts index d31ae25e..0fd7492a 100644 --- a/modules/sync/providers/standard-site.ts +++ b/modules/sync/providers/standard-site.ts @@ -1,7 +1,7 @@ import { Client } from '@atproto/lex' import type { LexMap } from '@atproto/lex' import { PasswordSession } from '@atproto/lex-password-session' -import { useNuxt } from 'nuxt/kit' +import { useRuntimeConfig } from 'nuxt/kit' import type { SyncItem, SyncOptions, SyncProvider } from './index' import { publicationRkey, tidFromDate } from '../../shared/tid' @@ -23,14 +23,12 @@ export class StandardSiteProvider implements SyncProvider { return } - // Build-time module code: pull credentials from the resolved runtime - // config rather than `process.env` directly so there's one source of - // truth shared with the runtime `server/utils/atproto.ts`. - const cfg = useNuxt().options.runtimeConfig + const cfg = useRuntimeConfig() const pdsUrl = cfg.public.atproto.service const { handle, password } = cfg.atproto if (!pdsUrl || !handle || !password) { - throw new Error('atproto identity / credentials not configured (PDS resolved at build time; check NUXT_ATPROTO_PASSWORD and social.networks.bluesky.identifier).') + const missing = !password ? 'NUXT_ATPROTO_PASSWORD' : 'social.networks.bluesky.identifier' + throw new Error(`atproto identity / credentials not configured (missing ${missing}).`) } const session = await PasswordSession.login({ service: pdsUrl, identifier: handle, password }) -- 2.51.2