@openora/core 0.4.1-canary.18 → 0.4.1-canary.20

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 (104) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/audit/plugin.d.ts.map +1 -1
  3. package/dist/audit/plugin.js +37 -0
  4. package/dist/audit/plugin.js.map +1 -1
  5. package/dist/contracts/adapters/__tests__/rate-limit.test.d.ts +2 -0
  6. package/dist/contracts/adapters/__tests__/rate-limit.test.d.ts.map +1 -0
  7. package/dist/contracts/adapters/__tests__/rate-limit.test.js +13 -0
  8. package/dist/contracts/adapters/__tests__/rate-limit.test.js.map +1 -0
  9. package/dist/contracts/adapters/email-template.d.ts +28 -0
  10. package/dist/contracts/adapters/email-template.d.ts.map +1 -0
  11. package/dist/contracts/adapters/email-template.js +19 -0
  12. package/dist/contracts/adapters/email-template.js.map +1 -0
  13. package/dist/contracts/adapters/index.d.ts +5 -1
  14. package/dist/contracts/adapters/index.d.ts.map +1 -1
  15. package/dist/contracts/adapters/index.js +3 -1
  16. package/dist/contracts/adapters/index.js.map +1 -1
  17. package/dist/contracts/adapters/rate-limit.d.ts +2 -0
  18. package/dist/contracts/adapters/rate-limit.d.ts.map +1 -1
  19. package/dist/contracts/adapters/rate-limit.js +4 -0
  20. package/dist/contracts/adapters/rate-limit.js.map +1 -1
  21. package/dist/contracts/adapters/sms.d.ts +9 -0
  22. package/dist/contracts/adapters/sms.d.ts.map +1 -0
  23. package/dist/contracts/adapters/sms.js +7 -0
  24. package/dist/contracts/adapters/sms.js.map +1 -0
  25. package/dist/contracts/schemas/__tests__/identity-schemas.test.js +6 -1
  26. package/dist/contracts/schemas/__tests__/identity-schemas.test.js.map +1 -1
  27. package/dist/contracts/schemas/events.d.ts +17 -0
  28. package/dist/contracts/schemas/events.d.ts.map +1 -1
  29. package/dist/contracts/schemas/events.js +10 -0
  30. package/dist/contracts/schemas/events.js.map +1 -1
  31. package/dist/contracts/schemas/identity.d.ts +29 -1
  32. package/dist/contracts/schemas/identity.d.ts.map +1 -1
  33. package/dist/contracts/schemas/identity.js +26 -2
  34. package/dist/contracts/schemas/identity.js.map +1 -1
  35. package/dist/iam/service/iam.service.d.ts +2 -2
  36. package/dist/pam/identity/__tests__/identity.rate-limit.test.js +34 -12
  37. package/dist/pam/identity/__tests__/identity.rate-limit.test.js.map +1 -1
  38. package/dist/pam/identity/__tests__/identity.service.test.js +188 -35
  39. package/dist/pam/identity/__tests__/identity.service.test.js.map +1 -1
  40. package/dist/pam/identity/__tests__/phone-login.service.test.d.ts +2 -0
  41. package/dist/pam/identity/__tests__/phone-login.service.test.d.ts.map +1 -0
  42. package/dist/pam/identity/__tests__/phone-login.service.test.js +198 -0
  43. package/dist/pam/identity/__tests__/phone-login.service.test.js.map +1 -0
  44. package/dist/pam/identity/adapters/__tests__/default-email-template-renderer.test.d.ts +2 -0
  45. package/dist/pam/identity/adapters/__tests__/default-email-template-renderer.test.d.ts.map +1 -0
  46. package/dist/pam/identity/adapters/__tests__/default-email-template-renderer.test.js +25 -0
  47. package/dist/pam/identity/adapters/__tests__/default-email-template-renderer.test.js.map +1 -0
  48. package/dist/pam/identity/adapters/default-email-template-renderer.d.ts +8 -0
  49. package/dist/pam/identity/adapters/default-email-template-renderer.d.ts.map +1 -0
  50. package/dist/pam/identity/adapters/default-email-template-renderer.js +7 -0
  51. package/dist/pam/identity/adapters/default-email-template-renderer.js.map +1 -0
  52. package/dist/pam/identity/adapters/mock/mock-sms-adapter.d.ts +8 -0
  53. package/dist/pam/identity/adapters/mock/mock-sms-adapter.d.ts.map +1 -0
  54. package/dist/pam/identity/adapters/mock/mock-sms-adapter.js +7 -0
  55. package/dist/pam/identity/adapters/mock/mock-sms-adapter.js.map +1 -0
  56. package/dist/pam/identity/contract/index.d.ts +54 -1
  57. package/dist/pam/identity/contract/index.d.ts.map +1 -1
  58. package/dist/pam/identity/contract/index.js +14 -2
  59. package/dist/pam/identity/contract/index.js.map +1 -1
  60. package/dist/pam/identity/drizzle/migrations/0001_rainy_peter_quill.sql +18 -0
  61. package/dist/pam/identity/drizzle/migrations/0002_outstanding_patriot.sql +1 -0
  62. package/dist/pam/identity/drizzle/migrations/0003_open_shotgun.sql +1 -0
  63. package/dist/pam/identity/drizzle/migrations/0004_round_giant_girl.sql +1 -0
  64. package/dist/pam/identity/drizzle/migrations/meta/0001_snapshot.json +684 -0
  65. package/dist/pam/identity/drizzle/migrations/meta/0002_snapshot.json +690 -0
  66. package/dist/pam/identity/drizzle/migrations/meta/0003_snapshot.json +695 -0
  67. package/dist/pam/identity/drizzle/migrations/meta/0004_snapshot.json +680 -0
  68. package/dist/pam/identity/drizzle/migrations/meta/_journal.json +28 -0
  69. package/dist/pam/identity/plugin.d.ts.map +1 -1
  70. package/dist/pam/identity/plugin.js +15 -2
  71. package/dist/pam/identity/plugin.js.map +1 -1
  72. package/dist/pam/identity/react/account.d.ts +2 -0
  73. package/dist/pam/identity/react/account.d.ts.map +1 -1
  74. package/dist/pam/identity/react/auth.d.ts +9 -1
  75. package/dist/pam/identity/react/auth.d.ts.map +1 -1
  76. package/dist/pam/identity/router/index.d.ts +52 -2
  77. package/dist/pam/identity/router/index.d.ts.map +1 -1
  78. package/dist/pam/identity/router/index.js +28 -1
  79. package/dist/pam/identity/router/index.js.map +1 -1
  80. package/dist/pam/identity/schema/index.d.ts +212 -0
  81. package/dist/pam/identity/schema/index.d.ts.map +1 -1
  82. package/dist/pam/identity/schema/index.js +23 -0
  83. package/dist/pam/identity/schema/index.js.map +1 -1
  84. package/dist/pam/identity/service/identity.service.d.ts +9 -2
  85. package/dist/pam/identity/service/identity.service.d.ts.map +1 -1
  86. package/dist/pam/identity/service/identity.service.js +113 -30
  87. package/dist/pam/identity/service/identity.service.js.map +1 -1
  88. package/dist/pam/identity/service/phone-login.service.d.ts +53 -0
  89. package/dist/pam/identity/service/phone-login.service.d.ts.map +1 -0
  90. package/dist/pam/identity/service/phone-login.service.js +235 -0
  91. package/dist/pam/identity/service/phone-login.service.js.map +1 -0
  92. package/dist/pam/identity/service/rg-guard.service.d.ts +5 -0
  93. package/dist/pam/identity/service/rg-guard.service.d.ts.map +1 -0
  94. package/dist/pam/identity/service/rg-guard.service.js +4 -0
  95. package/dist/pam/identity/service/rg-guard.service.js.map +1 -0
  96. package/dist/server/auth/__tests__/auth.test.d.ts +2 -0
  97. package/dist/server/auth/__tests__/auth.test.d.ts.map +1 -0
  98. package/dist/server/auth/__tests__/auth.test.js +74 -0
  99. package/dist/server/auth/__tests__/auth.test.js.map +1 -0
  100. package/dist/server/auth/auth.d.ts +7 -0
  101. package/dist/server/auth/auth.d.ts.map +1 -1
  102. package/dist/server/auth/auth.js +37 -14
  103. package/dist/server/auth/auth.js.map +1 -1
  104. package/package.json +1 -1
