@oxy.so/contracts 1.1.0 → 1.2.0

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.
@@ -90,6 +90,29 @@ export interface ThemePreference {
90
90
  colorPreset: string;
91
91
  }
92
92
  export declare const themePreferenceSchema: z.ZodType<ThemePreference>;
93
+ /**
94
+ * A date of birth, `YYYY-MM-DD`, the sole structured representation this
95
+ * platform stores going forward (`users.date_of_birth` — see
96
+ * `packages/api/src/db/schema/users.ts`). `birthday` (below) stays as the
97
+ * legacy free-text field for backward compatibility with existing readers;
98
+ * this schema is what both the write path (`user.service.ts`) and the read
99
+ * path (nothing — a date of birth is owner-only, never echoed to another
100
+ * viewer) validate against.
101
+ *
102
+ * Three checks, in order, because a regex alone would accept a string-shaped
103
+ * lie:
104
+ * 1. Exactly `YYYY-MM-DD` — the wire format, nothing looser.
105
+ * 2. A real Gregorian date — rejects `2024-02-30`, a date the regex cannot see
106
+ * is impossible.
107
+ * 3. Bounded to a plausible human lifetime — not before {@link MIN_BIRTH_YEAR}
108
+ * and not after today (comparing the zero-padded ISO strings directly is
109
+ * a valid, simpler stand-in for a numeric comparison here, since two
110
+ * `YYYY-MM-DD` strings of equal length sort exactly the way their dates
111
+ * do). "Today" is UTC — see `computeIsAdult` in `user.service.ts` for why
112
+ * a date with no timezone of its own is evaluated in UTC rather than any
113
+ * particular caller's local zone.
114
+ */
115
+ export declare const dateOfBirthSchema: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>;
93
116
  /**
94
117
  * The canonical user object emitted by `formatUserResponse`.
95
118
  *
@@ -118,6 +141,26 @@ export declare const userResponseSchema: z.ZodObject<{
118
141
  phone: z.ZodOptional<z.ZodString>;
119
142
  address: z.ZodOptional<z.ZodString>;
120
143
  birthday: z.ZodOptional<z.ZodString>;
144
+ /**
145
+ * Structured date of birth, `YYYY-MM-DD`. Present only on the
146
+ * account's OWN profile response (`GET /users/me`, `PUT /users/me`
147
+ * with `includePrivateFields`) — never on another account's profile,
148
+ * the same visibility `phone`/`address`/`birthday` already have. See
149
+ * {@link dateOfBirthSchema}.
150
+ */
151
+ dateOfBirth: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>;
152
+ /**
153
+ * Derived, non-PII signal: whether the account holder is at least 18
154
+ * (see `computeIsAdult` in `user.service.ts` for the exact threshold
155
+ * and the UTC-"today" choice). Computed fresh on every read — age
156
+ * changes daily, so this is never stored. `undefined` when
157
+ * `dateOfBirth` is unset ("unknown"), distinct from `false` ("known,
158
+ * not yet 18"). Rides the same owner-only visibility as
159
+ * `dateOfBirth`; a future pass may widen this specific field to
160
+ * other viewers without exposing the birthdate itself, but that is
161
+ * not decided here.
162
+ */
163
+ isAdult: z.ZodOptional<z.ZodBoolean>;
121
164
  /** Avatar file id (string) or null. */
122
165
  avatar: z.ZodOptional<z.ZodNullable<z.ZodString>>;
123
166
  /** Named Bloom color preset (e.g. `"blue"`) or null. */
