@openora/core 0.4.1-canary.100 → 0.4.1-canary.102

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 (117) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/admin-console/plugin.d.ts +1 -1
  3. package/dist/analytics/plugin.d.ts +1 -1
  4. package/dist/audit/__tests__/map-event.test.js +27 -0
  5. package/dist/audit/__tests__/map-event.test.js.map +1 -1
  6. package/dist/audit/plugin.d.ts +1 -1
  7. package/dist/audit/plugin.d.ts.map +1 -1
  8. package/dist/audit/plugin.js +7 -0
  9. package/dist/audit/plugin.js.map +1 -1
  10. package/dist/casino/gaming/plugin.d.ts +1 -1
  11. package/dist/casino/lobby/plugin.d.ts +1 -1
  12. package/dist/cms/plugin.d.ts +1 -1
  13. package/dist/compliance/plugin.d.ts +1 -1
  14. package/dist/contracts/__tests__/identity.test.d.ts +2 -0
  15. package/dist/contracts/__tests__/identity.test.d.ts.map +1 -0
  16. package/dist/contracts/__tests__/identity.test.js +49 -0
  17. package/dist/contracts/__tests__/identity.test.js.map +1 -0
  18. package/dist/contracts/__tests__/player.test.d.ts +2 -0
  19. package/dist/contracts/__tests__/player.test.d.ts.map +1 -0
  20. package/dist/contracts/__tests__/player.test.js +51 -0
  21. package/dist/contracts/__tests__/player.test.js.map +1 -0
  22. package/dist/contracts/adapters/email-template.d.ts +6 -3
  23. package/dist/contracts/adapters/email-template.d.ts.map +1 -1
  24. package/dist/contracts/adapters/email-template.js +12 -1
  25. package/dist/contracts/adapters/email-template.js.map +1 -1
  26. package/dist/contracts/schemas/events.d.ts +17 -0
  27. package/dist/contracts/schemas/events.d.ts.map +1 -1
  28. package/dist/contracts/schemas/events.js +14 -0
  29. package/dist/contracts/schemas/events.js.map +1 -1
  30. package/dist/contracts/schemas/identity.d.ts +32 -1
  31. package/dist/contracts/schemas/identity.d.ts.map +1 -1
  32. package/dist/contracts/schemas/identity.js +33 -6
  33. package/dist/contracts/schemas/identity.js.map +1 -1
  34. package/dist/contracts/schemas/platform-config.d.ts +3 -3
  35. package/dist/contracts/schemas/platform-config.d.ts.map +1 -1
  36. package/dist/contracts/schemas/platform-config.js +5 -2
  37. package/dist/contracts/schemas/platform-config.js.map +1 -1
  38. package/dist/contracts/schemas/player.d.ts +23 -1
  39. package/dist/contracts/schemas/player.d.ts.map +1 -1
  40. package/dist/contracts/schemas/player.js +43 -5
  41. package/dist/contracts/schemas/player.js.map +1 -1
  42. package/dist/engagement/chat/plugin.d.ts +1 -1
  43. package/dist/engagement/chat-commands/plugin.d.ts +1 -1
  44. package/dist/engagement/notifications/plugin.d.ts +1 -1
  45. package/dist/engagement/social/plugin.d.ts +1 -1
  46. package/dist/engagement/social-transfers/plugin.d.ts +1 -1
  47. package/dist/iam/plugin.d.ts +1 -1
  48. package/dist/pam/identity/__tests__/identity.rate-limit.int.test.js +10 -9
  49. package/dist/pam/identity/__tests__/identity.rate-limit.int.test.js.map +1 -1
  50. package/dist/pam/identity/__tests__/identity.registration-gates.int.test.js +25 -1
  51. package/dist/pam/identity/__tests__/identity.registration-gates.int.test.js.map +1 -1
  52. package/dist/pam/identity/adapters/__tests__/default-email-template-renderer.test.js +11 -3
  53. package/dist/pam/identity/adapters/__tests__/default-email-template-renderer.test.js.map +1 -1
  54. package/dist/pam/identity/contract/index.d.ts +28 -3
  55. package/dist/pam/identity/contract/index.d.ts.map +1 -1
  56. package/dist/pam/identity/contract/index.js +12 -2
  57. package/dist/pam/identity/contract/index.js.map +1 -1
  58. package/dist/pam/identity/plugin.d.ts +1 -1
  59. package/dist/pam/identity/react/account.d.ts +24 -3
  60. package/dist/pam/identity/react/account.d.ts.map +1 -1
  61. package/dist/pam/identity/router/index.d.ts +28 -3
  62. package/dist/pam/identity/router/index.d.ts.map +1 -1
  63. package/dist/pam/identity/router/index.js +2 -2
  64. package/dist/pam/identity/router/index.js.map +1 -1
  65. package/dist/pam/identity/service/identity.service.d.ts +55 -9
  66. package/dist/pam/identity/service/identity.service.d.ts.map +1 -1
  67. package/dist/pam/identity/service/identity.service.js +220 -120
  68. package/dist/pam/identity/service/identity.service.js.map +1 -1
  69. package/dist/pam/identity/service/phone-login.service.d.ts.map +1 -1
  70. package/dist/pam/identity/service/phone-login.service.js +13 -43
  71. package/dist/pam/identity/service/phone-login.service.js.map +1 -1
  72. package/dist/pam/identity/service/rg-guard.service.d.ts +32 -0
  73. package/dist/pam/identity/service/rg-guard.service.d.ts.map +1 -1
  74. package/dist/pam/identity/service/rg-guard.service.js +56 -0
  75. package/dist/pam/identity/service/rg-guard.service.js.map +1 -1
  76. package/dist/pam/player-management/contract/index.d.ts +20 -0
  77. package/dist/pam/player-management/contract/index.d.ts.map +1 -1
  78. package/dist/pam/player-management/plugin.d.ts +1 -1
  79. package/dist/pam/player-management/router/index.d.ts +16 -0
  80. package/dist/pam/player-management/router/index.d.ts.map +1 -1
  81. package/dist/pam/player-management/service/player.service.d.ts +20 -0
  82. package/dist/pam/player-management/service/player.service.d.ts.map +1 -1
  83. package/dist/pam/player-note/plugin.d.ts +1 -1
  84. package/dist/pam/profile/__tests__/profile.service.int.test.js +45 -0
  85. package/dist/pam/profile/__tests__/profile.service.int.test.js.map +1 -1
  86. package/dist/pam/profile/contract/index.d.ts +13 -1
  87. package/dist/pam/profile/contract/index.d.ts.map +1 -1
  88. package/dist/pam/profile/drizzle/migrations/0003_absurd_morbius.sql +4 -0
  89. package/dist/pam/profile/drizzle/migrations/meta/0003_snapshot.json +224 -0
  90. package/dist/pam/profile/drizzle/migrations/meta/_journal.json +7 -0
  91. package/dist/pam/profile/plugin.d.ts +1 -1
  92. package/dist/pam/profile/react/profile.d.ts +13 -1
  93. package/dist/pam/profile/react/profile.d.ts.map +1 -1
  94. package/dist/pam/profile/router/index.d.ts +13 -1
  95. package/dist/pam/profile/router/index.d.ts.map +1 -1
  96. package/dist/pam/profile/schema/index.d.ts +68 -0
  97. package/dist/pam/profile/schema/index.d.ts.map +1 -1
  98. package/dist/pam/profile/schema/index.js +10 -1
  99. package/dist/pam/profile/schema/index.js.map +1 -1
  100. package/dist/pam/profile/service/profile.service.d.ts +8 -0
  101. package/dist/pam/profile/service/profile.service.d.ts.map +1 -1
  102. package/dist/pam/shared/player-mapper.d.ts +4 -0
  103. package/dist/pam/shared/player-mapper.d.ts.map +1 -1
  104. package/dist/pam/shared/player-mapper.js +6 -0
  105. package/dist/pam/shared/player-mapper.js.map +1 -1
  106. package/dist/pam/tag/plugin.d.ts +1 -1
  107. package/dist/server/auth/__tests__/auth.test.js +60 -1
  108. package/dist/server/auth/__tests__/auth.test.js.map +1 -1
  109. package/dist/server/auth/auth.d.ts +13 -1
  110. package/dist/server/auth/auth.d.ts.map +1 -1
  111. package/dist/server/auth/auth.js +20 -17
  112. package/dist/server/auth/auth.js.map +1 -1
  113. package/dist/server/runtime/core-token-catalog.d.ts +1 -1
  114. package/dist/testing/seed-player.d.ts +4 -0
  115. package/dist/testing/seed-player.d.ts.map +1 -1
  116. package/dist/wallet/plugin.d.ts +1 -1
  117. package/package.json +1 -1
