@openora/core 0.4.1-canary.97 → 0.4.1-canary.99

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 (61) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/audit/__tests__/map-event.test.d.ts +2 -0
  3. package/dist/audit/__tests__/map-event.test.d.ts.map +1 -0
  4. package/dist/audit/__tests__/map-event.test.js +27 -0
  5. package/dist/audit/__tests__/map-event.test.js.map +1 -0
  6. package/dist/audit/plugin.d.ts.map +1 -1
  7. package/dist/audit/plugin.js +2 -1
  8. package/dist/audit/plugin.js.map +1 -1
  9. package/dist/contracts/kit.d.ts +6 -0
  10. package/dist/contracts/kit.d.ts.map +1 -1
  11. package/dist/contracts/kit.js.map +1 -1
  12. package/dist/contracts/schemas/identity.d.ts +1 -0
  13. package/dist/contracts/schemas/identity.d.ts.map +1 -1
  14. package/dist/engagement/chat/service/chat.service.d.ts.map +1 -1
  15. package/dist/engagement/chat/service/chat.service.js +8 -0
  16. package/dist/engagement/chat/service/chat.service.js.map +1 -1
  17. package/dist/pam/identity/__tests__/session.service.int.test.d.ts +2 -0
  18. package/dist/pam/identity/__tests__/session.service.int.test.d.ts.map +1 -0
  19. package/dist/pam/identity/__tests__/session.service.int.test.js +85 -0
  20. package/dist/pam/identity/__tests__/session.service.int.test.js.map +1 -0
  21. package/dist/pam/identity/contract/index.d.ts +35 -0
  22. package/dist/pam/identity/contract/index.d.ts.map +1 -1
  23. package/dist/pam/identity/contract/index.js +18 -0
  24. package/dist/pam/identity/contract/index.js.map +1 -1
  25. package/dist/pam/identity/react/account.d.ts +17 -8
  26. package/dist/pam/identity/react/account.d.ts.map +1 -1
  27. package/dist/pam/identity/react/account.js +13 -1
  28. package/dist/pam/identity/react/account.js.map +1 -1
  29. package/dist/pam/identity/router/index.d.ts +33 -0
  30. package/dist/pam/identity/router/index.d.ts.map +1 -1
  31. package/dist/pam/identity/router/index.js +17 -1
  32. package/dist/pam/identity/router/index.js.map +1 -1
  33. package/dist/pam/identity/service/session.service.d.ts +5 -1
  34. package/dist/pam/identity/service/session.service.d.ts.map +1 -1
  35. package/dist/pam/identity/service/session.service.js +10 -4
  36. package/dist/pam/identity/service/session.service.js.map +1 -1
  37. package/dist/pam/react.d.ts +1 -1
  38. package/dist/pam/react.d.ts.map +1 -1
  39. package/dist/pam/react.js +1 -1
  40. package/dist/pam/react.js.map +1 -1
  41. package/dist/server/auth/session-resolver.d.ts +4 -0
  42. package/dist/server/auth/session-resolver.d.ts.map +1 -1
  43. package/dist/server/auth/session-resolver.js +9 -2
  44. package/dist/server/auth/session-resolver.js.map +1 -1
  45. package/dist/server/kernel/__tests__/helpers.test.js +26 -0
  46. package/dist/server/kernel/__tests__/helpers.test.js.map +1 -1
  47. package/dist/server/kernel/event-stream.d.ts.map +1 -1
  48. package/dist/server/kernel/event-stream.js +19 -4
  49. package/dist/server/kernel/event-stream.js.map +1 -1
  50. package/dist/server/kernel/index.d.ts +1 -1
  51. package/dist/server/kernel/index.d.ts.map +1 -1
  52. package/dist/server/kernel/index.js +1 -1
  53. package/dist/server/kernel/index.js.map +1 -1
  54. package/dist/server/kernel/router-utils.d.ts +2 -0
  55. package/dist/server/kernel/router-utils.d.ts.map +1 -1
  56. package/dist/server/kernel/router-utils.js +3 -0
  57. package/dist/server/kernel/router-utils.js.map +1 -1
  58. package/dist/server/runtime/create-app.d.ts.map +1 -1
  59. package/dist/server/runtime/create-app.js +4 -3
  60. package/dist/server/runtime/create-app.js.map +1 -1
  61. package/package.json +1 -1
