-
Notifications
You must be signed in to change notification settings - Fork 19
/
index.ts
43 lines (36 loc) · 923 Bytes
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import { JwtPayload } from 'jsonwebtoken'
import { createJWKS, createKeyPair, signJwt } from './tools.js'
import { setupServer } from 'msw/node'
import { rest } from 'msw'
const createJWKSMock = (
jwksBase: string,
jwksPath = '/.well-known/jwks.json'
) => {
const keypair = createKeyPair()
const JWKS = createJWKS({
...keypair,
jwksOrigin: jwksBase,
})
const server = setupServer(
rest.get(new URL(jwksPath, jwksBase).href, (_, res, ctx) =>
res(ctx.status(200), ctx.json(JWKS))
)
)
const kid = () => JWKS.keys[0].kid
const start = () => {
server.listen({ onUnhandledRequest: 'bypass' })
}
const stop = () => {
server.close()
}
const token = (token: JwtPayload = {}) =>
signJwt(keypair.privateKey, token, kid())
return {
start,
stop,
kid,
token,
}
}
export type JWKSMock = ReturnType<typeof createJWKSMock>
export default createJWKSMock