@beorchid-llc/thrivo-contracts 0.7.0 → 0.9.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.
package/dist/admin.d.ts CHANGED
@@ -151,6 +151,7 @@ export type AdminUserSubscription = z.infer<typeof adminUserSubscriptionSchema>;
151
151
  export declare const adminUserDetailSchema: z.ZodObject<Omit<{
152
152
  id: z.ZodString;
153
153
  email: z.ZodString;
154
+ image: z.ZodNullable<z.ZodString>;
154
155
  goal: z.ZodNullable<z.ZodEnum<["lose", "maintain", "gain"]>>;
155
156
  sex: z.ZodNullable<z.ZodEnum<["male", "female", "prefer_not_to_say"]>>;
156
157
  age: z.ZodNullable<z.ZodNumber>;
@@ -214,6 +215,7 @@ export declare const adminUserDetailSchema: z.ZodObject<Omit<{
214
215
  cancelAtPeriodEnd: boolean;
215
216
  } | null;
216
217
  email: string;
218
+ image: string | null;
217
219
  goal: "lose" | "maintain" | "gain" | null;
218
220
  sex: "male" | "female" | "prefer_not_to_say" | null;
219
221
  age: number | null;
@@ -254,6 +256,7 @@ export declare const adminUserDetailSchema: z.ZodObject<Omit<{
254
256
  cancelAtPeriodEnd: boolean;
255
257
  } | null;
256
258
  email: string;
259
+ image: string | null;
257
260
  goal: "lose" | "maintain" | "gain" | null;
258
261
  sex: "male" | "female" | "prefer_not_to_say" | null;
259
262
  age: number | null;
@@ -287,6 +290,7 @@ export type AdminUserDetail = z.infer<typeof adminUserDetailSchema>;
287
290
  export declare const adminUserSchema: z.ZodObject<Omit<{
288
291
  id: z.ZodString;
289
292
  email: z.ZodString;
293
+ image: z.ZodNullable<z.ZodString>;
290
294
  goal: z.ZodNullable<z.ZodEnum<["lose", "maintain", "gain"]>>;
291
295
  sex: z.ZodNullable<z.ZodEnum<["male", "female", "prefer_not_to_say"]>>;
292
296
  age: z.ZodNullable<z.ZodNumber>;
@@ -350,6 +354,7 @@ export declare const adminUserSchema: z.ZodObject<Omit<{
350
354
  cancelAtPeriodEnd: boolean;
351
355
  } | null;
352
356
  email: string;
357
+ image: string | null;
353
358
  goal: "lose" | "maintain" | "gain" | null;
354
359
  sex: "male" | "female" | "prefer_not_to_say" | null;
355
360
  age: number | null;
@@ -390,6 +395,7 @@ export declare const adminUserSchema: z.ZodObject<Omit<{
390
395
  cancelAtPeriodEnd: boolean;
391
396
  } | null;
392
397
  email: string;
398
+ image: string | null;
393
399
  goal: "lose" | "maintain" | "gain" | null;
394
400
  sex: "male" | "female" | "prefer_not_to_say" | null;
395
401
  age: number | null;
@@ -423,6 +429,7 @@ export declare const adminUserDetailResponseSchema: z.ZodObject<{
423
429
  user: z.ZodObject<Omit<{
424
430
  id: z.ZodString;
425
431
  email: z.ZodString;
432
+ image: z.ZodNullable<z.ZodString>;
426
433
  goal: z.ZodNullable<z.ZodEnum<["lose", "maintain", "gain"]>>;
427
434
  sex: z.ZodNullable<z.ZodEnum<["male", "female", "prefer_not_to_say"]>>;
428
435
  age: z.ZodNullable<z.ZodNumber>;
@@ -486,6 +493,7 @@ export declare const adminUserDetailResponseSchema: z.ZodObject<{
486
493
  cancelAtPeriodEnd: boolean;
487
494
  } | null;
488
495
  email: string;
496
+ image: string | null;
489
497
  goal: "lose" | "maintain" | "gain" | null;
490
498
  sex: "male" | "female" | "prefer_not_to_say" | null;
491
499
  age: number | null;
@@ -526,6 +534,7 @@ export declare const adminUserDetailResponseSchema: z.ZodObject<{
526
534
  cancelAtPeriodEnd: boolean;
527
535
  } | null;
528
536
  email: string;
537
+ image: string | null;
529
538
  goal: "lose" | "maintain" | "gain" | null;
530
539
  sex: "male" | "female" | "prefer_not_to_say" | null;
531
540
  age: number | null;
@@ -568,6 +577,7 @@ export declare const adminUserDetailResponseSchema: z.ZodObject<{
568
577
  cancelAtPeriodEnd: boolean;
569
578
  } | null;
570
579
  email: string;
580
+ image: string | null;
571
581
  goal: "lose" | "maintain" | "gain" | null;
572
582
  sex: "male" | "female" | "prefer_not_to_say" | null;
573
583
  age: number | null;
@@ -610,6 +620,7 @@ export declare const adminUserDetailResponseSchema: z.ZodObject<{
610
620
  cancelAtPeriodEnd: boolean;
611
621
  } | null;
612
622
  email: string;
623
+ image: string | null;
613
624
  goal: "lose" | "maintain" | "gain" | null;
614
625
  sex: "male" | "female" | "prefer_not_to_say" | null;
615
626
  age: number | null;
@@ -1 +1 @@
1
- {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"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"}
package/dist/auth.d.ts CHANGED
@@ -14,9 +14,11 @@ export declare const authSessionSchema: z.ZodObject<{
14
14
  refreshExpiresAt: string;
15
15
  }>;
16
16
  export type AuthSession = z.infer<typeof authSessionSchema>;
17
+ /** Shared email primitive — RFC-validated, length-capped, case-normalized to match the backend. */
18
+ export declare const emailSchema: z.ZodEffects<z.ZodString, string, string>;
17
19
  /** POST /auth/otp/request payload */
18
20
  export declare const otpRequestPayloadSchema: z.ZodObject<{
19
- email: z.ZodString;
21
+ email: z.ZodEffects<z.ZodString, string, string>;
20
22
  }, "strip", z.ZodTypeAny, {
21
23
  email: string;
22
24
  }, {
@@ -25,7 +27,7 @@ export declare const otpRequestPayloadSchema: z.ZodObject<{
25
27
  export type OtpRequestPayload = z.infer<typeof otpRequestPayloadSchema>;
26
28
  /** POST /auth/otp/verify payload */
27
29
  export declare const otpVerifyPayloadSchema: z.ZodObject<{
28
- email: z.ZodString;
30
+ email: z.ZodEffects<z.ZodString, string, string>;
29
31
  code: z.ZodString;
30
32
  }, "strip", z.ZodTypeAny, {
31
33
  code: string;
@@ -40,7 +42,7 @@ export type OtpVerifyPayload = z.infer<typeof otpVerifyPayloadSchema>;
40
42
  * @deprecated Magic-link auth remains API-supported but is hidden in mobile while the UX is revisited.
41
43
  */
42
44
  export declare const magicLinkRequestPayloadSchema: z.ZodObject<{
43
- email: z.ZodString;
45
+ email: z.ZodEffects<z.ZodString, string, string>;
44
46
  }, "strip", z.ZodTypeAny, {
45
47
  email: string;
46
48
  }, {
@@ -68,6 +70,22 @@ export declare const refreshPayloadSchema: z.ZodObject<{
68
70
  refreshToken: string;
69
71
  }>;
70
72
  export type RefreshPayload = z.infer<typeof refreshPayloadSchema>;
73
+ /**
74
+ * POST /auth/oauth/apple payload — native Sign in with Apple. The app posts the
75
+ * signed `identityToken` from `expo-apple-authentication`, plus the display name
76
+ * Apple supplies only on the first authorization (never re-sent).
77
+ */
78
+ export declare const appleSignInPayloadSchema: z.ZodObject<{
79
+ identityToken: z.ZodString;
80
+ name: z.ZodOptional<z.ZodString>;
81
+ }, "strip", z.ZodTypeAny, {
82
+ identityToken: string;
83
+ name?: string | undefined;
84
+ }, {
85
+ identityToken: string;
86
+ name?: string | undefined;
87
+ }>;
88
+ export type AppleSignInPayload = z.infer<typeof appleSignInPayloadSchema>;
71
89
  /** Lightweight session facts for mobile cold-start restore (navigation guard). */
72
90
  export declare const userSessionSchema: z.ZodObject<{
73
91
  userId: z.ZodString;
@@ -140,6 +158,11 @@ export declare const authRoutes: {
140
158
  path: "/api/v1/auth/magic-link/verify";
141
159
  auth: "public";
142
160
  };
161
+ magicLinkCallback: {
162
+ method: "GET";
163
+ path: "/api/v1/auth/magic-link/callback";
164
+ auth: "public";
165
+ };
143
166
  refresh: {
144
167
  method: "POST";
145
168
  path: "/api/v1/auth/refresh";
@@ -160,5 +183,15 @@ export declare const authRoutes: {
160
183
  path: "/api/v1/auth/google/start";
161
184
  auth: "public";
162
185
  };
186
+ googleCallback: {
187
+ method: "GET";
188
+ path: "/api/v1/auth/google/callback";
189
+ auth: "public";
190
+ };
191
+ oauthApple: {
192
+ method: "POST";
193
+ path: "/api/v1/auth/oauth/apple";
194
+ auth: "public";
195
+ };
163
196
  };
164
197
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,6GAA6G;AAC7G,eAAO,MAAM,iBAAiB;;;;;;;;;;;;EAI5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,qCAAqC;AACrC,eAAO,MAAM,uBAAuB;;;;;;EAElC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,oCAAoC;AACpC,eAAO,MAAM,sBAAsB;;;;;;;;;EAGjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE;;;GAGG;AACH,eAAO,MAAM,6BAA6B;;;;;;EAExC,CAAC;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF;;;GAGG;AACH,eAAO,MAAM,4BAA4B;;;;;;EAEvC,CAAC;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF,qDAAqD;AACrD,eAAO,MAAM,oBAAoB;;;;;;EAE/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,kFAAkF;AAClF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;EAK5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA2C,CAAC;AAClF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CkB,CAAC"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,6GAA6G;AAC7G,eAAO,MAAM,iBAAiB;;;;;;;;;;;;EAI5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,mGAAmG;AACnG,eAAO,MAAM,WAAW,2CAIY,CAAC;AAErC,qCAAqC;AACrC,eAAO,MAAM,uBAAuB;;;;;;EAElC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,oCAAoC;AACpC,eAAO,MAAM,sBAAsB;;;;;;;;;EAGjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE;;;GAGG;AACH,eAAO,MAAM,6BAA6B;;;;;;EAExC,CAAC;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF;;;GAGG;AACH,eAAO,MAAM,4BAA4B;;;;;;EAEvC,CAAC;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF,qDAAqD;AACrD,eAAO,MAAM,oBAAoB;;;;;;EAE/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;;;GAIG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;EAGnC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,kFAAkF;AAClF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;EAK5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA2C,CAAC;AAClF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DkB,CAAC"}
package/dist/auth.js CHANGED
@@ -6,13 +6,19 @@ export const authSessionSchema = z.object({
6
6
  refreshToken: z.string(),
7
7
  refreshExpiresAt: z.string(), // ISO-8601
8
8
  });
9
+ /** Shared email primitive — RFC-validated, length-capped, case-normalized to match the backend. */
10
+ export const emailSchema = z
11
+ .string()
12
+ .email()
13
+ .max(254)
14
+ .transform((e) => e.toLowerCase());
9
15
  /** POST /auth/otp/request payload */
10
16
  export const otpRequestPayloadSchema = z.object({
11
- email: z.string().email(),
17
+ email: emailSchema,
12
18
  });
13
19
  /** POST /auth/otp/verify payload */
14
20
  export const otpVerifyPayloadSchema = z.object({
15
- email: z.string().email(),
21
+ email: emailSchema,
16
22
  code: z.string().regex(/^\d{6}$/),
17
23
  });
18
24
  /**
@@ -20,7 +26,7 @@ export const otpVerifyPayloadSchema = z.object({
20
26
  * @deprecated Magic-link auth remains API-supported but is hidden in mobile while the UX is revisited.
21
27
  */
22
28
  export const magicLinkRequestPayloadSchema = z.object({
23
- email: z.string().email(),
29
+ email: emailSchema,
24
30
  });
25
31
  /**
26
32
  * POST /auth/magic-link/verify payload
@@ -33,6 +39,15 @@ export const magicLinkVerifyPayloadSchema = z.object({
33
39
  export const refreshPayloadSchema = z.object({
34
40
  refreshToken: z.string().min(1),
35
41
  });
42
+ /**
43
+ * POST /auth/oauth/apple payload — native Sign in with Apple. The app posts the
44
+ * signed `identityToken` from `expo-apple-authentication`, plus the display name
45
+ * Apple supplies only on the first authorization (never re-sent).
46
+ */
47
+ export const appleSignInPayloadSchema = z.object({
48
+ identityToken: z.string().min(1).max(4096),
49
+ name: z.string().max(120).optional(),
50
+ });
36
51
  /** Lightweight session facts for mobile cold-start restore (navigation guard). */
37
52
  export const userSessionSchema = z.object({
38
53
  userId: z.string().uuid(),
@@ -64,6 +79,12 @@ export const authRoutes = {
64
79
  path: "/api/v1/auth/magic-link/verify",
65
80
  auth: "public",
66
81
  },
82
+ // Email CTA lands here over HTTPS, then bounces to the app deep link.
83
+ magicLinkCallback: {
84
+ method: "GET",
85
+ path: "/api/v1/auth/magic-link/callback",
86
+ auth: "public",
87
+ },
67
88
  refresh: {
68
89
  method: "POST",
69
90
  path: "/api/v1/auth/refresh",
@@ -84,5 +105,17 @@ export const authRoutes = {
84
105
  path: "/api/v1/auth/google/start",
85
106
  auth: "public",
86
107
  },
108
+ // Google redirects here after consent; the server bounces back to the app deep link.
109
+ googleCallback: {
110
+ method: "GET",
111
+ path: "/api/v1/auth/google/callback",
112
+ auth: "public",
113
+ },
114
+ // Native Sign in with Apple → identity token → token pair.
115
+ oauthApple: {
116
+ method: "POST",
117
+ path: "/api/v1/auth/oauth/apple",
118
+ auth: "public",
119
+ },
87
120
  };
88
121
  //# sourceMappingURL=auth.js.map
package/dist/auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
package/dist/common.d.ts CHANGED
@@ -76,6 +76,13 @@ export type RouteContract = {
76
76
  };
77
77
  /** Generic success envelope `{ data: T, meta? }` — admin-panel alias of apiSuccessSchema. */
78
78
  export declare const successEnvelope: typeof apiSuccessSchema;
79
+ /**
80
+ * Acknowledgement payload — the unwrapped `data` for endpoints that confirm an
81
+ * action without returning a body (e.g. `POST /auth/otp/request` 202, logout,
82
+ * push registration). The envelope still carries `responseCode`/`message`.
83
+ */
84
+ export declare const ackSchema: z.ZodNull;
85
+ export type Ack = z.infer<typeof ackSchema>;
79
86
  /** Untyped primitive schemas for ID fields and ISO date strings. */
80
87
  export declare const idSchema: z.ZodString;
81
88
  export declare const isoDateSchema: z.ZodString;
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,eAAe,kKAU1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,UAAU;;;;;;0BAIC,CAAC;AAEzB,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAE9C,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASzB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;;;;;;;;;;;;;;;kEAO/D;AAED,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAC1B,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,CAAC,CAAC;IACR,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE7D,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,WAAW,MAAM,EAAE,CAAC;IAC1B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;CACjD,CAAC;AAMF,6FAA6F;AAC7F,eAAO,MAAM,eAAe,yBAAmB,CAAC;AAEhD,oEAAoE;AACpE,eAAO,MAAM,QAAQ,aAAoB,CAAC;AAC1C,eAAO,MAAM,aAAa,aAAa,CAAC;AACxC,eAAO,MAAM,cAAc,aAA0C,CAAC;AAEtE,8DAA8D;AAC9D,eAAO,MAAM,eAAe;;;;;;;;;EAAoD,CAAC;AACjF,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,eAAe,kKAU1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,UAAU;;;;;;0BAIC,CAAC;AAEzB,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAE9C,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASzB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;;;;;;;;;;;;;;;kEAO/D;AAED,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAC1B,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,CAAC,CAAC;IACR,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE7D,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,WAAW,MAAM,EAAE,CAAC;IAC1B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;CACjD,CAAC;AAMF,6FAA6F;AAC7F,eAAO,MAAM,eAAe,yBAAmB,CAAC;AAEhD;;;;GAIG;AACH,eAAO,MAAM,SAAS,WAAW,CAAC;AAClC,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAE5C,oEAAoE;AACpE,eAAO,MAAM,QAAQ,aAAoB,CAAC;AAC1C,eAAO,MAAM,aAAa,aAAa,CAAC;AACxC,eAAO,MAAM,cAAc,aAA0C,CAAC;AAEtE,8DAA8D;AAC9D,eAAO,MAAM,eAAe;;;;;;;;;EAAoD,CAAC;AACjF,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
package/dist/common.js CHANGED
@@ -38,6 +38,12 @@ export function apiSuccessSchema(data) {
38
38
  // ---------------------------------------------------------------------------
39
39
  /** Generic success envelope `{ data: T, meta? }` — admin-panel alias of apiSuccessSchema. */
40
40
  export const successEnvelope = apiSuccessSchema;
41
+ /**
42
+ * Acknowledgement payload — the unwrapped `data` for endpoints that confirm an
43
+ * action without returning a body (e.g. `POST /auth/otp/request` 202, logout,
44
+ * push registration). The envelope still carries `responseCode`/`message`.
45
+ */
46
+ export const ackSchema = z.null();
41
47
  /** Untyped primitive schemas for ID fields and ISO date strings. */
42
48
  export const idSchema = z.string().min(1);
43
49
  export const isoDateSchema = z.string();
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC;IACpC,kBAAkB;IAClB,iBAAiB;IACjB,WAAW;IACX,kBAAkB;IAClB,WAAW;IACX,UAAU;IACV,cAAc;IACd,gBAAgB;IAChB,gBAAgB;CACjB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC;KACxB,MAAM,CAAC;IACN,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC7C,CAAC;KACD,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAIzB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IACzB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;KAChC,CAAC;IACF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC;AAIH,MAAM,UAAU,gBAAgB,CAAyB,IAAO;IAC9D,OAAO,CAAC,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QACxB,IAAI;QACJ,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;KACpB,CAAC,CAAC;AACL,CAAC;AAiBD,8EAA8E;AAC9E,gDAAgD;AAChD,8EAA8E;AAE9E,6FAA6F;AAC7F,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAEhD,oEAAoE;AACpE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;AAEtE,8DAA8D;AAC9D,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC;IACpC,kBAAkB;IAClB,iBAAiB;IACjB,WAAW;IACX,kBAAkB;IAClB,WAAW;IACX,UAAU;IACV,cAAc;IACd,gBAAgB;IAChB,gBAAgB;CACjB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC;KACxB,MAAM,CAAC;IACN,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC7C,CAAC;KACD,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAIzB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IACzB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;KAChC,CAAC;IACF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC;AAIH,MAAM,UAAU,gBAAgB,CAAyB,IAAO;IAC9D,OAAO,CAAC,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QACxB,IAAI;QACJ,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;KACpB,CAAC,CAAC;AACL,CAAC;AAiBD,8EAA8E;AAC9E,gDAAgD;AAChD,8EAA8E;AAE9E,6FAA6F;AAC7F,MAAM,CAAC,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAEhD;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAGlC,oEAAoE;AACpE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;AAEtE,8DAA8D;AAC9D,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -13,4 +13,5 @@ export * from "./settings";
13
13
  export * from "./subscriptions";
14
14
  export * from "./checkins";
15
15
  export * from "./push";
16
+ export * from "./uploads";
16
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -13,4 +13,5 @@ export * from "./settings";
13
13
  export * from "./subscriptions";
14
14
  export * from "./checkins";
15
15
  export * from "./push";
16
+ export * from "./uploads";
16
17
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC"}
@@ -0,0 +1,194 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Generic presigned-upload contract. Clients ask for a presigned PUT URL, upload
4
+ * the bytes straight to R2, then confirm. `intent` keeps one flow reusable across
5
+ * upload kinds — `avatar` ships now; `progress_photo`/`meal_photo` are reserved
6
+ * for the roadmap features and rejected by the service until wired up.
7
+ */
8
+ export declare const uploadIntentSchema: z.ZodEnum<["avatar", "progress_photo", "meal_photo"]>;
9
+ export type UploadIntent = z.infer<typeof uploadIntentSchema>;
10
+ export declare const uploadStatusSchema: z.ZodEnum<["pending", "uploaded", "verified", "failed", "expired"]>;
11
+ export type UploadStatus = z.infer<typeof uploadStatusSchema>;
12
+ /** Image formats accepted for image intents (avatar/photos). */
13
+ export declare const imageExtensionSchema: z.ZodEnum<["jpg", "jpeg", "png", "webp", "heic"]>;
14
+ export type ImageExtension = z.infer<typeof imageExtensionSchema>;
15
+ export declare const requestUploadPayloadSchema: z.ZodObject<{
16
+ intent: z.ZodEnum<["avatar", "progress_photo", "meal_photo"]>;
17
+ fileExtension: z.ZodEnum<["jpg", "jpeg", "png", "webp", "heic"]>;
18
+ }, "strip", z.ZodTypeAny, {
19
+ intent: "avatar" | "progress_photo" | "meal_photo";
20
+ fileExtension: "jpg" | "jpeg" | "png" | "webp" | "heic";
21
+ }, {
22
+ intent: "avatar" | "progress_photo" | "meal_photo";
23
+ fileExtension: "jpg" | "jpeg" | "png" | "webp" | "heic";
24
+ }>;
25
+ export type RequestUploadPayload = z.infer<typeof requestUploadPayloadSchema>;
26
+ export declare const requestUploadResultSchema: z.ZodObject<{
27
+ uploadId: z.ZodString;
28
+ /** Presigned PUT URL — the client uploads the file bytes here. */
29
+ uploadUrl: z.ZodString;
30
+ /** Content-Type the client MUST send on the PUT so the signature matches. */
31
+ contentType: z.ZodString;
32
+ key: z.ZodString;
33
+ /** Public read URL the object will live at once verified. */
34
+ publicUrl: z.ZodString;
35
+ /**
36
+ * Server-owned max upload size in bytes for this intent. The client SHOULD
37
+ * reject larger files before uploading; the server re-checks on verify, so a
38
+ * tampered client can't bypass it.
39
+ */
40
+ maxBytes: z.ZodNumber;
41
+ expiresAt: z.ZodDate;
42
+ }, "strip", z.ZodTypeAny, {
43
+ key: string;
44
+ uploadId: string;
45
+ uploadUrl: string;
46
+ contentType: string;
47
+ publicUrl: string;
48
+ maxBytes: number;
49
+ expiresAt: Date;
50
+ }, {
51
+ key: string;
52
+ uploadId: string;
53
+ uploadUrl: string;
54
+ contentType: string;
55
+ publicUrl: string;
56
+ maxBytes: number;
57
+ expiresAt: Date;
58
+ }>;
59
+ export type RequestUploadResult = z.infer<typeof requestUploadResultSchema>;
60
+ export declare const requestUploadResponseSchema: z.ZodObject<{
61
+ success: z.ZodLiteral<true>;
62
+ data: z.ZodObject<{
63
+ uploadId: z.ZodString;
64
+ /** Presigned PUT URL — the client uploads the file bytes here. */
65
+ uploadUrl: z.ZodString;
66
+ /** Content-Type the client MUST send on the PUT so the signature matches. */
67
+ contentType: z.ZodString;
68
+ key: z.ZodString;
69
+ /** Public read URL the object will live at once verified. */
70
+ publicUrl: z.ZodString;
71
+ /**
72
+ * Server-owned max upload size in bytes for this intent. The client SHOULD
73
+ * reject larger files before uploading; the server re-checks on verify, so a
74
+ * tampered client can't bypass it.
75
+ */
76
+ maxBytes: z.ZodNumber;
77
+ expiresAt: z.ZodDate;
78
+ }, "strip", z.ZodTypeAny, {
79
+ key: string;
80
+ uploadId: string;
81
+ uploadUrl: string;
82
+ contentType: string;
83
+ publicUrl: string;
84
+ maxBytes: number;
85
+ expiresAt: Date;
86
+ }, {
87
+ key: string;
88
+ uploadId: string;
89
+ uploadUrl: string;
90
+ contentType: string;
91
+ publicUrl: string;
92
+ maxBytes: number;
93
+ expiresAt: Date;
94
+ }>;
95
+ responseCode: z.ZodNumber;
96
+ message: z.ZodString;
97
+ }, "strip", z.ZodTypeAny, {
98
+ message: string;
99
+ success: true;
100
+ responseCode: number;
101
+ data: {
102
+ key: string;
103
+ uploadId: string;
104
+ uploadUrl: string;
105
+ contentType: string;
106
+ publicUrl: string;
107
+ maxBytes: number;
108
+ expiresAt: Date;
109
+ };
110
+ }, {
111
+ message: string;
112
+ success: true;
113
+ responseCode: number;
114
+ data: {
115
+ key: string;
116
+ uploadId: string;
117
+ uploadUrl: string;
118
+ contentType: string;
119
+ publicUrl: string;
120
+ maxBytes: number;
121
+ expiresAt: Date;
122
+ };
123
+ }>;
124
+ export declare const verifyUploadResultSchema: z.ZodObject<{
125
+ uploadId: z.ZodString;
126
+ status: z.ZodEnum<["pending", "uploaded", "verified", "failed", "expired"]>;
127
+ publicUrl: z.ZodString;
128
+ size: z.ZodNullable<z.ZodNumber>;
129
+ }, "strip", z.ZodTypeAny, {
130
+ status: "failed" | "expired" | "pending" | "uploaded" | "verified";
131
+ uploadId: string;
132
+ publicUrl: string;
133
+ size: number | null;
134
+ }, {
135
+ status: "failed" | "expired" | "pending" | "uploaded" | "verified";
136
+ uploadId: string;
137
+ publicUrl: string;
138
+ size: number | null;
139
+ }>;
140
+ export type VerifyUploadResult = z.infer<typeof verifyUploadResultSchema>;
141
+ export declare const verifyUploadResponseSchema: z.ZodObject<{
142
+ success: z.ZodLiteral<true>;
143
+ data: z.ZodObject<{
144
+ uploadId: z.ZodString;
145
+ status: z.ZodEnum<["pending", "uploaded", "verified", "failed", "expired"]>;
146
+ publicUrl: z.ZodString;
147
+ size: z.ZodNullable<z.ZodNumber>;
148
+ }, "strip", z.ZodTypeAny, {
149
+ status: "failed" | "expired" | "pending" | "uploaded" | "verified";
150
+ uploadId: string;
151
+ publicUrl: string;
152
+ size: number | null;
153
+ }, {
154
+ status: "failed" | "expired" | "pending" | "uploaded" | "verified";
155
+ uploadId: string;
156
+ publicUrl: string;
157
+ size: number | null;
158
+ }>;
159
+ responseCode: z.ZodNumber;
160
+ message: z.ZodString;
161
+ }, "strip", z.ZodTypeAny, {
162
+ message: string;
163
+ success: true;
164
+ responseCode: number;
165
+ data: {
166
+ status: "failed" | "expired" | "pending" | "uploaded" | "verified";
167
+ uploadId: string;
168
+ publicUrl: string;
169
+ size: number | null;
170
+ };
171
+ }, {
172
+ message: string;
173
+ success: true;
174
+ responseCode: number;
175
+ data: {
176
+ status: "failed" | "expired" | "pending" | "uploaded" | "verified";
177
+ uploadId: string;
178
+ publicUrl: string;
179
+ size: number | null;
180
+ };
181
+ }>;
182
+ export declare const uploadRoutes: {
183
+ requestUpload: {
184
+ method: "POST";
185
+ path: "/api/v1/uploads/presigned-url";
186
+ auth: "user";
187
+ };
188
+ verifyUpload: {
189
+ method: "POST";
190
+ path: "/api/v1/uploads/:id/verify";
191
+ auth: "user";
192
+ };
193
+ };
194
+ //# sourceMappingURL=uploads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploads.d.ts","sourceRoot":"","sources":["../src/uploads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,uDAAqD,CAAC;AACrF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,kBAAkB,qEAAmE,CAAC;AACnG,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,gEAAgE;AAChE,eAAO,MAAM,oBAAoB,mDAAiD,CAAC;AACnF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,0BAA0B;;;;;;;;;EAGrC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,yBAAyB;;IAEpC,kEAAkE;;IAElE,6EAA6E;;;IAG7E,6DAA6D;;IAE7D;;;;OAIG;;;;;;;;;;;;;;;;;;;EAGH,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,eAAO,MAAM,2BAA2B;;;;QAhBtC,kEAAkE;;QAElE,6EAA6E;;;QAG7E,6DAA6D;;QAE7D;;;;WAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKiF,CAAC;AAEvF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;EAKnC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA6C,CAAC;AAErF,eAAO,MAAM,YAAY;;;;;;;;;;;CAWgB,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { z } from "zod";
2
+ import { apiSuccessSchema } from "./common";
3
+ /**
4
+ * Generic presigned-upload contract. Clients ask for a presigned PUT URL, upload
5
+ * the bytes straight to R2, then confirm. `intent` keeps one flow reusable across
6
+ * upload kinds — `avatar` ships now; `progress_photo`/`meal_photo` are reserved
7
+ * for the roadmap features and rejected by the service until wired up.
8
+ */
9
+ export const uploadIntentSchema = z.enum(["avatar", "progress_photo", "meal_photo"]);
10
+ export const uploadStatusSchema = z.enum(["pending", "uploaded", "verified", "failed", "expired"]);
11
+ /** Image formats accepted for image intents (avatar/photos). */
12
+ export const imageExtensionSchema = z.enum(["jpg", "jpeg", "png", "webp", "heic"]);
13
+ export const requestUploadPayloadSchema = z.object({
14
+ intent: uploadIntentSchema,
15
+ fileExtension: imageExtensionSchema,
16
+ });
17
+ export const requestUploadResultSchema = z.object({
18
+ uploadId: z.string().uuid(),
19
+ /** Presigned PUT URL — the client uploads the file bytes here. */
20
+ uploadUrl: z.string().url(),
21
+ /** Content-Type the client MUST send on the PUT so the signature matches. */
22
+ contentType: z.string(),
23
+ key: z.string(),
24
+ /** Public read URL the object will live at once verified. */
25
+ publicUrl: z.string().url(),
26
+ /**
27
+ * Server-owned max upload size in bytes for this intent. The client SHOULD
28
+ * reject larger files before uploading; the server re-checks on verify, so a
29
+ * tampered client can't bypass it.
30
+ */
31
+ maxBytes: z.number().int().positive(),
32
+ expiresAt: z.coerce.date(),
33
+ });
34
+ export const requestUploadResponseSchema = apiSuccessSchema(requestUploadResultSchema);
35
+ export const verifyUploadResultSchema = z.object({
36
+ uploadId: z.string().uuid(),
37
+ status: uploadStatusSchema,
38
+ publicUrl: z.string().url(),
39
+ size: z.number().int().nullable(),
40
+ });
41
+ export const verifyUploadResponseSchema = apiSuccessSchema(verifyUploadResultSchema);
42
+ export const uploadRoutes = {
43
+ requestUpload: {
44
+ method: "POST",
45
+ path: "/api/v1/uploads/presigned-url",
46
+ auth: "user",
47
+ },
48
+ verifyUpload: {
49
+ method: "POST",
50
+ path: "/api/v1/uploads/:id/verify",
51
+ auth: "user",
52
+ },
53
+ };
54
+ //# sourceMappingURL=uploads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploads.js","sourceRoot":"","sources":["../src/uploads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAsB,MAAM,UAAU,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC;AAGrF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAGnG,gEAAgE;AAChE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAGnF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,kBAAkB;IAC1B,aAAa,EAAE,oBAAoB;CACpC,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IAC3B,kEAAkE;IAClE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAC3B,6EAA6E;IAC7E,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,6DAA6D;IAC7D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAC3B;;;;OAIG;IACH,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACrC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,2BAA2B,GAAG,gBAAgB,CAAC,yBAAyB,CAAC,CAAC;AAEvF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IAC3B,MAAM,EAAE,kBAAkB;IAC1B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,gBAAgB,CAAC,wBAAwB,CAAC,CAAC;AAErF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,aAAa,EAAE;QACb,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,+BAA+B;QACrC,IAAI,EAAE,MAAM;KACb;IACD,YAAY,EAAE;QACZ,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,4BAA4B;QAClC,IAAI,EAAE,MAAM;KACb;CACsC,CAAC"}
package/dist/users.d.ts CHANGED
@@ -9,6 +9,7 @@ export declare const userProfileSchema: z.ZodObject<{
9
9
  id: z.ZodString;
10
10
  email: z.ZodString;
11
11
  name: z.ZodString;
12
+ image: z.ZodNullable<z.ZodString>;
12
13
  goal: z.ZodNullable<z.ZodEnum<["lose", "maintain", "gain"]>>;
13
14
  sex: z.ZodNullable<z.ZodEnum<["male", "female", "prefer_not_to_say"]>>;
14
15
  age: z.ZodNullable<z.ZodNumber>;
@@ -36,6 +37,7 @@ export declare const userProfileSchema: z.ZodObject<{
36
37
  id: string;
37
38
  createdAt: Date;
38
39
  email: string;
40
+ image: string | null;
39
41
  goal: "lose" | "maintain" | "gain" | null;
40
42
  sex: "male" | "female" | "prefer_not_to_say" | null;
41
43
  age: number | null;
@@ -62,6 +64,7 @@ export declare const userProfileSchema: z.ZodObject<{
62
64
  id: string;
63
65
  createdAt: Date;
64
66
  email: string;
67
+ image: string | null;
65
68
  goal: "lose" | "maintain" | "gain" | null;
66
69
  sex: "male" | "female" | "prefer_not_to_say" | null;
67
70
  age: number | null;
@@ -91,6 +94,7 @@ export declare const getMeResponseSchema: z.ZodObject<{
91
94
  id: z.ZodString;
92
95
  email: z.ZodString;
93
96
  name: z.ZodString;
97
+ image: z.ZodNullable<z.ZodString>;
94
98
  goal: z.ZodNullable<z.ZodEnum<["lose", "maintain", "gain"]>>;
95
99
  sex: z.ZodNullable<z.ZodEnum<["male", "female", "prefer_not_to_say"]>>;
96
100
  age: z.ZodNullable<z.ZodNumber>;
@@ -118,6 +122,7 @@ export declare const getMeResponseSchema: z.ZodObject<{
118
122
  id: string;
119
123
  createdAt: Date;
120
124
  email: string;
125
+ image: string | null;
121
126
  goal: "lose" | "maintain" | "gain" | null;
122
127
  sex: "male" | "female" | "prefer_not_to_say" | null;
123
128
  age: number | null;
@@ -144,6 +149,7 @@ export declare const getMeResponseSchema: z.ZodObject<{
144
149
  id: string;
145
150
  createdAt: Date;
146
151
  email: string;
152
+ image: string | null;
147
153
  goal: "lose" | "maintain" | "gain" | null;
148
154
  sex: "male" | "female" | "prefer_not_to_say" | null;
149
155
  age: number | null;
@@ -177,6 +183,7 @@ export declare const getMeResponseSchema: z.ZodObject<{
177
183
  id: string;
178
184
  createdAt: Date;
179
185
  email: string;
186
+ image: string | null;
180
187
  goal: "lose" | "maintain" | "gain" | null;
181
188
  sex: "male" | "female" | "prefer_not_to_say" | null;
182
189
  age: number | null;
@@ -208,6 +215,7 @@ export declare const getMeResponseSchema: z.ZodObject<{
208
215
  id: string;
209
216
  createdAt: Date;
210
217
  email: string;
218
+ image: string | null;
211
219
  goal: "lose" | "maintain" | "gain" | null;
212
220
  sex: "male" | "female" | "prefer_not_to_say" | null;
213
221
  age: number | null;
@@ -234,6 +242,7 @@ export declare const getMeResponseSchema: z.ZodObject<{
234
242
  export type GetMeResponse = z.infer<typeof getMeResponseSchema>;
235
243
  export declare const updateProfilePayloadSchema: z.ZodObject<{
236
244
  firstName: z.ZodOptional<z.ZodString>;
245
+ image: z.ZodOptional<z.ZodNullable<z.ZodString>>;
237
246
  goal: z.ZodOptional<z.ZodEnum<["lose", "maintain", "gain"]>>;
238
247
  currentWeightKg: z.ZodOptional<z.ZodNumber>;
239
248
  targetWeightKg: z.ZodOptional<z.ZodNumber>;
@@ -248,6 +257,7 @@ export declare const updateProfilePayloadSchema: z.ZodObject<{
248
257
  onboardingStep: z.ZodOptional<z.ZodNumber>;
249
258
  activationIntent: z.ZodOptional<z.ZodEnum<["skip", "start_free_trial", "complete"]>>;
250
259
  }, "strip", z.ZodTypeAny, {
260
+ image?: string | null | undefined;
251
261
  goal?: "lose" | "maintain" | "gain" | undefined;
252
262
  sex?: "male" | "female" | "prefer_not_to_say" | undefined;
253
263
  heightCm?: number | undefined;
@@ -263,6 +273,7 @@ export declare const updateProfilePayloadSchema: z.ZodObject<{
263
273
  unitSystem?: "metric" | "imperial" | undefined;
264
274
  activationIntent?: "skip" | "start_free_trial" | "complete" | undefined;
265
275
  }, {
276
+ image?: string | null | undefined;
266
277
  goal?: "lose" | "maintain" | "gain" | undefined;
267
278
  sex?: "male" | "female" | "prefer_not_to_say" | undefined;
268
279
  heightCm?: number | undefined;
@@ -285,6 +296,7 @@ export declare const updateProfileResponseSchema: z.ZodObject<{
285
296
  id: z.ZodString;
286
297
  email: z.ZodString;
287
298
  name: z.ZodString;
299
+ image: z.ZodNullable<z.ZodString>;
288
300
  goal: z.ZodNullable<z.ZodEnum<["lose", "maintain", "gain"]>>;
289
301
  sex: z.ZodNullable<z.ZodEnum<["male", "female", "prefer_not_to_say"]>>;
290
302
  age: z.ZodNullable<z.ZodNumber>;
@@ -312,6 +324,7 @@ export declare const updateProfileResponseSchema: z.ZodObject<{
312
324
  id: string;
313
325
  createdAt: Date;
314
326
  email: string;
327
+ image: string | null;
315
328
  goal: "lose" | "maintain" | "gain" | null;
316
329
  sex: "male" | "female" | "prefer_not_to_say" | null;
317
330
  age: number | null;
@@ -338,6 +351,7 @@ export declare const updateProfileResponseSchema: z.ZodObject<{
338
351
  id: string;
339
352
  createdAt: Date;
340
353
  email: string;
354
+ image: string | null;
341
355
  goal: "lose" | "maintain" | "gain" | null;
342
356
  sex: "male" | "female" | "prefer_not_to_say" | null;
343
357
  age: number | null;
@@ -371,6 +385,7 @@ export declare const updateProfileResponseSchema: z.ZodObject<{
371
385
  id: string;
372
386
  createdAt: Date;
373
387
  email: string;
388
+ image: string | null;
374
389
  goal: "lose" | "maintain" | "gain" | null;
375
390
  sex: "male" | "female" | "prefer_not_to_say" | null;
376
391
  age: number | null;
@@ -402,6 +417,7 @@ export declare const updateProfileResponseSchema: z.ZodObject<{
402
417
  id: string;
403
418
  createdAt: Date;
404
419
  email: string;
420
+ image: string | null;
405
421
  goal: "lose" | "maintain" | "gain" | null;
406
422
  sex: "male" | "female" | "prefer_not_to_say" | null;
407
423
  age: number | null;
@@ -1 +1 @@
1
- {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../src/users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,UAAU,yCAAuC,CAAC;AAC/D,eAAO,MAAM,SAAS,oDAAkD,CAAC;AACzE,eAAO,MAAM,UAAU,gCAA8B,CAAC;AACtD,eAAO,MAAM,mBAAmB,2DAAyD,CAAC;AAC1F,eAAO,MAAM,mBAAmB,wEAM9B,CAAC;AACH,eAAO,MAAM,sBAAsB,qDAAmD,CAAC;AAEvF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0B5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAsC,CAAC;AAEvE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBrC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAsC,CAAC;AAE/E,eAAO,MAAM,sBAAsB,WAAW,CAAC;AAE/C,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;CAgBkB,CAAC"}
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../src/users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,UAAU,yCAAuC,CAAC;AAC/D,eAAO,MAAM,SAAS,oDAAkD,CAAC;AACzE,eAAO,MAAM,UAAU,gCAA8B,CAAC;AACtD,eAAO,MAAM,mBAAmB,2DAAyD,CAAC;AAC1F,eAAO,MAAM,mBAAmB,wEAM9B,CAAC;AACH,eAAO,MAAM,sBAAsB,qDAAmD,CAAC;AAEvF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2B5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAsC,CAAC;AAEvE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqBrC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAsC,CAAC;AAE/E,eAAO,MAAM,sBAAsB,WAAW,CAAC;AAE/C,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;CAgBkB,CAAC"}
package/dist/users.js CHANGED
@@ -16,6 +16,7 @@ export const userProfileSchema = z.object({
16
16
  id: z.string().uuid(),
17
17
  email: z.string().email(),
18
18
  name: z.string(),
19
+ image: z.string().url().nullable(),
19
20
  goal: goalSchema.nullable(),
20
21
  sex: sexSchema.nullable(),
21
22
  age: z.number().int().nullable(),
@@ -42,6 +43,9 @@ export const userProfileSchema = z.object({
42
43
  export const getMeResponseSchema = apiSuccessSchema(userProfileSchema);
43
44
  export const updateProfilePayloadSchema = z.object({
44
45
  firstName: z.string().trim().min(1).optional(),
46
+ // Profile avatar URL — a verified R2 public URL from the upload flow, or null
47
+ // to clear it. Sending only `{ image }` is valid (every field is optional).
48
+ image: z.string().url().nullable().optional(),
45
49
  goal: goalSchema.optional(),
46
50
  currentWeightKg: z.number().positive().optional(),
47
51
  targetWeightKg: z.number().positive().optional(),
package/dist/users.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"users.js","sourceRoot":"","sources":["../src/users.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"users.js","sourceRoot":"","sources":["../src/users.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@beorchid-llc/thrivo-contracts",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "description": "Shared Thrivo API request and response contracts.",
5
5
  "type": "module",
6
6
  "private": false,
@@ -47,6 +47,10 @@
47
47
  "./subscriptions": {
48
48
  "types": "./dist/subscriptions.d.ts",
49
49
  "import": "./dist/subscriptions.js"
50
+ },
51
+ "./uploads": {
52
+ "types": "./dist/uploads.d.ts",
53
+ "import": "./dist/uploads.js"
50
54
  }
51
55
  },
52
56
  "files": [