Untitled
unknown
plain_text
a year ago
1.9 kB
5
Indexable
import { pipe } from "fp-ts/lib/function"; import * as E from "fp-ts/Either"; import * as TE from "fp-ts/TaskEither"; import { generatePKCEError } from "./GeneratePKCEError"; import { SecretsManager } from "@aws-sdk/client-secrets-manager"; import { URL } from "url"; import { MissingEnvironmentVariableError, readString, readUrl, } from "@lambdas/shared/configuration"; import { UrlStringParserError } from "@lambdas/shared/configuration/parseUrlString"; const MyInfoConnector = require("myinfo-connector-v4-nodejs"); export type PKCEConfig = { clientID: string; scope: string; redirectUrl: URL; authorizeJKWSUrl: URL; myInfoJWKSUrl: URL; tokenUrl: URL; personUrl: URL; }; type GeneratePKCE = { codeChallenge: string; codeVerifier: string; sessionId: string; }; export const readPKCEConfig = (): TE.TaskEither< MissingEnvironmentVariableError | UrlStringParserError, PKCEConfig > => pipe( E.Do, E.apSW("clientID", readString("CLIENT_ID")), E.apSW("scope", readString("SCOPE")), E.apSW("redirectUrl", readUrl("REDIRECT_URL")), E.apSW("authorizeJKWSUrl", readUrl("AUTHORIZE_JWKS_URL")), E.apSW("myInfoJWKSUrl", readUrl("MYINFO_JWKS_URL")), E.apSW("tokenUrl", readUrl("TOKEN_URL")), E.apSW("personUrl", readUrl("PERSON_URL")), TE.fromEither, TE.map((config) => config) ); export const generatePKCE = (): TE.TaskEither< MissingEnvironmentVariableError | UrlStringParserError, GeneratePKCE > => pipe( readPKCEConfig(), TE.tryCatch( (pKCEConfig) => { const connector = new MyInfoConnector(pKCEConfig); return connector.generatePKCECodePair(); }, (err) => generatePKCEError(E.toError(JSON.stringify(err))) ), TE.map((pkce) => ({ codeChallenge: pkce.codeChallenge, codeVerifier: pkce.codeVerifier, // sessionId: string; })) );
Editor is loading...
Leave a Comment