From 7cd798a3432ddfbc0b019edaa10554e23cc229fb Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Fri, 10 Mar 2023 22:55:20 +0100 Subject: [PATCH] feat(api-keys): Add APIs --- src/apis/create-api-key.ts | 24 ++++++++++++++++++++++++ src/apis/delete-api-key.ts | 9 +++++++++ src/apis/get-api-keys.ts | 22 ++++++++++++++++++++++ src/apis/helpers/parse-api-key.ts | 8 ++++++++ src/apis/index.ts | 6 ++++++ 5 files changed, 69 insertions(+) create mode 100644 src/apis/create-api-key.ts create mode 100644 src/apis/delete-api-key.ts create mode 100644 src/apis/get-api-keys.ts create mode 100644 src/apis/helpers/parse-api-key.ts diff --git a/src/apis/create-api-key.ts b/src/apis/create-api-key.ts new file mode 100644 index 0000000..e44558f --- /dev/null +++ b/src/apis/create-api-key.ts @@ -0,0 +1,24 @@ +import {APIKey} from "~/server-types" +import {client} from "~/constants/axios-client" +import parseAPIKey from "~/apis/helpers/parse-api-key" + +export interface CreateAPIKeyData { + label: string + scopes: APIKey["scopes"] + + expiresAt?: Date +} + +export default async function createAPIKey({ + label, + scopes, + expiresAt, +}: CreateAPIKeyData): Promise { + const {data} = await client.post(`${import.meta.env.VITE_SERVER_BASE_URL}/v1/api-key`, { + label, + scopes, + expiresAt, + }) + + return parseAPIKey(data) +} diff --git a/src/apis/delete-api-key.ts b/src/apis/delete-api-key.ts new file mode 100644 index 0000000..bc2ba38 --- /dev/null +++ b/src/apis/delete-api-key.ts @@ -0,0 +1,9 @@ +import {client} from "~/constants/axios-client" + +export default async function deleteApiKey(id: string): Promise { + const {data} = await client.delete(`${import.meta.env.VITE_SERVER_BASE_URL}/v1/api-key/${id}`, { + withCredentials: true, + }) + + return data +} diff --git a/src/apis/get-api-keys.ts b/src/apis/get-api-keys.ts new file mode 100644 index 0000000..f927dd3 --- /dev/null +++ b/src/apis/get-api-keys.ts @@ -0,0 +1,22 @@ +import {APIKey, GetPageData, PaginationResult} from "~/server-types" +import {client} from "~/constants/axios-client" +import parseAPIKey from "~/apis/helpers/parse-api-key" + +export interface GetAPIKeysData extends GetPageData {} + +export default async function getAPIKeys({size, page}: GetAPIKeysData = {}): Promise< + PaginationResult +> { + const {data} = await client.get(`${import.meta.env.VITE_SERVER_BASE_URL}/v1/api-key/`, { + withCredentials: true, + params: { + size, + page, + }, + }) + + return { + ...data, + items: data.items.map(parseAPIKey), + } +} diff --git a/src/apis/helpers/parse-api-key.ts b/src/apis/helpers/parse-api-key.ts new file mode 100644 index 0000000..d62c51a --- /dev/null +++ b/src/apis/helpers/parse-api-key.ts @@ -0,0 +1,8 @@ +import {APIKey} from "~/server-types" + +export default function parseAPIKey(key: APIKey): APIKey { + return { + ...key, + expiresAt: new Date(key.expiresAt), + } +} diff --git a/src/apis/index.ts b/src/apis/index.ts index 7340c69..ce3aceb 100644 --- a/src/apis/index.ts +++ b/src/apis/index.ts @@ -68,3 +68,9 @@ export * from "./delete-2fa" export {default as delete2FA} from "./delete-2fa" export * from "./verify-otp" export {default as verifyOTP} from "./verify-otp" +export * from "./create-api-key" +export {default as createAPIKey} from "./create-api-key" +export * from "./get-api-keys" +export {default as getAPIKeys} from "./get-api-keys" +export * from "./delete-api-key" +export {default as deleteAPIKey} from "./delete-api-key"