0.1.9 (#10)
All checks were successful
Publish / publish (push) Successful in 14s
Lint / lint (push) Successful in 11s

Co-authored-by: Julien Valverdé <julien.valverde@mailo.com>
Reviewed-on: #10
This commit was merged in pull request #10.
This commit is contained in:
Julien Valverdé
2024-08-20 02:19:32 +02:00
parent 94f16a3967
commit ca1d28a93c
7 changed files with 127 additions and 12 deletions

BIN
bun.lockb

Binary file not shown.

View File

@@ -1,6 +1,6 @@
{ {
"name": "@thilawyn/thilalib", "name": "@thilawyn/thilalib",
"version": "0.1.8", "version": "0.1.9",
"type": "module", "type": "module",
"files": [ "files": [
"./dist" "./dist"
@@ -17,6 +17,16 @@
"default": "./dist/index.cjs" "default": "./dist/index.cjs"
} }
}, },
"./Layers": {
"import": {
"types": "./dist/Layers/index.d.ts",
"default": "./dist/Layers/index.js"
},
"require": {
"types": "./dist/Layers/index.d.cts",
"default": "./dist/Layers/index.cjs"
}
},
"./Types": { "./Types": {
"import": { "import": {
"types": "./dist/Types/index.d.ts", "types": "./dist/Types/index.d.ts",
@@ -56,20 +66,20 @@
"clean:node": "rm -rf node_modules" "clean:node": "rm -rf node_modules"
}, },
"dependencies": { "dependencies": {
"remeda": "^2.6.0", "remeda": "^2.11.0",
"type-fest": "^4.23.0" "type-fest": "^4.25.0"
}, },
"devDependencies": { "devDependencies": {
"bun-types": "^1.1.21", "@effect/schema": "^0.71.0",
"npm-check-updates": "^16.14.20", "@types/jsonwebtoken": "^9.0.6",
"bun-types": "^1.1.24",
"effect": "^3.6.4",
"jsonwebtoken": "^9.0.2",
"mobx": "^6.13.1",
"npm-check-updates": "^17.0.6",
"npm-sort": "^0.0.4", "npm-sort": "^0.0.4",
"tsup": "^8.2.3", "tsup": "^8.2.4",
"tsx": "^4.16.2", "tsx": "^4.17.0",
"typescript": "^5.5.4" "typescript": "^5.5.4"
},
"optionalDependencies": {
"@effect/schema": "*",
"effect": "*",
"mobx": "*"
} }
} }

View 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"))
)
})
),
})

5
src/Layers/index.ts Normal file
View File

@@ -0,0 +1,5 @@
/**
* A wrapper around the jsonwebtoken library for Effect
* Requires `effect`, `jsonwebtoken` and `@types/jsonwebtoken` to be installed
*/
export * as JSONWebToken from "./JSONWebToken"

52
src/Schema/DateTime.ts Normal file
View File

@@ -0,0 +1,52 @@
import { ParseResult, Schema } from "@effect/schema"
import { DateTime } from "effect"
export const DateTimeUtcFromDate = Schema.transformOrFail(
Schema.DateFromSelf,
Schema.DateTimeUtcFromSelf,
{
strict: true,
decode: (date, _, ast) => ParseResult.try({
try: () => DateTime.unsafeMake(date),
catch: e => new ParseResult.Type(
ast,
date,
e instanceof Error ? e.message : undefined,
),
}),
encode: dateTimeUtc => ParseResult.succeed(
DateTime.toDateUtc(dateTimeUtc)
),
},
)
export const DateTimeZonedFromDate = (options: {
readonly timeZone: number | string | DateTime.TimeZone
readonly adjustForTimeZone?: boolean | undefined
}) => Schema.transformOrFail(
Schema.DateFromSelf,
Schema.DateTimeZonedFromSelf,
{
strict: true,
decode: (date, _, ast) => ParseResult.try({
try: () => DateTime.unsafeMakeZoned(date, options),
catch: e => new ParseResult.Type(
ast,
date,
e instanceof Error ? e.message : undefined,
),
}),
encode: dateTime => ParseResult.succeed(
DateTime.toDate(dateTime)
),
},
)

View File

@@ -1,4 +1,5 @@
export * from "./Class" export * from "./Class"
export * from "./DateTime"
export * from "./Jsonifiable" export * from "./Jsonifiable"
export * from "./Kind" export * from "./Kind"
export * as MobX from "./MobX" export * as MobX from "./MobX"

View File

@@ -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"