react-token-manager 1.0.5 → 1.0.7
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 +53 -34
- package/dist/index.d.mts +9 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.js +23 -13
- package/dist/index.mjs +23 -13
- package/package.json +3 -2
- package/src/core.ts +21 -18
- package/src/hook.ts +7 -0
package/README.md
CHANGED
|
@@ -27,16 +27,18 @@ configureTokenManager({
|
|
|
27
27
|
import { useTokenManager } from 'react-token-manager'
|
|
28
28
|
|
|
29
29
|
export default function Dashboard() {
|
|
30
|
-
const {
|
|
31
|
-
setTokens,
|
|
32
|
-
getTokens,
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
const {
|
|
31
|
+
setTokens,
|
|
32
|
+
getTokens,
|
|
33
|
+
getAllTokens,
|
|
34
|
+
getSingleToken,
|
|
35
|
+
removeTokens,
|
|
36
|
+
clearTokens,
|
|
37
|
+
decodeToken,
|
|
38
|
+
isExpired,
|
|
37
39
|
} = useTokenManager()
|
|
38
40
|
|
|
39
|
-
// Set multiple tokens
|
|
41
|
+
// Set multiple tokens
|
|
40
42
|
setTokens({
|
|
41
43
|
access_token: 'abc123',
|
|
42
44
|
refresh_token: 'xyz789',
|
|
@@ -45,27 +47,26 @@ export default function Dashboard() {
|
|
|
45
47
|
// Get multiple tokens
|
|
46
48
|
const tokens = getTokens(['access_token', 'refresh_token'])
|
|
47
49
|
console.log(tokens.access_token) // 'abc123'
|
|
48
|
-
|
|
50
|
+
|
|
51
|
+
// Get all tracked tokens
|
|
52
|
+
const allTokens = getAllTokens()
|
|
53
|
+
console.log(allTokens)
|
|
54
|
+
|
|
55
|
+
// Get a single token by key
|
|
56
|
+
const accessToken = getSingleToken('access_token')
|
|
57
|
+
console.log(accessToken)
|
|
49
58
|
|
|
50
59
|
// Decode a token
|
|
51
|
-
const payload = decodeToken(
|
|
60
|
+
const payload = decodeToken(accessToken!)
|
|
52
61
|
|
|
53
62
|
// Check if a token is expired
|
|
54
|
-
console.log(isExpired(
|
|
63
|
+
console.log(isExpired(accessToken!))
|
|
55
64
|
|
|
56
65
|
// Remove multiple tokens
|
|
57
66
|
removeTokens(['access_token', 'refresh_token'])
|
|
58
67
|
|
|
59
68
|
// Clear all tracked tokens
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
return (
|
|
63
|
-
<div>
|
|
64
|
-
<p>Access Token: {tokens.access_token}</p>
|
|
65
|
-
<p>Refresh Token: {tokens.refresh_token}</p>
|
|
66
|
-
<p>Decoded Payload: {JSON.stringify(payload)}</p>
|
|
67
|
-
</div>
|
|
68
|
-
)
|
|
69
|
+
clearTokens()
|
|
69
70
|
}
|
|
70
71
|
```
|
|
71
72
|
|
|
@@ -86,18 +87,26 @@ manager.set({
|
|
|
86
87
|
|
|
87
88
|
// Get multiple tokens
|
|
88
89
|
const tokens = manager.get(['access_token', 'refresh_token'])
|
|
89
|
-
console.log(tokens.access_token)
|
|
90
|
+
console.log(tokens.access_token)
|
|
90
91
|
|
|
91
|
-
//
|
|
92
|
-
manager.
|
|
92
|
+
// Get a single token
|
|
93
|
+
const access = manager.getOne('access_token')
|
|
94
|
+
|
|
95
|
+
// Get all tracked tokens
|
|
96
|
+
const allTokens = manager.getAll()
|
|
97
|
+
console.log(allTokens)
|
|
98
|
+
|
|
99
|
+
// Decode a token
|
|
100
|
+
console.log(manager.decode(access!))
|
|
93
101
|
|
|
94
|
-
//
|
|
95
|
-
manager.
|
|
102
|
+
// Check if token is expired
|
|
103
|
+
console.log(manager.isExpired(access!))
|
|
96
104
|
|
|
97
|
-
//
|
|
98
|
-
|
|
99
|
-
console.log(manager.isExpired(tokens.access_token!))
|
|
105
|
+
// Remove multiple tokens
|
|
106
|
+
manager.remove(['access_token', 'refresh_token'])
|
|
100
107
|
|
|
108
|
+
// Clear all tokens
|
|
109
|
+
manager.clear()
|
|
101
110
|
```
|
|
102
111
|
|
|
103
112
|
## API Reference
|
|
@@ -115,7 +124,11 @@ useTokenManager(options?: TokenManagerOptions)
|
|
|
115
124
|
Returns:
|
|
116
125
|
setTokens(tokens: Record<string, string>) // Set multiple tokens
|
|
117
126
|
|
|
118
|
-
getTokens(keys: string | string[])
|
|
127
|
+
getTokens(keys: string | string[]) // Get multiple tokens
|
|
128
|
+
|
|
129
|
+
getAllTokens() // Get all tracked tokens
|
|
130
|
+
|
|
131
|
+
getSingleToken(key: string) //Get a single token by key
|
|
119
132
|
|
|
120
133
|
removeTokens(keys: string | string[]) // Remove multiple tokens
|
|
121
134
|
|
|
@@ -129,6 +142,10 @@ TokenManager Class Methods
|
|
|
129
142
|
|
|
130
143
|
get(keys: string | string[]) // Retrieve multiple tokens
|
|
131
144
|
|
|
145
|
+
getOne(key: string) // Retrieve a single token
|
|
146
|
+
|
|
147
|
+
getAll() // Get all tracked tokens
|
|
148
|
+
|
|
132
149
|
remove(keys: string | string[]) // Delete multiple tokens
|
|
133
150
|
|
|
134
151
|
decode<T = unknown>(token: string) // Decode a single token
|
|
@@ -155,7 +172,7 @@ console.log(tokens.access_token) // 'abc'
|
|
|
155
172
|
console.log(tokens.refresh_token) // 'xyz'
|
|
156
173
|
```
|
|
157
174
|
|
|
158
|
-
##Using Cookies
|
|
175
|
+
## Using Cookies
|
|
159
176
|
```bash
|
|
160
177
|
configureTokenManager({ storage: 'cookie' })
|
|
161
178
|
```
|
|
@@ -163,11 +180,13 @@ configureTokenManager({ storage: 'cookie' })
|
|
|
163
180
|
Checking Expiry Before API Call
|
|
164
181
|
|
|
165
182
|
```bash
|
|
166
|
-
const {
|
|
167
|
-
const
|
|
183
|
+
const { getSingleToken, isExpired } = useTokenManager()
|
|
184
|
+
const accessToken = getSingleToken('access_token')
|
|
168
185
|
|
|
169
|
-
if (!isExpired(
|
|
170
|
-
callApi(
|
|
186
|
+
if (!isExpired(accessToken!)) {
|
|
187
|
+
callApi(accessToken)
|
|
188
|
+
} else {
|
|
189
|
+
refreshToken()
|
|
171
190
|
}
|
|
172
191
|
```
|
|
173
192
|
|
package/dist/index.d.mts
CHANGED
|
@@ -9,8 +9,12 @@ declare class TokenManager {
|
|
|
9
9
|
constructor(options?: TokenManagerOptions);
|
|
10
10
|
/** Set multiple tokens at once */
|
|
11
11
|
set(tokens: Record<string, string>): void;
|
|
12
|
-
/** Get token(s) */
|
|
12
|
+
/** Get token(s) by key(s) */
|
|
13
13
|
get(keys: string | string[]): Record<string, string | null>;
|
|
14
|
+
/** Get a single token by key */
|
|
15
|
+
getOne(key: string): string | null;
|
|
16
|
+
/** Get all tracked tokens */
|
|
17
|
+
getAll(): Record<string, string | null>;
|
|
14
18
|
/** Remove specific tokens */
|
|
15
19
|
remove(keys: string | string[]): void;
|
|
16
20
|
/** Clear all tracked auth tokens */
|
|
@@ -26,8 +30,12 @@ declare class TokenManager {
|
|
|
26
30
|
declare const useTokenManager: () => {
|
|
27
31
|
/** Set multiple tokens */
|
|
28
32
|
setTokens: (tokens: Record<string, string>) => void;
|
|
33
|
+
/** Get all tokens by keys */
|
|
34
|
+
getAllTokens: () => Record<string, string | null>;
|
|
29
35
|
/** Get multiple tokens by keys */
|
|
30
36
|
getTokens: (keys: string | string[]) => Record<string, string | null>;
|
|
37
|
+
/** Get a single token by key */
|
|
38
|
+
getSingleToken: (key: string) => string | null;
|
|
31
39
|
/** Remove multiple tokens by keys */
|
|
32
40
|
removeTokens: (keys: string | string[]) => void;
|
|
33
41
|
clearTokens: () => void;
|
package/dist/index.d.ts
CHANGED
|
@@ -9,8 +9,12 @@ declare class TokenManager {
|
|
|
9
9
|
constructor(options?: TokenManagerOptions);
|
|
10
10
|
/** Set multiple tokens at once */
|
|
11
11
|
set(tokens: Record<string, string>): void;
|
|
12
|
-
/** Get token(s) */
|
|
12
|
+
/** Get token(s) by key(s) */
|
|
13
13
|
get(keys: string | string[]): Record<string, string | null>;
|
|
14
|
+
/** Get a single token by key */
|
|
15
|
+
getOne(key: string): string | null;
|
|
16
|
+
/** Get all tracked tokens */
|
|
17
|
+
getAll(): Record<string, string | null>;
|
|
14
18
|
/** Remove specific tokens */
|
|
15
19
|
remove(keys: string | string[]): void;
|
|
16
20
|
/** Clear all tracked auth tokens */
|
|
@@ -26,8 +30,12 @@ declare class TokenManager {
|
|
|
26
30
|
declare const useTokenManager: () => {
|
|
27
31
|
/** Set multiple tokens */
|
|
28
32
|
setTokens: (tokens: Record<string, string>) => void;
|
|
33
|
+
/** Get all tokens by keys */
|
|
34
|
+
getAllTokens: () => Record<string, string | null>;
|
|
29
35
|
/** Get multiple tokens by keys */
|
|
30
36
|
getTokens: (keys: string | string[]) => Record<string, string | null>;
|
|
37
|
+
/** Get a single token by key */
|
|
38
|
+
getSingleToken: (key: string) => string | null;
|
|
31
39
|
/** Remove multiple tokens by keys */
|
|
32
40
|
removeTokens: (keys: string | string[]) => void;
|
|
33
41
|
clearTokens: () => void;
|
package/dist/index.js
CHANGED
|
@@ -60,21 +60,27 @@ var TokenManager = class {
|
|
|
60
60
|
else document.cookie = `${key}=${value}; path=/`;
|
|
61
61
|
});
|
|
62
62
|
}
|
|
63
|
-
/** Get token(s) */
|
|
63
|
+
/** Get token(s) by key(s) */
|
|
64
64
|
get(keys) {
|
|
65
65
|
const keyArray = Array.isArray(keys) ? keys : [keys];
|
|
66
66
|
const result = {};
|
|
67
67
|
keyArray.forEach((key) => {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
68
|
+
result[key] = this.getOne(key);
|
|
69
|
+
});
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
/** Get a single token by key */
|
|
73
|
+
getOne(key) {
|
|
74
|
+
if (this.storage === "localStorage") return localStorage.getItem(key);
|
|
75
|
+
if (this.storage === "sessionStorage") return sessionStorage.getItem(key);
|
|
76
|
+
const match = document.cookie.match(new RegExp("(^| )" + key + "=([^;]+)"));
|
|
77
|
+
return match ? match[2] : null;
|
|
78
|
+
}
|
|
79
|
+
/** Get all tracked tokens */
|
|
80
|
+
getAll() {
|
|
81
|
+
const result = {};
|
|
82
|
+
this.trackedKeys.forEach((key) => {
|
|
83
|
+
result[key] = this.getOne(key);
|
|
78
84
|
});
|
|
79
85
|
return result;
|
|
80
86
|
}
|
|
@@ -114,8 +120,8 @@ var TokenManager = class {
|
|
|
114
120
|
isExpired(token) {
|
|
115
121
|
let tokenToCheck = token;
|
|
116
122
|
if (!tokenToCheck) {
|
|
117
|
-
const stored = this.
|
|
118
|
-
tokenToCheck = stored
|
|
123
|
+
const stored = this.getOne("access_token");
|
|
124
|
+
tokenToCheck = stored || void 0;
|
|
119
125
|
}
|
|
120
126
|
if (!tokenToCheck) return true;
|
|
121
127
|
const decoded = this.decode(tokenToCheck);
|
|
@@ -131,8 +137,12 @@ var useTokenManager = () => {
|
|
|
131
137
|
return {
|
|
132
138
|
/** Set multiple tokens */
|
|
133
139
|
setTokens: (tokens) => manager.set(tokens),
|
|
140
|
+
/** Get all tokens by keys */
|
|
141
|
+
getAllTokens: () => manager.getAll(),
|
|
134
142
|
/** Get multiple tokens by keys */
|
|
135
143
|
getTokens: (keys) => manager.get(keys),
|
|
144
|
+
/** Get a single token by key */
|
|
145
|
+
getSingleToken: (key) => manager.getOne(key),
|
|
136
146
|
/** Remove multiple tokens by keys */
|
|
137
147
|
removeTokens: (keys) => manager.remove(keys),
|
|
138
148
|
clearTokens: () => manager.clear(),
|
package/dist/index.mjs
CHANGED
|
@@ -22,21 +22,27 @@ var TokenManager = class {
|
|
|
22
22
|
else document.cookie = `${key}=${value}; path=/`;
|
|
23
23
|
});
|
|
24
24
|
}
|
|
25
|
-
/** Get token(s) */
|
|
25
|
+
/** Get token(s) by key(s) */
|
|
26
26
|
get(keys) {
|
|
27
27
|
const keyArray = Array.isArray(keys) ? keys : [keys];
|
|
28
28
|
const result = {};
|
|
29
29
|
keyArray.forEach((key) => {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
30
|
+
result[key] = this.getOne(key);
|
|
31
|
+
});
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
/** Get a single token by key */
|
|
35
|
+
getOne(key) {
|
|
36
|
+
if (this.storage === "localStorage") return localStorage.getItem(key);
|
|
37
|
+
if (this.storage === "sessionStorage") return sessionStorage.getItem(key);
|
|
38
|
+
const match = document.cookie.match(new RegExp("(^| )" + key + "=([^;]+)"));
|
|
39
|
+
return match ? match[2] : null;
|
|
40
|
+
}
|
|
41
|
+
/** Get all tracked tokens */
|
|
42
|
+
getAll() {
|
|
43
|
+
const result = {};
|
|
44
|
+
this.trackedKeys.forEach((key) => {
|
|
45
|
+
result[key] = this.getOne(key);
|
|
40
46
|
});
|
|
41
47
|
return result;
|
|
42
48
|
}
|
|
@@ -76,8 +82,8 @@ var TokenManager = class {
|
|
|
76
82
|
isExpired(token) {
|
|
77
83
|
let tokenToCheck = token;
|
|
78
84
|
if (!tokenToCheck) {
|
|
79
|
-
const stored = this.
|
|
80
|
-
tokenToCheck = stored
|
|
85
|
+
const stored = this.getOne("access_token");
|
|
86
|
+
tokenToCheck = stored || void 0;
|
|
81
87
|
}
|
|
82
88
|
if (!tokenToCheck) return true;
|
|
83
89
|
const decoded = this.decode(tokenToCheck);
|
|
@@ -93,8 +99,12 @@ var useTokenManager = () => {
|
|
|
93
99
|
return {
|
|
94
100
|
/** Set multiple tokens */
|
|
95
101
|
setTokens: (tokens) => manager.set(tokens),
|
|
102
|
+
/** Get all tokens by keys */
|
|
103
|
+
getAllTokens: () => manager.getAll(),
|
|
96
104
|
/** Get multiple tokens by keys */
|
|
97
105
|
getTokens: (keys) => manager.get(keys),
|
|
106
|
+
/** Get a single token by key */
|
|
107
|
+
getSingleToken: (key) => manager.getOne(key),
|
|
98
108
|
/** Remove multiple tokens by keys */
|
|
99
109
|
removeTokens: (keys) => manager.remove(keys),
|
|
100
110
|
clearTokens: () => manager.clear(),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-token-manager",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.7",
|
|
4
4
|
"description": "A simple React library to manage JWT tokens",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -16,12 +16,13 @@
|
|
|
16
16
|
"react-dom": "^19.2.3"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
+
"@types/react-dom": "^19.2.3",
|
|
19
20
|
"js-cookie": "^3.0.5",
|
|
20
21
|
"jwt-decode": "^4.0.0"
|
|
21
22
|
},
|
|
22
23
|
"devDependencies": {
|
|
23
24
|
"@types/js-cookie": "^3.0.6",
|
|
24
|
-
"@types/react": "^
|
|
25
|
+
"@types/react": "^19.2.14",
|
|
25
26
|
"tsup": "^8.5.1",
|
|
26
27
|
"typescript": "^5.9.3"
|
|
27
28
|
}
|
package/src/core.ts
CHANGED
|
@@ -31,36 +31,41 @@ export class TokenManager {
|
|
|
31
31
|
set(tokens: Record<string, string>) {
|
|
32
32
|
Object.entries(tokens).forEach(([key, value]) => {
|
|
33
33
|
this.trackedKeys.add(key)
|
|
34
|
-
|
|
35
34
|
if (this.storage === 'localStorage') localStorage.setItem(key, value)
|
|
36
35
|
else if (this.storage === 'sessionStorage') sessionStorage.setItem(key, value)
|
|
37
36
|
else document.cookie = `${key}=${value}; path=/`
|
|
38
37
|
})
|
|
39
38
|
}
|
|
40
39
|
|
|
41
|
-
/** Get token(s) */
|
|
40
|
+
/** Get token(s) by key(s) */
|
|
42
41
|
get(keys: string | string[]): Record<string, string | null> {
|
|
43
42
|
const keyArray = Array.isArray(keys) ? keys : [keys]
|
|
44
43
|
const result: Record<string, string | null> = {}
|
|
45
44
|
|
|
46
45
|
keyArray.forEach((key) => {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
if (this.storage === 'localStorage') value = localStorage.getItem(key)
|
|
50
|
-
else if (this.storage === 'sessionStorage') value = sessionStorage.getItem(key)
|
|
51
|
-
else {
|
|
52
|
-
const match = document.cookie.match(
|
|
53
|
-
new RegExp('(^| )' + key + '=([^;]+)')
|
|
54
|
-
)
|
|
55
|
-
value = match ? match[2] : null
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
result[key] = value
|
|
46
|
+
result[key] = this.getOne(key)
|
|
59
47
|
})
|
|
60
48
|
|
|
61
49
|
return result
|
|
62
50
|
}
|
|
63
51
|
|
|
52
|
+
/** Get a single token by key */
|
|
53
|
+
getOne(key: string): string | null {
|
|
54
|
+
if (this.storage === 'localStorage') return localStorage.getItem(key)
|
|
55
|
+
if (this.storage === 'sessionStorage') return sessionStorage.getItem(key)
|
|
56
|
+
const match = document.cookie.match(new RegExp('(^| )' + key + '=([^;]+)'))
|
|
57
|
+
return match ? match[2] : null
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** Get all tracked tokens */
|
|
61
|
+
getAll(): Record<string, string | null> {
|
|
62
|
+
const result: Record<string, string | null> = {}
|
|
63
|
+
this.trackedKeys.forEach((key) => {
|
|
64
|
+
result[key] = this.getOne(key)
|
|
65
|
+
})
|
|
66
|
+
return result
|
|
67
|
+
}
|
|
68
|
+
|
|
64
69
|
/** Remove specific tokens */
|
|
65
70
|
remove(keys: string | string[]) {
|
|
66
71
|
const keyArray = Array.isArray(keys) ? keys : [keys]
|
|
@@ -103,10 +108,9 @@ export class TokenManager {
|
|
|
103
108
|
isExpired(token?: string): boolean {
|
|
104
109
|
let tokenToCheck = token
|
|
105
110
|
|
|
106
|
-
// If no token passed, try to get access_token
|
|
107
111
|
if (!tokenToCheck) {
|
|
108
|
-
const stored = this.
|
|
109
|
-
tokenToCheck = stored
|
|
112
|
+
const stored = this.getOne('access_token')
|
|
113
|
+
tokenToCheck = stored || undefined
|
|
110
114
|
}
|
|
111
115
|
|
|
112
116
|
if (!tokenToCheck) return true
|
|
@@ -117,5 +121,4 @@ export class TokenManager {
|
|
|
117
121
|
|
|
118
122
|
return Date.now() >= decoded.exp * 1000
|
|
119
123
|
}
|
|
120
|
-
|
|
121
124
|
}
|
package/src/hook.ts
CHANGED
|
@@ -8,11 +8,18 @@ export const useTokenManager = () => {
|
|
|
8
8
|
/** Set multiple tokens */
|
|
9
9
|
setTokens: (tokens: Record<string, string>) => manager.set(tokens),
|
|
10
10
|
|
|
11
|
+
/** Get all tokens by keys */
|
|
12
|
+
getAllTokens: () => manager.getAll(),
|
|
13
|
+
|
|
11
14
|
/** Get multiple tokens by keys */
|
|
12
15
|
getTokens: (keys: string | string[]) => manager.get(keys),
|
|
13
16
|
|
|
17
|
+
/** Get a single token by key */
|
|
18
|
+
getSingleToken: (key: string) => manager.getOne(key),
|
|
19
|
+
|
|
14
20
|
/** Remove multiple tokens by keys */
|
|
15
21
|
removeTokens: (keys: string | string[]) => manager.remove(keys),
|
|
22
|
+
|
|
16
23
|
|
|
17
24
|
clearTokens: () => manager.clear(),
|
|
18
25
|
|