@@ -0,0 +1,85 @@
1
+ import { describe, it, expect, beforeAll, afterAll, beforeEach, vi } from 'vitest';
2
+ import { sql } from 'drizzle-orm';
3
+ import { createTestDb, seedUser } from '@openora/core/testing';
4
+ import { user, session } from '@openora/core/pam/schema/identity';
5
+ import { makeEventBus, makeIdentityReader } from '../../../testing/mock.js';
6
+ import { migrate } from '../migrate.js';
7
+ import { SessionService, SessionNotFoundError } from '../service/session.service.js';
8
+ let db;
9
+ const service = () => new SessionService({
10
+ drizzle: db.drizzle,
11
+ events: makeEventBus(),
12
+ identityReader: makeIdentityReader(),
13
+ });
14
+ const seedSession = (userId, overrides = {}) => db.drizzle.db
15
+ .insert(session)
16
+ .values({
17
+ userId,
18
+ token: crypto.randomUUID(),
19
+ expiresAt: new Date(Date.now() + 86_400_000),
20
+ updatedAt: new Date(),
21
+ ...overrides,
22
+ })
23
+ .returning()
24
+ .then(([row]) => row);
25
+ beforeAll(async () => {
26
+ db = await createTestDb([migrate]);
27
+ });
28
+ afterAll(async () => {
29
+ await db.drop();
30
+ });
31
+ beforeEach(async () => {
32
+ vi.clearAllMocks();
33
+ await db.drizzle.db.execute(sql `TRUNCATE ${user} RESTART IDENTITY CASCADE`);
34
+ });
35
+ describe('SessionService', () => {
36
+ it('flags only the caller session as current', async () => {
37
+ const account = await seedUser(db);
38
+ const here = await seedSession(account.id);
39
+ await seedSession(account.id);
40
+ const { items } = await service().listSessions({
41
+ userId: account.id,
42
+ currentSessionId: here.id,
43
+ page: 1,
44
+ limit: 20,
45
+ });
46
+ expect(items).toHaveLength(2);
47
+ expect(items.filter((s) => s.current).map((s) => s.id)).toEqual([here.id]);
48
+ });
49
+ it('drops a revoked session from the active list', async () => {
50
+ const account = await seedUser(db);
51
+ const target = await seedSession(account.id);
52
+ await seedSession(account.id);
53
+ await service().revokeSession(account.id, target.id);
54
+ const active = await service().listSessions({
55
+ userId: account.id,
56
+ activeOnly: true,
57
+ page: 1,
58
+ limit: 20,
59
+ });
60
+ expect(active.total).toBe(1);
61
+ expect(active.items.map((s) => s.id)).not.toContain(target.id);
62
+ });
63
+ it('expires the revoked session', async () => {
64
+ const account = await seedUser(db);
65
+ const target = await seedSession(account.id);
66
+ await service().revokeSession(account.id, target.id);
67
+ const { items } = await service().listSessions({ userId: account.id, page: 1, limit: 20 });
68
+ expect(new Date(items[0].expiresAt).getTime()).toBeLessThanOrEqual(Date.now());
69
+ });
70
+ it('keeps the last-used timestamp when a session is revoked', async () => {
71
+ const account = await seedUser(db);
72
+ const lastUsed = new Date(Date.now() - 3_600_000);
73
+ const target = await seedSession(account.id, { updatedAt: lastUsed });
74
+ await service().revokeSession(account.id, target.id);
75
+ const { items } = await service().listSessions({ userId: account.id, page: 1, limit: 20 });
76
+ expect(new Date(items[0].updatedAt).getTime()).toBe(lastUsed.getTime());
77
+ });
78
+ it('refuses to revoke a session owned by someone else', async () => {
79
+ const owner = await seedUser(db);
80
+ const stranger = await seedUser(db);
81
+ const target = await seedSession(owner.id);
82
+ await expect(service().revokeSession(stranger.id, target.id)).rejects.toBeInstanceOf(SessionNotFoundError);
83
+ });
84
+ });
85
+ //# sourceMappingURL=session.service.int.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.service.int.test.js","sourceRoot":"","sources":["../../../../src/pam/identity/__tests__/session.service.int.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACnF,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,YAAY,EAAe,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErF,IAAI,EAAU,CAAC;AAEf,MAAM,OAAO,GAAG,GAAG,EAAE,CACnB,IAAI,cAAc,CAAC;IACjB,OAAO,EAAE,EAAE,CAAC,OAAO;IACnB,MAAM,EAAE,YAAY,EAAE;IACtB,cAAc,EAAE,kBAAkB,EAAE;CACrC,CAAC,CAAC;AAEL,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,YAAkD,EAAE,EAAE,EAAE,CAC3F,EAAE,CAAC,OAAO,CAAC,EAAE;KACV,MAAM,CAAC,OAAO,CAAC;KACf,MAAM,CAAC;IACN,MAAM;IACN,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE;IAC1B,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;IAC5C,SAAS,EAAE,IAAI,IAAI,EAAE;IACrB,GAAG,SAAS;CACb,CAAC;KACD,SAAS,EAAE;KACX,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAI,CAAC,CAAC;AAE3B,SAAS,CAAC,KAAK,IAAI,EAAE;IACnB,EAAE,GAAG,MAAM,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,KAAK,IAAI,EAAE;IAClB,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,UAAU,CAAC,KAAK,IAAI,EAAE;IACpB,EAAE,CAAC,aAAa,EAAE,CAAC;IACnB,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAA,YAAY,IAAI,2BAA2B,CAAC,CAAC;AAC9E,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC3C,MAAM,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAE9B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,EAAE,CAAC,YAAY,CAAC;YAC7C,MAAM,EAAE,OAAO,CAAC,EAAE;YAClB,gBAAgB,EAAE,IAAI,CAAC,EAAE;YACzB,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAE9B,MAAM,OAAO,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAErD,MAAM,MAAM,GAAG,MAAM,OAAO,EAAE,CAAC,YAAY,CAAC;YAC1C,MAAM,EAAE,OAAO,CAAC,EAAE;YAClB,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAE7C,MAAM,OAAO,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAErD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3F,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEtE,MAAM,OAAO,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAErD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3F,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAE3C,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAClF,oBAAoB,CACrB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -7,8 +7,10 @@ export declare const SessionItemSchema: z.ZodObject<{
7
7
  id: z.ZodUUID;
