32 lines
855 B
TypeScript
32 lines
855 B
TypeScript
import 'server-only';
|
|
import { env } from '@konobangu/env';
|
|
import { Liveblocks as LiveblocksNode } from '@liveblocks/node';
|
|
|
|
type AuthenticateOptions = {
|
|
userId: string;
|
|
orgId: string;
|
|
userInfo: Liveblocks['UserMeta']['info'];
|
|
};
|
|
|
|
export const authenticate = async ({
|
|
userId,
|
|
orgId,
|
|
userInfo,
|
|
}: AuthenticateOptions) => {
|
|
const liveblocks = new LiveblocksNode({
|
|
secret: env.LIVEBLOCKS_SECRET,
|
|
});
|
|
|
|
// Start an auth session inside your endpoint
|
|
const session = liveblocks.prepareSession(userId, { userInfo });
|
|
|
|
// Use a naming pattern to allow access to rooms with wildcards
|
|
// Giving the user write access on their organization
|
|
session.allow(`${orgId}:*`, session.FULL_ACCESS);
|
|
|
|
// Authorize the user and return the result
|
|
const { status, body } = await session.authorize();
|
|
|
|
return new Response(body, { status });
|
|
};
|