From b1c16d61b5117f83473f18cdb692d99a0cacee75 Mon Sep 17 00:00:00 2001 From: brianjor <22751140+brianjor@users.noreply.github.com> Date: Thu, 21 Mar 2024 21:14:59 -0700 Subject: [PATCH 1/4] Updated Elysia to 1.0 --- packages/api/package.json | 6 +++--- packages/api/src/handlers/githubLoginHandlers.ts | 2 +- packages/api/src/hooks/requestUserHooks.ts | 4 ++-- packages/api/src/hooks/requiresPermissionHook.ts | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/api/package.json b/packages/api/package.json index 369830e..d09605d 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -23,15 +23,15 @@ "typescript": "^5.0.0" }, "dependencies": { - "@elysiajs/cors": "^0.7.2", - "@elysiajs/swagger": "^0.8.5", + "@elysiajs/cors": "^1.0.2", + "@elysiajs/swagger": "^1.0.3", "@ftoggle/common": "workspace:*", "@ftoggle/db": "workspace:*", "@lucia-auth/adapter-postgresql": "^3.0.0", "arctic": "^1.1.6", "dotenv": "^16.4.4", "drizzle-orm": "^0.29.1", - "elysia": "^0.8.17", + "elysia": "^1.0.0", "lucia": "^3.0.1" } } diff --git a/packages/api/src/handlers/githubLoginHandlers.ts b/packages/api/src/handlers/githubLoginHandlers.ts index 8705af5..d6c2bbf 100644 --- a/packages/api/src/handlers/githubLoginHandlers.ts +++ b/packages/api/src/handlers/githubLoginHandlers.ts @@ -34,7 +34,7 @@ export const githubLoginHandler = new Elysia() async ({ cookie, query, set }) => { const code = query.code; const state = query.state; - const storedState = cookie.github_oauth_state.get(); + const storedState = cookie.github_oauth_state.value; if (!code || !state || !storedState || state !== storedState) { return new Response(null, { status: HttpStatus.BadRequest }); diff --git a/packages/api/src/hooks/requestUserHooks.ts b/packages/api/src/hooks/requestUserHooks.ts index 0351ac1..9726b4a 100644 --- a/packages/api/src/hooks/requestUserHooks.ts +++ b/packages/api/src/hooks/requestUserHooks.ts @@ -9,7 +9,7 @@ import { AuthenticationError, AuthorizationError } from '../errors/apiErrors'; * @throws An {@link AuthenticationError} if user cannot be validated */ const validateUserToken = async (context: Context) => { - const accessToken = context.cookie['accessToken'].get(); + const accessToken = context.cookie['accessToken'].value; if (!accessToken) { throw new AuthenticationError('Missing cookie: "accessToken"'); @@ -23,7 +23,7 @@ const validateUserToken = async (context: Context) => { export const requestUserHooks = new Elysia({ name: 'hooks:getRequestUser', -}).derive((context) => ({ +}).derive({ as: 'global' }, (context) => ({ /** * Checks if user is signed in. * @throws An {@link AuthenticationError} if user cannot be validated diff --git a/packages/api/src/hooks/requiresPermissionHook.ts b/packages/api/src/hooks/requiresPermissionHook.ts index b6035be..5b2d054 100644 --- a/packages/api/src/hooks/requiresPermissionHook.ts +++ b/packages/api/src/hooks/requiresPermissionHook.ts @@ -10,7 +10,7 @@ export const hasPermissions = new Elysia({ name: 'hooks:hasPermissions', }) .use(requestUserHooks) - .derive((context) => { + .derive({ as: 'global' }, (context) => { return { hasUserPermissions: async (requiredPermissions: UserPermission[]) => { const { user } = await context.getRequestUser(); From 17698160613dbb0b071b529b1be8f1da7abb1eaf Mon Sep 17 00:00:00 2001 From: brianjor <22751140+brianjor@users.noreply.github.com> Date: Sun, 7 Apr 2024 20:16:15 -0700 Subject: [PATCH 2/4] Using treaty 2 --- packages/ui/package.json | 2 +- .../ui/src/app/services/api-token.service.ts | 14 +++++---- packages/ui/src/app/services/api.service.ts | 6 ++-- .../ui/src/app/services/conditions.service.ts | 30 +++++++++++-------- .../src/app/services/contextFields.service.ts | 16 ++++++---- .../src/app/services/environments.service.ts | 14 +++++---- .../ui/src/app/services/features.service.ts | 22 ++++++++------ .../ui/src/app/services/projects.service.ts | 2 +- packages/ui/src/app/services/users.service.ts | 20 ++++++------- 9 files changed, 72 insertions(+), 54 deletions(-) diff --git a/packages/ui/package.json b/packages/ui/package.json index 404b8e4..6112653 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -27,7 +27,7 @@ "@angular/platform-browser": "^17.0.0", "@angular/platform-browser-dynamic": "^17.0.0", "@angular/router": "^17.0.0", - "@elysiajs/eden": "^0.7.7", + "@elysiajs/eden": "^1.0.11", "@ftoggle/api": "workspace:*", "@ftoggle/common": "workspace:*", "luxon": "^3.4.4", diff --git a/packages/ui/src/app/services/api-token.service.ts b/packages/ui/src/app/services/api-token.service.ts index a82938f..cb5ed6c 100644 --- a/packages/ui/src/app/services/api-token.service.ts +++ b/packages/ui/src/app/services/api-token.service.ts @@ -20,7 +20,7 @@ export class ApiTokenService { }) { const { projectId, name, environmentId, type } = fields; try { - await this.apiService.api.projects[projectId].apiTokens.post({ + await this.apiService.api.projects({ projectId }).apiTokens.post({ name, environmentId, type, @@ -32,8 +32,9 @@ export class ApiTokenService { async getApiTokens(projectId: string) { try { - const response = - await this.apiService.api.projects[projectId].apiTokens.get(); + const response = await this.apiService.api + .projects({ projectId }) + .apiTokens.get(); this._apiTokens.set(response.data?.tokens ?? []); } catch (err) { console.error('Error getting api tokens', err); @@ -42,9 +43,10 @@ export class ApiTokenService { async deleteApiToken(projectId: string, apiTokenId: string) { try { - await this.apiService.api.projects[projectId].apiTokens[ - apiTokenId - ].delete(); + await this.apiService.api + .projects({ projectId }) + .apiTokens({ apiTokenId }) + .delete(); } catch (err) { console.error('Error creating api token', err); } diff --git a/packages/ui/src/app/services/api.service.ts b/packages/ui/src/app/services/api.service.ts index 5d97fce..bd8eadf 100644 --- a/packages/ui/src/app/services/api.service.ts +++ b/packages/ui/src/app/services/api.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { Router } from '@angular/router'; -import { edenTreaty } from '@elysiajs/eden'; +import { treaty } from '@elysiajs/eden'; import { App } from '@ftoggle/api'; import { environment } from '../../environments/environment'; import { paths } from '../app.routes'; @@ -11,8 +11,8 @@ import { paths } from '../app.routes'; export class ApiService { constructor(private router: Router) {} - private treaty = edenTreaty(environment.apiBaseUrl, { - transform: (response) => { + private treaty = treaty(environment.apiBaseUrl, { + onResponse: (response) => { // Fails authentication, old/invalid token. Clear token and send to login if (response.status === 401) { this.router.navigate([paths.login]); diff --git a/packages/ui/src/app/services/conditions.service.ts b/packages/ui/src/app/services/conditions.service.ts index db01ad6..8f1e4d7 100644 --- a/packages/ui/src/app/services/conditions.service.ts +++ b/packages/ui/src/app/services/conditions.service.ts @@ -21,11 +21,13 @@ export class ConditionsService { value: string; }[], ) { - return await this.apiService.api.projects[projectId].features[ - featureName - ].environments[environmentName].conditions.post({ - conditions, - }); + return await this.apiService.api + .projects({ projectId }) + .features({ featureName }) + .environments({ environmentName }) + .conditions.post({ + conditions, + }); } async getConditions( @@ -33,10 +35,11 @@ export class ConditionsService { featureName: string, environmentName: string, ) { - const res = - await this.apiService.api.projects[projectId].features[ - featureName - ].environments[environmentName].conditions.get(); + const res = await this.apiService.api + .projects({ projectId }) + .features({ featureName }) + .environments({ environmentName }) + .conditions.get(); return res.data?.conditions ?? []; } @@ -62,8 +65,11 @@ export class ConditionsService { featureName: string, environmentName: string, ) { - await this.apiService.api.projects[condition.projectId].features[ - featureName - ].environments[environmentName].conditions[condition.id].delete(); + await this.apiService.api + .projects({ projectId: condition.projectId }) + .features({ featureName }) + .environments({ environmentName }) + .conditions({ conditionId: condition.id }) + .delete(); } } diff --git a/packages/ui/src/app/services/contextFields.service.ts b/packages/ui/src/app/services/contextFields.service.ts index 15b55d9..a9acb16 100644 --- a/packages/ui/src/app/services/contextFields.service.ts +++ b/packages/ui/src/app/services/contextFields.service.ts @@ -17,7 +17,7 @@ export class ContextFieldsService { description?: string, ) { try { - await this.apiService.api.projects[projectId].contextFields.post({ + await this.apiService.api.projects({ projectId }).contextFields.post({ name, description, }); @@ -36,8 +36,9 @@ export class ContextFieldsService { ): Promise { let cFields: ContextFieldsTableItem[] = []; try { - const { data, error, response } = - await this.apiService.api.projects[projectId].contextFields.get(); + const { data, error, response } = await this.apiService.api + .projects({ projectId }) + .contextFields.get(); if (!response.ok) { throw error; } @@ -54,9 +55,12 @@ export class ContextFieldsService { contextField: ContextFieldsTableItem, ) { try { - await this.apiService.api.projects[projectId].contextFields[ - contextField.name - ].delete(); + await this.apiService.api + .projects({ projectId }) + .contextFields({ + contextFieldName: contextField.name, + }) + .delete(); } catch (error) { console.error('Error deleting context field', error); } diff --git a/packages/ui/src/app/services/environments.service.ts b/packages/ui/src/app/services/environments.service.ts index 77b5350..db4d05a 100644 --- a/packages/ui/src/app/services/environments.service.ts +++ b/packages/ui/src/app/services/environments.service.ts @@ -13,7 +13,7 @@ export class EnvironmentsService { async createEnvironment(projectId: string, environment: { name: string }) { try { - await this.apiService.api.projects[projectId].environments.post({ + await this.apiService.api.projects({ projectId }).environments.post({ $query: { projectId }, environmentName: environment.name, }); @@ -24,8 +24,9 @@ export class EnvironmentsService { async getEnvironments(projectId: string) { try { - const response = - await this.apiService.api.projects[projectId].environments.get(); + const response = await this.apiService.api + .projects({ projectId }) + .environments.get(); this._environments.set(response.data?.data.environments ?? []); } catch (err) { @@ -35,9 +36,10 @@ export class EnvironmentsService { async deleteEnvironment(projectId: string, environmentName: string) { try { - await this.apiService.api.projects[projectId].environments[ - environmentName - ].delete(); + await this.apiService.api + .projects({ projectId }) + .environments({ environmentName }) + .delete(); } catch (err) { console.error('Error deleting environment', err); } diff --git a/packages/ui/src/app/services/features.service.ts b/packages/ui/src/app/services/features.service.ts index b629d88..2a79f3f 100644 --- a/packages/ui/src/app/services/features.service.ts +++ b/packages/ui/src/app/services/features.service.ts @@ -13,7 +13,7 @@ export class FeaturesService { async createFeature(projectId: string, feature: { name: string }) { try { - await this.apiService.api.projects[projectId].features.post({ + await this.apiService.api.projects({ projectId }).features.post({ $query: { projectId }, name: feature.name, }); @@ -24,8 +24,9 @@ export class FeaturesService { async getFeatures(projectId: string) { try { - const response = - await this.apiService.api.projects[projectId].features.get(); + const response = await this.apiService.api + .projects({ projectId }) + .features.get(); this._features.set(response.data?.features ?? []); return; } catch (error) { @@ -39,9 +40,11 @@ export class FeaturesService { environmentName: string, ) { try { - await this.apiService.api.projects[projectId].features[ - featureName - ].environments[environmentName].put(); + await this.apiService.api + .projects({ projectId }) + .features({ featureName }) + .environments({ environmentName }) + .put(); } catch (err) { console.error('Error toggling feature', err); } @@ -49,9 +52,10 @@ export class FeaturesService { async deleteFeature(featureName: string, projectId: string) { try { - await this.apiService.api.projects[projectId].features[ - featureName - ].delete(); + await this.apiService.api + .projects({ projectId }) + .features({ featureName }) + .delete(); } catch (error) { console.error('Error deleting feature', error); } diff --git a/packages/ui/src/app/services/projects.service.ts b/packages/ui/src/app/services/projects.service.ts index 38b10dd..8ba1ea3 100644 --- a/packages/ui/src/app/services/projects.service.ts +++ b/packages/ui/src/app/services/projects.service.ts @@ -32,7 +32,7 @@ export class ProjectsService { async deleteProject(projectId: string) { try { - await this.apiService.api.projects[projectId].delete(); + await this.apiService.api.projects({ projectId }).delete(); } catch (err) { console.error('Error deleting project', err); } diff --git a/packages/ui/src/app/services/users.service.ts b/packages/ui/src/app/services/users.service.ts index 4c1373b..c5e7312 100644 --- a/packages/ui/src/app/services/users.service.ts +++ b/packages/ui/src/app/services/users.service.ts @@ -23,28 +23,28 @@ export class UsersService { } async setApproval(user: UsersTableItem, approval: boolean) { - const { response, data } = await this.apiService.api.users[user.id].patch({ - isApproved: approval, - }); + const { response, data } = await this.apiService.api + .users({ userId: user.id }) + .patch({ isApproved: approval }); if (!response.ok) { console.error('Error setting user approval', data); } } async addRole(user: UsersTableItem, role: UserRole) { - const { response, error } = await this.apiService.api.users[ - user.id - ].roles.post({ - role, - }); + const { response, error } = await this.apiService.api + .users({ userId: user.id }) + .roles.post({ role }); if (!response.ok) { console.error('Error adding role', error?.message); } } async removeRole(user: UsersTableItem, role: RolesTableItem) { - const { response, data } = - await this.apiService.api.users[user.id].roles[role.id].delete(); + const { response, data } = await this.apiService.api + .users({ userId: user.id }) + .roles({ roleId: role.id }) + .delete(); if (!response.ok) { console.error('Error removing role:', data); } From f04db3f8dd02da1054140264ed19952a15a0b821 Mon Sep 17 00:00:00 2001 From: brianjor <22751140+brianjor@users.noreply.github.com> Date: Mon, 5 May 2025 16:30:47 -0700 Subject: [PATCH 3/4] Upgraded to Elysia/Eden 1.3 --- bun.lockb | Bin 513384 -> 520573 bytes packages/api/package.json | 6 ++--- packages/ui/package.json | 2 +- .../ui/src/app/services/conditions.service.ts | 23 ++++++++++-------- 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/bun.lockb b/bun.lockb index 2b53a022da38fd2f873fe060ba6c692defea020a..18166a04a58dab5421ddb0c7bfe28fcdb12b1415 100755 GIT binary patch delta 93873 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 diff --git a/packages/api/package.json b/packages/api/package.json index d09605d..ea6943f 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -23,15 +23,15 @@ "typescript": "^5.0.0" }, "dependencies": { - "@elysiajs/cors": "^1.0.2", - "@elysiajs/swagger": "^1.0.3", + "@elysiajs/cors": "^1.3.0", + "@elysiajs/swagger": "^1.3.0", "@ftoggle/common": "workspace:*", "@ftoggle/db": "workspace:*", "@lucia-auth/adapter-postgresql": "^3.0.0", "arctic": "^1.1.6", "dotenv": "^16.4.4", "drizzle-orm": "^0.29.1", - "elysia": "^1.0.0", + "elysia": "^1.3.0", "lucia": "^3.0.1" } } diff --git a/packages/ui/package.json b/packages/ui/package.json index 6112653..4464a6e 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -27,7 +27,7 @@ "@angular/platform-browser": "^17.0.0", "@angular/platform-browser-dynamic": "^17.0.0", "@angular/router": "^17.0.0", - "@elysiajs/eden": "^1.0.11", + "@elysiajs/eden": "^1.3.2", "@ftoggle/api": "workspace:*", "@ftoggle/common": "workspace:*", "luxon": "^3.4.4", diff --git a/packages/ui/src/app/services/conditions.service.ts b/packages/ui/src/app/services/conditions.service.ts index 8f1e4d7..8e73d1d 100644 --- a/packages/ui/src/app/services/conditions.service.ts +++ b/packages/ui/src/app/services/conditions.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; -import { ConditionsTableItem } from '@ftoggle/api/types/conditionsTypes'; +import type { ConditionsTableItem } from '@ftoggle/api/types/conditionsTypes'; import { SingleValueOperatorsValues } from '@ftoggle/common/enums/operators'; -import { ApiService } from './api.service'; +import type { ApiService } from './api.service'; @Injectable({ providedIn: 'root', @@ -50,14 +50,17 @@ export class ConditionsService { environmentName: string, changes: { operator: string; value: string; values: string[] }, ) { - await this.apiService.api.projects[projectId].features[ - featureName - ].environments[environmentName].conditions[conditionToEdit.id].patch({ - operator: changes.operator, - ...(SingleValueOperatorsValues.includes(changes.operator) - ? { value: changes.value } - : { values: changes.values }), - }); + await this.apiService.api + .projects({ projectId }) + .features({ featureName }) + .environments({ environmentName }) + .conditions({ conditionId: conditionToEdit.id }) + .patch({ + operator: changes.operator, + ...(SingleValueOperatorsValues.includes(changes.operator) + ? { value: changes.value } + : { values: changes.values }), + }); } async deleteCondition( From 9f677c473978864405cb683bc7828c04c44db36e Mon Sep 17 00:00:00 2001 From: brianjor <22751140+brianjor@users.noreply.github.com> Date: Mon, 5 May 2025 21:24:32 -0700 Subject: [PATCH 4/4] Fixed error hook --- bun.lockb | Bin 520573 -> 520573 bytes .../api/src/controllers/usersController.ts | 1 + packages/api/src/hooks/errorHook.ts | 49 +++++++++++------- packages/api/src/index.ts | 2 +- .../ui/src/app/services/conditions.service.ts | 4 +- .../src/app/services/environments.service.ts | 1 - .../ui/src/app/services/features.service.ts | 1 - packages/ui/src/app/services/users.service.ts | 4 +- 8 files changed, 36 insertions(+), 26 deletions(-) diff --git a/bun.lockb b/bun.lockb index 18166a04a58dab5421ddb0c7bfe28fcdb12b1415..8c79618dda120118596527ec1f84a63eac5ddee8 100755 GIT binary patch delta 48 xcmezSNdE65`3(=IvR<(7Y5w2*bZYz4sf<9(1jNih%mT!$K+LxN=~VU^(Eza%8ixP? delta 48 xcmezSNdE65`3(=IvIgi2HvMaUI<@`jR7N0X0%B$$W&vVWAZFYCbSnFdXaI^b8F~N! diff --git a/packages/api/src/controllers/usersController.ts b/packages/api/src/controllers/usersController.ts index b246008..d060f53 100644 --- a/packages/api/src/controllers/usersController.ts +++ b/packages/api/src/controllers/usersController.ts @@ -100,6 +100,7 @@ export class UsersController { } return user; } catch (err) { + console.log('Hallo'); // Catch any errors thrown and log them console.error(err); // Throw a generic validation error diff --git a/packages/api/src/hooks/errorHook.ts b/packages/api/src/hooks/errorHook.ts index 30785f1..b49486e 100644 --- a/packages/api/src/hooks/errorHook.ts +++ b/packages/api/src/hooks/errorHook.ts @@ -1,4 +1,4 @@ -import { ErrorHandler } from 'elysia'; +import type { ErrorHandler } from 'elysia'; import postgres from 'postgres'; import { AuthenticationError, @@ -13,23 +13,31 @@ import { /** Hook to handle errors thrown by the api. */ export const errorHook: ErrorHandler = (context) => { const { code, error } = context; + if (code === 'VALIDATION') { + return new Response(JSON.stringify(error), { status: 400 }); + } if ( - code === 'VALIDATION' || error instanceof DuplicateRecordError || error instanceof BadRequestError ) { return new Response(error.message, { status: 400 }); - } else if (error instanceof AuthenticationError) { + } + if (error instanceof AuthenticationError) { return new Response(error.message, { status: 401 }); - } else if (error instanceof AuthorizationError) { + } + if (error instanceof AuthorizationError) { return new Response(error.message, { status: 403 }); - } else if (error instanceof RecordDoesNotExistError) { + } + if (error instanceof RecordDoesNotExistError) { return new Response(error.message, { status: 404 }); - } else if (error instanceof postgres.PostgresError) { + } + if (error instanceof postgres.PostgresError) { return handlePostgresErrors(context); } - console.error(error.message); - console.error(error.stack); + if (error instanceof Error) { + console.error(error.message); + console.error(error.stack); + } return new Response('Internal Server Error', { status: 500 }); }; @@ -40,16 +48,19 @@ const POSTGRES_DUPLICATE_PROJECT_USER_ERROR_MESSAGE = 'duplicate key value violates unique constraint "projects_users_project_id_userId_pk"'; const handlePostgresErrors: ErrorHandler = ({ error }) => { - if (error.message === POSTGRES_DUPLICATE_USERNAME_ERROR_MESSAGE) { - return new Response('User with that username already exists.', { - status: 400, - }); - } else if (error.message === POSTGRES_DUPLICATE_PROJECT_USER_ERROR_MESSAGE) { - return new Response('User is already a project user of the project.', { - status: 400, - }); - } - console.error(error.message); - console.error(error.stack); + if (error instanceof Error) { + if (error.message === POSTGRES_DUPLICATE_USERNAME_ERROR_MESSAGE) { + return new Response('User with that username already exists.', { + status: 400, + }); + } + if (error.message === POSTGRES_DUPLICATE_PROJECT_USER_ERROR_MESSAGE) { + return new Response('User is already a project user of the project.', { + status: 400, + }); + } + console.error(error.message); + console.error(error.stack); + } return new Response('Internal Server Error', { status: 500 }); }; diff --git a/packages/api/src/index.ts b/packages/api/src/index.ts index 70e7bb5..7784f72 100644 --- a/packages/api/src/index.ts +++ b/packages/api/src/index.ts @@ -8,7 +8,7 @@ const port = Bun.env.API_PORT ?? 8080; const app = new Elysia() .use(cors()) .use(swagger()) - .onError(errorHook) + .onError((context) => errorHook(context)) .use(routes) .listen(port, (server) => { console.log(`Started server on http://${server?.hostname}:${server?.port}`); diff --git a/packages/ui/src/app/services/conditions.service.ts b/packages/ui/src/app/services/conditions.service.ts index 8e73d1d..6bddfe7 100644 --- a/packages/ui/src/app/services/conditions.service.ts +++ b/packages/ui/src/app/services/conditions.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; -import type { ConditionsTableItem } from '@ftoggle/api/types/conditionsTypes'; +import { ConditionsTableItem } from '@ftoggle/api/types/conditionsTypes'; import { SingleValueOperatorsValues } from '@ftoggle/common/enums/operators'; -import type { ApiService } from './api.service'; +import { ApiService } from './api.service'; @Injectable({ providedIn: 'root', diff --git a/packages/ui/src/app/services/environments.service.ts b/packages/ui/src/app/services/environments.service.ts index db4d05a..59ce16b 100644 --- a/packages/ui/src/app/services/environments.service.ts +++ b/packages/ui/src/app/services/environments.service.ts @@ -14,7 +14,6 @@ export class EnvironmentsService { async createEnvironment(projectId: string, environment: { name: string }) { try { await this.apiService.api.projects({ projectId }).environments.post({ - $query: { projectId }, environmentName: environment.name, }); } catch (err) { diff --git a/packages/ui/src/app/services/features.service.ts b/packages/ui/src/app/services/features.service.ts index 2a79f3f..15c1804 100644 --- a/packages/ui/src/app/services/features.service.ts +++ b/packages/ui/src/app/services/features.service.ts @@ -14,7 +14,6 @@ export class FeaturesService { async createFeature(projectId: string, feature: { name: string }) { try { await this.apiService.api.projects({ projectId }).features.post({ - $query: { projectId }, name: feature.name, }); } catch (err) { diff --git a/packages/ui/src/app/services/users.service.ts b/packages/ui/src/app/services/users.service.ts index c5e7312..714ca65 100644 --- a/packages/ui/src/app/services/users.service.ts +++ b/packages/ui/src/app/services/users.service.ts @@ -17,7 +17,7 @@ export class UsersService { const { data, response, error } = await this.apiService.api.users.roles.get(); if (!response.ok) { - console.error('Error getting users', error?.message); + console.error('Error getting users', error?.value); } this._users.set(data?.users ?? []); } @@ -36,7 +36,7 @@ export class UsersService { .users({ userId: user.id }) .roles.post({ role }); if (!response.ok) { - console.error('Error adding role', error?.message); + console.error('Error adding role', error?.value); } }