8
8
  expiresAt: z.ZodISODateTime;
9
9
  createdAt: z.ZodISODateTime;
10
+ updatedAt: z.ZodISODateTime;
10
11
  ipAddress: z.ZodOptional<z.ZodNullable<z.ZodString>>;
11
12
  userAgent: z.ZodOptional<z.ZodNullable<z.ZodString>>;
13
+ current: z.ZodBoolean;
12
14
  }, z.core.$strip>;
13
15
  export type SessionItem = z.infer<typeof SessionItemSchema>;
14
16
  export declare const SESSION_SORT_BY_VALUES: readonly ["createdAt", "expiresAt", "updatedAt"];
@@ -246,8 +248,10 @@ export declare const identityContract: {
246
248
  id: z.ZodUUID;
247
249
  expiresAt: z.ZodISODateTime;
248
250
  createdAt: z.ZodISODateTime;
251
+ updatedAt: z.ZodISODateTime;
249
252
  ipAddress: z.ZodOptional<z.ZodNullable<z.ZodString>>;
250
253
  userAgent: z.ZodOptional<z.ZodNullable<z.ZodString>>;
254
+ current: z.ZodBoolean;
251
255
  }, z.core.$strip>>;
252
256
  total: z.ZodNumber;
253
257
  page: z.ZodNumber;
@@ -264,6 +268,37 @@ export declare const identityContract: {
264
268
  }, z.core.$strip>, z.ZodObject<{
265
269
  success: z.ZodLiteral<true>;
266
270
  }, z.core.$strip>, Record<never, never>, Record<never, never>>;
271
+ listMine: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
272
+ page: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
273
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
274
+ sortBy: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
275
+ createdAt: "createdAt";
276
+ updatedAt: "updatedAt";
277
+ expiresAt: "expiresAt";
278
+ }>>>;
279
+ sortOrder: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
280
+ asc: "asc";
281
+ desc: "desc";
282
+ }>>>;
283
+ }, z.core.$strip>, z.ZodObject<{
284
+ items: z.ZodArray<z.ZodObject<{
285
+ id: z.ZodUUID;
286
+ expiresAt: z.ZodISODateTime;
287
+ createdAt: z.ZodISODateTime;
288
+ updatedAt: z.ZodISODateTime;
289
+ ipAddress: z.ZodOptional<z.ZodNullable<z.ZodString>>;
290
+ userAgent: z.ZodOptional<z.ZodNullable<z.ZodString>>;
291
+ current: z.ZodBoolean;
292
+ }, z.core.$strip>>;
293
+ total: z.ZodNumber;
294
+ page: z.ZodNumber;
295
+ limit: z.ZodNumber;
296
+ }, z.core.$strip>, Record<never, never>, Record<never, never>>;
297
+ revokeMine: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
298
+ id: z.ZodUUID;
299
+ }, z.core.$strip>, z.ZodObject<{
300
+ success: z.ZodLiteral<true>;
301
+ }, z.core.$strip>, Record<never, never>, Record<never, never>>;
267
302
  };
268
303
  };
269
304
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/pam/identity/contract/index.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,eAAO,MAAM,aAAa;;;iBAGxB,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;iBAM5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,sBAAsB,kDAAmD,CAAC;AACvF,eAAO,MAAM,mBAAmB;;;;GAAsD,CAAC;AACvF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyI5B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/pam/identity/contract/index.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,eAAO,MAAM,aAAa;;;iBAGxB,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;iBAW5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,sBAAsB,kDAAmD,CAAC;AACvF,eAAO,MAAM,mBAAmB;;;;GAAsD,CAAC;AACvF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0J5B,CAAC"}
@@ -10,8 +10,13 @@ export const SessionItemSchema = z.object({
10
10
  id: UuidSchema,
11
11
  expiresAt: TimestampSchema,
12
12
  createdAt: TimestampSchema,
13
+ // Last time better-auth refreshed the session - "last used" in a device list.
14
+ updatedAt: TimestampSchema,
13
15
  ipAddress: z.string().nullable().optional(),
14
16
  userAgent: z.string().nullable().optional(),
17
+ // True for the session making the request; false everywhere it cannot be known
18
+ // (eg an admin listing someone else's devices).
19
+ current: z.boolean(),
15
20
  });