@@ -0,0 +1,224 @@
1
+ {
2
+ "id": "3a65a978-c6e6-4a7d-8a4b-138c529b8ba1",
3
+ "prevId": "f0525db2-f419-41f1-913d-ddf84c172e55",
4
+ "version": "7",
5
+ "dialect": "postgresql",
6
+ "tables": {
7
+ "public.player": {
8
+ "name": "player",
9
+ "schema": "",
10
+ "columns": {
11
+ "id": {
12
+ "name": "id",
13
+ "type": "uuid",
14
+ "primaryKey": true,
15
+ "notNull": true,
16
+ "default": "gen_random_uuid()"
17
+ },
18
+ "user_id": {
19
+ "name": "user_id",
20
+ "type": "uuid",
21
+ "primaryKey": false,
22
+ "notNull": true
23
+ },
24
+ "first_name": {
25
+ "name": "first_name",
26
+ "type": "text",
27
+ "primaryKey": false,
28
+ "notNull": false
29
+ },
30
+ "last_name": {
31
+ "name": "last_name",
32
+ "type": "text",
33
+ "primaryKey": false,
34
+ "notNull": false
35
+ },
36
+ "date_of_birth": {
37
+ "name": "date_of_birth",
38
+ "type": "date",
39
+ "primaryKey": false,
40
+ "notNull": false
41
+ },
42
+ "phone": {
43
+ "name": "phone",
44
+ "type": "text",
45
+ "primaryKey": false,
46
+ "notNull": false
47
+ },
48
+ "country": {
49
+ "name": "country",
50
+ "type": "text",
51
+ "primaryKey": false,
52
+ "notNull": false
53
+ },
54
+ "currency": {
55
+ "name": "currency",
56
+ "type": "text",
57
+ "primaryKey": false,
58
+ "notNull": true,
59
+ "default": "'USD'"
60
+ },
61
+ "status": {
62
+ "name": "status",
63
+ "type": "player_status",
64
+ "typeSchema": "public",
65
+ "primaryKey": false,
66
+ "notNull": true,
67
+ "default": "'active'"
68
+ },
69
+ "kyc_status": {
70
+ "name": "kyc_status",
71
+ "type": "kyc_status",
72
+ "typeSchema": "public",
73
+ "primaryKey": false,
74
+ "notNull": true,
75
+ "default": "'pending'"
76
+ },
77
+ "level": {
78
+ "name": "level",
79
+ "type": "integer",
80
+ "primaryKey": false,
81
+ "notNull": true,
82
+ "default": 1
83
+ },
84
+ "total_wagered": {
85
+ "name": "total_wagered",
86
+ "type": "numeric(18, 2)",
87
+ "primaryKey": false,
88
+ "notNull": true,
89
+ "default": "'0'"
90
+ },
91
+ "total_deposits": {
92
+ "name": "total_deposits",
93
+ "type": "numeric(18, 2)",
94
+ "primaryKey": false,
95
+ "notNull": true,
96
+ "default": "'0'"
97
+ },
98
+ "last_seen_at": {
99
+ "name": "last_seen_at",
100
+ "type": "timestamp with time zone",
101
+ "primaryKey": false,
102
+ "notNull": false
103
+ },
104
+ "terms_version": {
105
+ "name": "terms_version",
106
+ "type": "text",
107
+ "primaryKey": false,
108
+ "notNull": false
109
+ },
110
+ "terms_accepted_at": {
111
+ "name": "terms_accepted_at",
112
+ "type": "timestamp with time zone",
113
+ "primaryKey": false,
114
+ "notNull": false
115
+ },
116
+ "age_accepted_at": {
117
+ "name": "age_accepted_at",
118
+ "type": "timestamp with time zone",
119
+ "primaryKey": false,
120
+ "notNull": false
121
+ },
122
+ "registration_ip": {
123
+ "name": "registration_ip",
124
+ "type": "text",
125
+ "primaryKey": false,
126
+ "notNull": false
127
+ },
128
+ "registration_user_agent": {
129
+ "name": "registration_user_agent",
130
+ "type": "text",
131
+ "primaryKey": false,
132
+ "notNull": false
133
+ },
134
+ "created_at": {
135
+ "name": "created_at",
136
+ "type": "timestamp with time zone",
137
+ "primaryKey": false,
138
+ "notNull": true,
139
+ "default": "now()"
140
+ },
141
+ "updated_at": {
142
+ "name": "updated_at",
143
+ "type": "timestamp with time zone",
144
+ "primaryKey": false,
145
+ "notNull": true
146
+ }
147
+ },
148
+ "indexes": {
149
+ "player_status_idx": {
150
+ "name": "player_status_idx",
151
+ "columns": [
152
+ {
153
+ "expression": "status",
154
+ "isExpression": false,
155
+ "asc": true,
156
+ "nulls": "last"
157
+ }
158
+ ],
159
+ "isUnique": false,
160
+ "concurrently": false,
161
+ "method": "btree",
162
+ "with": {}
163
+ },
164
+ "player_created_at_idx": {
165
+ "name": "player_created_at_idx",
166
+ "columns": [
167
+ {
168
+ "expression": "created_at",
169
+ "isExpression": false,
170
+ "asc": true,
171
+ "nulls": "last"
172
+ }
173
+ ],
174
+ "isUnique": false,
175
+ "concurrently": false,
176
+ "method": "btree",
177
+ "with": {}
178
+ }
179
+ },
180
+ "foreignKeys": {},
181
+ "compositePrimaryKeys": {},
182
+ "uniqueConstraints": {
183
+ "player_user_id_unique": {
184
+ "name": "player_user_id_unique",
185
+ "nullsNotDistinct": false,
186
+ "columns": ["user_id"]
187
+ }
188
+ },
189
+ "policies": {},
190
+ "checkConstraints": {},
191
+ "isRLSEnabled": false
192
+ }
193
+ },
194
+ "enums": {
195
+ "public.kyc_status": {
196
+ "name": "kyc_status",
197
+ "schema": "public",
198
+ "values": [
199
+ "not_started",
200
+ "pending",
201
+ "approved",
202
+ "verified",
203
+ "rejected",
204
+ "resubmission_requested",
205
+ "manually_overridden"
206
+ ]
207
+ },
208
+ "public.player_status": {
209
+ "name": "player_status",
210
+ "schema": "public",
211
+ "values": ["active", "dormant", "self_excluded", "suspended", "closed"]
212
+ }
213
+ },
214
+ "schemas": {},
215
+ "sequences": {},
216
+ "roles": {},
217
+ "policies": {},
218
+ "views": {},
219
+ "_meta": {
220
+ "columns": {},
221
+ "schemas": {},
222
+ "tables": {}
223
+ }
224
+ }
@@ -22,6 +22,13 @@
22
22
  "when": 1787339175627,
