File size: 3,625 Bytes
bc4a7e8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import { requireManagementAuth } from "@/lib/api/requireManagementAuth";
import { consumeCommandCodeAuthSecret } from "@/lib/db/commandCodeAuth";
import {
  createProviderConnection,
  getProviderConnectionById,
  updateProviderConnection,
} from "@/lib/db/providers";
import { sanitizeProviderSpecificDataForResponse } from "@/lib/providers/requestDefaults";

import { commandCodeApplySchema, noStoreJson, stateHashFromState } from "../shared";

function safeConnection(

  connection: Record<string, unknown> | null

): Record<string, unknown> | null {
  if (!connection) return null;
  const result = { ...connection };
  delete result.apiKey;
  delete result.accessToken;
  delete result.refreshToken;
  delete result.idToken;
  if (result.providerSpecificData) {
    result.providerSpecificData = sanitizeProviderSpecificDataForResponse(
      result.providerSpecificData
    );
  }
  return result;
}

export async function POST(request: Request) {
  const authError = await requireManagementAuth(request);
  if (authError) return authError;

  let body: unknown;
  try {
    body = await request.json();
  } catch {
    return noStoreJson({ error: "Invalid JSON body" }, { status: 400 });
  }

  const parsed = commandCodeApplySchema.safeParse(body);
  if (!parsed.success) return noStoreJson({ error: "Invalid apply payload" }, { status: 400 });

  let existing: Record<string, unknown> | null = null;
  if (parsed.data.connectionId) {
    existing = (await getProviderConnectionById(parsed.data.connectionId)) as Record<
      string,
      unknown
    > | null;
    if (!existing || existing.provider !== "command-code" || existing.authType !== "apikey") {
      return noStoreJson({ error: "Command Code API-key connection not found" }, { status: 404 });
    }
  }

  const consumed = consumeCommandCodeAuthSecret(stateHashFromState(parsed.data.state));
  if (!consumed) {
    return noStoreJson(
      { error: "No received Command Code API key for this state" },
      { status: 409 }
    );
  }

  let connection: Record<string, unknown> | null;
  if (parsed.data.connectionId && existing) {
    connection = (await updateProviderConnection(parsed.data.connectionId, {
      apiKey: consumed.apiKey,
      name: parsed.data.name || existing.name || consumed.metadata?.keyName || "Command Code",
      isActive: true,
      testStatus: "unknown",
      providerSpecificData: {
        ...((existing.providerSpecificData as Record<string, unknown> | null) || {}),
        authAssist: {
          userId: consumed.metadata?.userId,
          userName: consumed.metadata?.userName,
          keyName: consumed.metadata?.keyName,
          appliedAt: consumed.appliedAt,
        },
      },
      ...(parsed.data.setDefault ? { priority: 1 } : {}),
    })) as Record<string, unknown> | null;
  } else {
    connection = (await createProviderConnection({
      provider: "command-code",
      authType: "apikey",
      name: parsed.data.name || consumed.metadata?.keyName || "Command Code",
      apiKey: consumed.apiKey,
      priority: parsed.data.setDefault ? 1 : undefined,
      isActive: true,
      testStatus: "unknown",
      providerSpecificData: {
        authAssist: {
          userId: consumed.metadata?.userId,
          userName: consumed.metadata?.userName,
          keyName: consumed.metadata?.keyName,
          appliedAt: consumed.appliedAt,
        },
      },
    })) as Record<string, unknown> | null;
  }

  return noStoreJson({ connection: safeConnection(connection), status: "applied" });
}