mates-auth 1.0.0-beta.1
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/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/sso.d.ts +90 -0
- package/dist/sso.d.ts.map +1 -0
- package/dist/sso.js +303 -0
- package/dist/sso.js.map +1 -0
- package/dist/use-arctic.d.ts +101 -0
- package/dist/use-arctic.d.ts.map +1 -0
- package/dist/use-arctic.js +538 -0
- package/dist/use-arctic.js.map +1 -0
- package/dist/use-jwt.d.ts +70 -0
- package/dist/use-jwt.d.ts.map +1 -0
- package/dist/use-jwt.js +274 -0
- package/dist/use-jwt.js.map +1 -0
- package/package.json +31 -0
package/dist/use-jwt.js
ADDED
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { AuthError } from "mates-fullstack";
|
|
2
|
+
import { jwt } from "mates-fullstack";
|
|
3
|
+
import { onRequest } from "mates-fullstack";
|
|
4
|
+
const ACCESS_TOKEN_TYPE = "access";
|
|
5
|
+
const REFRESH_TOKEN_TYPE = "refresh";
|
|
6
|
+
let activeConfig = null;
|
|
7
|
+
/**
|
|
8
|
+
* Register the JWT auth middleware. Call once at module level in
|
|
9
|
+
* server/main.ts. It verifies httpOnly access/refresh tokens, updates
|
|
10
|
+
* `ctx.auth`, and clears cookies on logout.
|
|
11
|
+
*/
|
|
12
|
+
export function useJWT(options = {}) {
|
|
13
|
+
const config = resolveConfig(options, false);
|
|
14
|
+
activeConfig = config;
|
|
15
|
+
onRequest(async (c) => {
|
|
16
|
+
await processAuthRequest(c, config);
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
export const auth = {
|
|
20
|
+
/**
|
|
21
|
+
* Create access/refresh token pair, set httpOnly cookies, and update
|
|
22
|
+
* `ctx.auth` for this request.
|
|
23
|
+
*/
|
|
24
|
+
async login(ctx, payload, options = {}) {
|
|
25
|
+
const config = resolveConfig(options);
|
|
26
|
+
const authPayload = normalizeAuthPayload(payload, config);
|
|
27
|
+
const userId = requireUserId(authPayload, config);
|
|
28
|
+
const tokenPair = await signTokenPair(authPayload, userId, config);
|
|
29
|
+
clearAuthCookies(ctx, config);
|
|
30
|
+
setTokenCookies(ctx, tokenPair, config);
|
|
31
|
+
ctx.auth = { ...authPayload, userId, sub: userId, isAuthenticated: true };
|
|
32
|
+
return { ...tokenPair, auth: ctx.auth };
|
|
33
|
+
},
|
|
34
|
+
/** Clear access and refresh cookies. */
|
|
35
|
+
logout(ctx, options = {}) {
|
|
36
|
+
const config = resolveConfig(options);
|
|
37
|
+
clearAuthCookies(ctx, config);
|
|
38
|
+
ctx.auth = null;
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
// ─── Refresh token JTI store ──────────────────────────────────────────────────
|
|
42
|
+
// Tracks consumed refresh token JTIs to prevent replay attacks.
|
|
43
|
+
// Single-process only — for multi-instance deployments, use onRefresh to
|
|
44
|
+
// check a shared store (Redis, DB) and return null to force re-login.
|
|
45
|
+
const _consumedJtis = new Map(); // jti → exp (unix seconds)
|
|
46
|
+
function _isJtiConsumed(jti) {
|
|
47
|
+
const now = Math.floor(Date.now() / 1000);
|
|
48
|
+
// Opportunistic cleanup of expired entries
|
|
49
|
+
for (const [k, exp] of _consumedJtis) {
|
|
50
|
+
if (exp < now)
|
|
51
|
+
_consumedJtis.delete(k);
|
|
52
|
+
}
|
|
53
|
+
return _consumedJtis.has(jti);
|
|
54
|
+
}
|
|
55
|
+
function _consumeJti(jti, exp) {
|
|
56
|
+
_consumedJtis.set(jti, exp);
|
|
57
|
+
}
|
|
58
|
+
async function processAuthRequest(ctx, config) {
|
|
59
|
+
ctx.auth = null;
|
|
60
|
+
ctx.httpCookie = ctx.cookie;
|
|
61
|
+
const accessRaw = ctx.cookie.get(config.accessCookieName);
|
|
62
|
+
const refreshRaw = ctx.cookie.get(config.refreshCookieName);
|
|
63
|
+
const tokensWerePresent = Boolean(accessRaw || refreshRaw);
|
|
64
|
+
if (!tokensWerePresent) {
|
|
65
|
+
// Clear any stale legacy cookies so they don't linger in the browser
|
|
66
|
+
if (config.legacyCookieNames.length > 0) {
|
|
67
|
+
const deleteOpts = cookieDeleteOptions(config);
|
|
68
|
+
for (const name of config.legacyCookieNames) {
|
|
69
|
+
if (ctx.cookie.get(name)) {
|
|
70
|
+
ctx.cookie.delete(name, deleteOpts);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const accessPayload = accessRaw
|
|
77
|
+
? await verifyTypedToken(accessRaw, ACCESS_TOKEN_TYPE, config)
|
|
78
|
+
: null;
|
|
79
|
+
if (accessPayload) {
|
|
80
|
+
const verified = await validateVerifiedAuth(accessPayload, ctx, config);
|
|
81
|
+
if (!verified)
|
|
82
|
+
return logoutOrThrow(ctx, config, "Unauthorized");
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const refreshPayload = refreshRaw
|
|
86
|
+
? await verifyTypedToken(refreshRaw, REFRESH_TOKEN_TYPE, config)
|
|
87
|
+
: null;
|
|
88
|
+
if (!refreshPayload) {
|
|
89
|
+
return logoutOrThrow(ctx, config, "Authentication expired");
|
|
90
|
+
}
|
|
91
|
+
// Reject replayed refresh tokens
|
|
92
|
+
const refreshJti = typeof refreshPayload.jti === "string" ? refreshPayload.jti : null;
|
|
93
|
+
if (!refreshJti || _isJtiConsumed(refreshJti)) {
|
|
94
|
+
return logoutOrThrow(ctx, config, "Authentication expired");
|
|
95
|
+
}
|
|
96
|
+
const userId = config.getUserId(refreshPayload);
|
|
97
|
+
if (!userId) {
|
|
98
|
+
return logoutOrThrow(ctx, config, "Authentication expired");
|
|
99
|
+
}
|
|
100
|
+
const freshClaims = config.onRefresh
|
|
101
|
+
? await config.onRefresh(userId, refreshPayload, ctx)
|
|
102
|
+
: refreshClaimsToAuth(refreshPayload, userId);
|
|
103
|
+
if (!freshClaims) {
|
|
104
|
+
return logoutOrThrow(ctx, config, "Authentication expired");
|
|
105
|
+
}
|
|
106
|
+
const authPayload = normalizeAuthPayload(freshClaims, config);
|
|
107
|
+
const freshUserId = requireUserId(authPayload, config);
|
|
108
|
+
if (freshUserId !== userId) {
|
|
109
|
+
return logoutOrThrow(ctx, config, "Authentication expired");
|
|
110
|
+
}
|
|
111
|
+
const verified = await validateVerifiedAuth(authPayload, ctx, config);
|
|
112
|
+
if (!verified)
|
|
113
|
+
return logoutOrThrow(ctx, config, "Unauthorized");
|
|
114
|
+
const tokens = await signTokenPair(authPayload, freshUserId, config);
|
|
115
|
+
setTokenCookies(ctx, tokens, config);
|
|
116
|
+
// Consume the used refresh JTI — prevents replay of the same token
|
|
117
|
+
_consumeJti(refreshJti, typeof refreshPayload.exp === "number" ? refreshPayload.exp : 0);
|
|
118
|
+
}
|
|
119
|
+
async function validateVerifiedAuth(payload, ctx, config) {
|
|
120
|
+
const authPayload = normalizeAuthPayload(payload, config);
|
|
121
|
+
const userId = config.getUserId(authPayload);
|
|
122
|
+
if (!userId)
|
|
123
|
+
return false;
|
|
124
|
+
if (config.onVerify) {
|
|
125
|
+
const valid = await config.onVerify(authPayload, ctx);
|
|
126
|
+
if (!valid)
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
ctx.auth = { ...authPayload, userId, sub: userId, isAuthenticated: true };
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
async function signTokenPair(payload, userId, config) {
|
|
133
|
+
const tokens = jwt(config.secret);
|
|
134
|
+
const accessToken = await tokens.sign({
|
|
135
|
+
...stripJwtTiming(payload),
|
|
136
|
+
sub: userId,
|
|
137
|
+
userId,
|
|
138
|
+
tokenType: ACCESS_TOKEN_TYPE,
|
|
139
|
+
}, { expiresIn: config.accessExpiresIn });
|
|
140
|
+
const refreshToken = await tokens.sign({ sub: userId, userId, tokenType: REFRESH_TOKEN_TYPE }, { expiresIn: config.refreshExpiresIn, includeJti: true });
|
|
141
|
+
return { accessToken, refreshToken };
|
|
142
|
+
}
|
|
143
|
+
function setTokenCookies(ctx, tokens, config) {
|
|
144
|
+
ctx.cookie.set(config.accessCookieName, tokens.accessToken, {
|
|
145
|
+
...baseCookieOptions(config),
|
|
146
|
+
httpOnly: true,
|
|
147
|
+
maxAge: parseDuration(config.accessExpiresIn),
|
|
148
|
+
});
|
|
149
|
+
ctx.cookie.set(config.refreshCookieName, tokens.refreshToken, {
|
|
150
|
+
...baseCookieOptions(config),
|
|
151
|
+
httpOnly: true,
|
|
152
|
+
maxAge: parseDuration(config.refreshExpiresIn),
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
async function verifyTypedToken(token, tokenType, config) {
|
|
156
|
+
const payload = await jwt(config.secret).verify(token);
|
|
157
|
+
if (!payload || payload.tokenType !== tokenType)
|
|
158
|
+
return null;
|
|
159
|
+
return payload;
|
|
160
|
+
}
|
|
161
|
+
function logoutOrThrow(ctx, config, message) {
|
|
162
|
+
clearAuthCookies(ctx, config);
|
|
163
|
+
ctx.auth = null;
|
|
164
|
+
if (config.throwErrorIfTokensExpired) {
|
|
165
|
+
throw new AuthError(message);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function clearAuthCookies(ctx, config) {
|
|
169
|
+
const options = cookieDeleteOptions(config);
|
|
170
|
+
ctx.cookie.delete(config.accessCookieName, options);
|
|
171
|
+
ctx.cookie.delete(config.refreshCookieName, options);
|
|
172
|
+
for (const name of config.legacyCookieNames) {
|
|
173
|
+
ctx.cookie.delete(name, options);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
function normalizeAuthPayload(payload, config) {
|
|
177
|
+
const userId = config.getUserId(payload);
|
|
178
|
+
const clean = stripJwtTiming(payload);
|
|
179
|
+
delete clean.tokenType;
|
|
180
|
+
if (userId) {
|
|
181
|
+
clean.userId = userId;
|
|
182
|
+
clean.sub = userId;
|
|
183
|
+
}
|
|
184
|
+
return clean;
|
|
185
|
+
}
|
|
186
|
+
function requireUserId(payload, config) {
|
|
187
|
+
const userId = config.getUserId(payload);
|
|
188
|
+
if (!userId) {
|
|
189
|
+
throw new AuthError("Auth payload must include userId, id, or sub");
|
|
190
|
+
}
|
|
191
|
+
return userId;
|
|
192
|
+
}
|
|
193
|
+
function refreshClaimsToAuth(refreshPayload, userId) {
|
|
194
|
+
const clean = stripJwtTiming(refreshPayload);
|
|
195
|
+
delete clean.tokenType;
|
|
196
|
+
delete clean.jti;
|
|
197
|
+
return { ...clean, userId, sub: userId };
|
|
198
|
+
}
|
|
199
|
+
function stripJwtTiming(payload) {
|
|
200
|
+
const { iat: _iat, exp: _exp, nbf: _nbf, iss: _iss, aud: _aud, ...rest } = payload;
|
|
201
|
+
return { ...rest };
|
|
202
|
+
}
|
|
203
|
+
function defaultGetUserId(claims) {
|
|
204
|
+
const value = claims.userId ?? claims.id ?? claims.sub;
|
|
205
|
+
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
206
|
+
}
|
|
207
|
+
function resolveConfig(options = {}, inheritPrevious = true) {
|
|
208
|
+
const previous = inheritPrevious ? activeConfig : null;
|
|
209
|
+
const secret = options.secret ??
|
|
210
|
+
previous?.secret ??
|
|
211
|
+
process.env.AUTH_JWT_SECRET ??
|
|
212
|
+
process.env.JWT_SECRET;
|
|
213
|
+
if (!secret || secret.length < 8) {
|
|
214
|
+
throw new Error("[mates-fullstack-auth] useJWT: secret must be configured via " +
|
|
215
|
+
"useJWT({ secret }), AUTH_JWT_SECRET, or JWT_SECRET.");
|
|
216
|
+
}
|
|
217
|
+
const refreshExpiresIn = options.refreshExpiresIn ?? previous?.refreshExpiresIn ?? "30d";
|
|
218
|
+
return {
|
|
219
|
+
secret,
|
|
220
|
+
throwErrorIfTokensExpired: options.throwErrorIfTokensExpired ??
|
|
221
|
+
previous?.throwErrorIfTokensExpired ??
|
|
222
|
+
true,
|
|
223
|
+
accessCookieName: options.accessCookieName ?? previous?.accessCookieName ?? "mates_access",
|
|
224
|
+
refreshCookieName: options.refreshCookieName ??
|
|
225
|
+
previous?.refreshCookieName ??
|
|
226
|
+
"mates_refresh",
|
|
227
|
+
accessExpiresIn: options.accessExpiresIn ?? previous?.accessExpiresIn ?? "15m",
|
|
228
|
+
refreshExpiresIn,
|
|
229
|
+
path: options.path ?? previous?.path ?? "/",
|
|
230
|
+
domain: options.domain ?? previous?.domain,
|
|
231
|
+
sameSite: options.sameSite ?? previous?.sameSite ?? "lax",
|
|
232
|
+
secure: options.secure ??
|
|
233
|
+
previous?.secure ??
|
|
234
|
+
process.env.NODE_ENV === "production",
|
|
235
|
+
onRefresh: options.onRefresh ?? previous?.onRefresh,
|
|
236
|
+
onVerify: options.onVerify ?? previous?.onVerify,
|
|
237
|
+
getUserId: options.getUserId ?? previous?.getUserId ?? defaultGetUserId,
|
|
238
|
+
legacyCookieNames: options.legacyCookieNames ?? previous?.legacyCookieNames ?? [],
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
function baseCookieOptions(config) {
|
|
242
|
+
return {
|
|
243
|
+
path: config.path,
|
|
244
|
+
domain: config.domain,
|
|
245
|
+
sameSite: config.sameSite,
|
|
246
|
+
secure: config.secure,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
function cookieDeleteOptions(config) {
|
|
250
|
+
return { path: config.path, domain: config.domain };
|
|
251
|
+
}
|
|
252
|
+
function parseDuration(value) {
|
|
253
|
+
if (typeof value === "number")
|
|
254
|
+
return Math.floor(value);
|
|
255
|
+
const str = value.trim();
|
|
256
|
+
if (/^\d+$/.test(str))
|
|
257
|
+
return Number(str);
|
|
258
|
+
const match = str.match(/^(\d+(?:\.\d+)?)\s*(s|m|h|d|w)$/i);
|
|
259
|
+
if (!match) {
|
|
260
|
+
throw new Error(`[mates-fullstack-auth] useJWT: invalid duration "${value}". ` +
|
|
261
|
+
"Use seconds or strings like 15m, 1h, 30d.");
|
|
262
|
+
}
|
|
263
|
+
const amount = Number(match[1]);
|
|
264
|
+
const unit = match[2].toLowerCase();
|
|
265
|
+
const multipliers = {
|
|
266
|
+
s: 1,
|
|
267
|
+
m: 60,
|
|
268
|
+
h: 3600,
|
|
269
|
+
d: 86400,
|
|
270
|
+
w: 604800,
|
|
271
|
+
};
|
|
272
|
+
return Math.floor(amount * multipliers[unit]);
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=use-jwt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-jwt.js","sourceRoot":"","sources":["../src/use-jwt.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "mates-auth",
|
|
3
|
+
"version": "1.0.0-beta.1",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Authentication middleware for mates-fullstack — JWT, social login, SSO.",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"import": "./dist/index.js"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"mates-fullstack": "file:../mates-fullstack"
|
|
19
|
+
},
|
|
20
|
+
"optionalDependencies": {
|
|
21
|
+
"arctic": "^3.7.0"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"@types/node": "^20.0.0",
|
|
25
|
+
"typescript": "^5.3.2"
|
|
26
|
+
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "tsc",
|
|
29
|
+
"type-check": "tsc --noEmit"
|
|
30
|
+
}
|
|
31
|
+
}
|