23
23
  "tag": "0002_sour_alex_wilder",
24
24
  "breakpoints": true
25
+ },
26
+ {
27
+ "idx": 3,
28
+ "version": "7",
29
+ "when": 1787589924992,
30
+ "tag": "0003_absurd_morbius",
31
+ "breakpoints": true
25
32
  }
26
33
  ]
27
34
  }
@@ -110,7 +110,7 @@ declare const _default: {
110
110
  } | undefined;
111
111
  registration?: {
112
112
  termsVersion: string;
113
- webUrl: string;
113
+ requireEmailVerification: boolean;
114
114
  } | undefined;
115
115
  supportedLanguages?: string[] | undefined;
116
116
  }, string>;
@@ -5,6 +5,10 @@ export declare function usePlayerProfile(): import("@tanstack/react-query").UseQ
5
5
  userId: string;
6
6
  username: string;
7
7
  email: string;
8
+ firstName: string | null;
9
+ lastName: string | null;
10
+ dateOfBirth: string | null;
11
+ phone: string | null;
8
12
  country: string | null;
9
13
  currency: string;
10
14
  status: "active" | "self_excluded" | "dormant" | "suspended" | "closed";
@@ -21,6 +25,10 @@ export declare function useUpdatePlayerProfile(): import("@tanstack/react-query"
21
25
  userId: string;
22
26
  username: string;
23
27
  email: string;
28
+ firstName: string | null;
29
+ lastName: string | null;
30
+ dateOfBirth: string | null;
31
+ phone: string | null;
24
32
  country: string | null;
25
33
  currency: string;
26
34
  status: "active" | "self_excluded" | "dormant" | "suspended" | "closed";
@@ -32,7 +40,11 @@ export declare function useUpdatePlayerProfile(): import("@tanstack/react-query"
32
40
  createdAt: string;
33
41
  updatedAt: string;
34
42
  }, Error, {
35
- currency?: string | undefined;
43
+ firstName?: string | null | undefined;
44
+ lastName?: string | null | undefined;
45
+ dateOfBirth?: string | null | undefined;
46
+ phone?: string | null | undefined;
36
47
  country?: string | null | undefined;
48
+ currency?: string | undefined;
37
49
  }, unknown>;
38
50
  //# sourceMappingURL=profile.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../../src/pam/profile/react/profile.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAItD,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAEnC,wBAAgB,gBAAgB;;;;;;;;;;;;;;;WAG/B;AAED,wBAAgB,sBAAsB;;;;;;;;;;;;;;;;;;YAOrC"}
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../../src/pam/profile/react/profile.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAItD,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAEnC,wBAAgB,gBAAgB;;;;;;;;;;;;;;;;;;;WAG/B;AAED,wBAAgB,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;YAOrC"}
@@ -6,6 +6,10 @@ export declare function createProfileRouter(profile: ProfileService): {
6
6
  userId: import("zod").ZodUUID;
7
7
  username: import("zod").ZodString;
8
8
  email: import("zod").ZodString;
9
+ firstName: import("zod").ZodNullable<import("zod").ZodString>;
10
+ lastName: import("zod").ZodNullable<import("zod").ZodString>;
11
+ dateOfBirth: import("zod").ZodNullable<import("zod").ZodISODate>;
12
+ phone: import("zod").ZodNullable<import("zod").ZodString>;
9
13
  country: import("zod").ZodNullable<import("zod").ZodString>;
10
14
  currency: import("zod").ZodString;
11
15
  status: import("zod").ZodEnum<{
@@ -32,13 +36,21 @@ export declare function createProfileRouter(profile: ProfileService): {
32
36
  updatedAt: import("zod").ZodISODateTime;
33
37
  }, import("zod/v4/core").$strip>, import("@orpc/server").MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
34
38
  update: import("@orpc/server").Procedure<import("@orpc/server").MergedInitialContext<OssContext & Record<never, never>, OssContext & Record<never, never>, OssContext>, OssContext, import("zod").ZodObject<{
35
- currency: import("zod").ZodOptional<import("zod").ZodString>;
39
+ firstName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
40
+ lastName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
41
+ dateOfBirth: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodISODate>>;
42
+ phone: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
36
43
  country: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
44
+ currency: import("zod").ZodOptional<import("zod").ZodString>;
37
45
  }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
38
46
  id: import("zod").ZodUUID;
39
47
  userId: import("zod").ZodUUID;
40
48
  username: import("zod").ZodString;
41
49
  email: import("zod").ZodString;
50
+ firstName: import("zod").ZodNullable<import("zod").ZodString>;
51
+ lastName: import("zod").ZodNullable<import("zod").ZodString>;
52
+ dateOfBirth: import("zod").ZodNullable<import("zod").ZodISODate>;
53
+ phone: import("zod").ZodNullable<import("zod").ZodString>;
42
54
  country: import("zod").ZodNullable<import("zod").ZodString>;
43
55
  currency: import("zod").ZodString;
44
56
  status: import("zod").ZodEnum<{
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/pam/profile/router/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU1D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/pam/profile/router/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU1D"}
@@ -38,6 +38,74 @@ export declare const player: import("drizzle-orm/pg-core").PgTableWithColumns<{
38
38
  identity: undefined;
39
39
  generated: undefined;
40
40
  }, {}, {}>;
41
+ firstName: import("drizzle-orm/pg-core").PgColumn<{
42
+ name: "firstName";
43
+ tableName: "player";
44
+ dataType: "string";
45
+ columnType: "PgText";
46
+ data: string;
47
+ driverParam: string;
48
+ notNull: false;
49
+ hasDefault: false;
50
+ isPrimaryKey: false;
51
+ isAutoincrement: false;
52
+ hasRuntimeDefault: false;
53
+ enumValues: [string, ...string[]];
54
+ baseColumn: never;
55
+ identity: undefined;
56
+ generated: undefined;
57
+ }, {}, {}>;
58
+ lastName: import("drizzle-orm/pg-core").PgColumn<{
59
+ name: "lastName";
60
+ tableName: "player";
61
+ dataType: "string";
62
+ columnType: "PgText";
63
+ data: string;
64
+ driverParam: string;
65
+ notNull: false;
66
+ hasDefault: false;
67
+ isPrimaryKey: false;
68
+ isAutoincrement: false;
69
+ hasRuntimeDefault: false;
70
+ enumValues: [string, ...string[]];
71
+ baseColumn: never;
72
+ identity: undefined;
73
+ generated: undefined;
74
+ }, {}, {}>;
75
+ dateOfBirth: import("drizzle-orm/pg-core").PgColumn<{
76
+ name: "dateOfBirth";
77
+ tableName: "player";
78
+ dataType: "string";
79
+ columnType: "PgDateString";
80
+ data: string;
81
+ driverParam: string;
82
+ notNull: false;
83
+ hasDefault: false;
84
+ isPrimaryKey: false;
85
+ isAutoincrement: false;
86
+ hasRuntimeDefault: false;
87
+ enumValues: undefined;
88
+ baseColumn: never;
89
+ identity: undefined;
90
+ generated: undefined;
91
+ }, {}, {}>;
92
+ phone: import("drizzle-orm/pg-core").PgColumn<{
93
+ name: "phone";
94
+ tableName: "player";
95
+ dataType: "string";
96
+ columnType: "PgText";
97
+ data: string;
98
+ driverParam: string;
99
+ notNull: false;
100
+ hasDefault: false;
101
+ isPrimaryKey: false;
102
+ isAutoincrement: false;
103
+ hasRuntimeDefault: false;
104
+ enumValues: [string, ...string[]];
105
+ baseColumn: never;
106
+ identity: undefined;
107
+ generated: undefined;
108
+ }, {}, {}>;
41
109
  country: import("drizzle-orm/pg-core").PgColumn<{
42
110
  name: "country";
43
111
  tableName: "player";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/pam/profile/schema/index.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,gBAAgB,qGAA2C,CAAC;AACzE,eAAO,MAAM,aAAa,uJAAqC,CAAC;AAEhE,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwBlB,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/pam/profile/schema/index.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,gBAAgB,qGAA2C,CAAC;AACzE,eAAO,MAAM,aAAa,uJAAqC,CAAC;AAEhE,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiClB,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,YAAY,CAAC"}
@@ -1,10 +1,19 @@
1
- import { pgTable, uuid, text, integer, decimal, timestamp, pgEnum, index, } from 'drizzle-orm/pg-core';
1
+ import { pgTable, uuid, text, integer, decimal, date, timestamp, pgEnum, index, } from 'drizzle-orm/pg-core';
2
2
  import { PLAYER_STATUSES, KYC_STATUSES } from '@openora/core/contracts';
3
3
  export const playerStatusEnum = pgEnum('player_status', PLAYER_STATUSES);
4
4
  export const kycStatusEnum = pgEnum('kyc_status', KYC_STATUSES);
5
5
  export const player = pgTable('player', {
6
6
  id: uuid().primaryKey().defaultRandom(),
7
7
  userId: uuid().notNull().unique('player_user_id_unique'),
8
+ firstName: text(),
9
+ lastName: text(),
10
+ // `mode: 'string'` keeps a birth date a plain calendar date: the default Date mode
11
+ // round-trips through a timestamp and shifts the day for players east or west of UTC.
12
+ dateOfBirth: date({ mode: 'string' }),
13
+ // Self-declared contact number - deliberately not unique. `user.phoneNumber` is unique
14
+ // because it is a login credential; making this one unique too would turn an optional
15
+ // profile field into a phone-enumeration oracle and let anyone squat a stranger's number.
16
+ phone: text(),
8
17
  country: text(),
9
18
  currency: text().notNull().default('USD'),
10
19
  status: playerStatusEnum().notNull().default('active'),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/pam/profile/schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,OAAO,EACP,SAAS,EACT,MAAM,EACN,KAAK,GACN,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAExE,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;AACzE,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AAEhE,MAAM,CAAC,MAAM,MAAM,GAAG,OAAO,CAC3B,QAAQ,EACR;IACE,EAAE,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC,aAAa,EAAE;IACvC,MAAM,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC;IACxD,OAAO,EAAE,IAAI,EAAE;IACf,QAAQ,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACzC,MAAM,EAAE,gBAAgB,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;IACtD,SAAS,EAAE,aAAa,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IACvD,KAAK,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACrC,YAAY,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;IACzE,aAAa,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;IAC1E,UAAU,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAC7C,YAAY,EAAE,IAAI,EAAE;IACpB,eAAe,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAClD,aAAa,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAChD,cAAc,EAAE,IAAI,EAAE;IACtB,qBAAqB,EAAE,IAAI,EAAE;IAC7B,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,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CACjG,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/pam/profile/schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,OAAO,EACP,IAAI,EACJ,SAAS,EACT,MAAM,EACN,KAAK,GACN,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAExE,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;AACzE,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AAEhE,MAAM,CAAC,MAAM,MAAM,GAAG,OAAO,CAC3B,QAAQ,EACR;IACE,EAAE,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC,aAAa,EAAE;IACvC,MAAM,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC;IACxD,SAAS,EAAE,IAAI,EAAE;IACjB,QAAQ,EAAE,IAAI,EAAE;IAChB,mFAAmF;IACnF,sFAAsF;IACtF,WAAW,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACrC,uFAAuF;IACvF,sFAAsF;IACtF,0FAA0F;IAC1F,KAAK,EAAE,IAAI,EAAE;IACb,OAAO,EAAE,IAAI,EAAE;IACf,QAAQ,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACzC,MAAM,EAAE,gBAAgB,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;IACtD,SAAS,EAAE,aAAa,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IACvD,KAAK,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACrC,YAAY,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;IACzE,aAAa,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;IAC1E,UAAU,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAC7C,YAAY,EAAE,IAAI,EAAE;IACpB,eAAe,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAClD,aAAa,EAAE,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAChD,cAAc,EAAE,IAAI,EAAE;IACtB,qBAAqB,EAAE,IAAI,EAAE;IAC7B,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,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CACjG,CAAC"}
@@ -24,6 +24,10 @@ export declare class ProfileService implements PlayerProvisioning {
24
24
  userId: string;
25
25
  username: string;
26
26
  email: string;
27
+ firstName: string | null;
28
+ lastName: string | null;
29
+ dateOfBirth: string | null;
30
+ phone: string | null;
27
31
  country: string | null;
28
32
  currency: string;
29
33
  status: "active" | "self_excluded" | "dormant" | "suspended" | "closed";
@@ -40,6 +44,10 @@ export declare class ProfileService implements PlayerProvisioning {
40
44
  userId: string;
41
45
  username: string;
42
46
  email: string;
47
+ firstName: string | null;
48
+ lastName: string | null;
49
+ dateOfBirth: string | null;
50
+ phone: string | null;
43
51
  country: string | null;
44
52
  currency: string;
45
53
  status: "active" | "self_excluded" | "dormant" | "suspended" | "closed";
@@ -1 +1 @@
1
- {"version":3,"file":"profile.service.d.ts","sourceRoot":"","sources":["../../../../src/pam/profile/service/profile.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqB,MAAM,sBAAsB,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAGlG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAGrE,eAAO,MAAM,wBAAwB,2BAA4B,CAAC;AAElE,qBAAa,cAAe,YAAW,kBAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,cAAc;IAEpD,uFAAuF;IACjF,qBAAqB,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,EAAE,wBAAwB;;;;;;;IAS5E;;;;OAIG;YACW,aAAa;IAsBrB,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;IAI/B,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,wBAAwB;;;;;;;;;;;;;;;;CASzE"}
1
+ {"version":3,"file":"profile.service.d.ts","sourceRoot":"","sources":["../../../../src/pam/profile/service/profile.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqB,MAAM,sBAAsB,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAGlG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAGrE,eAAO,MAAM,wBAAwB,2BAA4B,CAAC;AAElE,qBAAa,cAAe,YAAW,kBAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,cAAc;IAEpD,uFAAuF;IACjF,qBAAqB,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,EAAE,wBAAwB;;;;;;;IAS5E;;;;OAIG;YACW,aAAa;IAsBrB,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;IAI/B,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,wBAAwB;;;;;;;;;;;;;;;;;;;;CASzE"}
@@ -6,6 +6,10 @@ export declare function toPlayer(row: typeof player.$inferSelect, email: string,
6
6
  userId: string;
7
7
  username: string;
8
8
  email: string;
9
+ firstName: string | null;
10
+ lastName: string | null;
11
+ dateOfBirth: string | null;
12
+ phone: string | null;
9
13
  country: string | null;
10
14
  currency: string;
11
15
  status: "active" | "self_excluded" | "dormant" | "suspended" | "closed";
@@ -1 +1 @@
1
- {"version":3,"file":"player-mapper.d.ts","sourceRoot":"","sources":["../../../src/pam/shared/player-mapper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAGpD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;;;;;;;;;;;;;;;EAiBxF;AAED,gFAAgF;AAChF,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;;;GAMtF"}
1
+ {"version":3,"file":"player-mapper.d.ts","sourceRoot":"","sources":["../../../src/pam/shared/player-mapper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAGpD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;;;;;;;;;;;;;;;;;;;EAuBxF;AAED,gFAAgF;AAChF,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;;;GAMtF"}
@@ -6,6 +6,12 @@ export function toPlayer(row, email, username) {
6
6
  userId: row.userId,
7
7
  username,
8
8
  email,
9
+ firstName: row.firstName,
10
+ lastName: row.lastName,
11
+ // Already a 'YYYY-MM-DD' string - the column is a `date` in string mode, unlike the
12
+ // timestamps below.
13
+ dateOfBirth: row.dateOfBirth,
14
+ phone: row.phone,
9
15
  country: row.country,
10
16
  currency: row.currency,
11
17
  status: row.status,
@@ -1 +1 @@
1
- {"version":3,"file":"player-mapper.js","sourceRoot":"","sources":["../../../src/pam/shared/player-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAIjC,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAEnD,MAAM,UAAU,QAAQ,CAAC,GAA+B,EAAE,KAAa,EAAE,QAAgB;IACvF,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,QAAQ;QACR,KAAK;QACL,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;QAChE,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;QACtC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;KACvC,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAAuB,EAAE,MAAkB;IACrF,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,EAAE;SAC9B,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;SACtD,IAAI,CAAC,IAAI,CAAC;SACV,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9B,OAAO,MAAM,IAAI,IAAI,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"player-mapper.js","sourceRoot":"","sources":["../../../src/pam/shared/player-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAIjC,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAEnD,MAAM,UAAU,QAAQ,CAAC,GAA+B,EAAE,KAAa,EAAE,QAAgB;IACvF,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,QAAQ;QACR,KAAK;QACL,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,oFAAoF;QACpF,oBAAoB;QACpB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;QAChE,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;QACtC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;KACvC,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAAuB,EAAE,MAAkB;IACrF,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,EAAE;SAC9B,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;SACtD,IAAI,CAAC,IAAI,CAAC;SACV,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9B,OAAO,MAAM,IAAI,IAAI,CAAC;AACxB,CAAC"}
@@ -111,7 +111,7 @@ declare const _default: {
111
111
  } | undefined;
112
112
  registration?: {
113
113
  termsVersion: string;
114
- webUrl: string;
114
+ requireEmailVerification: boolean;
115
115
  } | undefined;
116
116
  supportedLanguages?: string[] | undefined;
117
117
  }, string>;
@@ -47,6 +47,47 @@ describe('createAuth', () => {
47
47
  body: 'Code: 123456',
48
48
  });
49
49
  });
50
+ it('renders the existing-account template when the reset came from a sign-up', async () => {
51
+ // better-auth issues both through the same `forget-password` type, so without the
52
+ // predicate a duplicate sign-up mails a bare "Reset your password" to someone who
53
+ // never asked to reset anything.
54
+ const sendEmail = vi.fn().mockResolvedValue(undefined);
55
+ const templateRenderer = {
56
+ render: vi.fn().mockResolvedValue({ subject: 'Exists', body: 'Code: 123456' }),
57
+ };
58
+ createAuth({
59
+ db: {},
60
+ sendEmail,
61
+ templateRenderer,
62
+ isExistingAccountSignUp: (email) => email === 'test@example.com',
63
+ });
64
+ const emailOtpOpts = emailOTPMock.mock.calls[0][0];
65
+ await emailOtpOpts.sendVerificationOTP({
66
+ email: 'test@example.com',
67
+ otp: '123456',
68
+ type: 'forget-password',
69
+ });
70
+ expect(templateRenderer.render).toHaveBeenCalledWith('existingAccountSignUp', { otp: '123456', email: 'test@example.com' }, 'en');
71
+ });
72
+ it('renders the verification code template for an email-verification OTP', async () => {
73
+ const sendEmail = vi.fn().mockResolvedValue(undefined);
74
+ const templateRenderer = {
75
+ render: vi.fn().mockResolvedValue({ subject: 'Verify your email', body: 'code' }),
76
+ };
77
+ createAuth({ db: {}, sendEmail, templateRenderer });
78
+ const emailOtpOpts = emailOTPMock.mock.calls[0][0];
79
+ await emailOtpOpts.sendVerificationOTP({
80
+ email: 'test@example.com',
81
+ otp: '123456',
82
+ type: 'email-verification',
83
+ });
84
+ expect(templateRenderer.render).toHaveBeenCalledWith('verifyEmail', { otp: '123456' }, 'en');
85
+ expect(sendEmail).toHaveBeenCalledWith({
86
+ to: 'test@example.com',
87
+ subject: 'Verify your email',
88
+ body: 'code',
89
+ });
90
+ });
50
91
  it('returns early without sending an email for other types', async () => {
51
92
  const sendEmail = vi.fn().mockResolvedValue(undefined);
52
93
  const templateRenderer = {
@@ -63,13 +104,31 @@ describe('createAuth', () => {
63
104
  await emailOtpOpts.sendVerificationOTP({
64
105
  email: 'test@example.com',
65
106
  otp: '123456',
66
- type: 'verify-email',
107
+ type: 'sign-in',
67
108
  });
68
109
  expect(getUserLanguage).not.toHaveBeenCalled();
69
110
  expect(templateRenderer.render).not.toHaveBeenCalled();
70
111
  expect(sendEmail).not.toHaveBeenCalled();
71
112
  });
72
113
  });
114
+ describe('email verification gate', () => {
115
+ it('does not require a verified address by default', () => {
116
+ // Unverified players stay unrestricted while the KYC toggle is off.
117
+ createAuth({ db: {} });
118
+ expect(betterAuthMock.mock.calls[0][0].emailAndPassword.requireEmailVerification).toBe(false);
119
+ });
120
+ it('requires one when the operator turns the gate on', () => {
121
+ createAuth({ db: {}, requireEmailVerification: true });
122
+ expect(betterAuthMock.mock.calls[0][0].emailAndPassword.requireEmailVerification).toBe(true);
123
+ });
124
+ it('never lets better-auth mail the code on sign-up', () => {
125
+ // Its sign-up hook also fires on the synthetic duplicate-email response, which
126
+ // would mail a live code to an address whose owner never asked for it.
127
+ createAuth({ db: {} });
128
+ expect(betterAuthMock.mock.calls[0][0].emailVerification.sendOnSignUp).toBe(false);
129
+ expect(betterAuthMock.mock.calls[0][0].emailVerification.autoSignInAfterVerification).toBe(true);
130
+ });
131
+ });
73
132
  describe('cookie domain', () => {
74
133
  it('leaves the session cookie host-only by default', () => {
75
134
  createAuth({ db: {} });
@@ -1 +1 @@
1
- {"version":3,"file":"auth.test.js","sourceRoot":"","sources":["../../../../src/server/auth/__tests__/auth.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.test.js","sourceRoot":"","sources":["../../../../src/server/auth/__tests__/auth.test.ts"],"names":[],"mappings":"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"}