mirror of
https://github.com/Portabase/portabase.git
synced 2026-07-14 11:16:13 +02:00
feat: added the api key list, delete, create in profile modal.
This commit is contained in:
@@ -40,6 +40,7 @@ import { Label } from "@/components/ui/label";
|
||||
import { useState } from "react";
|
||||
import { timeAgo } from "@/utils/date-formatting";
|
||||
import {
|
||||
createApiKeysAction,
|
||||
deleteApiKeyAction,
|
||||
getApiKeysAction,
|
||||
} from "@/features/profile/profile.action";
|
||||
@@ -157,20 +158,34 @@ export function ProfileAccount({ user }: ProfileAccountProps) {
|
||||
|
||||
const { mutate: addApiKey, isPending: isAddingApikey } = useMutation({
|
||||
mutationFn: async () => {
|
||||
const result = await authClient.apiKey.create({
|
||||
name: apiKeyName || "My API Key",
|
||||
prefix: "sk_"
|
||||
});
|
||||
|
||||
if (result?.error) {
|
||||
throw result.error;
|
||||
// const permissions = {
|
||||
// organization: ["read", "read-write"],
|
||||
// }
|
||||
//
|
||||
// const result = await authClient.apiKey.create({
|
||||
// name: apiKeyName || "My API Key",
|
||||
// prefix: "sk_",
|
||||
// permissions
|
||||
// });
|
||||
//
|
||||
// if (result?.error) {
|
||||
// throw result.error;
|
||||
// }
|
||||
|
||||
const result = await createApiKeysAction({
|
||||
name: apiKeyName || "My API Key"
|
||||
});
|
||||
console.log(result);
|
||||
if (!result?.data?.success) {
|
||||
throw new Error("Failed to create API Key");
|
||||
}
|
||||
|
||||
return result;
|
||||
},
|
||||
|
||||
onSuccess: (result: any) => {
|
||||
setCreatedApiKey(result.data.key);
|
||||
setCreatedApiKey(result.data.value.key);
|
||||
|
||||
toast.success("API Key created successfully");
|
||||
|
||||
|
||||
@@ -5,9 +5,10 @@ import { eq } from "drizzle-orm";
|
||||
import { ServerActionResult } from "@/types/action-type";
|
||||
import { z } from "zod";
|
||||
import { headers } from "next/headers";
|
||||
import {auth, deleteApiKey, getApiKeys, getPasskeys, revokePasskey} from "@/lib/auth/auth";
|
||||
import {auth, createApiKey, deleteApiKey, getApiKeys, getPasskeys, revokePasskey} from "@/lib/auth/auth";
|
||||
import { user } from "@/db/schema/02_user";
|
||||
import {userAction} from "@/lib/safe-actions/actions";
|
||||
import {ApiKey} from "@better-auth/api-key";
|
||||
|
||||
const UpdateProfileSchema = z.object({
|
||||
name: z.string().optional(),
|
||||
@@ -76,6 +77,32 @@ export const getApiKeysAction = userAction.action(async (): Promise<ServerAction
|
||||
}
|
||||
});
|
||||
|
||||
const CreateApiKeySchema = z.object({
|
||||
name: z.string(),
|
||||
});
|
||||
|
||||
|
||||
export const createApiKeysAction = userAction.schema(CreateApiKeySchema).action(async ({parsedInput} ): Promise<ServerActionResult<ApiKey>> => {
|
||||
try {
|
||||
const apikey = await createApiKey(parsedInput.name);
|
||||
return {
|
||||
success: true,
|
||||
value: apikey,
|
||||
actionSuccess: {
|
||||
message: "apikey_created",
|
||||
},
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
success: false,
|
||||
actionError: {
|
||||
message: "error_creating_apikeys",
|
||||
cause: error instanceof Error ? error.message : "Unknown error",
|
||||
},
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
const DeleteApiKeySchema = z.object({
|
||||
id: z.string(),
|
||||
});
|
||||
|
||||
@@ -669,6 +669,16 @@ export const getApiKeys = async () => {
|
||||
});
|
||||
};
|
||||
|
||||
export const createApiKey = async (name: string) => {
|
||||
return await auth.api.createApiKey({
|
||||
body: {
|
||||
name,
|
||||
prefix: "sk_",
|
||||
},
|
||||
headers: await headers(),
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
export const deleteApiKey = async (keyId: string) => {
|
||||
await auth.api.deleteApiKey({
|
||||
|
||||
Reference in New Issue
Block a user