From 1d006beb47ba6182806f09c38850edd6668bf7fc Mon Sep 17 00:00:00 2001 From: Kristaps Fabians Geikins Date: Wed, 16 Oct 2024 17:56:46 +0300 Subject: [PATCH] chore(server): core IoC #77 - apitoken resolvers to TS --- .../server/modules/auth/repositories/index.ts | 2 +- .../modules/core/domain/tokens/operations.ts | 2 +- .../resolvers/{apitoken.js => apitoken.ts} | 32 +++++++++---------- 3 files changed, 18 insertions(+), 18 deletions(-) rename packages/server/modules/core/graph/resolvers/{apitoken.js => apitoken.ts} (63%) diff --git a/packages/server/modules/auth/repositories/index.ts b/packages/server/modules/auth/repositories/index.ts index 79768f4cb..f8c36d418 100644 --- a/packages/server/modules/auth/repositories/index.ts +++ b/packages/server/modules/auth/repositories/index.ts @@ -42,7 +42,7 @@ export type ApiTokenRecord = { lastChars: Nullable revoked: boolean lifespan: number | bigint - createdAt: string + createdAt: Date lastUsed: Date } diff --git a/packages/server/modules/core/domain/tokens/operations.ts b/packages/server/modules/core/domain/tokens/operations.ts index 225d3ec17..75cb631fa 100644 --- a/packages/server/modules/core/domain/tokens/operations.ts +++ b/packages/server/modules/core/domain/tokens/operations.ts @@ -37,7 +37,7 @@ export type GetUserPersonalAccessTokens = (userId: string) => Promise< name: string | null lastChars: string | null createdAt: Date - lifespan: number + lifespan: number | bigint lastUsed: Date scopes: ServerScope[] }[] diff --git a/packages/server/modules/core/graph/resolvers/apitoken.js b/packages/server/modules/core/graph/resolvers/apitoken.ts similarity index 63% rename from packages/server/modules/core/graph/resolvers/apitoken.js rename to packages/server/modules/core/graph/resolvers/apitoken.ts index 96439f675..310503e69 100644 --- a/packages/server/modules/core/graph/resolvers/apitoken.js +++ b/packages/server/modules/core/graph/resolvers/apitoken.ts @@ -1,15 +1,16 @@ -const { ForbiddenError } = require('@/modules/shared/errors') -const { createPersonalAccessTokenFactory } = require('../../services/tokens') -const { canCreatePAT } = require('@/modules/core/helpers/token') -const { db } = require('@/db/knex') -const { +import { ForbiddenError } from '@/modules/shared/errors' +import { canCreatePAT, isValidScope } from '@/modules/core/helpers/token' +import { db } from '@/db/knex' +import { storeApiTokenFactory, storeTokenScopesFactory, storeTokenResourceAccessDefinitionsFactory, storePersonalApiTokenFactory, getUserPersonalAccessTokensFactory, revokeUserTokenByIdFactory -} = require('@/modules/core/repositories/tokens') +} from '@/modules/core/repositories/tokens' +import { Resolvers } from '@/modules/core/graph/generated/graphql' +import { createPersonalAccessTokenFactory } from '@/modules/core/services/tokens' const createPersonalAccessToken = createPersonalAccessTokenFactory({ storeApiToken: storeApiTokenFactory({ db }), @@ -22,11 +23,10 @@ const createPersonalAccessToken = createPersonalAccessTokenFactory({ const getUserTokens = getUserPersonalAccessTokensFactory({ db }) const revokeToken = revokeUserTokenByIdFactory({ db }) -/** @type {import('@/modules/core/graph/generated/graphql').Resolvers} */ const resolvers = { Query: {}, User: { - async apiTokens(parent, args, context) { + async apiTokens(parent, _args, context) { // TODO! if (parent.id !== context.userId) throw new ForbiddenError('You can only view your own tokens') @@ -36,7 +36,7 @@ const resolvers = { } }, Mutation: { - async apiTokenCreate(parent, args, context) { + async apiTokenCreate(_parent, args, context) { canCreatePAT({ scopes: { user: context.scopes || [], @@ -45,20 +45,20 @@ const resolvers = { }) return await createPersonalAccessToken( - context.userId, + context.userId!, args.token.name, - args.token.scopes, - args.token.lifespan + args.token.scopes.filter(isValidScope), + args.token.lifespan || undefined ) }, - async apiTokenRevoke(parent, args, context) { + async apiTokenRevoke(_parent, args, context) { let id = null if (args.token.toLowerCase().includes('bearer')) id = args.token.split(' ')[1] else id = args.token - await revokeToken(id, context.userId) // let's not revoke other people's tokens + await revokeToken(id, context.userId!) // let's not revoke other people's tokens return true } } -} +} as Resolvers -module.exports = resolvers +export = resolvers