@gauts/auth 0.2.2 → 0.3.0

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.
Files changed (58) hide show
  1. package/README.md +465 -438
  2. package/SECURITY.md +44 -1
  3. package/dist/adapters/hono/index.d.ts +33 -19
  4. package/dist/adapters/hono/index.d.ts.map +1 -1
  5. package/dist/adapters/hono/index.js +134 -55
  6. package/dist/adapters/hono/index.js.map +1 -1
  7. package/dist/adapters/next/index.d.ts +24 -0
  8. package/dist/adapters/next/index.d.ts.map +1 -0
  9. package/dist/adapters/next/index.js +90 -0
  10. package/dist/adapters/next/index.js.map +1 -0
  11. package/dist/adapters/prisma/index.d.ts +12 -4
  12. package/dist/adapters/prisma/index.d.ts.map +1 -1
  13. package/dist/adapters/prisma/index.js +95 -9
  14. package/dist/adapters/prisma/index.js.map +1 -1
  15. package/dist/auth.d.ts +8 -6
  16. package/dist/auth.d.ts.map +1 -1
  17. package/dist/auth.js +7 -9
  18. package/dist/auth.js.map +1 -1
  19. package/dist/client/index.d.ts +5 -0
  20. package/dist/client/index.d.ts.map +1 -1
  21. package/dist/client/index.js +6 -1
  22. package/dist/client/index.js.map +1 -1
  23. package/dist/config.d.ts +2 -2
  24. package/dist/config.d.ts.map +1 -1
  25. package/dist/config.js +8 -7
  26. package/dist/config.js.map +1 -1
  27. package/dist/errors.d.ts +1 -1
  28. package/dist/errors.d.ts.map +1 -1
  29. package/dist/errors.js.map +1 -1
  30. package/dist/index.d.ts +2 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/session/cache.d.ts +32 -0
  33. package/dist/session/cache.d.ts.map +1 -0
  34. package/dist/session/cache.js +136 -0
  35. package/dist/session/cache.js.map +1 -0
  36. package/dist/session/cookie.d.ts +15 -0
  37. package/dist/session/cookie.d.ts.map +1 -0
  38. package/dist/session/cookie.js +31 -0
  39. package/dist/session/cookie.js.map +1 -0
  40. package/dist/session/guards.d.ts +6 -0
  41. package/dist/session/guards.d.ts.map +1 -0
  42. package/dist/session/guards.js +23 -0
  43. package/dist/session/guards.js.map +1 -0
  44. package/dist/session/service.d.ts +2 -3
  45. package/dist/session/service.d.ts.map +1 -1
  46. package/dist/session/service.js +117 -162
  47. package/dist/session/service.js.map +1 -1
  48. package/dist/session/types.d.ts +47 -58
  49. package/dist/session/types.d.ts.map +1 -1
  50. package/package.json +9 -10
  51. package/dist/adapters/redis/index.d.ts +0 -11
  52. package/dist/adapters/redis/index.d.ts.map +0 -1
  53. package/dist/adapters/redis/index.js +0 -62
  54. package/dist/adapters/redis/index.js.map +0 -1
  55. package/dist/session/schema.d.ts +0 -5
  56. package/dist/session/schema.d.ts.map +0 -1
  57. package/dist/session/schema.js +0 -56
  58. package/dist/session/schema.js.map +0 -1