@@ -8,6 +8,34 @@
8
8
  "when": 1783555225473,
9
9
  "tag": "0000_curved_tana_nile",
10
10
  "breakpoints": true
11
+ },
12
+ {
13
+ "idx": 1,
14
+ "version": "7",
15
+ "when": 1783611861777,
16
+ "tag": "0001_rainy_peter_quill",
17
+ "breakpoints": true
18
+ },
19
+ {
20
+ "idx": 2,
21
+ "version": "7",
22
+ "when": 1783944672839,
23
+ "tag": "0002_outstanding_patriot",
24
+ "breakpoints": true
25
+ },
26
+ {
27
+ "idx": 3,
28
+ "version": "7",
29
+ "when": 1784029716450,
30
+ "tag": "0003_open_shotgun",
31
+ "breakpoints": true
32
+ },
33
+ {
34
+ "idx": 4,
35
+ "version": "7",
36
+ "when": 1784032154664,
37
+ "tag": "0004_round_giant_girl",
38
+ "breakpoints": true
11
39
  }
12
40
  ]
13
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/pam/identity/plugin.ts"],"names":[],"mappings":";AAqBA,wBA+CG"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/pam/identity/plugin.ts"],"names":[],"mappings":";AA0BA,wBA0DG"}
@@ -1,6 +1,9 @@
1
- import { ADMIN_USER_DIRECTORY, IDENTITY_READER, KYC_ADAPTER, LOGIN_ENFORCEMENT, NOTIFICATION_DELIVERY_ADAPTER, SEND_EMAIL, IDENTITY_OPTIONS, RATE_LIMITER, PLATFORM_CONFIG, SESSION_COMMANDS, } from '@openora/core/contracts';
1
+ import { ADMIN_USER_DIRECTORY, IDENTITY_READER, KYC_ADAPTER, LOGIN_ENFORCEMENT, NOTIFICATION_DELIVERY_ADAPTER, SEND_EMAIL, EMAIL_TEMPLATE_RENDERER, IDENTITY_OPTIONS, RATE_LIMITER, PLATFORM_CONFIG, SESSION_COMMANDS, SMS_ADAPTER, } from '@openora/core/contracts';
2
2
  import { definePlugin, ADMIN_GUARD, EVENT_BUS, DRIZZLE } from '@openora/core/server';
