diff --git a/src/openmeet.ts b/src/openmeet.ts index b75f04d..b4b4950 100644 --- a/src/openmeet.ts +++ b/src/openmeet.ts @@ -32,31 +32,33 @@ function headers(tokens?: Tokens): Record { } // Full handshake: ATProto service token -> OpenMeet token exchange. -export async function authenticate(atpLogin: AtprotoLogin, omBaseUrl: string): Promise { - const serviceToken = await getServiceToken(atpLogin, SERVICE_DID, LEXICON_METHOD); - return fetchJson("token exchange", `${omBaseUrl}/api/v1/auth/atproto/service-auth`, { - method: "POST", - headers: headers(), - body: JSON.stringify({ token: serviceToken }), - }); +export async function authenticate(cfg: AtprotoLogin & OpenMeetConfig): Promise { + const serviceToken = await getServiceToken(cfg, SERVICE_DID, LEXICON_METHOD); + return fetchJson( + "token exchange", + `${cfg.openMeetBaseUrl}/api/v1/auth/atproto/service-auth`, + { + method: "POST", + headers: headers(), + body: JSON.stringify({ token: serviceToken }), + }, + ); } // Mints a new access token from the refresh token; a 401 falls back to a // full re-auth via ATProto. async function refreshOrReauth( - om: OpenMeetConfig, - atp: AtprotoLogin, + cfg: OpenMeetConfig & AtprotoLogin, tokens: Tokens, ): Promise { try { - return await fetchJson("token refresh", `${om.openMeetBaseUrl}/api/v1/auth/refresh`, { + return await fetchJson("token refresh", `${cfg.openMeetBaseUrl}/api/v1/auth/refresh`, { method: "POST", headers: headers(tokens), body: JSON.stringify(tokens), }); } catch (err) { - if (err instanceof HttpError && err.status === 401) - return authenticate(atp, om.openMeetBaseUrl); + if (err instanceof HttpError && err.status === 401) return authenticate(cfg); throw err; } } @@ -65,12 +67,11 @@ async function refreshOrReauth( // Returns the events along with the current tokens so the caller can thread // them into the next call. export async function getUpcomingEvents( - om: OpenMeetConfig, - atp: AtprotoLogin, + cfg: OpenMeetConfig & AtprotoLogin, tokens: Tokens, today: Temporal.PlainDate = Temporal.Now.plainDateISO(), ): Promise<{ events: OpenMeetEvent[]; tokens: Tokens }> { - const url = new URL(`${om.openMeetBaseUrl}/api/groups/${GROUP_SLUG}/events`); + const url = new URL(`${cfg.openMeetBaseUrl}/api/groups/${GROUP_SLUG}/events`); url.searchParams.set("startDate", today.toPlainDateTime().toString()); url.searchParams.set("endDate", today.add({ days: 7 }).toPlainDateTime().toString()); @@ -82,7 +83,7 @@ export async function getUpcomingEvents( return { events, tokens }; } catch (err) { if (err instanceof HttpError && err.status === 401 && attempt < 3) { - tokens = await refreshOrReauth(om, atp, tokens); + tokens = await refreshOrReauth(cfg, tokens); continue; } throw err;