@@ -0,0 +1,31 @@
1
+ import { createError } from "../errors.js";
2
+ import { tokenPattern } from "./token.js";
3
+ export const RENEW_COOKIE_VALUE = "1";
4
+ const cookieNamePattern = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/;
5
+ export const resolveSessionCookieName = (input) => {
6
+ const name = input ?? "__sec";
7
+ if (!cookieNamePattern.test(name)) {
8
+ throw createError({
9
+ code: "AUTH_CONFIG_INVALID",
10
+ message: "Session cookie name is invalid.",
11
+ });
12
+ }
13
+ return name;
14
+ };
15
+ export const resolveSessionCookieNames = (input = {}) => {
16
+ const name = resolveSessionCookieName(input.name);
17
+ const cacheName = resolveSessionCookieName(input.cacheName ?? "__cac");
18
+ const renewName = resolveSessionCookieName(input.renewName ?? "__ren");
19
+ if (new Set([name, cacheName, renewName]).size !== 3) {
20
+ throw createError({
21
+ code: "AUTH_CONFIG_INVALID",
22
+ message: "Session cookie names must be unique.",
23
+ });
24
+ }
25
+ return { cacheName, name, renewName };
26
+ };
27
+ export const parseSessionToken = (value) => {
28
+ const token = value?.trim();
29
+ return token && tokenPattern.test(token) ? token : null;
30
+ };
31
+ //# sourceMappingURL=cookie.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookie.js","sourceRoot":"","sources":["../../src/session/cookie.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAc1C,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAEtC,MAAM,iBAAiB,GAAG,gCAAgC,CAAC;AAE3D,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,KAAc,EAAU,EAAE;IAC/D,MAAM,IAAI,GAAG,KAAK,IAAI,OAAO,CAAC;IAE9B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,WAAW,CAAC;YACd,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,iCAAiC;SAC7C,CAAC,CAAC;IACP,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACrC,QAAiC,EAAE,EACjB,EAAE;IACpB,MAAM,IAAI,GAAG,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,wBAAwB,CAAC,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,wBAAwB,CAAC,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,CAAC;IAEvE,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnD,MAAM,WAAW,CAAC;YACd,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,sCAAsC;SAClD,CAAC,CAAC;IACP,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAqB,EAAiB,EAAE;IACtE,MAAM,KAAK,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IAC5B,OAAO,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5D,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { AuthAccount, AuthUser } from "./types.js";
2
+ export declare const isRecord: (value: unknown) => value is Record<string, unknown>;
3
+ export declare const isNullableString: (value: unknown) => value is string | null;
4
+ export declare const isAuthUser: (value: unknown) => value is AuthUser;
5
+ export declare const isAuthAccount: (value: unknown) => value is AuthAccount;
6
+ //# sourceMappingURL=guards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/session/guards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAExD,eAAO,MAAM,QAAQ,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAExE,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,MAAM,GAAG,IAEnE,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,QAOpD,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,WAWvD,CAAC"}
@@ -0,0 +1,23 @@
1
+ export const isRecord = (value) => {
2
+ return typeof value === "object" && value !== null && !Array.isArray(value);
3
+ };
4
+ export const isNullableString = (value) => {
5
+ return typeof value === "string" || value === null;
6
+ };
7
+ export const isAuthUser = (value) => {
8
+ return (isRecord(value) &&
9
+ typeof value.id === "string" &&
10
+ typeof value.role === "string" &&
11
+ typeof value.status === "string");
12
+ };
13
+ export const isAuthAccount = (value) => {
14
+ return (isRecord(value) &&
15
+ typeof value.email === "string" &&
16
+ typeof value.id === "string" &&
17
+ typeof value.name === "string" &&
18
+ typeof value.role === "string" &&
19
+ typeof value.status === "string" &&
20
+ isNullableString(value.timezone) &&
21
+ isAuthUser(value.user));
22
+ };
23
+ //# sourceMappingURL=guards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/session/guards.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE;IACzE,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAChF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAc,EAA0B,EAAE;IACvE,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAc,EAAqB,EAAE;IAC5D,OAAO,CACH,QAAQ,CAAC,KAAK,CAAC;QACf,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAC5B,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CACnC,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAc,EAAwB,EAAE;IAClE,OAAO,CACH,QAAQ,CAAC,KAAK,CAAC;QACf,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAC/B,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAC5B,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QAChC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC;QAChC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CACzB,CAAC;AACN,CAAC,CAAC"}
@@ -1,11 +1,10 @@
1
1
  import type { ResolvedSessionConfig } from "../config.js";
2
- import type { DbAdapter, RedisAdapter, SessionService } from "./types.js";
2
+ import type { DbAdapter, SessionService } from "./types.js";
3
3
  type SessionDeps = {
4
4
  config: ResolvedSessionConfig;
5
5
  db: DbAdapter;
6
6
  now?: () => Date;
7
- redis: RedisAdapter;
8
7
  };
