jwt-flow 1.0.1 → 1.0.4
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/README.md +0 -1
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/jwt/access-token.d.ts +16 -0
- package/dist/lib/jwt/access-token.d.ts.map +1 -0
- package/dist/lib/jwt/access-token.js +24 -0
- package/dist/lib/jwt/access-token.js.map +1 -0
- package/dist/lib/jwt/refresh-token.d.ts +16 -0
- package/dist/lib/jwt/refresh-token.d.ts.map +1 -0
- package/dist/lib/jwt/refresh-token.js +24 -0
- package/dist/lib/jwt/refresh-token.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Algorithm, Secret } from "jsonwebtoken";
|
|
2
|
+
import { type AccessTokenOptions, type AccessTokenPayload } from "./lib/jwt/access-token.js";
|
|
3
|
+
import { type RefreshTokenOptions, type RefreshTokenPayload } from "./lib/jwt/refresh-token.js";
|
|
4
|
+
export interface CreateTokenOptions<T extends object = {}> {
|
|
5
|
+
accessToken?: AccessTokenOptions<T>;
|
|
6
|
+
refreshToken?: RefreshTokenOptions<T>;
|
|
7
|
+
}
|
|
8
|
+
export interface VerifySingleTokenOptions {
|
|
9
|
+
token: string;
|
|
10
|
+
secret: Secret;
|
|
11
|
+
algorithms?: Algorithm[];
|
|
12
|
+
}
|
|
13
|
+
export interface VerifyTokenOptions {
|
|
14
|
+
accessToken?: VerifySingleTokenOptions;
|
|
15
|
+
refreshToken?: VerifySingleTokenOptions;
|
|
16
|
+
}
|
|
17
|
+
export interface VerifiedTokens<T extends object = {}> {
|
|
18
|
+
accessToken?: AccessTokenPayload<T> | null;
|
|
19
|
+
refreshToken?: RefreshTokenPayload<T> | null;
|
|
20
|
+
}
|
|
21
|
+
export declare const auth: {
|
|
22
|
+
create<T extends object = {}>(options: CreateTokenOptions<T>): {
|
|
23
|
+
accessToken?: string;
|
|
24
|
+
refreshToken?: string;
|
|
25
|
+
};
|
|
26
|
+
verify<T extends object = {}>(options: VerifyTokenOptions): VerifiedTokens<T>;
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAGH,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAGH,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EAC3B,MAAM,4BAA4B,CAAC;AAGpC,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE;IACrD,WAAW,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;IACpC,YAAY,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,wBAAwB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;CAC5B;AACD,MAAM,WAAW,kBAAkB;IAC/B,WAAW,CAAC,EAAE,wBAAwB,CAAC;IACvC,YAAY,CAAC,EAAE,wBAAwB,CAAC;CAC3C;AACD,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE;IACjD,WAAW,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC3C,YAAY,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CAChD;AAED,eAAO,MAAM,IAAI;WACN,CAAC,SAAS,MAAM,gBACV,kBAAkB,CAAC,CAAC,CAAC;sBAEA,MAAM;uBAAiB,MAAM;;WAWxD,CAAC,SAAS,MAAM,gBACV,kBAAkB,GAC5B,cAAc,CAAC,CAAC,CAAC;CAavB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { generateAccessToken, verifyAccessToken } from "./lib/jwt/access-token.js";
|
|
2
|
+
import { generateRefreshToken, verifyRefreshToken } from "./lib/jwt/refresh-token.js";
|
|
3
|
+
;
|
|
4
|
+
;
|
|
5
|
+
;
|
|
6
|
+
;
|
|
7
|
+
// create and verify tokens
|
|
8
|
+
export const auth = {
|
|
9
|
+
create(options) {
|
|
10
|
+
const result = {};
|
|
11
|
+
if (options.accessToken) {
|
|
12
|
+
const { payload, secret, expiresIn, algorithm } = options.accessToken;
|
|
13
|
+
result.accessToken = generateAccessToken(payload, secret, expiresIn, algorithm);
|
|
14
|
+
}
|
|
15
|
+
if (options.refreshToken) {
|
|
16
|
+
const { payload, secret, expiresIn, algorithm } = options.refreshToken;
|
|
17
|
+
result.refreshToken = generateRefreshToken(payload, secret, expiresIn, algorithm);
|
|
18
|
+
}
|
|
19
|
+
return result;
|
|
20
|
+
},
|
|
21
|
+
verify(options) {
|
|
22
|
+
const { accessToken, refreshToken } = options;
|
|
23
|
+
const result = {};
|
|
24
|
+
if (accessToken) {
|
|
25
|
+
const { token, secret, algorithms } = accessToken;
|
|
26
|
+
result.accessToken = verifyAccessToken(token, secret, algorithms);
|
|
27
|
+
}
|
|
28
|
+
if (refreshToken) {
|
|
29
|
+
const { token, secret, algorithms } = refreshToken;
|
|
30
|
+
result.refreshToken = verifyRefreshToken(token, secret, algorithms);
|
|
31
|
+
}
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACH,mBAAmB,EACnB,iBAAiB,EAGpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACH,oBAAoB,EACpB,kBAAkB,EAGrB,MAAM,4BAA4B,CAAC;AAMnC,CAAC;AAMD,CAAC;AAID,CAAC;AAID,CAAC;AACF,2BAA2B;AAC3B,MAAM,CAAC,MAAM,IAAI,GAAG;IAChB,MAAM,CACF,OAA8B;QAE9B,MAAM,MAAM,GAAoD,EAAE,CAAC;QACnE,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;YACtE,MAAM,CAAC,WAAW,GAAG,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;YACvE,MAAM,CAAC,YAAY,GAAG,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACtF,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,CACF,OAA2B;QAE3B,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;QAC9C,MAAM,MAAM,GAAsB,EAAE,CAAC;QACrC,IAAI,WAAW,EAAE,CAAC;YACd,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC;YAClD,MAAM,CAAC,WAAW,GAAG,iBAAiB,CAAI,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,YAAY,EAAE,CAAC;YACf,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,CAAC;YACnD,MAAM,CAAC,YAAY,GAAG,kBAAkB,CAAI,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type Algorithm, type Secret } from 'jsonwebtoken';
|
|
2
|
+
export interface BaseAccessTokenPayload {
|
|
3
|
+
sub: string;
|
|
4
|
+
role?: string;
|
|
5
|
+
email?: string;
|
|
6
|
+
}
|
|
7
|
+
export type AccessTokenPayload<T extends object = {}> = BaseAccessTokenPayload & T;
|
|
8
|
+
export interface AccessTokenOptions<T extends object = {}> {
|
|
9
|
+
payload: AccessTokenPayload<T>;
|
|
10
|
+
secret: Secret;
|
|
11
|
+
expiresIn?: `${number}${"s" | "m" | "h" | "d" | "w"}`;
|
|
12
|
+
algorithm?: Algorithm;
|
|
13
|
+
}
|
|
14
|
+
export declare function generateAccessToken<T extends object = {}>(payload: AccessTokenPayload<T>, secret: Secret, expiresIn?: `${number}${"s" | "m" | "h" | "d" | "w"}`, algorithm?: Algorithm): string;
|
|
15
|
+
export declare function verifyAccessToken<T extends object = {}>(token: string, secret: Secret, algorithms?: Algorithm[]): AccessTokenPayload<T> | null;
|
|
16
|
+
//# sourceMappingURL=access-token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access-token.d.ts","sourceRoot":"","sources":["../../../src/lib/jwt/access-token.ts"],"names":[],"mappings":"AAAA,OAAY,EACR,KAAK,SAAS,EACd,KAAK,MAAM,EAEd,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,sBAAsB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE,IAAI,sBAAsB,GAAG,CAAC,CAAC;AAEnF,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE;IACrD,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,GAAG,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;IACtD,SAAS,CAAC,EAAE,SAAS,CAAC;CACzB;AAED,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE,EACrD,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC9B,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,GAAG,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAU,EAC5D,SAAS,GAAE,SAAmB,GAC/B,MAAM,CAGR;AAED,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE,EACnD,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,UAAU,GAAE,SAAS,EAAc,GACpC,kBAAkB,CAAC,CAAC,CAAC,GAAG,IAAI,CAU9B"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import jwt, {} from 'jsonwebtoken';
|
|
2
|
+
;
|
|
3
|
+
;
|
|
4
|
+
// generate access token
|
|
5
|
+
export function generateAccessToken(payload, secret, expiresIn = '15m', algorithm = 'HS256') {
|
|
6
|
+
const options = { expiresIn, algorithm };
|
|
7
|
+
return jwt.sign(payload, secret, options);
|
|
8
|
+
}
|
|
9
|
+
;
|
|
10
|
+
// verify access token
|
|
11
|
+
export function verifyAccessToken(token, secret, algorithms = ['HS256']) {
|
|
12
|
+
try {
|
|
13
|
+
const decoded = jwt.verify(token, secret, { algorithms });
|
|
14
|
+
if (typeof decoded === 'object' && decoded !== null) {
|
|
15
|
+
return decoded;
|
|
16
|
+
}
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
;
|
|
24
|
+
//# sourceMappingURL=access-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access-token.js","sourceRoot":"","sources":["../../../src/lib/jwt/access-token.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,EAAE,EAIX,MAAM,cAAc,CAAC;AAMrB,CAAC;AAQD,CAAC;AACF,wBAAwB;AACxB,MAAM,UAAU,mBAAmB,CAC/B,OAA8B,EAC9B,MAAc,EACd,YAAuD,KAAK,EAC5D,YAAuB,OAAO;IAE9B,MAAM,OAAO,GAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;IACtD,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAAA,CAAC;AACF,sBAAsB;AACtB,MAAM,UAAU,iBAAiB,CAC7B,KAAa,EACb,MAAc,EACd,aAA0B,CAAC,OAAO,CAAC;IAEnC,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAC1D,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YAClD,OAAO,OAAgC,CAAC;QAC5C,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAAA,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type Algorithm, type Secret } from 'jsonwebtoken';
|
|
2
|
+
export interface BaseRefreshTokenPayload {
|
|
3
|
+
sub: string;
|
|
4
|
+
role?: string;
|
|
5
|
+
email?: string;
|
|
6
|
+
}
|
|
7
|
+
export type RefreshTokenPayload<T extends object = {}> = BaseRefreshTokenPayload & T;
|
|
8
|
+
export interface RefreshTokenOptions<T extends object = {}> {
|
|
9
|
+
payload: RefreshTokenPayload<T>;
|
|
10
|
+
secret: Secret;
|
|
11
|
+
expiresIn?: `${number}${"s" | "m" | "h" | "d" | "w"}`;
|
|
12
|
+
algorithm?: Algorithm;
|
|
13
|
+
}
|
|
14
|
+
export declare function generateRefreshToken<T extends object = {}>(payload: RefreshTokenPayload<T>, secret: Secret, expiresIn?: `${number}${"s" | "m" | "h" | "d" | "w"}`, algorithm?: Algorithm): string;
|
|
15
|
+
export declare function verifyRefreshToken<T extends object = {}>(token: string, secret: Secret, algorithms?: Algorithm[]): RefreshTokenPayload<T> | null;
|
|
16
|
+
//# sourceMappingURL=refresh-token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh-token.d.ts","sourceRoot":"","sources":["../../../src/lib/jwt/refresh-token.ts"],"names":[],"mappings":"AAAA,OAAY,EACR,KAAK,SAAS,EACd,KAAK,MAAM,EAEd,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,uBAAuB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE,IAAI,uBAAuB,GAAG,CAAC,CAAC;AAErF,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE;IACtD,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,GAAG,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;IACtD,SAAS,CAAC,EAAE,SAAS,CAAC;CACzB;AAED,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE,EACtD,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAC/B,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,GAAG,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAS,EAC3D,SAAS,GAAE,SAAmB,GAC/B,MAAM,CAGR;AAED,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE,EACpD,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,UAAU,GAAE,SAAS,EAAc,GACpC,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,CAU/B"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import jwt, {} from 'jsonwebtoken';
|
|
2
|
+
;
|
|
3
|
+
;
|
|
4
|
+
// generate refresh token
|
|
5
|
+
export function generateRefreshToken(payload, secret, expiresIn = '7d', algorithm = 'HS256') {
|
|
6
|
+
const options = { expiresIn, algorithm };
|
|
7
|
+
return jwt.sign(payload, secret, options);
|
|
8
|
+
}
|
|
9
|
+
;
|
|
10
|
+
// verify refresh token
|
|
11
|
+
export function verifyRefreshToken(token, secret, algorithms = ['HS256']) {
|
|
12
|
+
try {
|
|
13
|
+
const decoded = jwt.verify(token, secret, { algorithms });
|
|
14
|
+
if (typeof decoded === 'object' && decoded !== null) {
|
|
15
|
+
return decoded;
|
|
16
|
+
}
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
;
|
|
24
|
+
//# sourceMappingURL=refresh-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh-token.js","sourceRoot":"","sources":["../../../src/lib/jwt/refresh-token.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,EAAE,EAIX,MAAM,cAAc,CAAC;AAMrB,CAAC;AAQD,CAAC;AACF,yBAAyB;AACzB,MAAM,UAAU,oBAAoB,CAChC,OAA+B,EAC/B,MAAc,EACd,YAAuD,IAAI,EAC3D,YAAuB,OAAO;IAE9B,MAAM,OAAO,GAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;IACtD,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAAA,CAAC;AACF,uBAAuB;AACvB,MAAM,UAAU,kBAAkB,CAC9B,KAAa,EACb,MAAc,EACd,aAA0B,CAAC,OAAO,CAAC;IAEnC,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAC1D,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YAClD,OAAO,OAAiC,CAAC;QAC7C,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAAA,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jwt-flow",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "jwt-flow is a library for Node.js that simplifies JWT token management by generating and verifying **Access** and **Refresh** tokens with customizable payloads, expiration, and algorithms — all in a single unified auth flow.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|