16
21
  export const SESSION_SORT_BY_VALUES = ['createdAt', 'expiresAt', 'updatedAt'];
17
22
  export const SessionSortBySchema = z.enum(SESSION_SORT_BY_VALUES).default('createdAt');
@@ -118,6 +123,19 @@ export const identityContract = {
118
123
  .route({ method: 'POST', path: '/identity/sessions/revoke-all' })
119
124
  .input(z.object({ userId: UuidSchema }))
120
125
  .output(IdentitySuccessSchema),
126
+ // Self-service twins of the admin routes above: the caller's own devices only,
127
+ // scoped by the verified session rather than a `userId` input.
128
+ listMine: oc
129
+ .route({ method: 'GET', path: '/identity/sessions/me' })
130
+ .input(PageQuerySchema.extend({
131
+ sortBy: SessionSortBySchema.optional(),
132
+ sortOrder: SortOrderSchema.default('desc').optional(),
133
+ }))
134
+ .output(paginated(SessionItemSchema)),
135
+ revokeMine: oc
136
+ .route({ method: 'POST', path: '/identity/sessions/me/revoke' })
137
+ .input(z.object({ id: UuidSchema }))
138
+ .output(IdentitySuccessSchema),
121
139
  },
122
140
  };
123
141
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/pam/identity/contract/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/pam/identity/contract/index.ts"],"names":[],"mappings":"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"}
@@ -1,27 +1,34 @@
1
- import type { Enable2faResult } from '@openora/core/contracts';
1
+ import { type UseMutationResult, type UseQueryResult } from '@tanstack/react-query';
2
+ import type { Enable2faResult, IdentitySuccess } from '@openora/core/contracts';
3
+ import type { Paginated } from '@openora/core/contracts/kit';
4
+ import { type SessionItem } from '../contract/index.js';
5
+ export type UseMySessionsResult = UseQueryResult<Paginated<SessionItem>, Error>;
6
+ export type UseRevokeMySessionResult = UseMutationResult<IdentitySuccess, Error, {
7
+ id: string;
8
+ }>;
2
9
  export type { Enable2faResult };
