@openora/core 0.4.1-canary.80 → 0.4.1-canary.82

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 (52) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/audit/plugin.d.ts.map +1 -1
  3. package/dist/audit/plugin.js +4 -1
  4. package/dist/audit/plugin.js.map +1 -1
  5. package/dist/contracts/schemas/events.d.ts +1 -0
  6. package/dist/contracts/schemas/events.d.ts.map +1 -1
  7. package/dist/contracts/schemas/events.js +1 -0
  8. package/dist/contracts/schemas/events.js.map +1 -1
  9. package/dist/contracts/schemas/identity.d.ts +5 -0
  10. package/dist/contracts/schemas/identity.d.ts.map +1 -1
  11. package/dist/contracts/schemas/identity.js +4 -0
  12. package/dist/contracts/schemas/identity.js.map +1 -1
  13. package/dist/engagement/chat/__tests__/moderation.test.js +2 -0
  14. package/dist/engagement/chat/__tests__/moderation.test.js.map +1 -1
  15. package/dist/engagement/chat/moderation/profanity.d.ts.map +1 -1
  16. package/dist/engagement/chat/moderation/profanity.js +2 -0
  17. package/dist/engagement/chat/moderation/profanity.js.map +1 -1
  18. package/dist/pam/identity/__tests__/identity.service.int.test.js +51 -2
  19. package/dist/pam/identity/__tests__/identity.service.int.test.js.map +1 -1
  20. package/dist/pam/identity/__tests__/phone-login.service.int.test.js +12 -0
  21. package/dist/pam/identity/__tests__/phone-login.service.int.test.js.map +1 -1
  22. package/dist/pam/identity/contract/index.d.ts +8 -0
  23. package/dist/pam/identity/contract/index.d.ts.map +1 -1
  24. package/dist/pam/identity/contract/index.js +3 -2
  25. package/dist/pam/identity/contract/index.js.map +1 -1
  26. package/dist/pam/identity/drizzle/migrations/0006_brave_sabra.sql +1 -0
  27. package/dist/pam/identity/drizzle/migrations/meta/0006_snapshot.json +701 -0
  28. package/dist/pam/identity/drizzle/migrations/meta/_journal.json +7 -0
  29. package/dist/pam/identity/plugin.d.ts.map +1 -1
  30. package/dist/pam/identity/plugin.js +1 -0
  31. package/dist/pam/identity/plugin.js.map +1 -1
  32. package/dist/pam/identity/react/auth.d.ts +4 -0
  33. package/dist/pam/identity/react/auth.d.ts.map +1 -1
  34. package/dist/pam/identity/router/index.d.ts +8 -0
  35. package/dist/pam/identity/router/index.d.ts.map +1 -1
  36. package/dist/pam/identity/schema/index.d.ts +17 -0
  37. package/dist/pam/identity/schema/index.d.ts.map +1 -1
  38. package/dist/pam/identity/schema/index.js +1 -0
  39. package/dist/pam/identity/schema/index.js.map +1 -1
  40. package/dist/pam/identity/service/identity.service.d.ts +6 -5
  41. package/dist/pam/identity/service/identity.service.d.ts.map +1 -1
  42. package/dist/pam/identity/service/identity.service.js +103 -31
  43. package/dist/pam/identity/service/identity.service.js.map +1 -1
  44. package/dist/pam/identity/service/lockout-policy.service.d.ts +30 -0
  45. package/dist/pam/identity/service/lockout-policy.service.d.ts.map +1 -0
  46. package/dist/pam/identity/service/lockout-policy.service.js +40 -0
  47. package/dist/pam/identity/service/lockout-policy.service.js.map +1 -0
  48. package/dist/pam/identity/service/phone-login.service.d.ts +8 -2
  49. package/dist/pam/identity/service/phone-login.service.d.ts.map +1 -1
  50. package/dist/pam/identity/service/phone-login.service.js +56 -2
  51. package/dist/pam/identity/service/phone-login.service.js.map +1 -1
  52. package/package.json +1 -1
@@ -43,6 +43,13 @@
43
43
  "when": 1785015619157,
44
44
  "tag": "0005_daily_black_tom",
45
45
  "breakpoints": true
46
+ },
47
+ {
48
+ "idx": 6,
49
+ "version": "7",
50
+ "when": 1787167155336,
51
+ "tag": "0006_brave_sabra",
52
+ "breakpoints": true
46
53
  }
47
54
  ]
