import z from 'zod'; import StatusCodes from '../enums/StatusCodes'; /** ****************************************************************************** * Error Handling ******************************************************************************* */ export const serviceError = z.object({ message: z.string(), fields: z.record(z.string(), z.string()).optional(), }); export type ServiceError = z.infer; export const toError = (message: string): ServiceError => { return { message }; }; /** ****************************************************************************** * Authentication ******************************************************************************* */ export const authToken = z.string(); export const authData = z.object({ email: z.string().optional(), userId: z.string().optional(), organizationId: z.string().optional(), token: authToken.optional(), }); export type AuthToken = z.infer; export type AuthData = z.infer; /** ****************************************************************************** * Request/Response ******************************************************************************* */ export const serviceRequest = z.object({}); export const authedServiceRequest = z.object({ auth: authData, }); const statuses = Object.keys(StatusCodes); export const serviceResponse = z.object({ status: z.enum([statuses[0] || '', ...statuses]), error: serviceError.optional(), }); export type ServiceRequest = z.infer; export type AuthedServiceRequest = z.infer; export type ServiceResponse = z.infer; // /** ****************************************************************************** // * Authentication // ******************************************************************************* */ // export interface AuthenticationData { // accountId: string; // token: string; // ipAddress?: string; // } // export interface AuthenticatedRequest extends IRequest { // auth: AuthenticationData; // } // export interface AuthenticatedOptionalRequest extends IRequest { // auth: Partial; // } // /** ****************************************************************************** // * Authorization // ******************************************************************************* */ // export interface AuthorizationData extends AuthenticationData { // organizationId: string; // } // export interface AuthorizedRequest extends IRequest { // auth: AuthorizationData; // } // export interface AuthorizedOptionalRequest extends IRequest { // auth: Partial; // }