9
- export declare const createSessionService: <TData extends object>({ config, db, now, redis, }: SessionDeps) => SessionService<TData>;
8
+ export declare const createSessionService: ({ config, db, now, }: SessionDeps) => SessionService;
10
9
  export {};
11
10
  //# sourceMappingURL=service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/session/service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAI1D,OAAO,KAAK,EAER,SAAS,EACT,YAAY,EAGZ,cAAc,EAEjB,MAAM,YAAY,CAAC;AAEpB,KAAK,WAAW,GAAG;IACf,MAAM,EAAE,qBAAqB,CAAC;IAC9B,EAAE,EAAE,SAAS,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,YAAY,CAAC;CACvB,CAAC;AAyBF,eAAO,MAAM,oBAAoB,GAAI,KAAK,SAAS,MAAM,EAAE,6BAKxD,WAAW,KAAG,cAAc,CAAC,KAAK,CA4UpC,CAAC"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/session/service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAG1D,OAAO,KAAK,EAGR,SAAS,EAIT,cAAc,EACjB,MAAM,YAAY,CAAC;AAEpB,KAAK,WAAW,GAAG;IACf,MAAM,EAAE,qBAAqB,CAAC;IAC9B,EAAE,EAAE,SAAS,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AAwBF,eAAO,MAAM,oBAAoB,GAAI,sBAIlC,WAAW,KAAG,cAsShB,CAAC"}
@@ -1,35 +1,19 @@
1
1
  import { randomUUID } from "node:crypto";
2
- import { matchesClient, normalizeClient } from "../client/index.js";
2
+ import { hasClientFields, matchesClient, normalizeClient } from "../client/index.js";
3
3
  import { createError, isAuthError } from "../errors.js";
4
- import { encodeSession, parseSession, toSession } from "./schema.js";
5
4
  import { createToken, hashToken, tokenPattern } from "./token.js";
