Untitled
unknown
plain_text
2 years ago
1.9 kB
8
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