48
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/pam/identity/plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,wBA2E8C"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/pam/identity/plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,wBA4E8C"}
@@ -65,6 +65,7 @@ export default {
65
65
  limiter: c.get(RATE_LIMITER),
66
66
  auth: c.get(AUTH_SESSION).auth,
67
67
  cache: c.get(CACHE),
68
+ options: c.has(IDENTITY_OPTIONS) ? c.get(IDENTITY_OPTIONS) : undefined,
68
69
  }), c.get(ADMIN_GUARD), c.get(EVENT_BUS)));
69
70
  },
70
71
  };
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/pam/identity/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/pam/identity/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,KAAK,EACL,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,6BAA6B,EAC7B,UAAU,EACV,uBAAuB,EACvB,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,WAAW,GACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,4BAA4B,EAAE,MAAM,+CAA+C,CAAC;AAC7F,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAE/E,eAAe;IACb,EAAE,EAAE,UAAU;IACd,QAAQ,CAAC,GAAG;QACV,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC;QACrD,6EAA6E;QAC7E,4EAA4E;QAC5E,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC;QACrD,6EAA6E;QAC7E,GAAG,CAAC,OAAO,CACT,oBAAoB,EACpB,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,yBAAyB,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CACvE,CAAC;QACF,qFAAqF;QACrF,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,qBAAqB,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/E,wFAAwF;QACxF,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9B,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAC9B,CAAC,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC;SACpE,CAAC,CAAC,CAAC;QACJ,GAAG,CAAC,OAAO,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,IAAI,4BAA4B,EAAE,CAAC,CAAC;QAC/E,kFAAkF;QAClF,GAAG,CAAC,OAAO,CACT,iBAAiB,EACjB,CAAC,CAAC,EAAE,EAAE,CACJ,IAAI,uBAAuB,CACzB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EACd,IAAI,cAAc,CAAC;YACjB,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC;YACvB,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;YACxB,cAAc,EAAE,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC;SACvC,CAAC,CACH,CACJ,CAAC;QACF,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,sBAAsB,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjF,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE;YAClC,MAAM,UAAU,GAAG,IAAI,cAAc,CAAC;gBACpC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC;gBACvB,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;gBACxB,cAAc,EAAE,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC;aACvC,CAAC,CAAC;YACH,OAAO;gBACL,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC;aAC9E,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAChC,oBAAoB,CAClB,IAAI,eAAe,CAAC;YAClB,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC;YACvB,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;YACxB,cAAc,EAAE,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC;YACtC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;YACxB,gBAAgB,EAAE,CAAC,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAChD,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS;YACtE,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;YAC5B,cAAc,EAAE,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS;YAC3E,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;SACpB,CAAC,EACF,IAAI,cAAc,CAAC;YACjB,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC;YACvB,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;YACxB,cAAc,EAAE,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC;SACvC,CAAC,EACF,IAAI,iBAAiB,CAAC;YACpB,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC;YACvB,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;YACxB,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;YACvB,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;YAC5B,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI;YAC9B,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;YACnB,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS;SACvE,CAAC,EACF,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,EAClB,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CACjB,CACF,CAAC;IACJ,CAAC;CAC0C,CAAC"}
@@ -30,6 +30,10 @@ export declare function useLogin(): import("@tanstack/react-query").UseMutationR
30
30
  expiresAt: string;
31
31
  } | undefined;
32
32
  twoFactorRedirect?: boolean | undefined;
33
+ security?: {
34
+ attemptsRemaining: number;
35
+ lockoutUntil: string | null;
36
+ } | undefined;
33
37
  }, Error, {
34
38
  email: string;
35
39
  password: string;
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../../src/pam/identity/react/auth.ts"],"names":[],"mappings":"AAMA,wBAAgB,cAAc;;;;;;;;;;;;kBAG7B;AAED,wBAAgB,QAAQ;;;;;;;;;;;;;;;;;;;;;;;YAOvB;AAED,wBAAgB,SAAS;;4BAOxB;AAED,wBAAgB,WAAW;;;;;;;;;;;;;;;;;;YAO1B;AAED,wBAAgB,uBAAuB;;;;YAKtC;AAED,wBAAgB,gBAAgB;;;;;;;YAK/B"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../../src/pam/identity/react/auth.ts"],"names":[],"mappings":"AAMA,wBAAgB,cAAc;;;;;;;;;;;;kBAG7B;AAED,wBAAgB,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;YAOvB;AAED,wBAAgB,SAAS;;4BAOxB;AAED,wBAAgB,WAAW;;;;;;;;;;;;;;;;;;YAO1B;AAED,wBAAgB,uBAAuB;;;;YAKtC;AAED,wBAAgB,gBAAgB;;;;;;;YAK/B"}
@@ -53,6 +53,10 @@ export declare function createIdentityRouter(identity: IdentityService, sessionS
53
53
  expiresAt: import("zod").ZodISODateTime;
54
54
  }, import("zod/v4/core").$strip>>;