3
3
  import { MockKycAdapter } from './adapters/mock/mock-kyc-adapter.js';
4
+ import { MockSmsAdapter } from './adapters/mock/mock-sms-adapter.js';
5
+ import { PhoneLoginService } from './service/phone-login.service.js';
6
+ import { DefaultEmailTemplateRenderer } from './adapters/default-email-template-renderer.js';
4
7
  import { DrizzleAdminUserDirectory } from './admin-user-directory.js';
5
8
  import { IdentityReaderService } from './adapters/identity-reader.service.js';
6
9
  import { createIdentityRouter } from './router/index.js';
@@ -11,6 +14,9 @@ export default definePlugin({
11
14
  id: 'identity',
12
15
  register(ctx) {
13
16
  ctx.provide(KYC_ADAPTER, () => new MockKycAdapter());
17
+ // Platform default SMS transport: logs the OTP to stdout. A consumer overlay
18
+ // rebinds SMS_ADAPTER to a real vendor (Twilio, AWS SNS) after this plugin.
19
+ ctx.provide(SMS_ADAPTER, () => new MockSmsAdapter());
14
20
  // The back-office depends on this port, not on the identity schema directly.
15
21
  ctx.provide(ADMIN_USER_DIRECTORY, (c) => new DrizzleAdminUserDirectory(c.get(DRIZZLE), c.get(EVENT_BUS)));
16
22
  // Read-only session queries for cross-module consumers (eg tag inactive evaluation).
@@ -19,6 +25,7 @@ export default definePlugin({
19
25
  ctx.provide(SEND_EMAIL, (c) => ({
20
26
  send: ({ to, subject, body }) => c.get(NOTIFICATION_DELIVERY_ADAPTER).sendEmail(to, subject, body),
21
27
  }));
28
+ ctx.provide(EMAIL_TEMPLATE_RENDERER, () => new DefaultEmailTemplateRenderer());
22
29
  // RG login-block writer. compliance drives it through the port, never the schema.
23
30
  ctx.provide(LOGIN_ENFORCEMENT, (c) => new LoginEnforcementService(c.get(DRIZZLE), new SessionService({ drizzle: c.get(DRIZZLE), events: c.get(EVENT_BUS) })));
24
31
  ctx.provide(SESSION_COMMANDS, (c) => {
@@ -31,10 +38,16 @@ export default definePlugin({
31
38
  drizzle: c.get(DRIZZLE),
32
39
  events: c.get(EVENT_BUS),
33
40
  email: c.get(SEND_EMAIL),
41
+ templateRenderer: c.get(EMAIL_TEMPLATE_RENDERER),
34
42
  options: c.has(IDENTITY_OPTIONS) ? c.get(IDENTITY_OPTIONS) : undefined,
35
43
  limiter: c.get(RATE_LIMITER),
36
44
  platformConfig: c.has(PLATFORM_CONFIG) ? c.get(PLATFORM_CONFIG) : undefined,
37
- }), new SessionService({ drizzle: c.get(DRIZZLE), events: c.get(EVENT_BUS) }), c.get(ADMIN_GUARD), c.get(EVENT_BUS)));
45
+ }), new SessionService({ drizzle: c.get(DRIZZLE), events: c.get(EVENT_BUS) }), new PhoneLoginService({
46
+ drizzle: c.get(DRIZZLE),
47
+ events: c.get(EVENT_BUS),
48
+ sms: c.get(SMS_ADAPTER),
49
+ limiter: c.get(RATE_LIMITER),
50
+ }), c.get(ADMIN_GUARD), c.get(EVENT_BUS)));
38
51
  },
39
52
  });
40
53
  //# sourceMappingURL=plugin.js.map
@@ -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":"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"}
@@ -32,6 +32,8 @@ export declare function useUpdateProfile(): import("@tanstack/react-query").UseM
32
32
  createdAt: string;
33
33
  updatedAt: string;
