MCPcopy Create free account
hub / github.com/effect-app/libs / makeResolveConfig

Function makeResolveConfig

packages/infra/src/internal/auth.ts:145–199  ·  view source on GitHub ↗
(config: Config)

Source from the content-addressed store, hash-verified

143}
144
145const makeResolveConfig = (config: Config) => {
146 let cached: Promise<ResolvedConfig> | undefined
147
148 return Effect.tryPromise({
149 try: () => {
150 if (!cached) {
151 cached = (async (): Promise<ResolvedConfig> => {
152 const discovery = config.issuerBaseURL
153 ? await fetchDiscoveryDocumentPromise(config.issuerBaseURL)
154 : undefined
155
156 const issuer = config.issuer ?? discovery?.issuer
157 const jwksUri = config.jwksUri ?? discovery?.jwksUri
158 const secret = config.secret
159 const base = {
160 audience: normalizeAudience(config.audience),
161 clockTolerance: config.clockTolerance ?? 5,
162 issuer,
163 maxTokenAge: config.maxTokenAge,
164 strict: config.strict ?? false,
165 tokenSigningAlg: config.tokenSigningAlg
166 } satisfies ResolvedConfigBase
167
168 if (!issuer && !secret) {
169 throw new InvalidRequestError("JWT config requires 'issuer', 'issuerBaseURL', or 'secret'")
170 }
171
172 if (!secret) {
173 if (!jwksUri) {
174 throw new InvalidRequestError("JWT config requires 'jwksUri', 'issuerBaseURL', or 'secret'")
175 }
176
177 return {
178 ...base,
179 key: createRemoteJWKSet(new URL(jwksUri)),
180 keyType: "jwks"
181 }
182 }
183
184 return {
185 ...base,
186 key: new TextEncoder().encode(secret),
187 keyType: "secret"
188 }
189 })()
190 }
191
192 return cached
193 },
194 catch: (error) =>
195 error instanceof InvalidRequestError || error instanceof InvalidTokenError
196 ? error
197 : new InvalidTokenError(getErrorMessage(error))
198 })
199}
200
201const verifyToken =
202 (resolveConfig: Effect.Effect<ResolvedConfig, InvalidRequestError | InvalidTokenError>) => (token: string) =>

Callers 1

checkJWTIFunction · 0.85

Calls 3

normalizeAudienceFunction · 0.85
getErrorMessageFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…