@@ -69,7 +69,9 @@
|
|||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@effect/schema": "*",
|
"@effect/schema": "*",
|
||||||
|
"@types/jsonwebtoken": "*",
|
||||||
"effect": "*",
|
"effect": "*",
|
||||||
|
"jsonwebtoken": "*",
|
||||||
"mobx": "*"
|
"mobx": "*"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
46
src/Layers/JSONWebToken.ts
Normal file
46
src/Layers/JSONWebToken.ts
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
import { Context, Effect, Layer } from "effect"
|
||||||
|
import jwt from "jsonwebtoken"
|
||||||
|
|
||||||
|
|
||||||
|
export class JSONWebToken extends Context.Tag("JSONWebToken")<JSONWebToken, {
|
||||||
|
sign: (
|
||||||
|
payload: string | object | Buffer,
|
||||||
|
secretOrPrivateKey: jwt.Secret,
|
||||||
|
options: jwt.SignOptions,
|
||||||
|
) => Effect.Effect<
|
||||||
|
string,
|
||||||
|
Error,
|
||||||
|
never
|
||||||
|
>,
|
||||||
|
|
||||||
|
verify: (
|
||||||
|
token: string,
|
||||||
|
secretOrPublicKey: jwt.Secret,
|
||||||
|
options: jwt.VerifyOptions,
|
||||||
|
) => Effect.Effect<
|
||||||
|
string | jwt.Jwt | jwt.JwtPayload,
|
||||||
|
jwt.VerifyErrors | Error,
|
||||||
|
never
|
||||||
|
>,
|
||||||
|
}>() {}
|
||||||
|
|
||||||
|
|
||||||
|
export const JSONWebTokenLive = Layer.succeed(JSONWebToken, {
|
||||||
|
sign: (payload, secretOrPrivateKey, options) => Effect.async(resume =>
|
||||||
|
jwt.sign(payload, secretOrPrivateKey, options, (err, token) => {
|
||||||
|
resume(token
|
||||||
|
? Effect.succeed(token)
|
||||||
|
: Effect.fail(err || new Error("Unknown error"))
|
||||||
|
)
|
||||||
|
})
|
||||||
|
),
|
||||||
|
|
||||||
|
verify: (token, secretOrPublicKey, options) => Effect.async(resume =>
|
||||||
|
jwt.verify(token, secretOrPublicKey, options, (err, decoded) => {
|
||||||
|
resume(decoded
|
||||||
|
? Effect.succeed(decoded)
|
||||||
|
: Effect.fail(err || new Error("Unknown error"))
|
||||||
|
)
|
||||||
|
})
|
||||||
|
),
|
||||||
|
})
|
||||||
1
src/Layers/index.ts
Normal file
1
src/Layers/index.ts
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export * as JSONWebToken from "./JSONWebToken"
|
||||||
@@ -1,2 +1,3 @@
|
|||||||
|
export * as Layers from "./Layers"
|
||||||
export * as Schema from "./Schema"
|
export * as Schema from "./Schema"
|
||||||
export * as Types from "./Types"
|
export * as Types from "./Types"
|
||||||
|
|||||||
Reference in New Issue
Block a user