@oktis-works/auth 0.4.14 → 0.4.15

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.
@@ -15,6 +15,7 @@ export declare class JWTService {
15
15
  private config;
16
16
  constructor(config: AuthConfig);
17
17
  generateTokenPair(payload: Omit<TokenPayload, 'iat' | 'exp'>): Promise<TokenPair>;
18
+ generateAccessToken(payload: Omit<TokenPayload, 'iat' | 'exp'>): Promise<string>;
18
19
  verifyToken(token: string): Promise<TokenPayload | null>;
19
20
  refreshAccessToken(refreshToken: string): Promise<TokenPair | null>;
20
21
  private sign;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/jwt/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAmDD,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAa;gBAEf,MAAM,EAAE,UAAU;IAIxB,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAuBjF,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAuBxD,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;YAY3D,IAAI;CAOnB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/jwt/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAmDD,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAa;gBAEf,MAAM,EAAE,UAAU;IAIxB,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAuBjF,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAMhF,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAuBxD,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;YAY3D,IAAI;CAOnB"}
package/dist/jwt/index.js CHANGED
@@ -56,6 +56,11 @@ export class JWTService {
56
56
  refreshToken: await this.sign(refreshToken),
57
57
  };
58
58
  }
59
+ async generateAccessToken(payload) {
60
+ const now = Math.floor(Date.now() / 1000);
61
+ const expiresIn = parseDuration(this.config.jwtExpiresIn);
62
+ return this.sign({ ...payload, iat: now, exp: now + expiresIn });
63
+ }
59
64
  async verifyToken(token) {
60
65
  try {
61
66
  const parts = token.split('.');
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/jwt/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/jwt/index.ts"],"names":[],"mappings":"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"}
package/dist/service.d.ts CHANGED
@@ -31,11 +31,14 @@ export declare class AuthService {
31
31
  register(input: RegisterInput): Promise<User>;
32
32
  private linkUserToTenant;
33
33
  login(input: LoginInput): Promise<AuthResult>;
34
- refreshToken(refreshToken: string): Promise<{
34
+ refreshToken(refreshToken: string, options?: {
35
+ ipAddress?: string;
36
+ userAgent?: string;
37
+ }): Promise<{
35
38
  accessToken: string;
36
39
  refreshToken: string;
37
40
  } | null>;
38
- logout(token: string): Promise<void>;
41
+ logout(refreshToken: string): Promise<void>;
39
42
  verifyToken(token: string): Promise<import("./index.js").TokenPayload | null>;
40
43
  hasPermission(userRoles: string[], action: string, resource: string, context?: Record<string, unknown>): boolean;
41
44
  getUserPermissions(userRoles: string[]): import("./index.js").Permission[];
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAM/C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAUD,qBAAa,WAAW;IACtB,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,MAAM,CAAa;gBAEf,MAAM,EAAE,UAAU;IAOxB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YA4BrC,gBAAgB;IAyCxB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAkE7C,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAOjG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpC,WAAW,CAAC,KAAK,EAAE,MAAM;IAI/B,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;IAIhH,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE;CAGvC"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAM/C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAUD,qBAAa,WAAW;IACtB,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,MAAM,CAAa;gBAEf,MAAM,EAAE,UAAU;IAOxB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YA4BrC,gBAAgB;IAyCxB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAmE7C,YAAY,CAChB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GACnD,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAgC1D,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,WAAW,CAAC,KAAK,EAAE,MAAM;IAI/B,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;IAIhH,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE;CAGvC"}
package/dist/service.js CHANGED
@@ -95,7 +95,7 @@ export class AuthService {
95
95
  AND tu.tenant_id = $2
96
96
  AND tu.status = 'ACTIVE'`, [user.id, tenantId]);
97
97
  const userRoles = roles.map((r) => r['slug']);
98
- const tokens = await this.jwt.generateTokenPair({
98
+ const accessToken = await this.jwt.generateAccessToken({
99
99
  sub: user.id,
100
100
  email: user.email,
101
101
  tenantId,
@@ -104,24 +104,43 @@ export class AuthService {
104
104
  const session = await this.session.create(user.id, tenantId, {
105
105
  ipAddress: input.ipAddress,
106
106
  userAgent: input.userAgent,
107
+ expiresInSeconds: this.config.cookie.refreshTokenMaxAge ?? 60 * 60 * 24 * 30,
107
108
  });
108
109
  await sql.unsafe('UPDATE users SET last_login_at = NOW() WHERE id = $1', [user.id]);
109
110
  return {
110
111
  user: sanitizeUser(user),
111
- accessToken: tokens.accessToken,
112
- refreshToken: tokens.refreshToken,
112
+ accessToken,
113
+ refreshToken: session.refreshToken,
113
114
  sessionId: session.id,
114
115
  tenantId,
115
116
  };
116
117
  }
117
- async refreshToken(refreshToken) {
118
- const payload = await this.jwt.verifyToken(refreshToken);
119
- if (!payload)
118
+ async refreshToken(refreshToken, options) {
119
+ const session = await this.session.rotate(refreshToken, {
120
+ ...options,
121
+ expiresInSeconds: this.config.cookie.refreshTokenMaxAge ?? 60 * 60 * 24 * 30,
122
+ });
123
+ if (!session)
124
+ return null;
125
+ const sql = getConnection();
126
+ await setTenantContext(session.tenantId);
127
+ const users = await sql.unsafe('SELECT id, email, status FROM users WHERE id = $1 AND status = $2', [session.userId, 'ACTIVE']);
128
+ if (!users.length)
120
129
  return null;
121
- return this.jwt.refreshAccessToken(refreshToken);
130
+ const roles = await sql.unsafe(`SELECT r.slug
131
+ FROM roles r
132
+ JOIN tenant_users tu ON tu.role_id = r.id
133
+ WHERE tu.user_id = $1 AND tu.tenant_id = $2 AND tu.status = 'ACTIVE'`, [session.userId, session.tenantId]);
134
+ const accessToken = await this.jwt.generateAccessToken({
135
+ sub: session.userId,
136
+ email: String(users[0]['email']),
137
+ tenantId: session.tenantId,
138
+ roles: roles.map((role) => String(role['slug'])),
139
+ });
140
+ return { accessToken, refreshToken: session.refreshToken };
122
141
  }
123
- async logout(token) {
124
- await this.session.delete(token);
142
+ async logout(refreshToken) {
143
+ await this.session.revokeByRefreshToken(refreshToken);
125
144
  }
126
145
  async verifyToken(token) {
127
146
  return this.jwt.verifyToken(token);
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
@@ -3,16 +3,32 @@ export interface Session {
3
3
  userId: string;
4
4
  tenantId: string;
5
5
  token: string;
6
+ refreshTokenHash?: string | null;
7
+ refreshFamilyId?: string | null;
8
+ revokedAt?: Date | null;
9
+ replacedBySessionId?: string | null;
6
10
  ipAddress?: string;
7
11
  userAgent?: string;
8
12
  expiresAt: Date;
9
13
  createdAt: Date;
10
14
  }
15
+ export interface SessionWithRefreshToken extends Session {
16
+ refreshToken: string;
17
+ }
11
18
  export declare class SessionService {
12
19
  create(userId: string, tenantId: string, options?: {
13
20
  ipAddress?: string;
14
21
  userAgent?: string;
15
- }): Promise<Session>;
22
+ expiresInSeconds?: number;
23
+ familyId?: string;
24
+ }): Promise<SessionWithRefreshToken>;
25
+ /** Rotaciona atomicamente um refresh token e invalida tokens reutilizados. */
26
+ rotate(refreshToken: string, options?: {
27
+ ipAddress?: string;
28
+ userAgent?: string;
29
+ expiresInSeconds?: number;
30
+ }): Promise<SessionWithRefreshToken | null>;
31
+ revokeByRefreshToken(refreshToken: string): Promise<boolean>;
16
32
  getByToken(token: string): Promise<Session | null>;
17
33
  getById(id: string): Promise<Session | null>;
18
34
  delete(token: string): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sessions/index.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAID,qBAAa,cAAc;IACnB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAehH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IASlD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAS5C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMvC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IASnE,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;CAKjC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sessions/index.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,uBAAwB,SAAQ,OAAO;IACtD,YAAY,EAAE,MAAM,CAAC;CACtB;AA2BD,qBAAa,cAAc;IACnB,MAAM,CACV,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GACjG,OAAO,CAAC,uBAAuB,CAAC;IAsCnC,8EAA8E;IACxE,MAAM,CACV,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,GAC9E,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC;IAkEpC,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAsB5D,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IASlD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAS5C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIvC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUnE,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;CAOjC"}
@@ -1,40 +1,149 @@
1
- // @oktis-works/auth - Session Management
2
- import { randomUUID } from 'node:crypto';
1
+ // @oktis-works/auth - Sessões de refresh rotacionáveis e revogáveis
2
+ import { createHash, randomBytes, randomUUID } from 'node:crypto';
3
3
  import { getConnection } from '@oktis-works/database';
4
- const SESSION_EXPIRY_HOURS = 7 * 24; // 7 days default
4
+ function hashRefreshToken(token) {
5
+ return createHash('sha256').update(token).digest('hex');
6
+ }
7
+ function createRefreshToken() {
8
+ return randomBytes(32).toString('base64url');
9
+ }
10
+ function mapSession(row) {
11
+ return {
12
+ id: String(row['id']),
13
+ userId: String(row['user_id'] ?? row['userId']),
14
+ tenantId: String(row['tenant_id'] ?? row['tenantId']),
15
+ token: String(row['token'] ?? ''),
16
+ refreshTokenHash: row['refresh_token_hash'],
17
+ refreshFamilyId: row['refresh_family_id'],
18
+ revokedAt: row['revoked_at'],
19
+ replacedBySessionId: row['replaced_by_session_id'],
20
+ ipAddress: (row['ip_address'] ?? row['ipAddress']),
21
+ userAgent: (row['user_agent'] ?? row['userAgent']),
22
+ expiresAt: new Date(String(row['expires_at'] ?? row['expiresAt'])),
23
+ createdAt: new Date(String(row['created_at'] ?? row['createdAt'])),
24
+ };
25
+ }
5
26
  export class SessionService {
6
27
  async create(userId, tenantId, options) {
7
28
  const sql = getConnection();
8
- const token = randomUUID();
9
- const expiresAt = new Date(Date.now() + SESSION_EXPIRY_HOURS * 3600 * 1000);
10
- const result = await sql.unsafe(`INSERT INTO sessions (id, user_id, tenant_id, token, ip_address, user_agent, expires_at)
11
- VALUES ($1, $2, $3, $4, $5, $6, $7)
12
- RETURNING *`, [randomUUID(), userId, tenantId, token, options?.ipAddress ?? null, options?.userAgent ?? null, expiresAt.toISOString()]);
13
- return result[0];
29
+ const refreshToken = createRefreshToken();
30
+ const refreshFamilyId = options?.familyId ?? randomUUID();
31
+ const expiresInSeconds = options?.expiresInSeconds ?? 60 * 60 * 24 * 30;
32
+ const expiresAt = new Date(Date.now() + expiresInSeconds * 1000);
33
+ const values = [
34
+ randomUUID(),
35
+ userId,
36
+ tenantId,
37
+ randomUUID(),
38
+ hashRefreshToken(refreshToken),
39
+ refreshFamilyId,
40
+ options?.ipAddress ?? null,
41
+ options?.userAgent ?? null,
42
+ expiresAt.toISOString(),
43
+ ];
44
+ const insertQuery = `INSERT INTO sessions
45
+ (id, user_id, tenant_id, token, refresh_token_hash, refresh_family_id, ip_address, user_agent, expires_at)
46
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)
47
+ RETURNING *`;
48
+ // O driver postgres real oferece begin. O fallback mantém compatibilidade
49
+ // com adapters/mocks simples usados por consumidores e pela suíte unitária.
50
+ if (typeof sql.begin !== 'function') {
51
+ await sql.unsafe("SELECT set_config('app.current_tenant_id', $1, false)", [tenantId]);
52
+ const result = await sql.unsafe(insertQuery, values);
53
+ return { ...mapSession(result[0]), refreshToken };
54
+ }
55
+ return sql.begin(async (tx) => {
56
+ await tx.unsafe("SELECT set_config('app.current_tenant_id', $1, true)", [tenantId]);
57
+ const result = await tx.unsafe(insertQuery, values);
58
+ return { ...mapSession(result[0]), refreshToken };
59
+ });
60
+ }
61
+ /** Rotaciona atomicamente um refresh token e invalida tokens reutilizados. */
62
+ async rotate(refreshToken, options) {
63
+ const sql = getConnection();
64
+ const tokenHash = hashRefreshToken(refreshToken);
65
+ const nextRefreshToken = createRefreshToken();
66
+ const nextSessionId = randomUUID();
67
+ const expiresInSeconds = options?.expiresInSeconds ?? 60 * 60 * 24 * 30;
68
+ const expiresAt = new Date(Date.now() + expiresInSeconds * 1000);
69
+ return sql.begin(async (tx) => {
70
+ await tx.unsafe("SELECT set_config('app.current_refresh_token_hash', $1, true)", [tokenHash]);
71
+ const rows = await tx.unsafe(`SELECT * FROM sessions
72
+ WHERE refresh_token_hash = $1
73
+ ORDER BY created_at DESC
74
+ LIMIT 1
75
+ FOR UPDATE`, [tokenHash]);
76
+ if (!rows[0])
77
+ return null;
78
+ const current = mapSession(rows[0]);
79
+ const currentRow = rows[0];
80
+ const familyId = String(currentRow['refresh_family_id'] ?? '');
81
+ const revokedAt = currentRow['revoked_at'];
82
+ const currentExpiry = new Date(String(currentRow['expires_at'] ?? current.expiresAt));
83
+ await tx.unsafe("SELECT set_config('app.current_tenant_id', $1, true)", [current.tenantId]);
84
+ if (revokedAt || Number.isNaN(currentExpiry.getTime()) || currentExpiry.getTime() <= Date.now()) {
85
+ if (familyId) {
86
+ await tx.unsafe('UPDATE sessions SET revoked_at = COALESCE(revoked_at, NOW()) WHERE refresh_family_id = $1', [familyId]);
87
+ }
88
+ return null;
89
+ }
90
+ await tx.unsafe(`UPDATE sessions
91
+ SET revoked_at = NOW(), replaced_by_session_id = $1
92
+ WHERE id = $2`, [nextSessionId, current.id]);
93
+ const result = await tx.unsafe(`INSERT INTO sessions
94
+ (id, user_id, tenant_id, token, refresh_token_hash, refresh_family_id, ip_address, user_agent, expires_at)
95
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)
96
+ RETURNING *`, [
97
+ nextSessionId,
98
+ current.userId,
99
+ current.tenantId,
100
+ randomUUID(),
101
+ hashRefreshToken(nextRefreshToken),
102
+ familyId || randomUUID(),
103
+ options?.ipAddress ?? current.ipAddress ?? null,
104
+ options?.userAgent ?? current.userAgent ?? null,
105
+ expiresAt.toISOString(),
106
+ ]);
107
+ return { ...mapSession(result[0]), refreshToken: nextRefreshToken };
108
+ });
109
+ }
110
+ async revokeByRefreshToken(refreshToken) {
111
+ const sql = getConnection();
112
+ const tokenHash = hashRefreshToken(refreshToken);
113
+ return sql.begin(async (tx) => {
114
+ await tx.unsafe("SELECT set_config('app.current_refresh_token_hash', $1, true)", [tokenHash]);
115
+ const rows = await tx.unsafe('SELECT id, tenant_id FROM sessions WHERE refresh_token_hash = $1 FOR UPDATE', [tokenHash]);
116
+ if (!rows[0])
117
+ return false;
118
+ await tx.unsafe("SELECT set_config('app.current_tenant_id', $1, true)", [String(rows[0]['tenant_id'])]);
119
+ const result = await tx.unsafe(`UPDATE sessions SET revoked_at = COALESCE(revoked_at, NOW())
120
+ WHERE id = $1 AND revoked_at IS NULL
121
+ RETURNING id`, [rows[0]['id']]);
122
+ return result.length > 0;
123
+ });
14
124
  }
15
125
  async getByToken(token) {
16
126
  const sql = getConnection();
17
- const result = await sql.unsafe('SELECT * FROM sessions WHERE token = $1 AND expires_at > NOW()', [token]);
18
- return result[0] ?? null;
127
+ const result = await sql.unsafe('SELECT * FROM sessions WHERE token = $1 AND expires_at > NOW() AND revoked_at IS NULL', [token]);
128
+ return result[0] ? mapSession(result[0]) : null;
19
129
  }
20
130
  async getById(id) {
21
131
  const sql = getConnection();
22
- const result = await sql.unsafe('SELECT * FROM sessions WHERE id = $1 AND expires_at > NOW()', [id]);
23
- return result[0] ?? null;
132
+ const result = await sql.unsafe('SELECT * FROM sessions WHERE id = $1 AND expires_at > NOW() AND revoked_at IS NULL', [id]);
133
+ return result[0] ? mapSession(result[0]) : null;
24
134
  }
25
135
  async delete(token) {
26
- const sql = getConnection();
27
- const result = await sql.unsafe('DELETE FROM sessions WHERE token = $1', [token]);
28
- return result.count > 0;
136
+ return this.revokeByRefreshToken(token);
29
137
  }
30
138
  async deleteAllForUser(userId, tenantId) {
31
139
  const sql = getConnection();
32
- const result = await sql.unsafe('DELETE FROM sessions WHERE user_id = $1 AND tenant_id = $2', [userId, tenantId]);
140
+ const result = await sql.unsafe(`UPDATE sessions SET revoked_at = COALESCE(revoked_at, NOW())
141
+ WHERE user_id = $1 AND tenant_id = $2 AND revoked_at IS NULL`, [userId, tenantId]);
33
142
  return result.count;
34
143
  }
35
144
  async cleanup() {
36
145
  const sql = getConnection();
37
- const result = await sql.unsafe('DELETE FROM sessions WHERE expires_at < NOW()');
146
+ const result = await sql.unsafe("DELETE FROM sessions WHERE expires_at < NOW() OR revoked_at < NOW() - INTERVAL '30 days'");
38
147
  return result.count;
39
148
  }
40
149
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sessions/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAatD,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,iBAAiB;AAEtD,MAAM,OAAO,cAAc;IACzB,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,QAAgB,EAAE,OAAoD;QACjG,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,oBAAoB,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;QAE5E,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAC7B;;mBAEa,EACb,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,CACzH,CAAC;QAEF,OAAO,MAAM,CAAC,CAAC,CAAuB,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAa;QAC5B,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAC7B,gEAAgE,EAChE,CAAC,KAAK,CAAC,CACR,CAAC;QACF,OAAQ,MAAM,CAAC,CAAC,CAAwB,IAAI,IAAI,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAC7B,6DAA6D,EAC7D,CAAC,EAAE,CAAC,CACL,CAAC;QACF,OAAQ,MAAM,CAAC,CAAC,CAAwB,IAAI,IAAI,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa;QACxB,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,uCAAuC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAClF,OAAO,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,MAAc,EAAE,QAAgB;QACrD,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAC7B,4DAA4D,EAC5D,CAAC,MAAM,EAAE,QAAQ,CAAC,CACnB,CAAC;QACF,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,+CAA+C,CAAC,CAAC;QACjF,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;CACF"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sessions/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oktis-works/auth",
3
- "version": "0.4.14",
3
+ "version": "0.4.15",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",