@nitrotool/jwt 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/jwt.mjs +5 -7
- package/package.json +2 -2
- package/src/index.ts +1 -0
- package/src/jwt.ts +53 -52
package/dist/jwt.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import jwt from '@tsndr/cloudflare-worker-jwt';
|
|
2
2
|
import { createError } from 'h3';
|
|
3
3
|
|
|
4
|
-
const encodeJwtRaw = async (payload
|
|
4
|
+
const encodeJwtRaw = async (payload, secret, ttl = 60) => {
|
|
5
5
|
return await jwt.sign(
|
|
6
6
|
{
|
|
7
7
|
exp: Date.now() / 1e3 + ttl,
|
|
@@ -10,7 +10,7 @@ const encodeJwtRaw = async (payload = {}, secret, ttl = 60) => {
|
|
|
10
10
|
secret
|
|
11
11
|
);
|
|
12
12
|
};
|
|
13
|
-
const encodeJwt = async (payload
|
|
13
|
+
const encodeJwt = async (payload) => {
|
|
14
14
|
const secret = (
|
|
15
15
|
//@ts-expect-error Expected.
|
|
16
16
|
typeof useRuntimeConfig === "function" ? useRuntimeConfig()?.jwtSecret : ""
|
|
@@ -33,18 +33,16 @@ const verifyJwt = async (token) => {
|
|
|
33
33
|
return verifyJwtRaw(token, secret);
|
|
34
34
|
};
|
|
35
35
|
const decodeJwtRaw = async (token, secret, { verify } = { verify: true }) => {
|
|
36
|
-
if (!secret && verify)
|
|
37
|
-
throw new Error("Cannot check signature without secret.");
|
|
38
|
-
}
|
|
36
|
+
if (!secret && verify) throw new Error("Cannot check signature without secret.");
|
|
39
37
|
if (secret && verify && !await verifyJwtRaw(token, secret)) {
|
|
40
|
-
throw createError(
|
|
38
|
+
throw createError("Invalid JWT token.");
|
|
41
39
|
}
|
|
42
40
|
const { payload } = jwt.decode(token);
|
|
43
41
|
return payload;
|
|
44
42
|
};
|
|
45
43
|
const decodeJwt = async (token, { verify } = { verify: true }) => {
|
|
46
44
|
if (verify && !await verifyJwt(token)) {
|
|
47
|
-
throw createError(
|
|
45
|
+
throw createError("Invalid JWT token.");
|
|
48
46
|
}
|
|
49
47
|
const { payload } = jwt.decode(token);
|
|
50
48
|
return payload;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nitrotool/jwt",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"main": "dist/index.mjs",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@tsndr/cloudflare-worker-jwt": "^3.2.0",
|
|
13
|
-
"@nitrotool/errors": "0.0.
|
|
13
|
+
"@nitrotool/errors": "0.0.5"
|
|
14
14
|
},
|
|
15
15
|
"peerDependencies": {
|
|
16
16
|
"h3": "^1.15.3"
|
package/src/index.ts
CHANGED
package/src/jwt.ts
CHANGED
|
@@ -1,79 +1,80 @@
|
|
|
1
|
-
import jwt from '@tsndr/cloudflare-worker-jwt';
|
|
1
|
+
import jwt, {JwtPayload} from '@tsndr/cloudflare-worker-jwt';
|
|
2
|
+
|
|
2
3
|
import { createError } from 'h3';
|
|
4
|
+
export type ExtendableJwtPayload<T extends Record<string, any> = {}> =
|
|
5
|
+
Partial<JwtPayload> & T;
|
|
3
6
|
|
|
4
7
|
export const encodeJwtRaw = async <
|
|
5
|
-
|
|
8
|
+
T extends Record<string, any> = {},
|
|
6
9
|
>(
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
+
payload: ExtendableJwtPayload<T>,
|
|
11
|
+
secret: string,
|
|
12
|
+
ttl = 60,
|
|
10
13
|
): Promise<string> => {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
return await jwt.sign(
|
|
15
|
+
{
|
|
16
|
+
exp: Date.now() / 1000 + ttl,
|
|
17
|
+
...payload,
|
|
18
|
+
},
|
|
19
|
+
secret,
|
|
20
|
+
);
|
|
18
21
|
};
|
|
19
22
|
|
|
20
23
|
export const encodeJwt = async <
|
|
21
|
-
|
|
24
|
+
T extends Record<string, any> = {},
|
|
22
25
|
>(
|
|
23
|
-
|
|
26
|
+
payload: ExtendableJwtPayload<T>,
|
|
24
27
|
): Promise<string> => {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
const secret =
|
|
29
|
+
//@ts-expect-error Expected.
|
|
30
|
+
typeof useRuntimeConfig === 'function' ? useRuntimeConfig()?.jwtSecret : '';
|
|
31
|
+
return encodeJwtRaw(payload, secret);
|
|
29
32
|
};
|
|
30
33
|
|
|
31
34
|
export const verifyJwtRaw = async (
|
|
32
|
-
|
|
33
|
-
|
|
35
|
+
token: string,
|
|
36
|
+
secret: string,
|
|
34
37
|
): Promise<boolean> => {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
38
|
+
return new Promise(async (resolve) => {
|
|
39
|
+
if (await jwt.verify(token, secret, {throwError: false})) {
|
|
40
|
+
return resolve(true);
|
|
41
|
+
}
|
|
39
42
|
|
|
40
|
-
|
|
41
|
-
|
|
43
|
+
return resolve(false);
|
|
44
|
+
});
|
|
42
45
|
};
|
|
43
46
|
|
|
44
47
|
export const verifyJwt = async (token: string): Promise<boolean> => {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
48
|
+
const secret =
|
|
49
|
+
//@ts-expect-error Expected.
|
|
50
|
+
typeof useRuntimeConfig === 'function' ? useRuntimeConfig()?.jwtSecret : '';
|
|
51
|
+
return verifyJwtRaw(token, secret);
|
|
49
52
|
};
|
|
50
53
|
|
|
51
54
|
export const decodeJwtRaw = async <
|
|
52
|
-
|
|
55
|
+
T extends Record<string, any> = {},
|
|
53
56
|
>(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
) => {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
const { payload } = jwt.decode<T>(token);
|
|
65
|
-
return payload;
|
|
57
|
+
token: string,
|
|
58
|
+
secret: string,
|
|
59
|
+
{ verify }: { verify?: boolean } = { verify: true },
|
|
60
|
+
): Promise<ExtendableJwtPayload<T>> => {
|
|
61
|
+
if (!secret && verify) throw new Error('Cannot check signature without secret.');
|
|
62
|
+
if (secret && verify && !(await verifyJwtRaw(token, secret))) {
|
|
63
|
+
throw createError('Invalid JWT token.');
|
|
64
|
+
}
|
|
65
|
+
const { payload } = jwt.decode<ExtendableJwtPayload<T>>(token);
|
|
66
|
+
return payload;
|
|
66
67
|
};
|
|
67
68
|
|
|
68
69
|
export const decodeJwt = async <
|
|
69
|
-
|
|
70
|
+
T extends Record<string, any> = {},
|
|
70
71
|
>(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
) => {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
72
|
+
token: string,
|
|
73
|
+
{ verify }: { verify?: boolean } = { verify: true },
|
|
74
|
+
): Promise<ExtendableJwtPayload<T>> => {
|
|
75
|
+
if (verify && !(await verifyJwt(token))) {
|
|
76
|
+
throw createError('Invalid JWT token.');
|
|
77
|
+
}
|
|
78
|
+
const { payload } = jwt.decode<ExtendableJwtPayload<T>>(token);
|
|
79
|
+
return payload;
|
|
79
80
|
};
|