chore: Enhance error handling Rest definitions (#36706)

pull/36573/merge
Guilherme Gazzo 5 months ago committed by GitHub
parent 85e40018f7
commit f018265ca7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 16
      apps/meteor/app/api/server/definition.ts
  2. 5
      apps/meteor/ee/server/apps/communication/endpoints/appLogsDistinctInstanceHandler.ts
  3. 5
      apps/meteor/ee/server/apps/communication/endpoints/appLogsExportHandler.ts
  4. 16
      packages/rest-typings/src/v1/Ajv.ts

@ -311,19 +311,27 @@ type PromiseOrValue<T> = T | Promise<T>;
type InferResult<TResult> = TResult extends ValidateFunction<infer T> ? T : TResult;
type InferNon200Result<T> =
InferResult<T> extends {
success: false;
error?: infer TError;
}
? TError
: never;
type Results<TResponse extends TypedOptions['response']> = {
[K in keyof TResponse]: K extends SuccessStatusCodes
? SuccessResult<InferResult<TResponse[200]>, K>
: K extends RedirectStatusCodes
? RedirectResult<InferResult<TResponse[300]>, K>
? RedirectResult<InferNon200Result<TResponse[300]>, K>
: K extends 400
? FailureResult<InferResult<TResponse[400]>>
: K extends 401
? UnauthorizedResult<InferResult<TResponse[401]>>
? UnauthorizedResult<InferNon200Result<TResponse[401]>>
: K extends 403
? ForbiddenResult<InferResult<TResponse[403]>>
? ForbiddenResult<InferNon200Result<TResponse[403]>>
: K extends 404
? NotFoundResult<InferResult<TResponse[404]>>
? NotFoundResult<InferNon200Result<TResponse[404]>>
: K extends ErrorStatusCodes
? InternalError<InferResult<TResponse[500]>, K>
: never;

@ -3,7 +3,10 @@ import { ajv } from '@rocket.chat/rest-typings';
import type { AppsRestApi } from '../rest';
// This might be a good candidate for a default validator function exported by @rocket.chat/rest-typings
const errorResponse = ajv.compile<unknown>({
const errorResponse = ajv.compile<{
success: false;
error: string;
}>({
additionalProperties: false,
type: 'object',
properties: {

@ -8,7 +8,10 @@ import type { AppsRestApi } from '../rest';
import { makeAppLogsQuery } from './lib/makeAppLogsQuery';
import { APIClass } from '../../../../../app/api/server/ApiClass';
const isErrorResponse = ajv.compile({
const isErrorResponse = ajv.compile<{
success: false;
error: string;
}>({
type: 'object',
properties: {
success: {

@ -90,3 +90,19 @@ const ForbiddenErrorResponseSchema = {
};
export const validateForbiddenErrorResponse = ajv.compile<ForbiddenErrorResponse>(ForbiddenErrorResponseSchema);
type NotFoundErrorResponse = {
success: false;
error: string;
};
const NotFoundErrorResponseSchema = {
type: 'object',
properties: {
success: { type: 'boolean', enum: [false] },
error: { type: 'string' },
},
required: ['success', 'error'],
};
export const validateNotFoundErrorResponse = ajv.compile<NotFoundErrorResponse>(NotFoundErrorResponseSchema);

Loading…
Cancel
Save