6
- const toActiveSession = (session) => ({
7
- account_id: session.account_id,
8
- agent: session.agent,
9
- created_at: session.created_at,
10
- expires_at: session.expires_at,
11
- id: session.id,
12
- ip: session.ip,
13
- platform: session.platform,
14
- revoked_at: session.revoked_at,
15
- updated_at: session.updated_at,
5
+ const toActiveSession = (row) => ({
6
+ account_id: row.account_id,
7
+ agent: row.agent,
8
+ created_at: row.created_at,
9
+ expires_at: row.expires_at,
10
+ id: row.id,
11
+ ip: row.ip,
12
+ platform: row.platform,
13
+ revoked_at: row.revoked_at,
14
+ updated_at: row.updated_at,
16
15
  });
17
- export const createSessionService = ({ config, db, now = () => new Date(), redis, }) => {
18
- const runRedis = async (operation) => {
19
- try {
20
- return await operation();
21
- }
22
- catch (error) {
23
- if (isAuthError(error)) {
24
- throw error;
25
- }
26
- throw createError({
27
- cause: error,
28
- code: "REDIS_UNAVAILABLE",
29
- message: "Authentication service unavailable.",
30
- });
31
- }
32
- };
16
+ export const createSessionService = ({ config, db, now = () => new Date(), }) => {
33
17
  const runDb = async (operation) => {
34
18
  try {
35
19
  return await operation();
@@ -45,27 +29,39 @@ export const createSessionService = ({ config, db, now = () => new Date(), redis
45
29
  });
46
30
  }
47
31
  };
32
+ const getMaxExpiresAt = (created_at) => {
33
+ return new Date(created_at.getTime() + config.maxLifetime * 1000);
34
+ };
35
+ const getRenewAt = (row) => {
36
+ const renewed_at = row.updated_at ?? row.created_at;
37
+ return new Date(Math.min(renewed_at.getTime() + config.renewInterval * 1000, getMaxExpiresAt(row.created_at).getTime()));
38
+ };
39
+ const toSession = (row) => {
40
+ const expires_at = new Date(Math.min(row.expires_at.getTime(), getMaxExpiresAt(row.created_at).getTime()));
41
+ return {
42
+ account_id: row.account_id,
43
+ client: {
44
+ agent: row.agent,
45
+ ip: row.ip,
46
+ platform: row.platform,
47
+ },
48
+ created_at: row.created_at,
49
+ expires_at,
50
+ id: row.id,
51
+ renew_at: getRenewAt(row),
52
+ };
53
+ };
48
54
  const getActive = async (account_id) => {
49
55
  const current = now();
50
56
  const rows = await runDb(() => db.findActive({ account_id, now: current }));
51
- const valid = rows.filter((row) => row.revoked_at === null && row.expires_at.getTime() > current.getTime());
52
- if (valid.length === 0) {
53
- return [];
54
- }
55
- const active = await runRedis(() => redis.exists(valid.map((row) => row.token_hash)));
56
- if (active.length !== valid.length) {
57
- throw createError({
58
- code: "REDIS_UNAVAILABLE",
59
- message: "Authentication service returned invalid data.",
60
- });
61
- }
62
- return valid.filter((_, index) => active[index]);
57
+ return rows.filter((row) => row.revoked_at === null &&
58
+ row.expires_at.getTime() > current.getTime() &&
59
+ getMaxExpiresAt(row.created_at).getTime() > current.getTime());
63
60
  };
64
61
  const revokeRows = async ({ revoked_at, rows }) => {
65
62
  if (rows.length === 0) {
66
63
  return [];
67
64
  }
68
- await runRedis(() => redis.delete(rows.map((row) => row.token_hash)));
69
65
  const session_ids = rows.map((row) => row.id);
70
66
  await runDb(() => db.revoke({ revoked_at, session_ids }));
71
67
  return session_ids;
@@ -74,45 +70,38 @@ export const createSessionService = ({ config, db, now = () => new Date(), redis
74
70
  if (!tokenPattern.test(input.token)) {
75
71
  return null;
76
72
  }
77
- const token_hash = hashToken(input.token);
78
- const raw = await runRedis(() => redis.get(token_hash));
79
- if (!raw) {
73
+ const row = await runDb(() => db.findToken(hashToken(input.token)));
74
+ if (row?.revoked_at !== null) {
80
75
  return null;
81
76
  }
82
- const stored = parseSession(raw);
83
- if (!stored) {
84
- await runRedis(() => redis.delete([token_hash]));
77
+ const current = now();
78
+ if (row.expires_at.getTime() <= current.getTime() ||
79
+ getMaxExpiresAt(row.created_at).getTime() <= current.getTime()) {
85
80
  return null;
86
81
  }
87
- const current = now();
88
- if (Date.parse(stored.expires_at) <= current.getTime()) {
89
- await runRedis(() => redis.delete([token_hash]));
82
+ if (!row.allowed) {
83
+ await runDb(() => db.revoke({ revoked_at: current, session_ids: [row.id] }));
90
84
  return null;
91
85
  }
92
86
  const client = normalizeClient(input.client);
87
+ const stored = {
88
+ agent: row.agent,
89
+ ip: row.ip,
90
+ platform: row.platform,
91
+ };
93
92
  const matches = matchesClient({
94
93
  current: client,
95
- stored: stored.client,
94
+ stored,
96
95
  validation: config.validation,
97
96
  });
98
97
  if (!matches) {
99
- await runRedis(() => redis.delete([token_hash]));
100
- try {
101
- await runDb(() => db.revoke({ revoked_at: current, session_ids: [stored.id] }));
102
- }
103
- catch (error) {
104
- throw createError({
105
- cause: error,
106
- code: "SESSION_CLIENT_MISMATCH",
107
- message: "Session client identity changed and the session was revoked.",
108
- });
109
- }
98
+ await runDb(() => db.revoke({ revoked_at: current, session_ids: [row.id] }));
110
99
  throw createError({
111
100
  code: "SESSION_CLIENT_MISMATCH",
112
101
  message: "Session client identity changed and the session was revoked.",
113
102
  });
114
103
  }
115
- return { current, stored, token_hash };
104
+ return { current, row };
116
105
  };
117
106
  return {
118
107
  create: async (input) => {
@@ -123,57 +112,50 @@ export const createSessionService = ({ config, db, now = () => new Date(), redis
123
112
  });
124
113
  }
125
114
  const client = normalizeClient(input.client);
126
- const created_at = now();
127
- const expires_at = new Date(created_at.getTime() + config.ttl * 1000);
128
- const token = createToken();
129
- const token_hash = hashToken(token);
130
- const id = randomUUID();
131
- const stored = {
132
- account_id: input.account_id,
133
- client,
134
- created_at: created_at.toISOString(),
135
- data: input.data,
136
- expires_at: expires_at.toISOString(),
137
- id,
138
- touched_at: created_at.toISOString(),
139
- };
140
- const value = encodeSession(stored);
141
- const active = await getActive(input.account_id);
142
- if (active.length >= config.max) {
115
+ if (!hasClientFields({ client, validation: config.validation })) {
143
116
  throw createError({
144
- code: "SESSION_LIMIT_REACHED",
145
- message: `Maximum active sessions reached (${String(config.max)}).`,
117
+ code: "SESSION_DATA_INVALID",
118
+ message: "Configured session client fields are required.",
146
119
  });
147
120
  }
148
- await runDb(() => db.create({
121
+ const created_at = now();
122
+ const expires_at = new Date(Math.min(created_at.getTime() + config.ttl * 1000, getMaxExpiresAt(created_at).getTime()));
123
+ const token = createToken();
124
+ const row = {
149
125
  account_id: input.account_id,
150
126
  agent: client.agent,
151
127
  created_at,
152
128
  expires_at,
153
- id,
129
+ id: randomUUID(),
154
130
  ip: client.ip,
155
131
  platform: client.platform,
156
- token_hash,
132
+ revoked_at: null,
133
+ token_hash: hashToken(token),
134
+ updated_at: null,
135
+ };
136
+ await runDb(() => db.create({
137
+ account_id: row.account_id,
138
+ agent: row.agent,
139
+ created_at: row.created_at,
140
+ expires_at: row.expires_at,
141
+ id: row.id,
142
+ ip: row.ip,
143
+ platform: row.platform,
144
+ token_hash: row.token_hash,
157
145
  }));
158
- try {
159
- await runRedis(() => redis.create({ token_hash, ttl: config.ttl, value }));
160
- }
161
- catch (error) {
162
- try {
163
- await runDb(() => db.revoke({ revoked_at: now(), session_ids: [id] }));
164
- }
165
- catch (dbError) {
166
- throw createError({
167
- cause: new AggregateError([error, dbError]),
168
- code: "DB_UNAVAILABLE",
169
- message: "Session creation compensation failed.",
170
- });
171
- }
172
- throw error;
146
+ const stored = await runDb(() => db.findToken(row.token_hash));
147
+ if (!stored?.allowed) {
148
+ await runDb(() => db.revoke({ revoked_at: created_at, session_ids: [row.id] }));
149
+ throw createError({
150
+ code: "SESSION_INVALID",
151
+ message: "Account is not allowed to authenticate.",
152
+ });
173
153
  }
174
154
  return {
175
- session: toSession(stored),
155
+ account: stored.account,
156
+ session: toSession(row),
176
157
  token,
158
+ user: stored.account.user,
177
159
  };
178
160
  },
179
161
  resolve: async (input) => {
@@ -181,49 +163,52 @@ export const createSessionService = ({ config, db, now = () => new Date(), redis
181
163
  if (!validated) {
182
164
  return null;
183
165
  }
184
- const { current, stored, token_hash } = validated;
185
- const due = current.getTime() - Date.parse(stored.touched_at) >= config.renewInterval * 1000;
186
- if (!due) {
187
- return { renewed: false, session: toSession(stored) };
188
- }
189
- const expires_at = new Date(current.getTime() + config.ttl * 1000);
190
- const renewed = {
191
- ...stored,
192
- expires_at: expires_at.toISOString(),
193
- touched_at: current.toISOString(),
166
+ return {
167
+ account: validated.row.account,
168
+ session: toSession(validated.row),
169
+ user: validated.row.account.user,
194
170
  };
171
+ },
172
+ renew: async (input) => {
173
+ const validated = await validateSession(input);
174
+ if (!validated) {
175
+ return null;
176
+ }
177
+ const { current, row } = validated;
178
+ if (current.getTime() < getRenewAt(row).getTime()) {
179
+ return {
180
+ account: row.account,
181
+ renewed: false,
182
+ session: toSession(row),
183
+ user: row.account.user,
184
+ };
185
+ }
186
+ const expires_at = new Date(Math.min(current.getTime() + config.ttl * 1000, getMaxExpiresAt(row.created_at).getTime()));
195
187
  await runDb(() => db.updateExpiry({
196
188
  expires_at,
197
- session_id: stored.id,
189
+ session_id: row.id,
198
190
  updated_at: current,
199
191
  }));
200
- const updated = await runRedis(() => redis.update({
201
- token_hash,
202
- ttl: config.ttl,
203
- value: encodeSession(renewed),
204
- }));
205
- return updated ? { renewed: true, session: toSession(renewed) } : null;
206
- },
207
- validate: async (input) => {
208
- const validated = await validateSession(input);
209
- return validated ? toSession(validated.stored) : null;
192
+ return {
193
+ account: row.account,
194
+ renewed: true,
195
+ session: toSession({
196
+ ...row,
197
+ expires_at,
198
+ updated_at: current,
199
+ }),
200
+ user: row.account.user,
201
+ };
210
202
  },
211
203
  revokeToken: async (token) => {
212
204
  if (!tokenPattern.test(token)) {
213
205
  return [];
214
206
  }
215
- const token_hash = hashToken(token);
216
- const raw = await runRedis(() => redis.get(token_hash));
217
- if (!raw) {
218
- return [];
219
- }
220
- const stored = parseSession(raw);
221
- await runRedis(() => redis.delete([token_hash]));
222
- if (!stored) {
207
+ const row = await runDb(() => db.findToken(hashToken(token)));
208
+ if (row?.revoked_at !== null) {
223
209
  return [];
224
210
  }
225
- await runDb(() => db.revoke({ revoked_at: now(), session_ids: [stored.id] }));
226
- return [stored.id];
211
+ return revokeRows({ revoked_at: now(), rows: [row] });
227
212
  },
228
213
  revoke: async ({ account_id, session_id }) => {
229
214
  const row = await runDb(() => db.find({ account_id, session_id }));
@@ -244,36 +229,6 @@ export const createSessionService = ({ config, db, now = () => new Date(), redis
244
229
  list: async (account_id) => {
245
230
  return (await getActive(account_id)).map(toActiveSession);
246
231
  },
247
- sync: async ({ account_id, data }) => {
248
- const rows = await getActive(account_id);
249
- if (rows.length === 0) {
250
- return;
251
- }
252
- const token_hashes = rows.map((row) => row.token_hash);
253
- const values = await runRedis(() => redis.getMany(token_hashes));
254
- if (values.length !== token_hashes.length) {
255
- throw createError({
256
- code: "REDIS_UNAVAILABLE",
257
- message: "Authentication service returned invalid data.",
258
- });
259
- }
260
- await Promise.all(values.map(async (raw, index) => {
261
- if (!raw)
262
- return;
263
- const stored = parseSession(raw);
264
- const token_hash = token_hashes[index];
265
- if (!stored || !token_hash || stored.account_id !== account_id) {
266
- if (token_hash) {
267
- await runRedis(() => redis.delete([token_hash]));
268
- }
269
- return;
270
- }
271
- await runRedis(() => redis.keep({
272
- token_hash,
273
- value: encodeSession({ ...stored, data }),
274
- }));
275
- }));
276
- },
277
232
  };
278
233
  };
279
234
  //# sourceMappingURL=service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/session/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/session/service.ts"],"names":[],"mappings":"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"}