Skip to content

Commit e2dd390

Browse files
committed
Schema improvements
1 parent bfb2ba1 commit e2dd390

File tree

4 files changed

+23
-9
lines changed
  • apps/backend/src/app/api/latest
    • auth/sessions
    • contact-channels/[user_id]/[contact_channel_id]/send-verification-code
  • packages/stack-shared/src

4 files changed

+23
-9
lines changed

apps/backend/src/app/api/latest/auth/sessions/route.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { createAuthTokens } from "@/lib/tokens";
2-
import { CrudHandlerInvocationError } from "@/route-handlers/crud-handler";
32
import { createSmartRouteHandler } from "@/route-handlers/smart-route-handler";
43
import { KnownErrors } from "@stackframe/stack-shared";
54
import { adaptSchema, serverOrHigherAuthTypeSchema, userIdOrMeSchema, yupBoolean, yupNumber, yupObject, yupString } from "@stackframe/stack-shared/dist/schema-fields";
@@ -37,9 +36,12 @@ export const POST = createSmartRouteHandler({
3736
user = await usersCrudHandlers.adminRead({
3837
user_id: userId,
3938
tenancy: tenancy,
39+
allowedErrorTypes: [
40+
KnownErrors.UserNotFound,
41+
],
4042
});
4143
} catch (e) {
42-
if (e instanceof CrudHandlerInvocationError && KnownErrors.UserNotFound.isInstance(e.cause)) {
44+
if (KnownErrors.UserNotFound.isInstance(e)) {
4345
throw new KnownErrors.UserIdDoesNotExist(userId);
4446
}
4547
throw e;

apps/backend/src/app/api/latest/contact-channels/[user_id]/[contact_channel_id]/send-verification-code/route.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { usersCrudHandlers } from "@/app/api/latest/users/crud";
22
import { getPrismaClientForTenancy } from "@/prisma-client";
3-
import { CrudHandlerInvocationError } from "@/route-handlers/crud-handler";
43
import { createSmartRouteHandler } from "@/route-handlers/smart-route-handler";
54
import { KnownErrors } from "@stackframe/stack-shared";
65
import { adaptSchema, clientOrHigherAuthTypeSchema, contactChannelIdSchema, emailVerificationCallbackUrlSchema, userIdOrMeSchema, yupNumber, yupObject, yupString } from "@stackframe/stack-shared/dist/schema-fields";
@@ -43,10 +42,13 @@ export const POST = createSmartRouteHandler({
4342
try {
4443
user = await usersCrudHandlers.adminRead({
4544
tenancy: auth.tenancy,
46-
user_id: params.user_id
45+
user_id: params.user_id,
46+
allowedErrorTypes: [
47+
KnownErrors.UserNotFound,
48+
],
4749
});
4850
} catch (e) {
49-
if (e instanceof CrudHandlerInvocationError && KnownErrors.UserNotFound.isInstance(e.cause)) {
51+
if (KnownErrors.UserNotFound.isInstance(e)) {
5052
throw new KnownErrors.UserIdDoesNotExist(params.user_id);
5153
}
5254
throw e;

packages/stack-shared/src/config/schema.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ const organizationConfigDefaults = {
356356
trustedDomains: (key: string) => ({
357357
baseUrl: undefined,
358358
handlerPath: '/handler',
359-
}),
359+
}) as const,
360360
},
361361

362362
auth: {
@@ -426,9 +426,9 @@ type DeepReplaceAllowFunctionsForObjects<T> = T extends object
426426
)
427427
:
428428
T;
429-
type ReplaceFunctionsWithObjects<T> = T & (T extends (arg: infer K extends string) => infer R ? Record<K, R | undefined> & object : unknown);
429+
type ReplaceFunctionsWithObjects<T> = T & (T extends (arg: infer K extends string) => infer R ? Record<K, R> & object : unknown);
430430
type DeepReplaceFunctionsWithObjects<T> = T extends object ? { [K in keyof ReplaceFunctionsWithObjects<T>]: DeepReplaceFunctionsWithObjects<ReplaceFunctionsWithObjects<T>[K]> } : T;
431-
typeAssertIs<DeepReplaceFunctionsWithObjects<{ a: { b: 123 } & ((key: string) => number) }>, { a: { b: 123, [key: string]: number | undefined } }>()();
431+
typeAssertIs<DeepReplaceFunctionsWithObjects<{ a: { b: 123 } & ((key: string) => number) }>, { a: { b: 123, [key: string]: number } }>()();
432432

433433
function deepReplaceFunctionsWithObjects(obj: any): any {
434434
return mapValues({ ...obj }, v => (isObjectLike(v) ? deepReplaceFunctionsWithObjects(v as any) : v));

packages/stack-shared/src/utils/types.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,17 @@ export type LastUnionElement<U> = UnionToIntersection<U extends any ? (x: U) =>
1818
/**
1919
* Makes a type prettier by recursively expanding all object types. For example, `Omit<{ a: 1 }, "a">` becomes just `{}`.
2020
*/
21-
export type Expand<T> = T extends object ? { [K in keyof T]: Expand<T[K]> } : T;
21+
export type Expand<T> = T extends (...args: infer A) => infer R
22+
? (
23+
((...args: A) => R) extends T
24+
? (...args: Expand<A>) => Expand<R>
25+
: ((...args: Expand<A>) => Expand<R>) & { [K in keyof T]: Expand<T[K]> }
26+
)
27+
: (
28+
T extends object
29+
? { [K in keyof T]: Expand<T[K]> }
30+
: T
31+
);
2232

2333

2434
/**

0 commit comments

Comments
 (0)