Version 3 of the kit: - Radix UI replaced with Base UI (using the Shadcn UI patterns) - next-intl replaces react-i18next - enhanceAction deprecated; usage moved to next-safe-action - main layout now wrapped with [locale] path segment - Teams only mode - Layout updates - Zod v4 - Next.js 16.2 - Typescript 6 - All other dependencies updated - Removed deprecated Edge CSRF - Dynamic Github Action runner
70 lines
1.8 KiB
TypeScript
70 lines
1.8 KiB
TypeScript
import { NextResponse } from 'next/server';
|
|
|
|
import * as z from 'zod';
|
|
|
|
import { enhanceRouteHandler } from '@kit/next/routes';
|
|
import { getSupabaseServerClient } from '@kit/supabase/server-client';
|
|
import {
|
|
createInvitationContextBuilder,
|
|
createInvitationsPolicyEvaluator,
|
|
} from '@kit/team-accounts/policies';
|
|
|
|
export const GET = enhanceRouteHandler(
|
|
async function ({ params, user }) {
|
|
const client = getSupabaseServerClient();
|
|
const { account } = z.object({ account: z.string() }).parse(params);
|
|
|
|
try {
|
|
// Evaluate with standard evaluator
|
|
const evaluator = createInvitationsPolicyEvaluator();
|
|
const hasPolicies = await evaluator.hasPoliciesForStage('preliminary');
|
|
|
|
if (!hasPolicies) {
|
|
return NextResponse.json({
|
|
allowed: true,
|
|
reasons: [],
|
|
metadata: {
|
|
policiesEvaluated: 0,
|
|
timestamp: new Date().toISOString(),
|
|
noPoliciesConfigured: true,
|
|
},
|
|
});
|
|
}
|
|
|
|
// Build context for policy evaluation (empty invitations for testing)
|
|
const contextBuilder = createInvitationContextBuilder(client);
|
|
|
|
const context = await contextBuilder.buildContext(
|
|
{
|
|
invitations: [],
|
|
accountSlug: account,
|
|
},
|
|
user,
|
|
);
|
|
|
|
// validate against policies
|
|
const result = await evaluator.canInvite(context, 'preliminary');
|
|
|
|
return NextResponse.json(result);
|
|
} catch (error) {
|
|
return NextResponse.json(
|
|
{
|
|
allowed: false,
|
|
reasons: [
|
|
error instanceof Error ? error.message : 'Unknown error occurred',
|
|
],
|
|
metadata: {
|
|
error: true,
|
|
originalError:
|
|
error instanceof Error ? error.message : String(error),
|
|
},
|
|
},
|
|
{ status: 500 },
|
|
);
|
|
}
|
|
},
|
|
{
|
|
auth: true,
|
|
},
|
|
);
|