55
55
  twoFactorRedirect: import("zod").ZodOptional<import("zod").ZodBoolean>;
56
+ security: import("zod").ZodOptional<import("zod").ZodObject<{
57
+ attemptsRemaining: import("zod").ZodNumber;
58
+ lockoutUntil: import("zod").ZodNullable<import("zod").ZodISODateTime>;
59
+ }, import("zod/v4/core").$strip>>;
56
60
  }, import("zod/v4/core").$strip>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
57
61
  phoneLoginRequest: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<OssContext & Record<never, never>, OssContext & Record<never, never>, OssContext>, OssContext, import("zod").ZodObject<{
58
62
  phone: import("zod").ZodString;
@@ -86,6 +90,10 @@ export declare function createIdentityRouter(identity: IdentityService, sessionS
86
90
  token: import("zod").ZodString;
87
91
  expiresAt: import("zod").ZodISODateTime;
88
92
  }, import("zod/v4/core").$strip>;
93
+ security: import("zod").ZodObject<{
94
+ attemptsRemaining: import("zod").ZodNumber;
95
+ lockoutUntil: import("zod").ZodNullable<import("zod").ZodISODateTime>;
96
+ }, import("zod/v4/core").$strip>;
89
97
  }, import("zod/v4/core").$strip>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
90
98
  logout: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<OssContext & Record<never, never>, OssContext & Record<never, never>, OssContext>, OssContext, import("@orpc/server").Schema<unknown, unknown>, import("zod").ZodObject<{
91
99
  success: import("zod").ZodLiteral<true>;
@@ -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,EAAE,eAAe,EAAqB,MAAM,gCAAgC,CAAC;AACpF,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgKnB"}
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,EAAE,eAAe,EAAqB,MAAM,gCAAgC,CAAC;AACpF,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgKnB"}
@@ -343,6 +343,23 @@ export declare const user: import("drizzle-orm/pg-core").PgTableWithColumns<{
343
343
  identity: undefined;
344
344
  generated: undefined;
345
345
  }, {}, {}>;
346
+ lastFailedLoginAt: import("drizzle-orm/pg-core").PgColumn<{
347
+ name: "lastFailedLoginAt";
348
+ tableName: "user";
349
+ dataType: "date";
350
+ columnType: "PgTimestamp";
351
+ data: Date;
352
+ driverParam: string;
353
+ notNull: false;
354
+ hasDefault: false;
355
+ isPrimaryKey: false;
356
+ isAutoincrement: false;
357
+ hasRuntimeDefault: false;
358
+ enumValues: undefined;
359
+ baseColumn: never;
360
+ identity: undefined;
361
+ generated: undefined;
362
+ }, {}, {}>;
346
363
  rgBlocked: import("drizzle-orm/pg-core").PgColumn<{
347
364
  name: "rgBlocked";
348
365
  tableName: "user";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/pam/identity/schema/index.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,aAAa,mEAA+B,CAAC;AAE1D,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+ChB,CAAC;AAEF,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBnB,CAAC;AAEF,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsBnB,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAaxB,CAAC;AAGF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAerB,CAAC;AAKF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAezB,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,YAAY,CAAC;AAC5C,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,YAAY,CAAC;AAClD,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,YAAY,CAAC;AAC9D,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,YAAY,CAAC;AAClD,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC;AAC5D,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/pam/identity/schema/index.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,aAAa,mEAA+B,CAAC;AAE1D,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgDhB,CAAC;AAEF,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBnB,CAAC;AAEF,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsBnB,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAaxB,CAAC;AAGF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAerB,CAAC;AAKF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAezB,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,YAAY,CAAC;AAC5C,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,YAAY,CAAC;AAClD,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,YAAY,CAAC;AAC9D,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,YAAY,CAAC;AAClD,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC;AAC5D,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,YAAY,CAAC"}
@@ -31,6 +31,7 @@ export const user = pgTable('user', {
31
31
  // 1min -> 5min -> 15min. Shared by every login method.
32
32
  lockoutCount: integer().notNull().default(0),
33
33
  lastLockoutAt: timestamp({ withTimezone: true }),
34
+ lastFailedLoginAt: timestamp({ withTimezone: true }),
34
35
  // Responsible-Gambling login block (cooling-off / self-exclusion). Written only via
35
36
  // the LOGIN_ENFORCEMENT port. `rgBlockedUntil` null while blocked = indefinite
36
37
  // (self-exclusion); a Date is the cooling-off expiry the login gate auto-clears.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/pam/identity/schema/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/pam/identity/schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EACL,OAAO,EACP,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,SAAS,EACT,KAAK,EACL,OAAO,GACR,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEjD,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AAE1D,MAAM,CAAC,MAAM,IAAI,GAAG,OAAO,CACzB,MAAM,EACN;IACE,EAAE,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC,aAAa,EAAE;IACvC,IAAI,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE;IACtB,KAAK,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE;IAChC,aAAa,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACjD,KAAK,EAAE,IAAI,EAAE;IACb,KAAK,EAAE,aAAa,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;IAClD,QAAQ,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACxC,IAAI,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;IACxC,QAAQ,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3C,8EAA8E;IAC9E,wEAAwE;IACxE,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAChC,SAAS,EAAE,IAAI,EAAE;IACjB,UAAU,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAC7C,kFAAkF;IAClF,qFAAqF;IACrF,gEAAgE;IAChE,gBAAgB,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC1C,WAAW,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE;IAC5B,aAAa,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACjD,eAAe,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAClD,mBAAmB,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD,YAAY,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAC/C,iFAAiF;IACjF,gFAAgF;IAChF,uDAAuD;IACvD,YAAY,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5C,aAAa,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAChD,iBAAiB,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IACpD,oFAAoF;IACpF,+EAA+E;IAC/E,iFAAiF;IACjF,SAAS,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC7C,cAAc,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IACjD,SAAS,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE;IACnE,SAAS,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;SACzC,OAAO,EAAE;SACT,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;CACjC;AACD,iFAAiF;AACjF,yEAAyE;AACzE,CAAC,CAAC,EAAE,EAAE,CAAC;IACL,KAAK,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAA,GAAG,CAAC,CAAC,KAAK,eAAe,CAAC;IACvE,KAAK,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;CAC7C,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAC5B,SAAS,EACT;IACE,EAAE,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC,aAAa,EAAE;IACvC,SAAS,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;IACtD,KAAK,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE;IAChC,SAAS,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE;IACnE,SAAS,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;SACzC,OAAO,EAAE;SACT,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;IAChC,SAAS,EAAE,IAAI,EAAE;IACjB,SAAS,EAAE,IAAI,EAAE;IACjB,MAAM,EAAE,IAAI,EAAE;SACX,OAAO,EAAE;SACT,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;CACtD,EACD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CACnD,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAC5B,SAAS,EACT;IACE,EAAE,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC,aAAa,EAAE;IACvC,SAAS,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE;IAC3B,UAAU,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE;IAC5B,MAAM,EAAE,IAAI,EAAE;SACX,OAAO,EAAE;SACT,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACrD,WAAW,EAAE,IAAI,EAAE;IACnB,YAAY,EAAE,IAAI,EAAE;IACpB,OAAO,EAAE,IAAI,EAAE;IACf,oBAAoB,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IACvD,qBAAqB,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IACxD,KAAK,EAAE,IAAI,EAAE;IACb,QAAQ,EAAE,IAAI,EAAE;IAChB,SAAS,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE;IACnE,SAAS,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;SACzC,OAAO,EAAE;SACT,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;CACjC,EACD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CACnD,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CACjC,cAAc,EACd;IACE,EAAE,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC,aAAa,EAAE;IACvC,UAAU,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE;IAC5B,KAAK,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE;IACvB,SAAS,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;IACtD,SAAS,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE;IACnE,SAAS,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;SACzC,OAAO,EAAE;SACT,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;CACjC,EACD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAC/D,CAAC;AAEF,oGAAoG;AACpG,MAAM,CAAC,MAAM,SAAS,GAAG,OAAO,CAC9B,YAAY,EACZ;IACE,EAAE,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC,aAAa,EAAE;IACvC,MAAM,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE;IACxB,WAAW,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE;IAC7B,MAAM,EAAE,IAAI,EAAE;SACX,OAAO,EAAE;SACT,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACrD,QAAQ,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CAClC,EACD,CAAC,CAAC,EAAE,EAAE,CAAC;IACL,KAAK,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5C,KAAK,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;CAC5C,CACF,CAAC;AAEF,wGAAwG;AACxG,iFAAiF;AACjF,mDAAmD;AACnD,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAClC,iBAAiB,EACjB;IACE,EAAE,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC,aAAa,EAAE;IACvC,MAAM,EAAE,IAAI,EAAE;SACX,OAAO,EAAE;SACT,MAAM,EAAE;SACR,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACrD,KAAK,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE;IACvB,QAAQ,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE;IAC1B,SAAS,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;IACtD,cAAc,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9C,SAAS,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE;CACpE,EACD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CACxD,CAAC"}
@@ -1,10 +1,5 @@
1
- import { ORPCError } from '@orpc/server';
2
1
  import { type EventBus, type NodeHeaders, DrizzleService } from '@openora/core/server';
3
2
  import type { CacheAdapter, RateLimiterAdapter, RateLimitKey, SendEmailPort, EmailTemplateRenderer, LoginInput, RegisterInput, Enable2faInput, Verify2faInput, Disable2faInput, RequestPasswordResetInput, VerifyPasswordResetOtpInput, ResetPasswordInput, VerifyEmailInput, UpdateProfileInput, User, IdentityReader, ChangePasswordInput, ChangeEmailInput, IdentityServiceOptions, PlatformConfig, ClientMeta } from '@openora/core/contracts';
4
- export declare function createAccountLockedError(lockoutUntil: Date): ORPCError<"UNAUTHORIZED", {
5
- code: string;
6
- lockoutUntil: string;
7
- }>;
8
3
  export declare const UserNotFoundError: new (id: string) => Error;
9
4
  export declare const SESSION_DURATION_IN_SECONDS: number;
10
5
  export type IdentityServiceDeps = {
@@ -82,6 +77,7 @@ export declare class IdentityService {
82
77
  twoFactorRedirect: boolean;
83
78
  user?: undefined;
84
79
  session?: undefined;
80
+ security?: undefined;
85
81
  } | {
86
82
  user: {
87
83
  id: string;
@@ -107,9 +103,14 @@ export declare class IdentityService {
107
103
  token: string;
108
104
  expiresAt: string;
109
105
  };
106
+ security: {
107
+ attemptsRemaining: number;
108
+ lockoutUntil: string | null;
109
+ };
110
110
  twoFactorRedirect?: undefined;
111
111
  }>;
112
112
  private clearLockout;
113
+ private resetLockoutTier;
113
114
  private loginShadowGet;
114
115
  private loginShadowSet;
115
116
  private adminPasswordResetMarkerKey;
@@ -1 +1 @@
1
- {"version":3,"file":"identity.service.d.ts","sourceRoot":"","sources":["../../../../src/pam/identity/service/identity.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"identity.service.d.ts","sourceRoot":"","sources":["../../../../src/pam/identity/service/identity.service.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,13 @@
1
1
  import { ORPCError } from '@orpc/server';
2
2
  import { createAuth, assertRateLimit, extractClientMeta, getCurrentClientMeta, findOneOrThrow, makeNotFoundError, createLogger, } from '@openora/core/server';
3
3
  import { parseCookies } from 'better-auth/cookies';
4
- import { eq, sql } from 'drizzle-orm';
4
+ import { and, eq, isNull, sql } from 'drizzle-orm';
5
5
  import { user, session, account, verification, twoFactor } from '../schema/index.js';
6
6
  import { player } from '@openora/core/pam/schema/profile';
7
7
  import { RATE_LIMIT_KEYS, makeRateLimitKey } from '@openora/core/contracts';
8
8
  import { assertSupportedLanguage } from '../../shared/language.js';
9
9
  import { isRgBlocked } from './rg-guard.service.js';
10
+ import { DEFAULT_LOCKOUT_DURATION_MS, DEFAULT_MAX_LOGIN_ATTEMPTS, computeLockoutTier, createAccountLockedError, hasFailedLoginWindowExpired, makeLoginSecurityState, } from './lockout-policy.service.js';
10
11
  function nodeHeadersToHeaders(nodeHeaders) {
11
12
  const headers = new Headers();
12
13
  for (const [key, value] of Object.entries(nodeHeaders)) {
@@ -17,15 +18,6 @@ function nodeHeadersToHeaders(nodeHeaders) {
17
18
  }
18
19
  return headers;
19
20
  }
20
- export function createAccountLockedError(lockoutUntil) {
21
- return new ORPCError('UNAUTHORIZED', {
22
- message: 'Account is temporarily locked. Please try again later.',
23
- data: {
24
- code: 'ACCOUNT_LOCKED',
25
- lockoutUntil: lockoutUntil.toISOString(),
26
- },
27
- });
28
- }
29
21
  function toIso(value) {
30
22
  return value instanceof Date ? value.toISOString() : value;
31
23
  }
@@ -94,19 +86,6 @@ async function ensureOk(res, opts) {
94
86
  }
95
87
  throw new ORPCError(code, { message });
96
88
  }
97
- const DEFAULT_MAX_LOGIN_ATTEMPTS = 5;
98
- const DEFAULT_LOCKOUT_DURATION_MS = 15 * 60 * 1000;
99
- // Progressive lockout: a repeat lockout inside a rolling 24h window escalates the
100
- // duration (1 min -> 5 min -> 15 min, capped at tier 3). The window resets once the
101
- // last lockout falls outside it, so an occasional fat-finger never compounds.
102
- const LOCKOUT_WINDOW_MS = 24 * 60 * 60 * 1000;
103
- const LOCKOUT_TIER_DURATIONS_MS = [60_000, 5 * 60_000, 15 * 60_000];
104
- function computeLockoutTier({ lockoutCount, lastLockoutAt, nowMs, fallbackDurationMs, }) {
105
- const withinWindow = lastLockoutAt !== null && nowMs - lastLockoutAt.getTime() < LOCKOUT_WINDOW_MS;
106
- const tier = withinWindow ? lockoutCount + 1 : 1;
107
- const durationMs = LOCKOUT_TIER_DURATIONS_MS[Math.min(tier - 1, 2)] ?? fallbackDurationMs;
108
- return { tier, durationMs };
109
- }
110
89
  const MINUTE_MS = 60 * 1000;
111
90
  export const SESSION_DURATION_IN_SECONDS = 30 * 24 * 60 * 60; // 30 days
112
91
  // Coarse abuse throttles keyed by the caller identifier the context provides (email/
@@ -140,6 +119,13 @@ function loginShadowKey(email) {
140
119
  }
141
120
  const loginShadowLogger = createLogger('login-shadow');
142
121
  const identityLogger = createLogger('identity');
122
+ function hasErrorCode(error, code) {
123
+ if (typeof error !== 'object' || error === null || !('data' in error)) {
124
+ return false;
125
+ }
126
+ const data = error.data;
127
+ return typeof data === 'object' && data !== null && 'code' in data && data.code === code;
128
+ }
143
129
  function computeLockoutState({ attempts, maxAttempts, durationMs, nowMs, }) {
144
130
  const isLocking = attempts >= maxAttempts;
145
131
  return { isLocking, lockoutUntil: isLocking ? new Date(nowMs + durationMs) : null };
@@ -267,6 +253,7 @@ export class IdentityService {
267
253
  lockoutUntil: user.lockoutUntil,
268
254
  lockoutCount: user.lockoutCount,
269
255
  lastLockoutAt: user.lastLockoutAt,
256
+ lastFailedLoginAt: user.lastFailedLoginAt,
270
257
  role: user.role,
271
258
  rgBlocked: user.rgBlocked,
272
259
  rgBlockedUntil: user.rgBlockedUntil,
@@ -278,8 +265,9 @@ export class IdentityService {
278
265
  const isAdmin = existingUser?.role === 'admin';
279
266
  const bypassForAdmins = this.options?.lockout?.bypassForAdmins ?? false;
280
267
  const lockoutEnabled = configLockoutEnabled && !(isAdmin && bypassForAdmins);
268
+ const nowMs = Date.now();
281
269
  if (lockoutEnabled && existingUser?.lockoutUntil) {
282
- if (new Date(existingUser.lockoutUntil) > new Date()) {
270
+ if (new Date(existingUser.lockoutUntil) > new Date(nowMs)) {
283
271
  throw createAccountLockedError(new Date(existingUser.lockoutUntil));
284
272
  }
285
273
  // Lock window elapsed: clear it so the next failure starts from a fresh budget
@@ -287,9 +275,34 @@ export class IdentityService {
287
275
  await this.clearLockout(existingUser.id);
288
276
  existingUser = { ...existingUser, failedLoginAttempts: 0, lockoutUntil: null };
289
277
  }
278
+ if (lockoutEnabled &&
279
+ existingUser &&
280
+ hasFailedLoginWindowExpired(existingUser.lastFailedLoginAt, existingUser.lastLockoutAt, nowMs)) {
281
+ await this.resetLockoutTier(existingUser.id);
282
+ existingUser = {
283
+ ...existingUser,
284
+ failedLoginAttempts: 0,
285
+ lockoutUntil: null,
286
+ lockoutCount: 0,
287
+ lastLockoutAt: null,
288
+ lastFailedLoginAt: null,
289
+ };
290
+ }
290
291
  let fakeLoginShadow;
291
292
  if (lockoutEnabled && !existingUser) {
292
293
  fakeLoginShadow = await this.loginShadowGet(loginShadowKey(email));
294
+ if (fakeLoginShadow?.lastFailedLoginAt) {
295
+ const lastFailedLoginAt = new Date(fakeLoginShadow.lastFailedLoginAt);
296
+ if (hasFailedLoginWindowExpired(lastFailedLoginAt, null, nowMs)) {
297
+ fakeLoginShadow = {
298
+ failedAttempts: 0,
299
+ lockoutUntil: null,
300
+ lockoutCount: 0,
301
+ lastLockoutAt: null,
302
+ lastFailedLoginAt: null,
303
+ };
304
+ }
305
+ }
293
306
  if (fakeLoginShadow?.lockoutUntil) {
294
307
  if (new Date(fakeLoginShadow.lockoutUntil) > new Date()) {
295
308
  throw createAccountLockedError(new Date(fakeLoginShadow.lockoutUntil));
@@ -383,6 +396,11 @@ export class IdentityService {
383
396
  return {
384
397
  user: toUser(body.user),
385
398
  session: { token: body.token, expiresAt },
399
+ security: makeLoginSecurityState({
400
+ failedLoginAttempts: 0,
401
+ maxAttempts: this.options?.lockout?.maxAttempts ?? DEFAULT_MAX_LOGIN_ATTEMPTS,
402
+ lockoutUntil: null,
403
+ }),
386
404
  };
387
405
  }
388
406
  catch (error) {
@@ -393,12 +411,15 @@ export class IdentityService {
393
411
  // to the generic branch below to emit login.failed.
394
412
  if (error instanceof ORPCError &&
395
413
  error.code === 'FORBIDDEN' &&
396
- ['RG_BLOCKED', 'ACCOUNT_SUSPENDED'].includes(error.data?.code ?? '')) {
414
+ (hasErrorCode(error, 'RG_BLOCKED') || hasErrorCode(error, 'ACCOUNT_SUSPENDED'))) {
397
415
  throw error;
398
416
  }
399
417
  // Only a genuine credential rejection counts toward lockout - a transient DB/network
400
418
  // error must never lock the account out.
401
- const isCredentialFailure = error instanceof ORPCError && error.code === 'UNAUTHORIZED';
419
+ const isAccountLocked = error instanceof ORPCError &&
420
+ error.code === 'UNAUTHORIZED' &&
421
+ hasErrorCode(error, 'ACCOUNT_LOCKED');
422
+ const isCredentialFailure = error instanceof ORPCError && error.code === 'UNAUTHORIZED' && !isAccountLocked;
402
423
  let attemptsRemaining;
403
424
  if (lockoutEnabled && existingUser && isCredentialFailure) {
404
425
  const maxAttempts = this.options?.lockout?.maxAttempts ?? DEFAULT_MAX_LOGIN_ATTEMPTS;
@@ -407,7 +428,10 @@ export class IdentityService {
407
428
  // the threshold (the read-modify-write this replaces was bypassable under load).
408
429
  const [row] = await this.drizzle.db
409
430
  .update(user)
410
- .set({ failedLoginAttempts: sql `${user.failedLoginAttempts} + 1` })
431
+ .set({
432
+ failedLoginAttempts: sql `${user.failedLoginAttempts} + 1`,
433
+ lastFailedLoginAt: new Date(),
434
+ })
411
435
  .where(eq(user.id, existingUser.id))
412
436
  .returning({ failedLoginAttempts: user.failedLoginAttempts });
413
437
  const newAttempts = row?.failedLoginAttempts ?? existingUser.failedLoginAttempts + 1;
@@ -423,19 +447,38 @@ export class IdentityService {
423
447
  // Escalate the lockout duration for repeat offenders inside the 24h window.
424
448
  const { tier, durationMs } = computeLockoutTier({
425
449
  lockoutCount: existingUser.lockoutCount ?? 0,
426
- lastLockoutAt: existingUser.lastLockoutAt ?? null,
450
+ lastFailedLoginAt: existingUser.lastFailedLoginAt ?? null,
451
+ fallbackLastLockoutAt: existingUser.lastLockoutAt ?? null,
427
452
  nowMs,
428
453
  fallbackDurationMs,
429
454
  });
430
455
  const lockoutUntil = new Date(nowMs + durationMs);
431
- await this.drizzle.db
456
+ const [lockoutRow] = await this.drizzle.db
432
457
  .update(user)
433
458
  .set({ lockoutUntil, lockoutCount: tier, lastLockoutAt: new Date(nowMs) })
434
- .where(eq(user.id, existingUser.id));
459
+ // Only the first request that reaches the threshold creates the lockout.
460
+ // Other concurrent failures must observe and return the winner's lockout
461
+ // instead of overwriting its tier or emitting a duplicate event.
462
+ .where(and(eq(user.id, existingUser.id), isNull(user.lockoutUntil)))
463
+ .returning({ lockoutUntil: user.lockoutUntil });
464
+ if (!lockoutRow) {
465
+ const [current] = await this.drizzle.db
466
+ .select({ lockoutUntil: user.lockoutUntil })
467
+ .from(user)
468
+ .where(eq(user.id, existingUser.id))
469
+ .limit(1);
470
+ if (current?.lockoutUntil) {
471
+ throw createAccountLockedError(current.lockoutUntil);
472
+ }
473
+ throw new ORPCError('INTERNAL_SERVER_ERROR', {
474
+ message: 'Unable to establish account lockout.',
475
+ });
476
+ }
435
477
  await this.limiter?.reset(makeLoginRateLimitKey(email));
436
478
  this.events.emit('identity.user.lockout.triggered', {
437
479
  userId: existingUser.id,
438
480
  email,
481
+ tier,
439
482
  lockoutUntil: lockoutUntil.toISOString(),
440
483
  ip,
441
484
  userAgent,
@@ -458,7 +501,10 @@ export class IdentityService {
458
501
  const nowMs = Date.now();
459
502
  const { tier, durationMs } = computeLockoutTier({
460
503
  lockoutCount: fakeLoginShadow?.lockoutCount ?? 0,
461
- lastLockoutAt: fakeLoginShadow?.lastLockoutAt
504
+ lastFailedLoginAt: fakeLoginShadow?.lastFailedLoginAt
505
+ ? new Date(fakeLoginShadow.lastFailedLoginAt)
506
+ : null,
507
+ fallbackLastLockoutAt: fakeLoginShadow?.lastLockoutAt
462
508
  ? new Date(fakeLoginShadow.lastLockoutAt)
463
509
  : null,
464
510
  nowMs,
@@ -470,6 +516,7 @@ export class IdentityService {
470
516
  lockoutUntil: lockoutUntil.toISOString(),
471
517
  lockoutCount: tier,
472
518
  lastLockoutAt: new Date(nowMs).toISOString(),
519
+ lastFailedLoginAt: new Date(nowMs).toISOString(),
473
520
  });
474
521
  await this.limiter?.reset(makeLoginRateLimitKey(email));
475
522
  throw createAccountLockedError(lockoutUntil);
@@ -479,6 +526,7 @@ export class IdentityService {
479
526
  lockoutUntil: null,
480
527
  lockoutCount: fakeLoginShadow?.lockoutCount ?? 0,
481
528
  lastLockoutAt: fakeLoginShadow?.lastLockoutAt ?? null,
529
+ lastFailedLoginAt: new Date().toISOString(),
482
530
  });
483
531
  }
484
532
  const reason = isCredentialFailure ? 'invalid_credentials' : 'error';
@@ -489,6 +537,18 @@ export class IdentityService {
489
537
  userAgent,
490
538
  ...(attemptsRemaining !== undefined ? { attemptsRemaining } : {}),
491
539
  });
540
+ if (isCredentialFailure && error instanceof ORPCError && attemptsRemaining !== undefined) {
541
+ const maxAttempts = this.options?.lockout?.maxAttempts ?? DEFAULT_MAX_LOGIN_ATTEMPTS;
542
+ const security = makeLoginSecurityState({
543
+ failedLoginAttempts: attemptsRemaining === undefined ? 0 : maxAttempts - attemptsRemaining,
544
+ maxAttempts,
545
+ lockoutUntil: null,
546
+ });
547
+ throw new ORPCError('UNAUTHORIZED', {
548
+ message: error.message,
549
+ data: { ...error.data, ...security },
550
+ });
551
+ }
492
552
  throw error;
493
553
  }
494
554
  }
@@ -498,6 +558,18 @@ export class IdentityService {
498
558
  .set({ failedLoginAttempts: 0, lockoutUntil: null })
499
559
  .where(eq(user.id, userId));
500
560
  }
561
+ resetLockoutTier(userId) {
562
+ return this.drizzle.db
563
+ .update(user)
564
+ .set({
565
+ failedLoginAttempts: 0,
566
+ lockoutUntil: null,
567
+ lockoutCount: 0,
568
+ lastLockoutAt: null,
569
+ lastFailedLoginAt: null,
570
+ })
571
+ .where(eq(user.id, userId));
572
+ }
501
573
  async loginShadowGet(key) {
502
574
  if (!this.cache) {
503
575
  return undefined;