3
- export declare function useEnable2fa(): import("@tanstack/react-query").UseMutationResult<{
10
+ export declare function useEnable2fa(): UseMutationResult<{
4
11
  totpUri: string;
5
12
  backupCodes: string[];
6
13
  }, Error, {
7
14
  password: string;
8
15
  }, unknown>;
9
- export declare function useVerify2fa(): import("@tanstack/react-query").UseMutationResult<{
16
+ export declare function useVerify2fa(): UseMutationResult<{
10
17
  success: true;
11
18
  }, Error, {
12
19
  code: string;
13
20
  }, unknown>;
14
- export declare function useDisable2fa(): import("@tanstack/react-query").UseMutationResult<{
21
+ export declare function useDisable2fa(): UseMutationResult<{
15
22
  success: true;
16
23
  }, Error, {
17
24
  password: string;
18
25
  }, unknown>;
19
- export declare function useVerifyEmail(): import("@tanstack/react-query").UseMutationResult<{
26
+ export declare function useVerifyEmail(): UseMutationResult<{
20
27
  success: true;
21
28
  }, Error, {
22
29
  token: string;
23
30
  }, unknown>;
24
- export declare function useUpdateProfile(): import("@tanstack/react-query").UseMutationResult<{
31
+ export declare function useUpdateProfile(): UseMutationResult<{
25
32
  user: {
26
33
  id: string;
27
34
  email: string;
@@ -42,13 +49,15 @@ export declare function useUpdateProfile(): import("@tanstack/react-query").UseM
42
49
  theme?: "light" | "dark" | "system" | undefined;
43
50
  language?: string | undefined;
44
51
  }, unknown>;
45
- export declare function useChangePassword(): import("@tanstack/react-query").UseMutationResult<{
52
+ export declare function useChangePassword(): UseMutationResult<{
46
53
  success: true;
47
54
  }, Error, {
48
55
  currentPassword: string;
49
56
  newPassword: string;
50
57
  }, unknown>;
51
- export declare function useSendEmailVerification(): import("@tanstack/react-query").UseMutationResult<{
58
+ export declare function useSendEmailVerification(): UseMutationResult<{
52
59
  success: true;
53
60
  }, Error, unknown, unknown>;
61
+ export declare function useMySessions(): UseMySessionsResult;
62
+ export declare function useRevokeMySession(): UseRevokeMySessionResult;
54
63
  //# sourceMappingURL=account.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../../src/pam/identity/react/account.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAI/D,YAAY,EAAE,eAAe,EAAE,CAAC;AAOhC,wBAAgB,YAAY;;;;;YAO3B;AAED,wBAAgB,YAAY;;;;YAO3B;AAED,wBAAgB,aAAa;;;;YAO5B;AAED,wBAAgB,cAAc;;;;YAO7B;AAED,wBAAgB,gBAAgB;;;;;;;;;;;;;;;;;;;;YAO/B;AAED,wBAAgB,iBAAiB;;;;;YAOhC;AAED,wBAAgB,wBAAwB;;4BAKvC"}
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../../src/pam/identity/react/account.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAE1E,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,CAAC;AAChF,MAAM,MAAM,wBAAwB,GAAG,iBAAiB,CAAC,eAAe,EAAE,KAAK,EAAE;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEjG,YAAY,EAAE,eAAe,EAAE,CAAC;AAOhC,wBAAgB,YAAY;;;;;YAO3B;AAED,wBAAgB,YAAY;;;;YAO3B;AAED,wBAAgB,aAAa;;;;YAO5B;AAED,wBAAgB,cAAc;;;;YAO7B;AAED,wBAAgB,gBAAgB;;;;;;;;;;;;;;;;;;;;YAO/B;AAED,wBAAgB,iBAAiB;;;;;YAOhC;AAED,wBAAgB,wBAAwB;;4BAKvC;AAED,wBAAgB,aAAa,IAAI,mBAAmB,CAGnD;AAED,wBAAgB,kBAAkB,IAAI,wBAAwB,CAO7D"}
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { useMutation, useQueryClient } from '@tanstack/react-query';
2
+ import { useMutation, useQuery, useQueryClient, } from '@tanstack/react-query';
3
3
  import { useOrpcQueryUtils } from '@openora/core/react';
4
4
  import { identityContract } from '../contract/index.js';
5
5
  const invalidateMe = (utils, queryClient) => () => queryClient.invalidateQueries({ queryKey: utils.me.key() });
@@ -57,4 +57,16 @@ export function useSendEmailVerification() {
57
57
  ...utils.sendEmailVerification.mutationOptions(),
58
58
  });
59
59
  }
60
+ export function useMySessions() {
61
+ const utils = useOrpcQueryUtils(identityContract);
62
+ return useQuery(utils.sessions.listMine.queryOptions({ input: {} }));
63
+ }
64
+ export function useRevokeMySession() {
65
+ const utils = useOrpcQueryUtils(identityContract);
66
+ const queryClient = useQueryClient();
67
+ return useMutation({
68
+ ...utils.sessions.revokeMine.mutationOptions(),
69
+ onSuccess: () => queryClient.invalidateQueries({ queryKey: utils.sessions.listMine.key() }),
70
+ });
71
+ }
60
72
  //# sourceMappingURL=account.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"account.js","sourceRoot":"","sources":["../../../../src/pam/identity/react/account.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,cAAc,EAAoB,MAAM,uBAAuB,CAAC;AAEtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAMxD,MAAM,YAAY,GAAG,CAAC,KAAoB,EAAE,WAAwB,EAAE,EAAE,CAAC,GAAG,EAAE,CAC5E,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAE9D,MAAM,UAAU,YAAY;IAC1B,MAAM,KAAK,GAAG,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,OAAO,WAAW,CAAC;QACjB,GAAG,KAAK,CAAC,SAAS,CAAC,eAAe,EAAE;QACpC,SAAS,EAAE,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,KAAK,GAAG,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,OAAO,WAAW,CAAC;QACjB,GAAG,KAAK,CAAC,SAAS,CAAC,eAAe,EAAE;QACpC,SAAS,EAAE,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,KAAK,GAAG,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,OAAO,WAAW,CAAC;QACjB,GAAG,KAAK,CAAC,UAAU,CAAC,eAAe,EAAE;QACrC,SAAS,EAAE,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,KAAK,GAAG,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,OAAO,WAAW,CAAC;QACjB,GAAG,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE;QACtC,SAAS,EAAE,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,MAAM,KAAK,GAAG,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,OAAO,WAAW,CAAC;QACjB,GAAG,KAAK,CAAC,aAAa,CAAC,eAAe,EAAE;QACxC,SAAS,EAAE,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,KAAK,GAAG,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,OAAO,WAAW,CAAC;QACjB,GAAG,KAAK,CAAC,cAAc,CAAC,eAAe,EAAE;QACzC,SAAS,EAAE,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,MAAM,KAAK,GAAG,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAClD,OAAO,WAAW,CAAC;QACjB,GAAG,KAAK,CAAC,qBAAqB,CAAC,eAAe,EAAE;KACjD,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../../../../src/pam/identity/react/account.ts"],"names":[],"mappings":"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"}
@@ -230,8 +230,10 @@ export declare function createIdentityRouter(identity: IdentityService, sessionS
230
230
  id: import("zod").ZodUUID;
231
231
  expiresAt: import("zod").ZodISODateTime;
232
232
  createdAt: import("zod").ZodISODateTime;
233
+ updatedAt: import("zod").ZodISODateTime;
233
234
  ipAddress: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
234
235
  userAgent: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
236
+ current: import("zod").ZodBoolean;
235
237
  }, import("zod/v4/core").$strip>>;
236
238
  total: import("zod").ZodNumber;
237
239
  page: import("zod").ZodNumber;
@@ -248,6 +250,37 @@ export declare function createIdentityRouter(identity: IdentityService, sessionS
248
250
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
249
251
  success: import("zod").ZodLiteral<true>;
250
252
  }, import("zod/v4/core").$strip>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
253
+ listMine: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<OssContext & Record<never, never>, OssContext & Record<never, never>, OssContext>, OssContext, import("zod").ZodObject<{
254
+ page: import("zod").ZodDefault<import("zod").ZodCoercedNumber<unknown>>;
255
+ limit: import("zod").ZodDefault<import("zod").ZodCoercedNumber<unknown>>;
256
+ sortBy: import("zod").ZodOptional<import("zod").ZodDefault<import("zod").ZodEnum<{
257
+ createdAt: "createdAt";
258
+ updatedAt: "updatedAt";
259
+ expiresAt: "expiresAt";
260
+ }>>>;
261
+ sortOrder: import("zod").ZodOptional<import("zod").ZodDefault<import("zod").ZodEnum<{
262
+ asc: "asc";
263
+ desc: "desc";
264
+ }>>>;
265
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
266
+ items: import("zod").ZodArray<import("zod").ZodObject<{
267
+ id: import("zod").ZodUUID;
268
+ expiresAt: import("zod").ZodISODateTime;
269
+ createdAt: import("zod").ZodISODateTime;
270
+ updatedAt: import("zod").ZodISODateTime;
271
+ ipAddress: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
272
+ userAgent: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
273
+ current: import("zod").ZodBoolean;
274
+ }, import("zod/v4/core").$strip>>;
275
+ total: import("zod").ZodNumber;
276
+ page: import("zod").ZodNumber;
277
+ limit: import("zod").ZodNumber;
278
+ }, import("zod/v4/core").$strip>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
279
+ revokeMine: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<OssContext & Record<never, never>, OssContext & Record<never, never>, OssContext>, OssContext, import("zod").ZodObject<{
280
+ id: import("zod").ZodUUID;
281
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
282
+ success: import("zod").ZodLiteral<true>;
283
+ }, import("zod/v4/core").$strip>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
251
284
  };
252
285
  };
253
286
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/pam/identity/router/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,UAAU,EACf,UAAU,EAIV,KAAK,QAAQ,EACd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EACL,eAAe,EAGhB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,cAAc,EAAwB,MAAM,+BAA+B,CAAC;AAGrF,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,cAAc,EAC1B,UAAU,EAAE,iBAAiB,EAC7B,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsKnB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/pam/identity/router/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,UAAU,EACf,UAAU,EAKV,KAAK,QAAQ,EACd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EACL,eAAe,EAGhB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,cAAc,EAAwB,MAAM,+BAA+B,CAAC;AAGrF,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,cAAc,EAC1B,UAAU,EAAE,iBAAiB,EAC7B,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4LnB"}
@@ -1,5 +1,5 @@
1
1
  import { implement } from '@orpc/server';
2
- import { mapErrors, getUserId, createEventStreamGenerator, } from '@openora/core/server';
2
+ import { mapErrors, getUserId, getSessionId, createEventStreamGenerator, } from '@openora/core/server';
3
3
  import { identityContract } from '../contract/index.js';
4
4
  import { UsernameConflictError, UserNotFoundError, } from '../service/identity.service.js';
5
5
  import { SessionNotFoundError } from '../service/session.service.js';
@@ -77,6 +77,7 @@ export function createIdentityRouter(identity, sessionSvc, phoneLogin, adminGuar
77
77
  await adminGuard.assert(context, 'sessions', 'view');
78
78
  return sessionSvc.listSessions({
79
79
  userId: input.userId,
80
+ currentSessionId: getSessionId(context),
80
81
  page: input.page,
81
82
  limit: input.limit,
82
83
  sortBy: input.sortBy,
@@ -97,6 +98,21 @@ export function createIdentityRouter(identity, sessionSvc, phoneLogin, adminGuar
97
98
  userAgent: caller.userAgent,
98
99
  });
99
100
  }),
101
+ listMine: os.sessions.listMine.handler(({ input, context }) => sessionSvc.listSessions({
102
+ userId: getUserId(context),
103
+ currentSessionId: getSessionId(context),
104
+ activeOnly: true,
105
+ page: input.page,
106
+ limit: input.limit,
107
+ sortBy: input.sortBy,
108
+ sortOrder: input.sortOrder,
109
+ })),
110
+ // Scoped to the caller's own userId, so a forged id cannot kill someone
111
+ // else's device - a miss is a 404, not a cross-user revoke.
112
+ revokeMine: os.sessions.revokeMine.handler(({ input, context }) => {
113
+ const userId = getUserId(context);
114
+ return mapErrors({ NOT_FOUND: SessionNotFoundError }, () => sessionSvc.revokeSession(userId, input.id, userId, context.clientMeta));
115
+ }),
100
116
  },
101
117
  });
102
118
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/pam/identity/router/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/pam/identity/router/index.ts"],"names":[],"mappings":"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"}
@@ -12,13 +12,17 @@ export declare class SessionService {
12
12
  private readonly events;
13
13
  private readonly identityReader;
14
14
  constructor({ drizzle, events, identityReader }: SessionServiceDeps);
15
- listSessions({ userId, page, limit, sortBy, sortOrder, }: PaginationOptions<{
15
+ listSessions({ userId, currentSessionId, activeOnly, page, limit, sortBy, sortOrder, }: PaginationOptions<{
16
16
  userId: User['id'];
17
+ currentSessionId?: string;
18
+ activeOnly?: boolean;
17
19
  }, SessionSortBy>): Promise<{
18
20
  items: {
19
21
  id: string;
20
22
  expiresAt: string;
21
23
  createdAt: string;
24
+ updatedAt: string;
25
+ current: boolean;
22
26
  ipAddress?: string | null | undefined;
23
27
  userAgent?: string | null | undefined;
24
28
  }[];
@@ -1 +1 @@
1
- {"version":3,"file":"session.service.d.ts","sourceRoot":"","sources":["../../../../src/pam/identity/service/session.service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,QAAQ,EACb,cAAc,EAGf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEnG,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE5E,eAAO,MAAM,oBAAoB,2BAA+B,CAAC;AAEjE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,QAAQ,CAAC;IACjB,cAAc,EAAE,cAAc,CAAC;CAChC,CAAC;AAEF,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;gBAEpC,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,kBAAkB;IAM7D,YAAY,CAAC,EACjB,MAAM,EACN,IAAI,EACJ,KAAK,EACL,MAAM,EACN,SAAS,GACV,EAAE,iBAAiB,CAAC;QAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;KAAE,EAAE,aAAa,CAAC;;;;;;;;;;;;IAsCrD,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,UAAU;;;IAsBrF,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,UAAU;;;CAepF"}
1
+ {"version":3,"file":"session.service.d.ts","sourceRoot":"","sources":["../../../../src/pam/identity/service/session.service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,QAAQ,EACb,cAAc,EAGf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEnG,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE5E,eAAO,MAAM,oBAAoB,2BAA+B,CAAC;AAEjE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,QAAQ,CAAC;IACjB,cAAc,EAAE,cAAc,CAAC;CAChC,CAAC;AAEF,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;gBAEpC,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,kBAAkB;IAM7D,YAAY,CAAC,EACjB,MAAM,EACN,gBAAgB,EAChB,UAAU,EACV,IAAI,EACJ,KAAK,EACL,MAAM,EACN,SAAS,GACV,EAAE,iBAAiB,CAClB;QAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,EACvE,aAAa,CACd;;;;;;;;;;;;;;IA0CK,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,UAAU;;;IAwBrF,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,UAAU;;;CAepF"}
@@ -11,8 +11,10 @@ export class SessionService {
11
11
  this.events = events;
12
12
  this.identityReader = identityReader;
13
13
  }
14
- async listSessions({ userId, page, limit, sortBy, sortOrder, }) {
15
- const where = eq(session.userId, userId);
14
+ async listSessions({ userId, currentSessionId, activeOnly, page, limit, sortBy, sortOrder, }) {
15
+ const where = activeOnly
16
+ ? and(eq(session.userId, userId), gt(session.expiresAt, sql `now()`))
17
+ : eq(session.userId, userId);
16
18
  const db = this.drizzle.db;
17
19
  // Active sessions first (expiresAt > now), then user-chosen sort within each group.
18
20
  const activeFirst = sql `CASE WHEN ${session.expiresAt} > NOW() THEN 0 ELSE 1 END`;
@@ -37,8 +39,10 @@ export class SessionService {
37
39
  id: s.id,
38
40
  expiresAt: s.expiresAt.toISOString(),
39
41
  createdAt: s.createdAt.toISOString(),
42
+ updatedAt: s.updatedAt.toISOString(),
40
43
  ipAddress: s.ipAddress,
41
44
  userAgent: s.userAgent,
45
+ current: s.id === currentSessionId,
42
46
  })),
43
47
  total: Number(n),
44
48
  page,
@@ -48,7 +52,9 @@ export class SessionService {
48
52
  async revokeSession(userId, id, actorId, meta) {
49
53
  const updated = await this.drizzle.db
50
54
  .update(session)
51
- .set({ expiresAt: sql `now()` })
55
+ // Keep updatedAt as-is: it is the session's last-used time in the device
56
+ // list, and the $onUpdateFn would otherwise overwrite it with the revoke time.
57
+ .set({ expiresAt: sql `now()`, updatedAt: session.updatedAt })
52
58
  .where(and(eq(session.id, id), eq(session.userId, userId)))
53
59
  .returning({ id: session.id });
54
60
  if (updated.length === 0) {
@@ -67,7 +73,7 @@ export class SessionService {
67
73
  async revokeAllSessions(userId, actorId, meta) {
68
74
  await this.drizzle.db
69
75
  .update(session)
70
- .set({ expiresAt: sql `now()` })
76
+ .set({ expiresAt: sql `now()`, updatedAt: session.updatedAt })
71
77
  .where(and(eq(session.userId, userId), gt(session.expiresAt, sql `now()`)));
72
78
  this.events.emit('identity.sessions.revoked_all', {
73
79
  userId,
@@ -1 +1 @@
1
- {"version":3,"file":"session.service.js","sourceRoot":"","sources":["../../../../src/pam/identity/service/session.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.service.js","sourceRoot":"","sources":["../../../../src/pam/identity/service/session.service.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  export { useCurrentUser, useLogin, useLogout, useRegister, useRequestPasswordReset, useResetPassword, } from './identity/react/auth.js';
2
- export { useEnable2fa, useVerify2fa, useDisable2fa, useVerifyEmail, useUpdateProfile, useChangePassword, useSendEmailVerification, type Enable2faResult, } from './identity/react/account.js';
2
+ export { useEnable2fa, useVerify2fa, useDisable2fa, useVerifyEmail, useUpdateProfile, useChangePassword, useSendEmailVerification, useMySessions, useRevokeMySession, type Enable2faResult, } from './identity/react/account.js';
3
3
  export { usePlayerProfile, useUpdatePlayerProfile, type PlayerProfile, } from './profile/react/profile.js';
4
4
  //# sourceMappingURL=react.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/pam/react.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,QAAQ,EACR,SAAS,EACT,WAAW,EACX,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EACxB,KAAK,eAAe,GACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,KAAK,aAAa,GACnB,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/pam/react.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,QAAQ,EACR,SAAS,EACT,WAAW,EACX,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EACxB,aAAa,EACb,kBAAkB,EAClB,KAAK,eAAe,GACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,KAAK,aAAa,GACnB,MAAM,4BAA4B,CAAC"}
package/dist/pam/react.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // `@openora/core/pam/react` - domain-owned hooks, keeping the base @openora/core/react SDK domain-agnostic.
2
2
  export { useCurrentUser, useLogin, useLogout, useRegister, useRequestPasswordReset, useResetPassword, } from './identity/react/auth.js';
3
- export { useEnable2fa, useVerify2fa, useDisable2fa, useVerifyEmail, useUpdateProfile, useChangePassword, useSendEmailVerification, } from './identity/react/account.js';
3
+ export { useEnable2fa, useVerify2fa, useDisable2fa, useVerifyEmail, useUpdateProfile, useChangePassword, useSendEmailVerification, useMySessions, useRevokeMySession, } from './identity/react/account.js';
4
4
  export { usePlayerProfile, useUpdatePlayerProfile, } from './profile/react/profile.js';
5
5
  //# sourceMappingURL=react.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"react.js","sourceRoot":"","sources":["../../src/pam/react.ts"],"names":[],"mappings":"AAAA,4GAA4G;AAC5G,OAAO,EACL,cAAc,EACd,QAAQ,EACR,SAAS,EACT,WAAW,EACX,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,GAEzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,gBAAgB,EAChB,sBAAsB,GAEvB,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"react.js","sourceRoot":"","sources":["../../src/pam/react.ts"],"names":[],"mappings":"AAAA,4GAA4G;AAC5G,OAAO,EACL,cAAc,EACd,QAAQ,EACR,SAAS,EACT,WAAW,EACX,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EACxB,aAAa,EACb,kBAAkB,GAEnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,gBAAgB,EAChB,sBAAsB,GAEvB,MAAM,4BAA4B,CAAC"}
@@ -6,5 +6,9 @@ export declare class SessionResolver {
6
6
  readonly auth: Auth;
7
7
  constructor(drizzle: DrizzleService, schema?: Record<string, unknown>);
8
8
  resolveUserId(headers: Headers): Promise<string | undefined>;
9
+ resolveSession(headers: Headers): Promise<{
10
+ userId: string;
11
+ sessionId?: string | undefined;
12
+ } | undefined>;
9
13
  }
10
14
  //# sourceMappingURL=session-resolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-resolver.d.ts","sourceRoot":"","sources":["../../../src/server/auth/session-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAc,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AAQlD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,eAAe,CAA+B,CAAC;AAEhF,qBAAa,eAAe;IAC1B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;gBAKR,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI/D,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAInE"}
1
+ {"version":3,"file":"session-resolver.d.ts","sourceRoot":"","sources":["../../../src/server/auth/session-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAc,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AAQlD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,eAAe,CAA+B,CAAC;AAEhF,qBAAa,eAAe;IAC1B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;gBAKR,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI/D,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAO5D,cAAc,CAClB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,GAAG,SAAS,CAAC;CAK3E"}