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 CHANGED
@@ -55,7 +55,6 @@ This ensures the library works seamlessly in **any Node.js project**, whether us
55
55
 
56
56
  ### Using npm:
57
57
  ```bash
58
- # Install your library
59
58
  npm install jwt-flow
60
59
 
61
60
  # Install jsonwebtoken (if not installed)
@@ -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.1",
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",