diff --git a/src/modules/jwks/index.ts b/src/modules/jwks/index.ts new file mode 100644 index 0000000..d24da36 --- /dev/null +++ b/src/modules/jwks/index.ts @@ -0,0 +1,31 @@ +import { generate } from '@kevisual/auth' +import fs from 'node:fs'; +import path from 'node:path'; +export const getPath = async (dir: string) => { + const JWKS_PATH = path.join(dir, 'jwks.json'); + const PRIVATE_JWK_PATH = path.join(dir, 'privateKey.json'); + const PRIVATE_KEY_PATH = path.join(dir, 'privateKey.txt'); + const PUBLIC_KEY_PATH = path.join(dir, 'publicKey.txt'); + return { + JWKS_PATH, + PRIVATE_JWK_PATH, + PRIVATE_KEY_PATH, + PUBLIC_KEY_PATH, + } +} + + +export const jwksGenerate = async (opts: { dir: string }) => { + const dir = path.isAbsolute(opts.dir) ? opts.dir : path.join(process.cwd(), opts.dir); + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); + } + const { JWKS_PATH, PRIVATE_JWK_PATH, PRIVATE_KEY_PATH, PUBLIC_KEY_PATH } = await getPath(dir); + const { jwks, privateJWK, privatePEM, publicPEM } = await generate(); + fs.writeFileSync(PUBLIC_KEY_PATH, publicPEM); + fs.writeFileSync(PRIVATE_KEY_PATH, privatePEM); + fs.writeFileSync(PRIVATE_JWK_PATH, JSON.stringify(privateJWK, null, 2)); + fs.writeFileSync(JWKS_PATH, JSON.stringify(jwks, null, 2)); + console.log(`Keys have been saved to directory: ${dir}`); +} +