34
34
  image?: string | null | undefined;
35
+ phoneNumber?: string | null | undefined;
36
+ phoneVerified?: boolean | undefined;
35
37
  };
36
38
  }, Error, {
37
39
  name?: string | undefined;
@@ -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":"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"}
@@ -8,6 +8,8 @@ export declare function useCurrentUser(): import("@tanstack/react-query").UseQue
8
8
  createdAt: string;
9
9
  updatedAt: string;
10
10
  image?: string | null | undefined;
11
+ phoneNumber?: string | null | undefined;
12
+ phoneVerified?: boolean | undefined;
11
13
  } | null>, Error>;
12
14
  export declare function useLogin(): import("@tanstack/react-query").UseMutationResult<{
13
15
  user?: {
@@ -20,6 +22,8 @@ export declare function useLogin(): import("@tanstack/react-query").UseMutationR
20
22
  createdAt: string;
21
23
  updatedAt: string;
22
24
  image?: string | null | undefined;
25
+ phoneNumber?: string | null | undefined;
26
+ phoneVerified?: boolean | undefined;
23
27
  } | undefined;
24
28
  session?: {
25
29
  token: string;
@@ -45,6 +49,8 @@ export declare function useRegister(): import("@tanstack/react-query").UseMutati
45
49
  createdAt: string;
46
50
  updatedAt: string;
47
51
  image?: string | null | undefined;
52
+ phoneNumber?: string | null | undefined;
53
+ phoneVerified?: boolean | undefined;
48
54
  };
49
55
  }, Error, {
50
56
  email: string;
@@ -59,7 +65,9 @@ export declare function useRequestPasswordReset(): import("@tanstack/react-query
59
65
  export declare function useResetPassword(): import("@tanstack/react-query").UseMutationResult<{
60
66
  success: true;
61
67
  }, Error, {
62
- token: string;
68
+ email: string;
69
+ otp: string;
63
70
  newPassword: string;
71
+ token?: string | undefined;
64
72
  }, unknown>;
65
73
  //# sourceMappingURL=auth.d.ts.map
@@ -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"}
@@ -1,7 +1,8 @@
1
1
  import { type OssContext, AdminGuard, type EventBus } from '@openora/core/server';
2
+ import { PhoneLoginService } from '../service/phone-login.service.js';
2
3
  import { IdentityService } from '../service/identity.service.js';
3
4
  import { SessionService } from '../service/session.service.js';
4
- export declare function createIdentityRouter(identity: IdentityService, sessionSvc: SessionService, adminGuard: AdminGuard, eventBus: EventBus): {
5
+ export declare function createIdentityRouter(identity: IdentityService, sessionSvc: SessionService, phoneLogin: PhoneLoginService, adminGuard: AdminGuard, eventBus: EventBus): {
5
6
  register: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<OssContext & Record<never, never>, OssContext & Record<never, never>, OssContext>, OssContext, import("zod").ZodObject<{
6
7
  email: import("zod").ZodEmail;
7
8
  password: import("zod").ZodString;
@@ -19,6 +20,8 @@ export declare function createIdentityRouter(identity: IdentityService, sessionS
19
20
  system: "system";
20
21
  }>;
21
22
  language: import("zod").ZodString;
23
+ phoneNumber: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
24
+ phoneVerified: import("zod").ZodOptional<import("zod").ZodBoolean>;
22
25
  createdAt: import("zod").ZodISODateTime;
23
26
  updatedAt: import("zod").ZodISODateTime;
24
27
  }, import("zod/v4/core").$strip>;
@@ -40,6 +43,8 @@ export declare function createIdentityRouter(identity: IdentityService, sessionS
40
43
  system: "system";
41
44
  }>;
42
45
  language: import("zod").ZodString;
46
+ phoneNumber: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
47
+ phoneVerified: import("zod").ZodOptional<import("zod").ZodBoolean>;
43
48
  createdAt: import("zod").ZodISODateTime;
44
49
  updatedAt: import("zod").ZodISODateTime;
45
50
  }, import("zod/v4/core").$strip>>;
@@ -49,6 +54,39 @@ export declare function createIdentityRouter(identity: IdentityService, sessionS
49
54
  }, import("zod/v4/core").$strip>>;
50
55
  twoFactorRedirect: import("zod").ZodOptional<import("zod").ZodBoolean>;
51
56
  }, import("zod/v4/core").$strip>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
57
+ phoneLoginRequest: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<OssContext & Record<never, never>, OssContext & Record<never, never>, OssContext>, OssContext, import("zod").ZodObject<{
58
+ phone: import("zod").ZodString;
59
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
60
+ expiresAt: import("zod").ZodISODateTime;
61
+ resendAfter: import("zod").ZodISODateTime;
62
+ }, import("zod/v4/core").$strip>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
63
+ phoneLoginVerify: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<OssContext & Record<never, never>, OssContext & Record<never, never>, OssContext>, OssContext, import("zod").ZodObject<{
64
+ phone: import("zod").ZodString;
65
+ code: import("zod").ZodString;
66
+ rememberMe: import("zod").ZodOptional<import("zod").ZodBoolean>;
67
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
68
+ user: import("zod").ZodObject<{
69
+ id: import("zod").ZodUUID;
70
+ email: import("zod").ZodEmail;
71
+ name: import("zod").ZodString;
72
+ emailVerified: import("zod").ZodBoolean;
73
+ image: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodURL>>;
74
+ theme: import("zod").ZodEnum<{
75
+ light: "light";
76
+ dark: "dark";
77
+ system: "system";
78
+ }>;
79
+ language: import("zod").ZodString;
80
+ phoneNumber: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
81
+ phoneVerified: import("zod").ZodOptional<import("zod").ZodBoolean>;
82
+ createdAt: import("zod").ZodISODateTime;
83
+ updatedAt: import("zod").ZodISODateTime;
84
+ }, import("zod/v4/core").$strip>;
85
+ session: import("zod").ZodObject<{
86
+ token: import("zod").ZodString;
87
+ expiresAt: import("zod").ZodISODateTime;
88
+ }, import("zod/v4/core").$strip>;
89
+ }, import("zod/v4/core").$strip>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
52
90
  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<{
53
91
  success: import("zod").ZodLiteral<true>;
54
92
  }, import("zod/v4/core").$strip>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
@@ -64,6 +102,8 @@ export declare function createIdentityRouter(identity: IdentityService, sessionS
64
102
  system: "system";
65
103
  }>;
66
104
  language: import("zod").ZodString;
105
+ phoneNumber: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
106
+ phoneVerified: import("zod").ZodOptional<import("zod").ZodBoolean>;
67
107
  createdAt: import("zod").ZodISODateTime;
68
108
  updatedAt: import("zod").ZodISODateTime;
69
109
  }, import("zod/v4/core").$strip>>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
@@ -97,8 +137,16 @@ export declare function createIdentityRouter(identity: IdentityService, sessionS
97
137
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
98
138
  success: import("zod").ZodLiteral<true>;
99
139
  }, import("zod/v4/core").$strip>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
140
+ verifyPasswordResetOtp: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<OssContext & Record<never, never>, OssContext & Record<never, never>, OssContext>, OssContext, import("zod").ZodObject<{
141
+ email: import("zod").ZodEmail;
142
+ otp: import("zod").ZodString;
143
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
144
+ success: import("zod").ZodLiteral<true>;
145
+ }, import("zod/v4/core").$strip>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
100
146
  resetPassword: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<OssContext & Record<never, never>, OssContext & Record<never, never>, OssContext>, OssContext, import("zod").ZodObject<{
101
- token: import("zod").ZodString;
147
+ email: import("zod").ZodEmail;
148
+ otp: import("zod").ZodString;
149
+ token: import("zod").ZodOptional<import("zod").ZodString>;
102
150
  newPassword: import("zod").ZodString;
103
151
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
104
152
  success: import("zod").ZodLiteral<true>;
@@ -144,6 +192,8 @@ export declare function createIdentityRouter(identity: IdentityService, sessionS
144
192
  system: "system";
145
193
  }>;
146
194
  language: import("zod").ZodString;
195
+ phoneNumber: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
196
+ phoneVerified: import("zod").ZodOptional<import("zod").ZodBoolean>;
147
197
  createdAt: import("zod").ZodISODateTime;
148
198
  updatedAt: import("zod").ZodISODateTime;
149
199
  }, import("zod/v4/core").$strip>;
@@ -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,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,UAAU,EACtB,QAAQ,EAAE,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwHnB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/pam/identity/router/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,UAAU,EAEf,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;AAerF,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,cAAc,EAC1B,UAAU,EAAE,iBAAiB,EAC7B,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8InB"}
@@ -4,11 +4,37 @@ import { identityContract } from '../contract/index.js';
4
4
  import { UserNotFoundError } from '../service/identity.service.js';
5
5
  import { SessionNotFoundError } from '../service/session.service.js';
6
6
  import { UnsupportedLanguageError } from '../../shared/language.js';
7
- export function createIdentityRouter(identity, sessionSvc, adminGuard, eventBus) {
7
+ function nodeForwardedFor(headers) {
8
+ const fwd = headers['x-forwarded-for'];
9
+ const first = Array.isArray(fwd) ? fwd[0] : fwd;
10
+ const real = headers['x-real-ip'];
11
+ return first?.split(',')[0]?.trim() || (Array.isArray(real) ? real[0] : real) || null;
12
+ }
13
+ function nodeUserAgent(headers) {
14
+ const ua = headers['user-agent'];
15
+ return (Array.isArray(ua) ? ua[0] : ua) ?? null;
16
+ }
17
+ export function createIdentityRouter(identity, sessionSvc, phoneLogin, adminGuard, eventBus) {
8
18
  const os = implement(identityContract).$context();
9
19
  return os.router({
10
20
  register: os.register.handler(({ input, context }) => identity.register(input, context.request.headers, context.resHeaders ?? new Headers())),
11
21
  login: os.login.handler(({ input, context }) => identity.login(input, context.request.headers, context.resHeaders ?? new Headers())),
22
+ phoneLoginRequest: os.phoneLoginRequest.handler(({ input, context }) => {
23
+ const h = context.request.headers;
24
+ return phoneLogin.requestOtp({
25
+ ...input,
26
+ ip: nodeForwardedFor(h),
27
+ userAgent: nodeUserAgent(h),
28
+ });
29
+ }),
30
+ phoneLoginVerify: os.phoneLoginVerify.handler(({ input, context }) => {
31
+ const h = context.request.headers;
32
+ return phoneLogin.verifyOtp({
33
+ ...input,
34
+ ip: nodeForwardedFor(h),
35
+ userAgent: nodeUserAgent(h),
36
+ });
37
+ }),
12
38
  logout: os.logout.handler(({ context }) => identity.logout(context.request.headers, context.resHeaders ?? new Headers())),
13
39
  me: os.me.handler(({ context }) => {
14
40
  // Disable browser caching for the session state query. This prevents aggressive
@@ -44,6 +70,7 @@ export function createIdentityRouter(identity, sessionSvc, adminGuard, eventBus)
44
70
  verify2fa: os.verify2fa.handler(({ input, context }) => identity.verifyTwoFactor(input, context.request.headers, context.resHeaders ?? new Headers())),
45
71
  disable2fa: os.disable2fa.handler(({ input, context }) => identity.disableTwoFactor(input, context.request.headers, context.resHeaders ?? new Headers())),
46
72
  requestPasswordReset: os.requestPasswordReset.handler(({ input }) => identity.requestPasswordReset(input)),
73
+ verifyPasswordResetOtp: os.verifyPasswordResetOtp.handler(({ input }) => identity.verifyPasswordResetOtp(input)),
47
74
  resetPassword: os.resetPassword.handler(({ input }) => identity.resetPassword(input)),
48
75
  changePassword: os.changePassword.handler(({ input, context }) => identity.changePassword(input, context.request.headers, context.resHeaders ?? new Headers())),
49
76
  sendEmailVerification: os.sendEmailVerification.handler(({ context }) => identity.sendEmailVerification(context.request.headers)),
@@ -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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"}
@@ -224,6 +224,57 @@ export declare const user: import("drizzle-orm/pg-core").PgTableWithColumns<{
224
224
  identity: undefined;
225
225
  generated: undefined;
226
226
  }, {}, {}>;
227
+ phoneNumber: import("drizzle-orm/pg-core").PgColumn<{
228
+ name: "phoneNumber";
229
+ tableName: "user";
230
+ dataType: "string";
231
+ columnType: "PgText";
232
+ data: string;
233
+ driverParam: string;
234
+ notNull: false;
235
+ hasDefault: false;
236
+ isPrimaryKey: false;
237
+ isAutoincrement: false;
238
+ hasRuntimeDefault: false;
239
+ enumValues: [string, ...string[]];
240
+ baseColumn: never;
241
+ identity: undefined;
242
+ generated: undefined;
243
+ }, {}, {}>;
244
+ phoneVerified: import("drizzle-orm/pg-core").PgColumn<{
245
+ name: "phoneVerified";
246
+ tableName: "user";
247
+ dataType: "boolean";
248
+ columnType: "PgBoolean";
249
+ data: boolean;
250
+ driverParam: boolean;
251
+ notNull: true;
252
+ hasDefault: true;
253
+ isPrimaryKey: false;
254
+ isAutoincrement: false;
255
+ hasRuntimeDefault: false;
256
+ enumValues: undefined;
257
+ baseColumn: never;
258
+ identity: undefined;
259
+ generated: undefined;
260
+ }, {}, {}>;
261
+ phoneVerifiedAt: import("drizzle-orm/pg-core").PgColumn<{
262
+ name: "phoneVerifiedAt";
263
+ tableName: "user";
264
+ dataType: "date";
265
+ columnType: "PgTimestamp";
266
+ data: Date;
267
+ driverParam: string;
268
+ notNull: false;
269
+ hasDefault: false;
270
+ isPrimaryKey: false;
271
+ isAutoincrement: false;
272
+ hasRuntimeDefault: false;
273
+ enumValues: undefined;
274
+ baseColumn: never;
275
+ identity: undefined;
276
+ generated: undefined;
277
+ }, {}, {}>;
227
278
  failedLoginAttempts: import("drizzle-orm/pg-core").PgColumn<{
228
279
  name: "failedLoginAttempts";
229
280
  tableName: "user";
@@ -258,6 +309,40 @@ export declare const user: import("drizzle-orm/pg-core").PgTableWithColumns<{
258
309
  identity: undefined;
259
310
  generated: undefined;
260
311
  }, {}, {}>;
312
+ lockoutCount: import("drizzle-orm/pg-core").PgColumn<{
313
+ name: "lockoutCount";
314
+ tableName: "user";
315
+ dataType: "number";
316
+ columnType: "PgInteger";
317
+ data: number;
318
+ driverParam: string | number;
319
+ notNull: true;
320
+ hasDefault: true;
321
+ isPrimaryKey: false;
322
+ isAutoincrement: false;
323
+ hasRuntimeDefault: false;
324
+ enumValues: undefined;
325
+ baseColumn: never;
326
+ identity: undefined;
327
+ generated: undefined;
328
+ }, {}, {}>;
329
+ lastLockoutAt: import("drizzle-orm/pg-core").PgColumn<{
330
+ name: "lastLockoutAt";
331
+ tableName: "user";
332
+ dataType: "date";
333
+ columnType: "PgTimestamp";
334
+ data: Date;
335
+ driverParam: string;
336
+ notNull: false;
337
+ hasDefault: false;
338
+ isPrimaryKey: false;
339
+ isAutoincrement: false;
340
+ hasRuntimeDefault: false;
341
+ enumValues: undefined;
342
+ baseColumn: never;
343
+ identity: undefined;
344
+ generated: undefined;
345
+ }, {}, {}>;
261
346
  rgBlocked: import("drizzle-orm/pg-core").PgColumn<{
262
347
  name: "rgBlocked";
263
348
  tableName: "user";
@@ -901,8 +986,135 @@ export declare const twoFactor: import("drizzle-orm/pg-core").PgTableWithColumns
901
986
  };
902
987
  dialect: "pg";
903
988
  }>;
989
+ export declare const smsOtpSession: import("drizzle-orm/pg-core").PgTableWithColumns<{
990
+ name: "sms_otp_session";
991
+ schema: undefined;
992
+ columns: {
993
+ id: import("drizzle-orm/pg-core").PgColumn<{
994
+ name: "id";
995
+ tableName: "sms_otp_session";
996
+ dataType: "string";
997
+ columnType: "PgUUID";
998
+ data: string;
999
+ driverParam: string;
1000
+ notNull: true;
1001
+ hasDefault: true;
1002
+ isPrimaryKey: true;
1003
+ isAutoincrement: false;
1004
+ hasRuntimeDefault: false;
1005
+ enumValues: undefined;
1006
+ baseColumn: never;
1007
+ identity: undefined;
1008
+ generated: undefined;
1009
+ }, {}, {}>;
1010
+ userId: import("drizzle-orm/pg-core").PgColumn<{
1011
+ name: "userId";
1012
+ tableName: "sms_otp_session";
1013
+ dataType: "string";
1014
+ columnType: "PgUUID";
1015
+ data: string;
1016
+ driverParam: string;
1017
+ notNull: true;
1018
+ hasDefault: false;
1019
+ isPrimaryKey: false;
1020
+ isAutoincrement: false;
1021
+ hasRuntimeDefault: false;
1022
+ enumValues: undefined;
1023
+ baseColumn: never;
1024
+ identity: undefined;
1025
+ generated: undefined;
1026
+ }, {}, {}>;
1027
+ phone: import("drizzle-orm/pg-core").PgColumn<{
1028
+ name: "phone";
1029
+ tableName: "sms_otp_session";
1030
+ dataType: "string";
1031
+ columnType: "PgText";
1032
+ data: string;
1033
+ driverParam: string;
1034
+ notNull: true;
1035
+ hasDefault: false;
1036
+ isPrimaryKey: false;
1037
+ isAutoincrement: false;
1038
+ hasRuntimeDefault: false;
1039
+ enumValues: [string, ...string[]];
1040
+ baseColumn: never;
1041
+ identity: undefined;
1042
+ generated: undefined;
1043
+ }, {}, {}>;
1044
+ codeHash: import("drizzle-orm/pg-core").PgColumn<{
1045
+ name: "codeHash";
1046
+ tableName: "sms_otp_session";
1047
+ dataType: "string";
1048
+ columnType: "PgText";
1049
+ data: string;
1050
+ driverParam: string;
1051
+ notNull: true;
1052
+ hasDefault: false;
1053
+ isPrimaryKey: false;
1054
+ isAutoincrement: false;
1055
+ hasRuntimeDefault: false;
1056
+ enumValues: [string, ...string[]];
1057
+ baseColumn: never;
1058
+ identity: undefined;
1059
+ generated: undefined;
1060
+ }, {}, {}>;
1061
+ expiresAt: import("drizzle-orm/pg-core").PgColumn<{
1062
+ name: "expiresAt";
1063
+ tableName: "sms_otp_session";
1064
+ dataType: "date";
1065
+ columnType: "PgTimestamp";
1066
+ data: Date;
1067
+ driverParam: string;
1068
+ notNull: true;
1069
+ hasDefault: false;
1070
+ isPrimaryKey: false;
1071
+ isAutoincrement: false;
1072
+ hasRuntimeDefault: false;
1073
+ enumValues: undefined;
1074
+ baseColumn: never;
1075
+ identity: undefined;
1076
+ generated: undefined;
1077
+ }, {}, {}>;
1078
+ failedAttempts: import("drizzle-orm/pg-core").PgColumn<{
1079
+ name: "failedAttempts";
1080
+ tableName: "sms_otp_session";
1081
+ dataType: "number";
1082
+ columnType: "PgInteger";
1083
+ data: number;
1084
+ driverParam: string | number;
1085
+ notNull: true;
1086
+ hasDefault: true;
1087
+ isPrimaryKey: false;
1088
+ isAutoincrement: false;
1089
+ hasRuntimeDefault: false;
1090
+ enumValues: undefined;
1091
+ baseColumn: never;
1092
+ identity: undefined;
1093
+ generated: undefined;
1094
+ }, {}, {}>;
1095
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
1096
+ name: "createdAt";
1097
+ tableName: "sms_otp_session";
1098
+ dataType: "date";
1099
+ columnType: "PgTimestamp";
1100
+ data: Date;
1101
+ driverParam: string;
1102
+ notNull: true;
1103
+ hasDefault: true;
1104
+ isPrimaryKey: false;
1105
+ isAutoincrement: false;
1106
+ hasRuntimeDefault: false;
1107
+ enumValues: undefined;
1108
+ baseColumn: never;
1109
+ identity: undefined;
1110
+ generated: undefined;
1111
+ }, {}, {}>;
1112
+ };
1113
+ dialect: "pg";
1114
+ }>;
904
1115
  export type User = typeof user.$inferSelect;
905
1116
  export type Session = typeof session.$inferSelect;
1117
+ export type SmsOtpSession = typeof smsOtpSession.$inferSelect;
906
1118
  export type Account = typeof account.$inferSelect;
907
1119
  export type Verification = typeof verification.$inferSelect;
908
1120
  export type TwoFactor = typeof twoFactor.$inferSelect;
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoChB,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;AAEF,MAAM,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,YAAY,CAAC;AAC5C,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,YAAY,CAAC;AAClD,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4ChB,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"}
@@ -21,8 +21,16 @@ export const user = pgTable('user', {
21
21
  // Use logical JS property names only; drizzle.config.ts maps camelCase -> snake_case
22
22
  // for SQL identifiers so migrations and runtime are consistent.
23
23
  twoFactorEnabled: boolean().default(false),
24
+ phoneNumber: text().unique(),
25
+ phoneVerified: boolean().notNull().default(false),
26
+ phoneVerifiedAt: timestamp({ withTimezone: true }),
24
27
  failedLoginAttempts: integer().notNull().default(0),
25
28
  lockoutUntil: timestamp({ withTimezone: true }),
29
+ // Progressive lockout tiers: `lockoutCount` counts lockouts inside a rolling 24h
30
+ // window (reset once `lastLockoutAt` falls outside it), escalating the duration
31
+ // 1min -> 5min -> 15min. Shared by every login method.
32
+ lockoutCount: integer().notNull().default(0),
33
+ lastLockoutAt: timestamp({ withTimezone: true }),
26
34
  // Responsible-Gambling login block (cooling-off / self-exclusion). Written only via
27
35
  // the LOGIN_ENFORCEMENT port. `rgBlockedUntil` null while blocked = indefinite
28
36
  // (self-exclusion); a Date is the cooling-off expiry the login gate auto-clears.
@@ -92,4 +100,19 @@ export const twoFactor = pgTable('two_factor', {
92
100
  index('two_factor_user_id_idx').on(t.userId),
93
101
  index('two_factor_secret_idx').on(t.secret),
94
102
  ]);
103
+ // One active OTP per user: `requestOtp` upserts by `userId`, so a new code overwrites the previous one.
104
+ // `codeHash` is SHA-256 of the 6-digit code - the plaintext OTP is never stored.
105
+ // `failedAttempts` caps guessing at 5 per session.
106
+ export const smsOtpSession = pgTable('sms_otp_session', {
107
+ id: uuid().primaryKey().defaultRandom(),
108
+ userId: uuid()
109
+ .notNull()
110
+ .unique()
111
+ .references(() => user.id, { onDelete: 'cascade' }),
112
+ phone: text().notNull(),
113
+ codeHash: text().notNull(),
114
+ expiresAt: timestamp({ withTimezone: true }).notNull(),
115
+ failedAttempts: integer().notNull().default(0),
116
+ createdAt: timestamp({ withTimezone: true }).notNull().defaultNow(),
117
+ }, (t) => [index('sms_otp_session_phone_idx').on(t.phone)]);
95
118
  //# sourceMappingURL=index.js.map