@@ -199,6 +242,26 @@ export declare const userResponseSchema: z.ZodObject<{
199
242
  phone: z.ZodOptional<z.ZodString>;
200
243
  address: z.ZodOptional<z.ZodString>;
201
244
  birthday: z.ZodOptional<z.ZodString>;
245
+ /**
246
+ * Structured date of birth, `YYYY-MM-DD`. Present only on the
247
+ * account's OWN profile response (`GET /users/me`, `PUT /users/me`
248
+ * with `includePrivateFields`) — never on another account's profile,
249
+ * the same visibility `phone`/`address`/`birthday` already have. See
250
+ * {@link dateOfBirthSchema}.
251
+ */
252
+ dateOfBirth: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>;
253
+ /**
254
+ * Derived, non-PII signal: whether the account holder is at least 18
255
+ * (see `computeIsAdult` in `user.service.ts` for the exact threshold
256
+ * and the UTC-"today" choice). Computed fresh on every read — age
257
+ * changes daily, so this is never stored. `undefined` when
258
+ * `dateOfBirth` is unset ("unknown"), distinct from `false` ("known,
259
+ * not yet 18"). Rides the same owner-only visibility as
260
+ * `dateOfBirth`; a future pass may widen this specific field to
261
+ * other viewers without exposing the birthdate itself, but that is
262
+ * not decided here.
263
+ */
264
+ isAdult: z.ZodOptional<z.ZodBoolean>;
202
265
  /** Avatar file id (string) or null. */
203
266
  avatar: z.ZodOptional<z.ZodNullable<z.ZodString>>;
204
267
  /** Named Bloom color preset (e.g. `"blue"`) or null. */
@@ -280,6 +343,26 @@ export declare const userResponseSchema: z.ZodObject<{
280
343
  phone: z.ZodOptional<z.ZodString>;
281
344
  address: z.ZodOptional<z.ZodString>;
282
345
  birthday: z.ZodOptional<z.ZodString>;
346
+ /**
347
+ * Structured date of birth, `YYYY-MM-DD`. Present only on the
348
+ * account's OWN profile response (`GET /users/me`, `PUT /users/me`
349
+ * with `includePrivateFields`) — never on another account's profile,
350
+ * the same visibility `phone`/`address`/`birthday` already have. See
351
+ * {@link dateOfBirthSchema}.
352
+ */
353
+ dateOfBirth: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>;
354
+ /**
355
+ * Derived, non-PII signal: whether the account holder is at least 18
356
+ * (see `computeIsAdult` in `user.service.ts` for the exact threshold
357
+ * and the UTC-"today" choice). Computed fresh on every read — age
358
+ * changes daily, so this is never stored. `undefined` when
359
+ * `dateOfBirth` is unset ("unknown"), distinct from `false` ("known,
360
+ * not yet 18"). Rides the same owner-only visibility as
361
+ * `dateOfBirth`; a future pass may widen this specific field to
362
+ * other viewers without exposing the birthdate itself, but that is
363
+ * not decided here.
364
+ */
365
+ isAdult: z.ZodOptional<z.ZodBoolean>;
283
366
  /** Avatar file id (string) or null. */
284
367
  avatar: z.ZodOptional<z.ZodNullable<z.ZodString>>;
285
368
  /** Named Bloom color preset (e.g. `"blue"`) or null. */
@@ -380,6 +463,13 @@ export declare const userProfileUpdateSchema: z.ZodObject<{
380
463
  phone: z.ZodOptional<z.ZodString>;
381
464
  address: z.ZodOptional<z.ZodString>;
382
465
  birthday: z.ZodOptional<z.ZodString>;
466
+ /**
467
+ * Structured date of birth. `null` (or `''`, at the service layer)
468
+ * clears it. Independently settable from `birthday` — see
469
+ * `user.service.ts`'s `updateUserProfile` for why the two legacy and
470
+ * structured fields are not kept in sync with each other.
471
+ */
472
+ dateOfBirth: z.ZodOptional<z.ZodNullable<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>>;
383
473
  locations: z.ZodOptional<z.ZodArray<z.ZodUnknown, "many">>;
384
474
  links: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
385
475
  linksMetadata: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -444,6 +534,13 @@ export declare const userProfileUpdateSchema: z.ZodObject<{
444
534
  phone: z.ZodOptional<z.ZodString>;
445
535
  address: z.ZodOptional<z.ZodString>;
446
536
  birthday: z.ZodOptional<z.ZodString>;
537
+ /**
538
+ * Structured date of birth. `null` (or `''`, at the service layer)
539
+ * clears it. Independently settable from `birthday` — see
540
+ * `user.service.ts`'s `updateUserProfile` for why the two legacy and
541
+ * structured fields are not kept in sync with each other.
542
+ */
543
+ dateOfBirth: z.ZodOptional<z.ZodNullable<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>>;
447
544
  locations: z.ZodOptional<z.ZodArray<z.ZodUnknown, "many">>;
448
545
  links: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
449
546
  linksMetadata: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -508,6 +605,13 @@ export declare const userProfileUpdateSchema: z.ZodObject<{
508
605
  phone: z.ZodOptional<z.ZodString>;
509
606
  address: z.ZodOptional<z.ZodString>;
510
607
  birthday: z.ZodOptional<z.ZodString>;
608
+ /**
609
+ * Structured date of birth. `null` (or `''`, at the service layer)
610
+ * clears it. Independently settable from `birthday` — see
611
+ * `user.service.ts`'s `updateUserProfile` for why the two legacy and
612
+ * structured fields are not kept in sync with each other.
613
+ */
614
+ dateOfBirth: z.ZodOptional<z.ZodNullable<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>>;
511
615
  locations: z.ZodOptional<z.ZodArray<z.ZodUnknown, "many">>;
512
616
  links: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
513
617
  linksMetadata: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -569,6 +673,26 @@ export declare const currentUserResponseSchema: z.ZodObject<{
569
673
  phone: z.ZodOptional<z.ZodString>;
570
674
  address: z.ZodOptional<z.ZodString>;
571
675
  birthday: z.ZodOptional<z.ZodString>;
676
+ /**
677
+ * Structured date of birth, `YYYY-MM-DD`. Present only on the
678
+ * account's OWN profile response (`GET /users/me`, `PUT /users/me`
679
+ * with `includePrivateFields`) — never on another account's profile,
680
+ * the same visibility `phone`/`address`/`birthday` already have. See
681
+ * {@link dateOfBirthSchema}.
682
+ */
683
+ dateOfBirth: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>;
684
+ /**
685
+ * Derived, non-PII signal: whether the account holder is at least 18
686
+ * (see `computeIsAdult` in `user.service.ts` for the exact threshold
687
+ * and the UTC-"today" choice). Computed fresh on every read — age
688
+ * changes daily, so this is never stored. `undefined` when
689
+ * `dateOfBirth` is unset ("unknown"), distinct from `false` ("known,
690
+ * not yet 18"). Rides the same owner-only visibility as
691
+ * `dateOfBirth`; a future pass may widen this specific field to
692
+ * other viewers without exposing the birthdate itself, but that is
693
+ * not decided here.
694
+ */
695
+ isAdult: z.ZodOptional<z.ZodBoolean>;
572
696
  /** Avatar file id (string) or null. */
573
697
  avatar: z.ZodOptional<z.ZodNullable<z.ZodString>>;
574
698
  /** Named Bloom color preset (e.g. `"blue"`) or null. */
@@ -650,6 +774,26 @@ export declare const currentUserResponseSchema: z.ZodObject<{
650
774
  phone: z.ZodOptional<z.ZodString>;
651
775
  address: z.ZodOptional<z.ZodString>;
652
776
  birthday: z.ZodOptional<z.ZodString>;
777
+ /**
778
+ * Structured date of birth, `YYYY-MM-DD`. Present only on the
779
+ * account's OWN profile response (`GET /users/me`, `PUT /users/me`
780
+ * with `includePrivateFields`) — never on another account's profile,
781
+ * the same visibility `phone`/`address`/`birthday` already have. See
782
+ * {@link dateOfBirthSchema}.
783
+ */
784
+ dateOfBirth: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>;
785
+ /**
786
+ * Derived, non-PII signal: whether the account holder is at least 18
787
+ * (see `computeIsAdult` in `user.service.ts` for the exact threshold
788
+ * and the UTC-"today" choice). Computed fresh on every read — age
789
+ * changes daily, so this is never stored. `undefined` when
790
+ * `dateOfBirth` is unset ("unknown"), distinct from `false` ("known,
791
+ * not yet 18"). Rides the same owner-only visibility as
792
+ * `dateOfBirth`; a future pass may widen this specific field to
793
+ * other viewers without exposing the birthdate itself, but that is
794
+ * not decided here.
795
+ */
796
+ isAdult: z.ZodOptional<z.ZodBoolean>;
653
797
  /** Avatar file id (string) or null. */
654
798
  avatar: z.ZodOptional<z.ZodNullable<z.ZodString>>;
655
799
  /** Named Bloom color preset (e.g. `"blue"`) or null. */
@@ -731,6 +875,26 @@ export declare const currentUserResponseSchema: z.ZodObject<{
731
875
  phone: z.ZodOptional<z.ZodString>;
732
876
  address: z.ZodOptional<z.ZodString>;
733
877
  birthday: z.ZodOptional<z.ZodString>;
878
+ /**
879
+ * Structured date of birth, `YYYY-MM-DD`. Present only on the
880
+ * account's OWN profile response (`GET /users/me`, `PUT /users/me`
881
+ * with `includePrivateFields`) — never on another account's profile,
882
+ * the same visibility `phone`/`address`/`birthday` already have. See
883
+ * {@link dateOfBirthSchema}.
884
+ */
885
+ dateOfBirth: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>;
886
+ /**
887
+ * Derived, non-PII signal: whether the account holder is at least 18
888
+ * (see `computeIsAdult` in `user.service.ts` for the exact threshold
889
+ * and the UTC-"today" choice). Computed fresh on every read — age
890
+ * changes daily, so this is never stored. `undefined` when
891
+ * `dateOfBirth` is unset ("unknown"), distinct from `false` ("known,
892
+ * not yet 18"). Rides the same owner-only visibility as
893
+ * `dateOfBirth`; a future pass may widen this specific field to
894
+ * other viewers without exposing the birthdate itself, but that is
895
+ * not decided here.
896
+ */
897
+ isAdult: z.ZodOptional<z.ZodBoolean>;
734
898
  /** Avatar file id (string) or null. */
735
899
  avatar: z.ZodOptional<z.ZodNullable<z.ZodString>>;
736
900
  /** Named Bloom color preset (e.g. `"blue"`) or null. */
@@ -820,6 +984,8 @@ export declare const currentUserResponseSchema: z.ZodObject<{
820
984
  phone?: string | undefined;
821
985
  address?: string | undefined;
822
986
  birthday?: string | undefined;
987
+ dateOfBirth?: string | undefined;
988
+ isAdult?: boolean | undefined;
823
989
  languages?: string[] | undefined;
824
990
  relationship?: UserRelationship | undefined;
825
991
  themePreference?: ThemePreference | undefined;
@@ -844,6 +1010,8 @@ export declare const currentUserResponseSchema: z.ZodObject<{
844
1010
  phone?: string | undefined;
845
1011
  address?: string | undefined;
846
1012
  birthday?: string | undefined;
1013
+ dateOfBirth?: string | undefined;
1014
+ isAdult?: boolean | undefined;
847
1015
  languages?: string[] | undefined;
848
1016
  relationship?: UserRelationship | undefined;
849
1017
  themePreference?: ThemePreference | undefined;
@@ -872,6 +1040,26 @@ export declare const deviceLinkedSessionSchema: z.ZodObject<{
872
1040
  phone: z.ZodOptional<z.ZodString>;
873
1041
  address: z.ZodOptional<z.ZodString>;
874
1042
  birthday: z.ZodOptional<z.ZodString>;
1043
+ /**
1044
+ * Structured date of birth, `YYYY-MM-DD`. Present only on the
1045
+ * account's OWN profile response (`GET /users/me`, `PUT /users/me`
1046
+ * with `includePrivateFields`) — never on another account's profile,
1047
+ * the same visibility `phone`/`address`/`birthday` already have. See
1048
+ * {@link dateOfBirthSchema}.
1049
+ */
1050
+ dateOfBirth: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>;
1051
+ /**
1052
+ * Derived, non-PII signal: whether the account holder is at least 18
1053
+ * (see `computeIsAdult` in `user.service.ts` for the exact threshold
1054
+ * and the UTC-"today" choice). Computed fresh on every read — age
1055
+ * changes daily, so this is never stored. `undefined` when
1056
+ * `dateOfBirth` is unset ("unknown"), distinct from `false` ("known,
1057
+ * not yet 18"). Rides the same owner-only visibility as
1058
+ * `dateOfBirth`; a future pass may widen this specific field to
1059
+ * other viewers without exposing the birthdate itself, but that is
1060
+ * not decided here.
1061
+ */
1062
+ isAdult: z.ZodOptional<z.ZodBoolean>;
875
1063
  /** Avatar file id (string) or null. */
876
1064
  avatar: z.ZodOptional<z.ZodNullable<z.ZodString>>;
877
1065
  /** Named Bloom color preset (e.g. `"blue"`) or null. */
@@ -953,6 +1141,26 @@ export declare const deviceLinkedSessionSchema: z.ZodObject<{
953
1141
  phone: z.ZodOptional<z.ZodString>;
954
1142
  address: z.ZodOptional<z.ZodString>;
955
1143
  birthday: z.ZodOptional<z.ZodString>;
1144
+ /**
1145
+ * Structured date of birth, `YYYY-MM-DD`. Present only on the
1146
+ * account's OWN profile response (`GET /users/me`, `PUT /users/me`
1147
+ * with `includePrivateFields`) — never on another account's profile,
1148
+ * the same visibility `phone`/`address`/`birthday` already have. See
1149
+ * {@link dateOfBirthSchema}.
1150
+ */
1151
+ dateOfBirth: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>;
1152
+ /**
1153
+ * Derived, non-PII signal: whether the account holder is at least 18
1154
+ * (see `computeIsAdult` in `user.service.ts` for the exact threshold
1155
+ * and the UTC-"today" choice). Computed fresh on every read — age
1156
+ * changes daily, so this is never stored. `undefined` when
1157
+ * `dateOfBirth` is unset ("unknown"), distinct from `false` ("known,
1158
+ * not yet 18"). Rides the same owner-only visibility as
1159
+ * `dateOfBirth`; a future pass may widen this specific field to
1160
+ * other viewers without exposing the birthdate itself, but that is
1161
+ * not decided here.
1162
+ */
1163
+ isAdult: z.ZodOptional<z.ZodBoolean>;
956
1164
  /** Avatar file id (string) or null. */
957
1165
  avatar: z.ZodOptional<z.ZodNullable<z.ZodString>>;
958
1166
  /** Named Bloom color preset (e.g. `"blue"`) or null. */
@@ -1034,6 +1242,26 @@ export declare const deviceLinkedSessionSchema: z.ZodObject<{
1034
1242
  phone: z.ZodOptional<z.ZodString>;
1035
1243
  address: z.ZodOptional<z.ZodString>;
1036
1244
  birthday: z.ZodOptional<z.ZodString>;
1245
+ /**
1246
+ * Structured date of birth, `YYYY-MM-DD`. Present only on the
1247
+ * account's OWN profile response (`GET /users/me`, `PUT /users/me`
1248
+ * with `includePrivateFields`) — never on another account's profile,
1249
+ * the same visibility `phone`/`address`/`birthday` already have. See
1250
+ * {@link dateOfBirthSchema}.
1251
+ */
1252
+ dateOfBirth: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>;
1253
+ /**
1254
+ * Derived, non-PII signal: whether the account holder is at least 18
1255
+ * (see `computeIsAdult` in `user.service.ts` for the exact threshold
1256
+ * and the UTC-"today" choice). Computed fresh on every read — age
1257
+ * changes daily, so this is never stored. `undefined` when
1258
+ * `dateOfBirth` is unset ("unknown"), distinct from `false` ("known,
1259
+ * not yet 18"). Rides the same owner-only visibility as
1260
+ * `dateOfBirth`; a future pass may widen this specific field to
1261
+ * other viewers without exposing the birthdate itself, but that is
1262
+ * not decided here.
1263
+ */
1264
+ isAdult: z.ZodOptional<z.ZodBoolean>;
1037
1265
  /** Avatar file id (string) or null. */
1038
1266
  avatar: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1039
1267
  /** Named Bloom color preset (e.g. `"blue"`) or null. */
@@ -1119,6 +1347,26 @@ export declare const deviceLinkedSessionSchema: z.ZodObject<{
1119
1347
  phone: z.ZodOptional<z.ZodString>;
1120
1348
  address: z.ZodOptional<z.ZodString>;
1121
1349
  birthday: z.ZodOptional<z.ZodString>;
1350
+ /**
1351
+ * Structured date of birth, `YYYY-MM-DD`. Present only on the
1352
+ * account's OWN profile response (`GET /users/me`, `PUT /users/me`
1353
+ * with `includePrivateFields`) — never on another account's profile,
1354
+ * the same visibility `phone`/`address`/`birthday` already have. See
1355
+ * {@link dateOfBirthSchema}.
1356
+ */
1357
+ dateOfBirth: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>;
1358
+ /**
1359
+ * Derived, non-PII signal: whether the account holder is at least 18
1360
+ * (see `computeIsAdult` in `user.service.ts` for the exact threshold
1361
+ * and the UTC-"today" choice). Computed fresh on every read — age
1362
+ * changes daily, so this is never stored. `undefined` when
1363
+ * `dateOfBirth` is unset ("unknown"), distinct from `false` ("known,
1364
+ * not yet 18"). Rides the same owner-only visibility as
1365
+ * `dateOfBirth`; a future pass may widen this specific field to
1366
+ * other viewers without exposing the birthdate itself, but that is
1367
+ * not decided here.
1368
+ */
1369
+ isAdult: z.ZodOptional<z.ZodBoolean>;
1122
1370
  /** Avatar file id (string) or null. */
1123
1371
  avatar: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1124
1372
  /** Named Bloom color preset (e.g. `"blue"`) or null. */
@@ -1204,6 +1452,26 @@ export declare const deviceLinkedSessionSchema: z.ZodObject<{
1204
1452
  phone: z.ZodOptional<z.ZodString>;
1205
1453
  address: z.ZodOptional<z.ZodString>;
1206
1454
  birthday: z.ZodOptional<z.ZodString>;
1455
+ /**
1456
+ * Structured date of birth, `YYYY-MM-DD`. Present only on the
1457
+ * account's OWN profile response (`GET /users/me`, `PUT /users/me`
1458
+ * with `includePrivateFields`) — never on another account's profile,
1459
+ * the same visibility `phone`/`address`/`birthday` already have. See
1460
+ * {@link dateOfBirthSchema}.
1461
+ */
1462
+ dateOfBirth: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>;
1463
+ /**
1464
+ * Derived, non-PII signal: whether the account holder is at least 18
1465
+ * (see `computeIsAdult` in `user.service.ts` for the exact threshold
1466
+ * and the UTC-"today" choice). Computed fresh on every read — age
1467
+ * changes daily, so this is never stored. `undefined` when
1468
+ * `dateOfBirth` is unset ("unknown"), distinct from `false` ("known,
1469
+ * not yet 18"). Rides the same owner-only visibility as
1470
+ * `dateOfBirth`; a future pass may widen this specific field to
1471
+ * other viewers without exposing the birthdate itself, but that is
1472
+ * not decided here.
1473
+ */
1474
+ isAdult: z.ZodOptional<z.ZodBoolean>;
1207
1475
  /** Avatar file id (string) or null. */
1208
1476
  avatar: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1209
1477
  /** Named Bloom color preset (e.g. `"blue"`) or null. */
@@ -1292,6 +1560,26 @@ export declare const deviceLinkedSessionsResponseSchema: z.ZodArray<z.ZodObject<
1292
1560
  phone: z.ZodOptional<z.ZodString>;
1293
1561
  address: z.ZodOptional<z.ZodString>;
1294
1562
  birthday: z.ZodOptional<z.ZodString>;
1563
+ /**
1564
+ * Structured date of birth, `YYYY-MM-DD`. Present only on the
1565
+ * account's OWN profile response (`GET /users/me`, `PUT /users/me`
1566
+ * with `includePrivateFields`) — never on another account's profile,
1567
+ * the same visibility `phone`/`address`/`birthday` already have. See
1568
+ * {@link dateOfBirthSchema}.
1569
+ */
1570
+ dateOfBirth: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>;
1571
+ /**
1572
+ * Derived, non-PII signal: whether the account holder is at least 18
1573
+ * (see `computeIsAdult` in `user.service.ts` for the exact threshold
1574
+ * and the UTC-"today" choice). Computed fresh on every read — age
1575
+ * changes daily, so this is never stored. `undefined` when
1576
+ * `dateOfBirth` is unset ("unknown"), distinct from `false` ("known,
1577
+ * not yet 18"). Rides the same owner-only visibility as
1578
+ * `dateOfBirth`; a future pass may widen this specific field to
1579
+ * other viewers without exposing the birthdate itself, but that is
1580
+ * not decided here.
1581
+ */
1582
+ isAdult: z.ZodOptional<z.ZodBoolean>;
1295
1583
  /** Avatar file id (string) or null. */
1296
1584
  avatar: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1297
1585
  /** Named Bloom color preset (e.g. `"blue"`) or null. */
@@ -1373,6 +1661,26 @@ export declare const deviceLinkedSessionsResponseSchema: z.ZodArray<z.ZodObject<
1373
1661
  phone: z.ZodOptional<z.ZodString>;
1374
1662
  address: z.ZodOptional<z.ZodString>;
1375
1663
  birthday: z.ZodOptional<z.ZodString>;
1664
+ /**
1665
+ * Structured date of birth, `YYYY-MM-DD`. Present only on the
1666
+ * account's OWN profile response (`GET /users/me`, `PUT /users/me`
1667
+ * with `includePrivateFields`) — never on another account's profile,
1668
+ * the same visibility `phone`/`address`/`birthday` already have. See
1669
+ * {@link dateOfBirthSchema}.
1670
+ */
1671
+ dateOfBirth: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>;
1672
+ /**
1673
+ * Derived, non-PII signal: whether the account holder is at least 18
1674
+ * (see `computeIsAdult` in `user.service.ts` for the exact threshold
1675
+ * and the UTC-"today" choice). Computed fresh on every read — age
1676
+ * changes daily, so this is never stored. `undefined` when
1677
+ * `dateOfBirth` is unset ("unknown"), distinct from `false` ("known,
1678
+ * not yet 18"). Rides the same owner-only visibility as
1679
+ * `dateOfBirth`; a future pass may widen this specific field to
1680
+ * other viewers without exposing the birthdate itself, but that is
1681
+ * not decided here.
1682
+ */
1683
+ isAdult: z.ZodOptional<z.ZodBoolean>;
1376
1684
  /** Avatar file id (string) or null. */
1377
1685
  avatar: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1378
1686
  /** Named Bloom color preset (e.g. `"blue"`) or null. */
@@ -1454,6 +1762,26 @@ export declare const deviceLinkedSessionsResponseSchema: z.ZodArray<z.ZodObject<
1454
1762
  phone: z.ZodOptional<z.ZodString>;
1455
1763
  address: z.ZodOptional<z.ZodString>;
1456
1764
  birthday: z.ZodOptional<z.ZodString>;
1765
+ /**
1766
+ * Structured date of birth, `YYYY-MM-DD`. Present only on the
1767
+ * account's OWN profile response (`GET /users/me`, `PUT /users/me`
1768
+ * with `includePrivateFields`) — never on another account's profile,
1769
+ * the same visibility `phone`/`address`/`birthday` already have. See
1770
+ * {@link dateOfBirthSchema}.
1771
+ */
1772
+ dateOfBirth: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>;
1773
+ /**
1774
+ * Derived, non-PII signal: whether the account holder is at least 18
1775
+ * (see `computeIsAdult` in `user.service.ts` for the exact threshold
1776
+ * and the UTC-"today" choice). Computed fresh on every read — age
1777
+ * changes daily, so this is never stored. `undefined` when
1778
+ * `dateOfBirth` is unset ("unknown"), distinct from `false` ("known,
1779
+ * not yet 18"). Rides the same owner-only visibility as
1780
+ * `dateOfBirth`; a future pass may widen this specific field to
1781
+ * other viewers without exposing the birthdate itself, but that is
1782
+ * not decided here.
1783
+ */
1784
+ isAdult: z.ZodOptional<z.ZodBoolean>;
1457
1785
  /** Avatar file id (string) or null. */
1458
1786
  avatar: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1459
1787
  /** Named Bloom color preset (e.g. `"blue"`) or null. */
@@ -1539,6 +1867,26 @@ export declare const deviceLinkedSessionsResponseSchema: z.ZodArray<z.ZodObject<
1539
1867
  phone: z.ZodOptional<z.ZodString>;
1540
1868
  address: z.ZodOptional<z.ZodString>;
1541
1869
  birthday: z.ZodOptional<z.ZodString>;
1870
+ /**
1871
+ * Structured date of birth, `YYYY-MM-DD`. Present only on the
1872
+ * account's OWN profile response (`GET /users/me`, `PUT /users/me`
1873
+ * with `includePrivateFields`) — never on another account's profile,
1874
+ * the same visibility `phone`/`address`/`birthday` already have. See
1875
+ * {@link dateOfBirthSchema}.
1876
+ */
1877
+ dateOfBirth: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>;
1878
+ /**
1879
+ * Derived, non-PII signal: whether the account holder is at least 18
1880
+ * (see `computeIsAdult` in `user.service.ts` for the exact threshold
1881
+ * and the UTC-"today" choice). Computed fresh on every read — age
1882
+ * changes daily, so this is never stored. `undefined` when
1883
+ * `dateOfBirth` is unset ("unknown"), distinct from `false` ("known,
1884
+ * not yet 18"). Rides the same owner-only visibility as
1885
+ * `dateOfBirth`; a future pass may widen this specific field to
1886
+ * other viewers without exposing the birthdate itself, but that is
1887
+ * not decided here.
1888
+ */
1889
+ isAdult: z.ZodOptional<z.ZodBoolean>;
1542
1890
  /** Avatar file id (string) or null. */
1543
1891
  avatar: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1544
1892
  /** Named Bloom color preset (e.g. `"blue"`) or null. */
@@ -1624,6 +1972,26 @@ export declare const deviceLinkedSessionsResponseSchema: z.ZodArray<z.ZodObject<
1624
1972
  phone: z.ZodOptional<z.ZodString>;
1625
1973
  address: z.ZodOptional<z.ZodString>;
1626
1974
  birthday: z.ZodOptional<z.ZodString>;
1975
+ /**
1976
+ * Structured date of birth, `YYYY-MM-DD`. Present only on the
1977
+ * account's OWN profile response (`GET /users/me`, `PUT /users/me`
1978
+ * with `includePrivateFields`) — never on another account's profile,
1979
+ * the same visibility `phone`/`address`/`birthday` already have. See
1980
+ * {@link dateOfBirthSchema}.
1981
+ */
1982
+ dateOfBirth: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>;
1983
+ /**
1984
+ * Derived, non-PII signal: whether the account holder is at least 18
1985
+ * (see `computeIsAdult` in `user.service.ts` for the exact threshold
1986
+ * and the UTC-"today" choice). Computed fresh on every read — age
1987
+ * changes daily, so this is never stored. `undefined` when
1988
+ * `dateOfBirth` is unset ("unknown"), distinct from `false` ("known,
1989
+ * not yet 18"). Rides the same owner-only visibility as
1990
+ * `dateOfBirth`; a future pass may widen this specific field to
1991
+ * other viewers without exposing the birthdate itself, but that is
1992
+ * not decided here.
1993
+ */
1994
+ isAdult: z.ZodOptional<z.ZodBoolean>;
1627
1995
  /** Avatar file id (string) or null. */
1628
1996
  avatar: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1629
1997
  /** Named Bloom color preset (e.g. `"blue"`) or null. */