This commit updates the version of Supabase in multiple packages. It also introduces specificity to environment variables in Keystatic configuration and adds a method to create a 'KeyStatic' reader based on the storage kind. Furthermore, minor adjustments have been made to keep the environment variable names consistent.
Next.js Utilities / @kit/next
This package provides utilities for working with Next.js.
Server Actions
The enhanceAction function allows you to wrap a Next.js Server Action with additional functionality.
import { enhanceAction } from '@kit/next/actions';
export const myServerAction = enhanceAction(async (data, user) => {
// "data" has been parsed with the schema
// and will correctly be typed as the schema type
// in the case below, data will be of type { id: number }
// "user" is the user object from the session
// if "captcha" is true, the action will require a captcha
}, {
captcha: true,
schema: z.object({
id: z.number()
}),
});
The enhanceAction function takes two arguments:
- The action function
- An options object
The options object can contain the following properties:
captcha- If true, the action will require a captcha to be passed to the body ascaptchaTokenschema- A zod schema that the data will be validated against
When successfully called, the action will return the result of the action function.
- The user will be automatically authenticated and the result will be passed as the second argument to the action function.
- The data will be parsed/validated with the schema and passed as the first argument to the action function.
- If the
captchaoption is true, the action will require acaptchaTokento be passed in the body.
The consumer can call the action like so:
import { myServerAction } from 'path/to/myServerAction';
const result = await myServerAction({ id: 1 });
or with an optional captcha token:
import { myServerAction } from 'path/to/myServerAction';
const result = await myServerAction({ id: 1, captchaToken: 'captchaToken' });
Route Handlers
The function enhanceRouteHandler allows you to wrap a Next.js API Route Handler with additional functionality.
import { enhanceRouteHandler } from '@kit/next/routes';
export const POST = enhanceRouteHandler(({ request, body, user }) => {
// "body" has been parsed with the schema
// and will correctly be typed as the schema type
// in the case below, data will be of type { id: number }
// "user" is the user object from the session
// "request" is the raw request object passed by POST
// if "captcha" is true, the action will require a captcha
}, {
captcha: true,
schema: z.object({
id: z.number()
}),
});
When using a Captcha, the consumer will pass an header x-captcha-token with the captcha token.