@beorchid-llc/thrivo-contracts 0.13.0 → 0.15.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 +323 -10
- package/dist/admin.d.ts.map +1 -1
- package/dist/admin.js +24 -4
- package/dist/admin.js.map +1 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +5 -3
- package/dist/auth.js.map +1 -1
- package/dist/common.d.ts +5 -5
- package/dist/common.js +1 -1
- package/dist/common.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/leads.d.ts +4 -4
- package/dist/leads.d.ts.map +1 -1
- package/dist/leads.js +2 -2
- package/dist/leads.js.map +1 -1
- package/dist/tdee.d.ts +53 -0
- package/dist/tdee.d.ts.map +1 -0
- package/dist/tdee.js +50 -0
- package/dist/tdee.js.map +1 -0
- package/package.json +5 -1
package/dist/admin.d.ts
CHANGED
|
@@ -72,27 +72,90 @@ export declare const adminOtpVerifyPayloadSchema: z.ZodObject<{
|
|
|
72
72
|
email: string;
|
|
73
73
|
}>;
|
|
74
74
|
export type AdminOtpVerifyPayload = z.infer<typeof adminOtpVerifyPayloadSchema>;
|
|
75
|
+
/**
|
|
76
|
+
* Offset pagination — still the shape for every admin list endpoint that
|
|
77
|
+
* hasn't been converted off OFFSET yet (subscriptions, tips, email-logs,
|
|
78
|
+
* audit-log; none of those routes exist server-side as of R5-4, but the
|
|
79
|
+
* contract is defined ahead of the implementation). Do NOT reuse this for a
|
|
80
|
+
* new list endpoint — SYSTEM_DESIGN §373 mandates keyset for any unbounded
|
|
81
|
+
* list; use `adminKeysetPaginationSchema` instead.
|
|
82
|
+
*/
|
|
83
|
+
export declare const adminPaginationSchema: z.ZodObject<{
|
|
84
|
+
page: z.ZodNumber;
|
|
85
|
+
pageSize: z.ZodNumber;
|
|
86
|
+
total: z.ZodNumber;
|
|
87
|
+
totalPages: z.ZodNumber;
|
|
88
|
+
}, "strip", z.ZodTypeAny, {
|
|
89
|
+
page: number;
|
|
90
|
+
pageSize: number;
|
|
91
|
+
total: number;
|
|
92
|
+
totalPages: number;
|
|
93
|
+
}, {
|
|
94
|
+
page: number;
|
|
95
|
+
pageSize: number;
|
|
96
|
+
total: number;
|
|
97
|
+
totalPages: number;
|
|
98
|
+
}>;
|
|
99
|
+
export type AdminPagination = z.infer<typeof adminPaginationSchema>;
|
|
100
|
+
export declare const adminPaginated: <T extends z.ZodTypeAny>(item: T) => z.ZodObject<{
|
|
101
|
+
items: z.ZodArray<T, "many">;
|
|
102
|
+
pagination: z.ZodObject<{
|
|
103
|
+
page: z.ZodNumber;
|
|
104
|
+
pageSize: z.ZodNumber;
|
|
105
|
+
total: z.ZodNumber;
|
|
106
|
+
totalPages: z.ZodNumber;
|
|
107
|
+
}, "strip", z.ZodTypeAny, {
|
|
108
|
+
page: number;
|
|
109
|
+
pageSize: number;
|
|
110
|
+
total: number;
|
|
111
|
+
totalPages: number;
|
|
112
|
+
}, {
|
|
113
|
+
page: number;
|
|
114
|
+
pageSize: number;
|
|
115
|
+
total: number;
|
|
116
|
+
totalPages: number;
|
|
117
|
+
}>;
|
|
118
|
+
}, "strip", z.ZodTypeAny, {
|
|
119
|
+
items: T["_output"][];
|
|
120
|
+
pagination: {
|
|
121
|
+
page: number;
|
|
122
|
+
pageSize: number;
|
|
123
|
+
total: number;
|
|
124
|
+
totalPages: number;
|
|
125
|
+
};
|
|
126
|
+
}, {
|
|
127
|
+
items: T["_input"][];
|
|
128
|
+
pagination: {
|
|
129
|
+
page: number;
|
|
130
|
+
pageSize: number;
|
|
131
|
+
total: number;
|
|
132
|
+
totalPages: number;
|
|
133
|
+
};
|
|
134
|
+
}>;
|
|
75
135
|
/**
|
|
76
136
|
* Keyset pagination (R5-4/I16) — no `page`/`totalPages`, since a numeric page
|
|
77
137
|
* offset is exactly the "scan-and-discard, drifts under concurrent inserts"
|
|
78
|
-
* failure mode this
|
|
138
|
+
* failure mode this replaces (SYSTEM_DESIGN §373). `nextCursor` is opaque;
|
|
79
139
|
* pass it back as `cursor` to fetch the next page, null on the last page.
|
|
140
|
+
* Used by `admin/users` and `admin/leads`, the two endpoints R5-4 actually
|
|
141
|
+
* converted — every other admin list endpoint still uses
|
|
142
|
+
* `adminPaginationSchema` above until it gets the same treatment.
|
|
80
143
|
*/
|
|
81
|
-
export declare const
|
|
144
|
+
export declare const adminKeysetPaginationSchema: z.ZodObject<{
|
|
82
145
|
limit: z.ZodNumber;
|
|
83
146
|
total: z.ZodNumber;
|
|
84
147
|
nextCursor: z.ZodNullable<z.ZodString>;
|
|
85
148
|
}, "strip", z.ZodTypeAny, {
|
|
86
149
|
nextCursor: string | null;
|
|
87
|
-
limit: number;
|
|
88
150
|
total: number;
|
|
151
|
+
limit: number;
|
|
89
152
|
}, {
|
|
90
153
|
nextCursor: string | null;
|
|
91
|
-
limit: number;
|
|
92
154
|
total: number;
|
|
155
|
+
limit: number;
|
|
93
156
|
}>;
|
|
94
|
-
export type
|
|
95
|
-
export declare const
|
|
157
|
+
export type AdminKeysetPagination = z.infer<typeof adminKeysetPaginationSchema>;
|
|
158
|
+
export declare const adminKeysetPaginated: <T extends z.ZodTypeAny>(item: T) => z.ZodObject<{
|
|
96
159
|
items: z.ZodArray<T, "many">;
|
|
97
160
|
pagination: z.ZodObject<{
|
|
98
161
|
limit: z.ZodNumber;
|
|
@@ -100,26 +163,26 @@ export declare const adminPaginated: <T extends z.ZodTypeAny>(item: T) => z.ZodO
|
|
|
100
163
|
nextCursor: z.ZodNullable<z.ZodString>;
|
|
101
164
|
}, "strip", z.ZodTypeAny, {
|
|
102
165
|
nextCursor: string | null;
|
|
103
|
-
limit: number;
|
|
104
166
|
total: number;
|
|
167
|
+
limit: number;
|
|
105
168
|
}, {
|
|
106
169
|
nextCursor: string | null;
|
|
107
|
-
limit: number;
|
|
108
170
|
total: number;
|
|
171
|
+
limit: number;
|
|
109
172
|
}>;
|
|
110
173
|
}, "strip", z.ZodTypeAny, {
|
|
111
174
|
items: T["_output"][];
|
|
112
175
|
pagination: {
|
|
113
176
|
nextCursor: string | null;
|
|
114
|
-
limit: number;
|
|
115
177
|
total: number;
|
|
178
|
+
limit: number;
|
|
116
179
|
};
|
|
117
180
|
}, {
|
|
118
181
|
items: T["_input"][];
|
|
119
182
|
pagination: {
|
|
120
183
|
nextCursor: string | null;
|
|
121
|
-
limit: number;
|
|
122
184
|
total: number;
|
|
185
|
+
limit: number;
|
|
123
186
|
};
|
|
124
187
|
}>;
|
|
125
188
|
export declare const adminEntitlementSchema: z.ZodEnum<["free", "premium"]>;
|
|
@@ -649,6 +712,256 @@ export declare const adminUserDetailResponseSchema: z.ZodObject<{
|
|
|
649
712
|
};
|
|
650
713
|
}>;
|
|
651
714
|
export type AdminUserDetailResponse = z.infer<typeof adminUserDetailResponseSchema>;
|
|
715
|
+
/** GET /admin/users — keyset-paginated (R5-4/I16); see `adminKeysetPaginated` above. */
|
|
716
|
+
export declare const adminUserListResponseSchema: z.ZodObject<{
|
|
717
|
+
items: z.ZodArray<z.ZodObject<Omit<{
|
|
718
|
+
id: z.ZodString;
|
|
719
|
+
email: z.ZodString;
|
|
720
|
+
image: z.ZodNullable<z.ZodString>;
|
|
721
|
+
goal: z.ZodNullable<z.ZodEnum<["lose", "maintain", "gain"]>>;
|
|
722
|
+
sex: z.ZodNullable<z.ZodEnum<["male", "female", "prefer_not_to_say"]>>;
|
|
723
|
+
age: z.ZodNullable<z.ZodNumber>;
|
|
724
|
+
heightCm: z.ZodNullable<z.ZodString>;
|
|
725
|
+
weightKg: z.ZodNullable<z.ZodString>;
|
|
726
|
+
targetWeightKg: z.ZodNullable<z.ZodString>;
|
|
727
|
+
tdeeKcal: z.ZodNullable<z.ZodNumber>;
|
|
728
|
+
dailyTargetKcal: z.ZodNullable<z.ZodNumber>;
|
|
729
|
+
targetProteinG: z.ZodNullable<z.ZodNumber>;
|
|
730
|
+
targetCarbsG: z.ZodNullable<z.ZodNumber>;
|
|
731
|
+
targetFatG: z.ZodNullable<z.ZodNumber>;
|
|
732
|
+
activityLevel: z.ZodNullable<z.ZodEnum<["sedentary", "light", "moderate", "active", "very_active"]>>;
|
|
733
|
+
manualDailyTargetKcal: z.ZodNullable<z.ZodNumber>;
|
|
734
|
+
notifyTimes: z.ZodNullable<z.ZodArray<z.ZodString, "many">>;
|
|
735
|
+
timezone: z.ZodNullable<z.ZodString>;
|
|
736
|
+
tier: z.ZodEnum<["free", "premium"]>;
|
|
737
|
+
accountStatus: z.ZodEnum<["dormant", "free_trial", "free_plan", "paid"]>;
|
|
738
|
+
trialEndsAt: z.ZodNullable<z.ZodDate>;
|
|
739
|
+
onboardingStep: z.ZodNumber;
|
|
740
|
+
isOnboarded: z.ZodBoolean;
|
|
741
|
+
isOnboardingSkipped: z.ZodBoolean;
|
|
742
|
+
createdAt: z.ZodDate;
|
|
743
|
+
} & {
|
|
744
|
+
name: z.ZodNullable<z.ZodString>;
|
|
745
|
+
onboardingSkipped: z.ZodBoolean;
|
|
746
|
+
subscriptionStatus: z.ZodNullable<z.ZodString>;
|
|
747
|
+
deletedAt: z.ZodNullable<z.ZodDate>;
|
|
748
|
+
updatedAt: z.ZodDate;
|
|
749
|
+
status: z.ZodEnum<["active", "suspended", "deleted"]>;
|
|
750
|
+
lastActiveAt: z.ZodNullable<z.ZodString>;
|
|
751
|
+
totalFoodLogs: z.ZodNumber;
|
|
752
|
+
currentStreakDays: z.ZodNumber;
|
|
753
|
+
subscription: z.ZodNullable<z.ZodObject<{
|
|
754
|
+
status: z.ZodEnum<["active", "trialing", "canceled", "expired", "none"]>;
|
|
755
|
+
priceLabel: z.ZodNullable<z.ZodString>;
|
|
756
|
+
renewsAt: z.ZodNullable<z.ZodString>;
|
|
757
|
+
cancelAtPeriodEnd: z.ZodBoolean;
|
|
758
|
+
}, "strip", z.ZodTypeAny, {
|
|
759
|
+
status: "active" | "trialing" | "canceled" | "expired" | "none";
|
|
760
|
+
priceLabel: string | null;
|
|
761
|
+
renewsAt: string | null;
|
|
762
|
+
cancelAtPeriodEnd: boolean;
|
|
763
|
+
}, {
|
|
764
|
+
status: "active" | "trialing" | "canceled" | "expired" | "none";
|
|
765
|
+
priceLabel: string | null;
|
|
766
|
+
renewsAt: string | null;
|
|
767
|
+
cancelAtPeriodEnd: boolean;
|
|
768
|
+
}>>;
|
|
769
|
+
}, "createdAt"> & {
|
|
770
|
+
createdAt: z.ZodDate;
|
|
771
|
+
}, "strip", z.ZodTypeAny, {
|
|
772
|
+
status: "active" | "suspended" | "deleted";
|
|
773
|
+
name: string | null;
|
|
774
|
+
id: string;
|
|
775
|
+
updatedAt: Date;
|
|
776
|
+
createdAt: Date;
|
|
777
|
+
subscription: {
|
|
778
|
+
status: "active" | "trialing" | "canceled" | "expired" | "none";
|
|
779
|
+
priceLabel: string | null;
|
|
780
|
+
renewsAt: string | null;
|
|
781
|
+
cancelAtPeriodEnd: boolean;
|
|
782
|
+
} | null;
|
|
783
|
+
email: string;
|
|
784
|
+
image: string | null;
|
|
785
|
+
goal: "lose" | "maintain" | "gain" | null;
|
|
786
|
+
sex: "male" | "female" | "prefer_not_to_say" | null;
|
|
787
|
+
age: number | null;
|
|
788
|
+
heightCm: string | null;
|
|
789
|
+
weightKg: string | null;
|
|
790
|
+
targetWeightKg: string | null;
|
|
791
|
+
tdeeKcal: number | null;
|
|
792
|
+
dailyTargetKcal: number | null;
|
|
793
|
+
targetProteinG: number | null;
|
|
794
|
+
targetCarbsG: number | null;
|
|
795
|
+
targetFatG: number | null;
|
|
796
|
+
activityLevel: "active" | "sedentary" | "light" | "moderate" | "very_active" | null;
|
|
797
|
+
manualDailyTargetKcal: number | null;
|
|
798
|
+
notifyTimes: string[] | null;
|
|
799
|
+
timezone: string | null;
|
|
800
|
+
tier: "free" | "premium";
|
|
801
|
+
accountStatus: "dormant" | "free_trial" | "free_plan" | "paid";
|
|
802
|
+
trialEndsAt: Date | null;
|
|
803
|
+
onboardingStep: number;
|
|
804
|
+
isOnboarded: boolean;
|
|
805
|
+
isOnboardingSkipped: boolean;
|
|
806
|
+
onboardingSkipped: boolean;
|
|
807
|
+
subscriptionStatus: string | null;
|
|
808
|
+
deletedAt: Date | null;
|
|
809
|
+
lastActiveAt: string | null;
|
|
810
|
+
totalFoodLogs: number;
|
|
811
|
+
currentStreakDays: number;
|
|
812
|
+
}, {
|
|
813
|
+
status: "active" | "suspended" | "deleted";
|
|
814
|
+
name: string | null;
|
|
815
|
+
id: string;
|
|
816
|
+
updatedAt: Date;
|
|
817
|
+
createdAt: Date;
|
|
818
|
+
subscription: {
|
|
819
|
+
status: "active" | "trialing" | "canceled" | "expired" | "none";
|
|
820
|
+
priceLabel: string | null;
|
|
821
|
+
renewsAt: string | null;
|
|
822
|
+
cancelAtPeriodEnd: boolean;
|
|
823
|
+
} | null;
|
|
824
|
+
email: string;
|
|
825
|
+
image: string | null;
|
|
826
|
+
goal: "lose" | "maintain" | "gain" | null;
|
|
827
|
+
sex: "male" | "female" | "prefer_not_to_say" | null;
|
|
828
|
+
age: number | null;
|
|
829
|
+
heightCm: string | null;
|
|
830
|
+
weightKg: string | null;
|
|
831
|
+
targetWeightKg: string | null;
|
|
832
|
+
tdeeKcal: number | null;
|
|
833
|
+
dailyTargetKcal: number | null;
|
|
834
|
+
targetProteinG: number | null;
|
|
835
|
+
targetCarbsG: number | null;
|
|
836
|
+
targetFatG: number | null;
|
|
837
|
+
activityLevel: "active" | "sedentary" | "light" | "moderate" | "very_active" | null;
|
|
838
|
+
manualDailyTargetKcal: number | null;
|
|
839
|
+
notifyTimes: string[] | null;
|
|
840
|
+
timezone: string | null;
|
|
841
|
+
tier: "free" | "premium";
|
|
842
|
+
accountStatus: "dormant" | "free_trial" | "free_plan" | "paid";
|
|
843
|
+
trialEndsAt: Date | null;
|
|
844
|
+
onboardingStep: number;
|
|
845
|
+
isOnboarded: boolean;
|
|
846
|
+
isOnboardingSkipped: boolean;
|
|
847
|
+
onboardingSkipped: boolean;
|
|
848
|
+
subscriptionStatus: string | null;
|
|
849
|
+
deletedAt: Date | null;
|
|
850
|
+
lastActiveAt: string | null;
|
|
851
|
+
totalFoodLogs: number;
|
|
852
|
+
currentStreakDays: number;
|
|
853
|
+
}>, "many">;
|
|
854
|
+
pagination: z.ZodObject<{
|
|
855
|
+
limit: z.ZodNumber;
|
|
856
|
+
total: z.ZodNumber;
|
|
857
|
+
nextCursor: z.ZodNullable<z.ZodString>;
|
|
858
|
+
}, "strip", z.ZodTypeAny, {
|
|
859
|
+
nextCursor: string | null;
|
|
860
|
+
total: number;
|
|
861
|
+
limit: number;
|
|
862
|
+
}, {
|
|
863
|
+
nextCursor: string | null;
|
|
864
|
+
total: number;
|
|
865
|
+
limit: number;
|
|
866
|
+
}>;
|
|
867
|
+
}, "strip", z.ZodTypeAny, {
|
|
868
|
+
items: {
|
|
869
|
+
status: "active" | "suspended" | "deleted";
|
|
870
|
+
name: string | null;
|
|
871
|
+
id: string;
|
|
872
|
+
updatedAt: Date;
|
|
873
|
+
createdAt: Date;
|
|
874
|
+
subscription: {
|
|
875
|
+
status: "active" | "trialing" | "canceled" | "expired" | "none";
|
|
876
|
+
priceLabel: string | null;
|
|
877
|
+
renewsAt: string | null;
|
|
878
|
+
cancelAtPeriodEnd: boolean;
|
|
879
|
+
} | null;
|
|
880
|
+
email: string;
|
|
881
|
+
image: string | null;
|
|
882
|
+
goal: "lose" | "maintain" | "gain" | null;
|
|
883
|
+
sex: "male" | "female" | "prefer_not_to_say" | null;
|
|
884
|
+
age: number | null;
|
|
885
|
+
heightCm: string | null;
|
|
886
|
+
weightKg: string | null;
|
|
887
|
+
targetWeightKg: string | null;
|
|
888
|
+
tdeeKcal: number | null;
|
|
889
|
+
dailyTargetKcal: number | null;
|
|
890
|
+
targetProteinG: number | null;
|
|
891
|
+
targetCarbsG: number | null;
|
|
892
|
+
targetFatG: number | null;
|
|
893
|
+
activityLevel: "active" | "sedentary" | "light" | "moderate" | "very_active" | null;
|
|
894
|
+
manualDailyTargetKcal: number | null;
|
|
895
|
+
notifyTimes: string[] | null;
|
|
896
|
+
timezone: string | null;
|
|
897
|
+
tier: "free" | "premium";
|
|
898
|
+
accountStatus: "dormant" | "free_trial" | "free_plan" | "paid";
|
|
899
|
+
trialEndsAt: Date | null;
|
|
900
|
+
onboardingStep: number;
|
|
901
|
+
isOnboarded: boolean;
|
|
902
|
+
isOnboardingSkipped: boolean;
|
|
903
|
+
onboardingSkipped: boolean;
|
|
904
|
+
subscriptionStatus: string | null;
|
|
905
|
+
deletedAt: Date | null;
|
|
906
|
+
lastActiveAt: string | null;
|
|
907
|
+
totalFoodLogs: number;
|
|
908
|
+
currentStreakDays: number;
|
|
909
|
+
}[];
|
|
910
|
+
pagination: {
|
|
911
|
+
nextCursor: string | null;
|
|
912
|
+
total: number;
|
|
913
|
+
limit: number;
|
|
914
|
+
};
|
|
915
|
+
}, {
|
|
916
|
+
items: {
|
|
917
|
+
status: "active" | "suspended" | "deleted";
|
|
918
|
+
name: string | null;
|
|
919
|
+
id: string;
|
|
920
|
+
updatedAt: Date;
|
|
921
|
+
createdAt: Date;
|
|
922
|
+
subscription: {
|
|
923
|
+
status: "active" | "trialing" | "canceled" | "expired" | "none";
|
|
924
|
+
priceLabel: string | null;
|
|
925
|
+
renewsAt: string | null;
|
|
926
|
+
cancelAtPeriodEnd: boolean;
|
|
927
|
+
} | null;
|
|
928
|
+
email: string;
|
|
929
|
+
image: string | null;
|
|
930
|
+
goal: "lose" | "maintain" | "gain" | null;
|
|
931
|
+
sex: "male" | "female" | "prefer_not_to_say" | null;
|
|
932
|
+
age: number | null;
|
|
933
|
+
heightCm: string | null;
|
|
934
|
+
weightKg: string | null;
|
|
935
|
+
targetWeightKg: string | null;
|
|
936
|
+
tdeeKcal: number | null;
|
|
937
|
+
dailyTargetKcal: number | null;
|
|
938
|
+
targetProteinG: number | null;
|
|
939
|
+
targetCarbsG: number | null;
|
|
940
|
+
targetFatG: number | null;
|
|
941
|
+
activityLevel: "active" | "sedentary" | "light" | "moderate" | "very_active" | null;
|
|
942
|
+
manualDailyTargetKcal: number | null;
|
|
943
|
+
notifyTimes: string[] | null;
|
|
944
|
+
timezone: string | null;
|
|
945
|
+
tier: "free" | "premium";
|
|
946
|
+
accountStatus: "dormant" | "free_trial" | "free_plan" | "paid";
|
|
947
|
+
trialEndsAt: Date | null;
|
|
948
|
+
onboardingStep: number;
|
|
949
|
+
isOnboarded: boolean;
|
|
950
|
+
isOnboardingSkipped: boolean;
|
|
951
|
+
onboardingSkipped: boolean;
|
|
952
|
+
subscriptionStatus: string | null;
|
|
953
|
+
deletedAt: Date | null;
|
|
954
|
+
lastActiveAt: string | null;
|
|
955
|
+
totalFoodLogs: number;
|
|
956
|
+
currentStreakDays: number;
|
|
957
|
+
}[];
|
|
958
|
+
pagination: {
|
|
959
|
+
nextCursor: string | null;
|
|
960
|
+
total: number;
|
|
961
|
+
limit: number;
|
|
962
|
+
};
|
|
963
|
+
}>;
|
|
964
|
+
export type AdminUserListResponse = z.infer<typeof adminUserListResponseSchema>;
|
|
652
965
|
export declare const adminCancelPayloadSchema: z.ZodObject<{
|
|
653
966
|
reason: z.ZodString;
|
|
654
967
|
}, "strip", z.ZodTypeAny, {
|
package/dist/admin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,eAAe,8CAA4C,CAAC;AACzE,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;EAKtB,CAAC;AACH,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAMhD,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAmC,CAAC;AAC3E,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,cAAc,WAAW,CAAC;AACvC,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC;AAE5B,eAAO,MAAM,4BAA4B;;;;;;EAEvC,CAAC;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF,eAAO,MAAM,2BAA2B;;;;;;;;;EAGtC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAMhF
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"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"}
|
package/dist/admin.js
CHANGED
|
@@ -23,20 +23,38 @@ export const adminOtpVerifyPayloadSchema = z.object({
|
|
|
23
23
|
code: z.string().min(4),
|
|
24
24
|
});
|
|
25
25
|
// ---------------------------------------------------------------------------
|
|
26
|
-
// Admin pagination
|
|
26
|
+
// Admin pagination helpers
|
|
27
27
|
// ---------------------------------------------------------------------------
|
|
28
|
+
/**
|
|
29
|
+
* Offset pagination — still the shape for every admin list endpoint that
|
|
30
|
+
* hasn't been converted off OFFSET yet (subscriptions, tips, email-logs,
|
|
31
|
+
* audit-log; none of those routes exist server-side as of R5-4, but the
|
|
32
|
+
* contract is defined ahead of the implementation). Do NOT reuse this for a
|
|
33
|
+
* new list endpoint — SYSTEM_DESIGN §373 mandates keyset for any unbounded
|
|
34
|
+
* list; use `adminKeysetPaginationSchema` instead.
|
|
35
|
+
*/
|
|
36
|
+
export const adminPaginationSchema = z.object({
|
|
37
|
+
page: z.number(),
|
|
38
|
+
pageSize: z.number(),
|
|
39
|
+
total: z.number(),
|
|
40
|
+
totalPages: z.number(),
|
|
41
|
+
});
|
|
42
|
+
export const adminPaginated = (item) => z.object({ items: z.array(item), pagination: adminPaginationSchema });
|
|
28
43
|
/**
|
|
29
44
|
* Keyset pagination (R5-4/I16) — no `page`/`totalPages`, since a numeric page
|
|
30
45
|
* offset is exactly the "scan-and-discard, drifts under concurrent inserts"
|
|
31
|
-
* failure mode this
|
|
46
|
+
* failure mode this replaces (SYSTEM_DESIGN §373). `nextCursor` is opaque;
|
|
32
47
|
* pass it back as `cursor` to fetch the next page, null on the last page.
|
|
48
|
+
* Used by `admin/users` and `admin/leads`, the two endpoints R5-4 actually
|
|
49
|
+
* converted — every other admin list endpoint still uses
|
|
50
|
+
* `adminPaginationSchema` above until it gets the same treatment.
|
|
33
51
|
*/
|
|
34
|
-
export const
|
|
52
|
+
export const adminKeysetPaginationSchema = z.object({
|
|
35
53
|
limit: z.number(),
|
|
36
54
|
total: z.number(),
|
|
37
55
|
nextCursor: z.string().nullable(),
|
|
38
56
|
});
|
|
39
|
-
export const
|
|
57
|
+
export const adminKeysetPaginated = (item) => z.object({ items: z.array(item), pagination: adminKeysetPaginationSchema });
|
|
40
58
|
// ---------------------------------------------------------------------------
|
|
41
59
|
// Admin user schemas
|
|
42
60
|
// ---------------------------------------------------------------------------
|
|
@@ -76,6 +94,8 @@ export const adminUserDetailSchema = userProfileSchema
|
|
|
76
94
|
/** List rows use the same full shape as detail. */
|
|
77
95
|
export const adminUserSchema = adminUserDetailSchema;
|
|
78
96
|
export const adminUserDetailResponseSchema = z.object({ user: adminUserDetailSchema });
|
|
97
|
+
/** GET /admin/users — keyset-paginated (R5-4/I16); see `adminKeysetPaginated` above. */
|
|
98
|
+
export const adminUserListResponseSchema = adminKeysetPaginated(adminUserSchema);
|
|
79
99
|
export const adminCancelPayloadSchema = z.object({ reason: z.string().min(1) });
|
|
80
100
|
export const adminRefundPayloadSchema = z.object({
|
|
81
101
|
amountCents: z.number().int().positive().optional(),
|
package/dist/admin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;AAGzE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;IACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,IAAI,EAAE,eAAe;CACtB,CAAC,CAAC;AAGH,8EAA8E;AAC9E,kCAAkC;AAClC,8EAA8E;AAE9E,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;AAG3E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAGvC,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;CAC1B,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;IACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACxB,CAAC,CAAC;AAGH,8EAA8E;AAC9E,
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"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"}
|
package/dist/auth.d.ts.map
CHANGED
|
@@ -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,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;;;;;;
|
|
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;;;;;;EAGvC,CAAC;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF,qDAAqD;AACrD,eAAO,MAAM,oBAAoB;;;;;;EAG/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
|
@@ -19,7 +19,7 @@ export const otpRequestPayloadSchema = z.object({
|
|
|
19
19
|
/** POST /auth/otp/verify payload */
|
|
20
20
|
export const otpVerifyPayloadSchema = z.object({
|
|
21
21
|
email: emailSchema,
|
|
22
|
-
code: z.string().regex(/^\d{6}
|
|
22
|
+
code: z.string().regex(/^\d{6}$/, "Enter the 6-digit code"),
|
|
23
23
|
});
|
|
24
24
|
/**
|
|
25
25
|
* POST /auth/magic-link/request payload
|
|
@@ -33,11 +33,13 @@ export const magicLinkRequestPayloadSchema = z.object({
|
|
|
33
33
|
* @deprecated Magic-link auth remains API-supported but is hidden in mobile while the UX is revisited.
|
|
34
34
|
*/
|
|
35
35
|
export const magicLinkVerifyPayloadSchema = z.object({
|
|
36
|
-
token
|
|
36
|
+
// Capped defensively — the issued token is a short opaque ID, never near this size.
|
|
37
|
+
token: z.string().min(1).max(512),
|
|
37
38
|
});
|
|
38
39
|
/** POST /auth/refresh + POST /auth/logout payload */
|
|
39
40
|
export const refreshPayloadSchema = z.object({
|
|
40
|
-
|
|
41
|
+
// Capped defensively — the issued token is a short opaque ID, never near this size.
|
|
42
|
+
refreshToken: z.string().min(1).max(512),
|
|
41
43
|
});
|
|
42
44
|
/**
|
|
43
45
|
* POST /auth/oauth/apple payload — native Sign in with Apple. The app posts the
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C,6GAA6G;AAC7G,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,WAAW;CAC1C,CAAC,CAAC;AAGH,mGAAmG;AACnG,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC;KACzB,MAAM,EAAE;KACR,KAAK,EAAE;KACP,GAAG,CAAC,GAAG,CAAC;KACR,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAErC,qCAAqC;AACrC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,KAAK,EAAE,WAAW;CACnB,CAAC,CAAC;AAGH,oCAAoC;AACpC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,KAAK,EAAE,WAAW;IAClB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/common.d.ts
CHANGED
|
@@ -12,15 +12,15 @@ export type Meta = z.infer<typeof metaSchema>;
|
|
|
12
12
|
export declare const apiErrorSchema: z.ZodObject<{
|
|
13
13
|
success: z.ZodLiteral<false>;
|
|
14
14
|
error: z.ZodObject<{
|
|
15
|
-
code: z.
|
|
15
|
+
code: z.ZodEnum<["VALIDATION_ERROR", "UNAUTHENTICATED", "FORBIDDEN", "PREMIUM_REQUIRED", "NOT_FOUND", "CONFLICT", "RATE_LIMITED", "PAYLOAD_TOO_LARGE", "UPSTREAM_ERROR", "INTERNAL_ERROR"]>;
|
|
16
16
|
message: z.ZodString;
|
|
17
17
|
details: z.ZodOptional<z.ZodUnknown>;
|
|
18
18
|
}, "strip", z.ZodTypeAny, {
|
|
19
|
-
code:
|
|
19
|
+
code: "VALIDATION_ERROR" | "UNAUTHENTICATED" | "FORBIDDEN" | "PREMIUM_REQUIRED" | "NOT_FOUND" | "CONFLICT" | "RATE_LIMITED" | "PAYLOAD_TOO_LARGE" | "UPSTREAM_ERROR" | "INTERNAL_ERROR";
|
|
20
20
|
message: string;
|
|
21
21
|
details?: unknown;
|
|
22
22
|
}, {
|
|
23
|
-
code:
|
|
23
|
+
code: "VALIDATION_ERROR" | "UNAUTHENTICATED" | "FORBIDDEN" | "PREMIUM_REQUIRED" | "NOT_FOUND" | "CONFLICT" | "RATE_LIMITED" | "PAYLOAD_TOO_LARGE" | "UPSTREAM_ERROR" | "INTERNAL_ERROR";
|
|
24
24
|
message: string;
|
|
25
25
|
details?: unknown;
|
|
26
26
|
}>;
|
|
@@ -30,7 +30,7 @@ export declare const apiErrorSchema: z.ZodObject<{
|
|
|
30
30
|
message: string;
|
|
31
31
|
success: false;
|
|
32
32
|
error: {
|
|
33
|
-
code:
|
|
33
|
+
code: "VALIDATION_ERROR" | "UNAUTHENTICATED" | "FORBIDDEN" | "PREMIUM_REQUIRED" | "NOT_FOUND" | "CONFLICT" | "RATE_LIMITED" | "PAYLOAD_TOO_LARGE" | "UPSTREAM_ERROR" | "INTERNAL_ERROR";
|
|
34
34
|
message: string;
|
|
35
35
|
details?: unknown;
|
|
36
36
|
};
|
|
@@ -39,7 +39,7 @@ export declare const apiErrorSchema: z.ZodObject<{
|
|
|
39
39
|
message: string;
|
|
40
40
|
success: false;
|
|
41
41
|
error: {
|
|
42
|
-
code:
|
|
42
|
+
code: "VALIDATION_ERROR" | "UNAUTHENTICATED" | "FORBIDDEN" | "PREMIUM_REQUIRED" | "NOT_FOUND" | "CONFLICT" | "RATE_LIMITED" | "PAYLOAD_TOO_LARGE" | "UPSTREAM_ERROR" | "INTERNAL_ERROR";
|
|
43
43
|
message: string;
|
|
44
44
|
details?: unknown;
|
|
45
45
|
};
|
package/dist/common.js
CHANGED
package/dist/common.js.map
CHANGED
|
@@ -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,mBAAmB;IACnB,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,
|
|
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,mBAAmB;IACnB,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,eAAe;QACrB,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
package/dist/index.d.ts.map
CHANGED
|
@@ -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,SAAS,CAAC;AACxB,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"}
|
|
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,SAAS,CAAC;AACxB,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;AAC1B,cAAc,QAAQ,CAAC"}
|
package/dist/index.js
CHANGED
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,SAAS,CAAC;AACxB,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"}
|
|
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,SAAS,CAAC;AACxB,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;AAC1B,cAAc,QAAQ,CAAC"}
|
package/dist/leads.d.ts
CHANGED
|
@@ -158,12 +158,12 @@ export declare const adminLeadListResponseSchema: z.ZodObject<{
|
|
|
158
158
|
nextCursor: z.ZodNullable<z.ZodString>;
|
|
159
159
|
}, "strip", z.ZodTypeAny, {
|
|
160
160
|
nextCursor: string | null;
|
|
161
|
-
limit: number;
|
|
162
161
|
total: number;
|
|
162
|
+
limit: number;
|
|
163
163
|
}, {
|
|
164
164
|
nextCursor: string | null;
|
|
165
|
-
limit: number;
|
|
166
165
|
total: number;
|
|
166
|
+
limit: number;
|
|
167
167
|
}>;
|
|
168
168
|
}, "strip", z.ZodTypeAny, {
|
|
169
169
|
items: {
|
|
@@ -187,8 +187,8 @@ export declare const adminLeadListResponseSchema: z.ZodObject<{
|
|
|
187
187
|
}[];
|
|
188
188
|
pagination: {
|
|
189
189
|
nextCursor: string | null;
|
|
190
|
-
limit: number;
|
|
191
190
|
total: number;
|
|
191
|
+
limit: number;
|
|
192
192
|
};
|
|
193
193
|
}, {
|
|
194
194
|
items: {
|
|
@@ -212,8 +212,8 @@ export declare const adminLeadListResponseSchema: z.ZodObject<{
|
|
|
212
212
|
}[];
|
|
213
213
|
pagination: {
|
|
214
214
|
nextCursor: string | null;
|
|
215
|
-
limit: number;
|
|
216
215
|
total: number;
|
|
216
|
+
limit: number;
|
|
217
217
|
};
|
|
218
218
|
}>;
|
|
219
219
|
export type AdminLeadListResponse = z.infer<typeof adminLeadListResponseSchema>;
|
package/dist/leads.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"leads.d.ts","sourceRoot":"","sources":["../src/leads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,2CAAyC,CAAC;AACvE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,8DAA8D;AAC9D,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;EAUnC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;;GAGG;AACH,eAAO,MAAM,yBAAyB;;;;;;EAA0C,CAAC;AACjF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,qFAAqF;AACrF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkB1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"leads.d.ts","sourceRoot":"","sources":["../src/leads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,2CAAyC,CAAC;AACvE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,8DAA8D;AAC9D,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;EAUnC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;;GAGG;AACH,eAAO,MAAM,yBAAyB;;;;;;EAA0C,CAAC;AACjF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,qFAAqF;AACrF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkB1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAwC,CAAC;AACjF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;CAsBkB,CAAC"}
|
package/dist/leads.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { idSchema, isoDateSchema } from "./common";
|
|
3
|
-
import {
|
|
3
|
+
import { adminKeysetPaginated } from "./admin";
|
|
4
4
|
/**
|
|
5
5
|
* Lead capture (pre-signup email captures -- "leads"). Extend this enum as new
|
|
6
6
|
* capture points are added; the DB column itself stays plain text so new
|
|
@@ -44,7 +44,7 @@ export const adminLeadSchema = z.object({
|
|
|
44
44
|
utmMedium: z.string().nullable(),
|
|
45
45
|
utmCampaign: z.string().nullable(),
|
|
46
46
|
});
|
|
47
|
-
export const adminLeadListResponseSchema =
|
|
47
|
+
export const adminLeadListResponseSchema = adminKeysetPaginated(adminLeadSchema);
|
|
48
48
|
export const leadRoutes = {
|
|
49
49
|
capture: {
|
|
50
50
|
method: "POST",
|
package/dist/leads.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"leads.js","sourceRoot":"","sources":["../src/leads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"leads.js","sourceRoot":"","sources":["../src/leads.ts"],"names":[],"mappings":"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"}
|
package/dist/tdee.d.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { z } from "zod";
|
|
2
|
+
import { activityLevelSchema, goalSchema, sexSchema } from "./users";
|
|
3
|
+
/**
|
|
4
|
+
* Single source of truth for calorie/macro math (Mifflin-St Jeor + activity
|
|
5
|
+
* factor + goal adjustment + macro split). Backend and mobile each had their
|
|
6
|
+
* own copy that rounded BMR at a different point (backend: round only the
|
|
7
|
+
* final TDEE; mobile: round BMR before multiplying by the activity factor),
|
|
8
|
+
* so onboarding's preview could disagree with the persisted dashboard target
|
|
9
|
+
* by several kcal at some inputs (R6 I19). This module keeps the backend's
|
|
10
|
+
* order — round only the final TDEE, never the intermediate BMR.
|
|
11
|
+
*/
|
|
12
|
+
export type Goal = z.infer<typeof goalSchema>;
|
|
13
|
+
export type Sex = z.infer<typeof sexSchema>;
|
|
14
|
+
export type ActivityLevel = z.infer<typeof activityLevelSchema>;
|
|
15
|
+
/** Standard Mifflin-St Jeor activity multipliers. */
|
|
16
|
+
export declare const ACTIVITY_FACTORS: Record<ActivityLevel, number>;
|
|
17
|
+
/** Daily kcal delta for the goal: ~0.5 kg/week deficit for loss, surplus for gain. */
|
|
18
|
+
export declare const GOAL_ADJUSTMENTS: Record<Goal, number>;
|
|
19
|
+
export interface BmrInput {
|
|
20
|
+
sex: Sex;
|
|
21
|
+
weightKg: number;
|
|
22
|
+
heightCm: number;
|
|
23
|
+
ageYears: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Mifflin-St Jeor basal metabolic rate (kcal/day). Deliberately left
|
|
27
|
+
* unrounded — callers round only the final TDEE (see `calculateTdee`), never
|
|
28
|
+
* this intermediate value.
|
|
29
|
+
*/
|
|
30
|
+
export declare function bmrMifflinStJeor({ sex, weightKg, heightCm, ageYears }: BmrInput): number;
|
|
31
|
+
export declare const round10: (n: number) => number;
|
|
32
|
+
export interface TdeeInput extends BmrInput {
|
|
33
|
+
goal: Goal;
|
|
34
|
+
activityLevel?: ActivityLevel | null;
|
|
35
|
+
}
|
|
36
|
+
export interface TdeeResult {
|
|
37
|
+
/** Rounded for display only — the multiply below uses the unrounded BMR. */
|
|
38
|
+
bmr: number;
|
|
39
|
+
activityLevel: ActivityLevel;
|
|
40
|
+
tdeeKcal: number;
|
|
41
|
+
goalAdjustmentKcal: number;
|
|
42
|
+
/** TDEE + goal adjustment, rounded to the nearest 10 kcal. */
|
|
43
|
+
dailyTargetKcal: number;
|
|
44
|
+
}
|
|
45
|
+
export declare function calculateTdee(input: TdeeInput): TdeeResult;
|
|
46
|
+
export interface MacroSplit {
|
|
47
|
+
proteinG: number;
|
|
48
|
+
carbsG: number;
|
|
49
|
+
fatG: number;
|
|
50
|
+
}
|
|
51
|
+
/** Balanced 30% protein / 40% carbs / 30% fat split (4/4/9 kcal per gram). */
|
|
52
|
+
export declare function macroSplitFromKcal(kcal: number): MacroSplit;
|
|
53
|
+
//# sourceMappingURL=tdee.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tdee.d.ts","sourceRoot":"","sources":["../src/tdee.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAErE;;;;;;;;GAQG;AAEH,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAC9C,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC;AAC5C,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,qDAAqD;AACrD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAM1D,CAAC;AAEF,sFAAsF;AACtF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAIjD,CAAC;AAEF,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,GAAG,CAAC;IACT,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,QAAQ,GAAG,MAAM,CAKxF;AAED,eAAO,MAAM,OAAO,GAAI,GAAG,MAAM,KAAG,MAAiC,CAAC;AAEtE,MAAM,WAAW,SAAU,SAAQ,QAAQ;IACzC,IAAI,EAAE,IAAI,CAAC;IACX,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,8DAA8D;IAC9D,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAY1D;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAM3D"}
|
package/dist/tdee.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/** Standard Mifflin-St Jeor activity multipliers. */
|
|
2
|
+
export const ACTIVITY_FACTORS = {
|
|
3
|
+
sedentary: 1.2,
|
|
4
|
+
light: 1.375,
|
|
5
|
+
moderate: 1.55,
|
|
6
|
+
active: 1.725,
|
|
7
|
+
very_active: 1.9,
|
|
8
|
+
};
|
|
9
|
+
/** Daily kcal delta for the goal: ~0.5 kg/week deficit for loss, surplus for gain. */
|
|
10
|
+
export const GOAL_ADJUSTMENTS = {
|
|
11
|
+
lose: -500,
|
|
12
|
+
maintain: 0,
|
|
13
|
+
gain: 300,
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Mifflin-St Jeor basal metabolic rate (kcal/day). Deliberately left
|
|
17
|
+
* unrounded — callers round only the final TDEE (see `calculateTdee`), never
|
|
18
|
+
* this intermediate value.
|
|
19
|
+
*/
|
|
20
|
+
export function bmrMifflinStJeor({ sex, weightKg, heightCm, ageYears }) {
|
|
21
|
+
const base = 10 * weightKg + 6.25 * heightCm - 5 * ageYears;
|
|
22
|
+
if (sex === "male")
|
|
23
|
+
return base + 5;
|
|
24
|
+
if (sex === "female")
|
|
25
|
+
return base - 161;
|
|
26
|
+
return base - 78;
|
|
27
|
+
}
|
|
28
|
+
export const round10 = (n) => Math.round(n / 10) * 10;
|
|
29
|
+
export function calculateTdee(input) {
|
|
30
|
+
const activityLevel = input.activityLevel ?? "sedentary";
|
|
31
|
+
const rawBmr = bmrMifflinStJeor(input);
|
|
32
|
+
const tdeeKcal = Math.round(rawBmr * ACTIVITY_FACTORS[activityLevel]);
|
|
33
|
+
const goalAdjustmentKcal = GOAL_ADJUSTMENTS[input.goal];
|
|
34
|
+
return {
|
|
35
|
+
bmr: Math.round(rawBmr),
|
|
36
|
+
activityLevel,
|
|
37
|
+
tdeeKcal,
|
|
38
|
+
goalAdjustmentKcal,
|
|
39
|
+
dailyTargetKcal: round10(tdeeKcal + goalAdjustmentKcal),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/** Balanced 30% protein / 40% carbs / 30% fat split (4/4/9 kcal per gram). */
|
|
43
|
+
export function macroSplitFromKcal(kcal) {
|
|
44
|
+
return {
|
|
45
|
+
proteinG: Math.round((kcal * 0.3) / 4),
|
|
46
|
+
carbsG: Math.round((kcal * 0.4) / 4),
|
|
47
|
+
fatG: Math.round((kcal * 0.3) / 9),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=tdee.js.map
|
package/dist/tdee.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tdee.js","sourceRoot":"","sources":["../src/tdee.ts"],"names":[],"mappings":"AAiBA,qDAAqD;AACrD,MAAM,CAAC,MAAM,gBAAgB,GAAkC;IAC7D,SAAS,EAAE,GAAG;IACd,KAAK,EAAE,KAAK;IACZ,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,KAAK;IACb,WAAW,EAAE,GAAG;CACjB,CAAC;AAEF,sFAAsF;AACtF,MAAM,CAAC,MAAM,gBAAgB,GAAyB;IACpD,IAAI,EAAE,CAAC,GAAG;IACV,QAAQ,EAAE,CAAC;IACX,IAAI,EAAE,GAAG;CACV,CAAC;AASF;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAY;IAC9E,MAAM,IAAI,GAAG,EAAE,GAAG,QAAQ,GAAG,IAAI,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC;IAC5D,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,IAAI,GAAG,CAAC,CAAC;IACpC,IAAI,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,GAAG,GAAG,CAAC;IACxC,OAAO,IAAI,GAAG,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AAiBtE,MAAM,UAAU,aAAa,CAAC,KAAgB;IAC5C,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,WAAW,CAAC;IACzD,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC;IACtE,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxD,OAAO;QACL,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QACvB,aAAa;QACb,QAAQ;QACR,kBAAkB;QAClB,eAAe,EAAE,OAAO,CAAC,QAAQ,GAAG,kBAAkB,CAAC;KACxD,CAAC;AACJ,CAAC;AAQD,8EAA8E;AAC9E,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;KACnC,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@beorchid-llc/thrivo-contracts",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"description": "Shared Thrivo API request and response contracts.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": false,
|
|
@@ -51,6 +51,10 @@
|
|
|
51
51
|
"./uploads": {
|
|
52
52
|
"types": "./dist/uploads.d.ts",
|
|
53
53
|
"import": "./dist/uploads.js"
|
|
54
|
+
},
|
|
55
|
+
"./tdee": {
|
|
56
|
+
"types": "./dist/tdee.d.ts",
|
|
57
|
+
"import": "./dist/tdee.js"
|
|
54
58
|
}
|
|
55
59
|
},
|
|
56
60
|
"files": [
|