diff --git a/packages/lib/server-only/public-api/create-api-token.ts b/packages/lib/server-only/public-api/create-api-token.ts new file mode 100644 index 000000000..582053359 --- /dev/null +++ b/packages/lib/server-only/public-api/create-api-token.ts @@ -0,0 +1,34 @@ +import crypto from 'crypto'; + +import { prisma } from '@documenso/prisma'; + +// temporary choice for testing only +import { ONE_WEEK } from '../../constants/time'; + +type CreateApiTokenInput = { + userId: number; + tokenName: string; +}; + +export const createApiToken = async ({ userId, tokenName }: CreateApiTokenInput) => { + // quick implementation for testing; it needs double checking + const tokenHash = crypto + .createHash('sha512') + .update(crypto.randomBytes(32).toString('hex')) + .digest('hex'); + + const token = await prisma.apiToken.create({ + data: { + token: tokenHash, + name: tokenName, + userId, + expires: new Date(Date.now() + ONE_WEEK), + }, + }); + + if (!token) { + throw new Error(`Failed to create the API token`); + } + + return token; +}; diff --git a/packages/lib/server-only/public-api/delete-api-token-by-id.ts b/packages/lib/server-only/public-api/delete-api-token-by-id.ts new file mode 100644 index 000000000..af176063f --- /dev/null +++ b/packages/lib/server-only/public-api/delete-api-token-by-id.ts @@ -0,0 +1,15 @@ +import { prisma } from '@documenso/prisma'; + +export type DeleteTokenByIdOptions = { + id: number; + userId: number; +}; + +export const deleteTokenById = async ({ id, userId }: DeleteTokenByIdOptions) => { + return prisma.apiToken.delete({ + where: { + id, + userId, + }, + }); +}; diff --git a/packages/lib/server-only/public-api/get-api-token-by-id.ts b/packages/lib/server-only/public-api/get-api-token-by-id.ts new file mode 100644 index 000000000..ae442f05e --- /dev/null +++ b/packages/lib/server-only/public-api/get-api-token-by-id.ts @@ -0,0 +1,15 @@ +import { prisma } from '@documenso/prisma'; + +export type GetApiTokenByIdOptions = { + id: number; + userId: number; +}; + +export const getApiTokenById = async ({ id, userId }: GetApiTokenByIdOptions) => { + return prisma.apiToken.findFirstOrThrow({ + where: { + id, + userId, + }, + }); +};