Merge branch 'main' into 540-issue-nlp-module-strictnullchecks-issues

This commit is contained in:
yassinedorbozgithub 2025-01-09 16:52:40 +01:00
commit 4f88370c69
16 changed files with 36 additions and 41 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright © 2024 Hexastack. All rights reserved.
* Copyright © 2025 Hexastack. All rights reserved.
*
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
@ -7,7 +7,6 @@
*/
import { Attachment } from '@/attachment/schemas/attachment.schema';
import { WithUrl } from '@/chat/schemas/types/attachment';
import { ButtonType } from '@/chat/schemas/types/button';
import {
FileType,
@ -93,7 +92,7 @@ const attachment: Attachment = {
updatedAt: new Date(),
};
const attachmentWithUrl: WithUrl<Attachment> = {
const attachmentWithUrl: Attachment = {
...attachment,
url: 'http://localhost:4000/attachment/download/1/attachment.jpg',
};
@ -154,9 +153,7 @@ export const contentMessage: StdOutgoingListMessage = {
},
};
export const attachmentMessage: StdOutgoingAttachmentMessage<
WithUrl<Attachment>
> = {
export const attachmentMessage: StdOutgoingAttachmentMessage<Attachment> = {
attachment: {
type: FileType.image,
payload: attachmentWithUrl,

View File

@ -1,5 +1,5 @@
/*
* Copyright © 2024 Hexastack. All rights reserved.
* Copyright © 2025 Hexastack. All rights reserved.
*
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
@ -21,10 +21,8 @@ export type AttachmentForeignKey = {
attachment_id: string;
};
export type WithUrl<A> = A & { url?: string };
export interface AttachmentPayload<
A extends WithUrl<Attachment> | AttachmentForeignKey,
A extends Attachment | AttachmentForeignKey,
> {
type: FileType;
payload: A;

View File

@ -1,5 +1,5 @@
/*
* Copyright © 2024 Hexastack. All rights reserved.
* Copyright © 2025 Hexastack. All rights reserved.
*
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
@ -15,7 +15,6 @@ import {
AttachmentForeignKey,
AttachmentPayload,
IncomingAttachmentPayload,
WithUrl,
} from './attachment';
import { Button } from './button';
import { ContentOptions } from './options';
@ -102,7 +101,7 @@ export type StdOutgoingListMessage = {
};
export type StdOutgoingAttachmentMessage<
A extends WithUrl<Attachment> | AttachmentForeignKey,
A extends Attachment | AttachmentForeignKey,
> = {
// Stored in DB as `AttachmentPayload`, `Attachment` when populated for channels relaying
attachment: AttachmentPayload<A>;
@ -128,7 +127,7 @@ export type StdOutgoingMessage =
| StdOutgoingQuickRepliesMessage
| StdOutgoingButtonsMessage
| StdOutgoingListMessage
| StdOutgoingAttachmentMessage<WithUrl<Attachment>>;
| StdOutgoingAttachmentMessage<Attachment>;
type StdIncomingTextMessage = { text: string };
@ -192,7 +191,7 @@ export interface StdOutgoingListEnvelope {
export interface StdOutgoingAttachmentEnvelope {
format: OutgoingMessageFormat.attachment;
message: StdOutgoingAttachmentMessage<WithUrl<Attachment>>;
message: StdOutgoingAttachmentMessage<Attachment>;
}
export type StdOutgoingEnvelope =

View File

@ -1,5 +1,5 @@
/*
* Copyright © 2024 Hexastack. All rights reserved.
* Copyright © 2025 Hexastack. All rights reserved.
*
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
@ -8,7 +8,6 @@
import { Injectable } from '@nestjs/common';
import { Attachment } from '@/attachment/schemas/attachment.schema';
import { AttachmentService } from '@/attachment/services/attachment.service';
import EventWrapper from '@/channel/lib/EventWrapper';
import { ContentService } from '@/cms/services/content.service';
@ -25,7 +24,6 @@ import { getRandom } from '@/utils/helpers/safeRandom';
import { BlockRepository } from '../repositories/block.repository';
import { Block, BlockFull, BlockPopulate } from '../schemas/block.schema';
import { WithUrl } from '../schemas/types/attachment';
import { Context } from '../schemas/types/context';
import {
BlockMessage,
@ -545,7 +543,7 @@ export class BlockService extends BaseService<Block, BlockPopulate, BlockFull> {
message: {
attachment: {
type: blockMessage.attachment.type,
payload: attachment as WithUrl<Attachment>,
payload: attachment,
},
quickReplies: blockMessage.quickReplies
? [...blockMessage.quickReplies]

View File

@ -1,5 +1,5 @@
/*
* Copyright © 2024 Hexastack. All rights reserved.
* Copyright © 2025 Hexastack. All rights reserved.
*
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
@ -10,7 +10,6 @@ import { Injectable } from '@nestjs/common';
import { Attachment } from '@/attachment/schemas/attachment.schema';
import { AttachmentService } from '@/attachment/services/attachment.service';
import { WithUrl } from '@/chat/schemas/types/attachment';
import {
ContentElement,
StdOutgoingListMessage,
@ -108,7 +107,7 @@ export class ContentService extends BaseService<
acc[curr.id] = curr;
return acc;
},
{} as { [key: string]: WithUrl<Attachment> },
{} as { [key: string]: Attachment },
);
const populatedContents = elements.map((content) => {
const attachmentField = content[attachmentFieldName];

View File

@ -1,5 +1,5 @@
/*
* Copyright © 2024 Hexastack. All rights reserved.
* Copyright © 2025 Hexastack. All rights reserved.
*
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
@ -22,7 +22,6 @@ import { MessageCreateDto } from '@/chat/dto/message.dto';
import { SubscriberCreateDto } from '@/chat/dto/subscriber.dto';
import { VIEW_MORE_PAYLOAD } from '@/chat/helpers/constants';
import { Subscriber, SubscriberFull } from '@/chat/schemas/subscriber.schema';
import { WithUrl } from '@/chat/schemas/types/attachment';
import { Button, ButtonType } from '@/chat/schemas/types/button';
import {
AnyMessage,
@ -959,7 +958,7 @@ export default abstract class BaseWebChannelHandler<
* @returns A ready to be sent attachment message
*/
_attachmentFormat(
message: StdOutgoingAttachmentMessage<WithUrl<Attachment>>,
message: StdOutgoingAttachmentMessage<Attachment>,
_options?: BlockOptions,
): Web.OutgoingMessageBase {
const payload: Web.OutgoingMessageBase = {

View File

@ -137,6 +137,7 @@ describe('AuthController', () => {
first_name: 'test',
last_name: 'test',
roles: [role!.id],
avatar: null,
};
await invitationService.create(baseUser);
});
@ -157,6 +158,7 @@ describe('AuthController', () => {
email: 'test@test.test',
password: 'test',
roles: ['invalid role value'],
avatar: null,
};
await expect(authController.signup(userCreateDto)).rejects.toThrow(
@ -174,6 +176,7 @@ describe('AuthController', () => {
email: 'test@test.test',
password: 'test',
roles: ['659564cb4aa383c0d0dbc688'],
avatar: null,
};
const result = await authController.signup(userCreateDto);
expect(userService.create).toHaveBeenCalledWith(userCreateDto);

View File

@ -210,6 +210,7 @@ describe('UserController', () => {
email: 'test@test.test',
password: 'test',
roles: [role!.id],
avatar: null,
};
const result = await userController.create(userDto);
expect(userService.create).toHaveBeenCalledWith(userDto);

View File

@ -250,7 +250,7 @@ export class ReadWriteUserController extends ReadOnlyUserController {
.map((role) => role.id),
avatar: user.avatar
? (await this.attachmentService.findOne(user.avatar))?.id
: undefined,
: null,
},
});
return await this.userService.create(user);

View File

@ -60,7 +60,7 @@ export class UserCreateDto {
@IsOptional()
@IsString()
@IsObjectId({ message: 'Avatar must be a valid ObjectId' })
avatar?: string;
avatar: string | null = null;
}
export class UserEditProfileDto extends OmitType(PartialType(UserCreateDto), [

View File

@ -35,6 +35,6 @@ export class AuthSerializer extends PassportSerializer {
done: (err: Error | null, user: SessionUser | null) => void,
) {
const user = payload.id ? await this.userService.findOne(payload.id) : null;
user ? done(null, user) : done(null, null);
done(null, user);
}
}

View File

@ -91,7 +91,7 @@ export class UserStub extends BaseSchema {
ref: 'Attachment',
default: null,
})
avatar?: unknown;
avatar: unknown;
@Prop({
type: String,
@ -112,7 +112,7 @@ export class User extends UserStub {
roles: string[];
@Transform(({ obj }) => obj.avatar?.toString() || null)
avatar?: string | null;
avatar: string | null;
}
@Schema({ timestamps: true })

View File

@ -17,6 +17,7 @@ export const userModels = (roles: string[]): UserCreateDto[] => {
email: 'admin@admin.admin',
password: 'adminadmin',
roles,
avatar: null,
},
];
};

View File

@ -9,7 +9,7 @@
import mongoose from 'mongoose';
import { UserCreateDto } from '@/user/dto/user.dto';
import { UserModel, User } from '@/user/schemas/user.schema';
import { User, UserModel } from '@/user/schemas/user.schema';
import { hash } from '@/user/utilities/bcryptjs';
import { getFixturesWithDefaultValues } from '../defaultValues';
@ -25,6 +25,7 @@ export const users: UserCreateDto[] = [
email: 'admin@admin.admin',
password: 'adminadmin',
roles: ['0', '1'],
avatar: null,
},
];
@ -34,7 +35,6 @@ export const userDefaultValues: TFixturesDefaultValues<User> = {
timezone: 'Europe/Berlin',
sendEmail: false,
resetCount: 0,
avatar: null,
};
export const getUserFixtures = (users: UserCreateDto[]) =>

View File

@ -1,11 +1,12 @@
/*
* Copyright © 2024 Hexastack. All rights reserved.
* Copyright © 2025 Hexastack. All rights reserved.
*
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
* 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file).
*/
import DownloadIcon from "@mui/icons-material/Download";
import { Button, Dialog, DialogContent } from "@mui/material";
import { FC } from "react";
@ -18,7 +19,6 @@ import {
FileType,
StdIncomingAttachmentMessage,
StdOutgoingAttachmentMessage,
WithUrl,
} from "@/types/message.types";
interface AttachmentInterface {
@ -95,7 +95,7 @@ const componentMap: { [key in FileType]: FC<AttachmentInterface> } = {
export const AttachmentViewer = (props: {
message:
| StdIncomingAttachmentMessage
| StdOutgoingAttachmentMessage<WithUrl<AttachmentAttrs>>;
| StdOutgoingAttachmentMessage<AttachmentAttrs>;
}) => {
const message = props.message;

View File

@ -1,11 +1,12 @@
/*
* Copyright © 2024 Hexastack. All rights reserved.
* Copyright © 2025 Hexastack. All rights reserved.
*
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
* 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file).
*/
import { EntityType } from "@/services/types";
import { IAttachment } from "./attachment.types";
@ -47,6 +48,7 @@ export interface AttachmentAttrs {
size: number;
location: string;
channel?: Record<string, any>;
url?: string;
}
export type AttachmentForeignKey = {
@ -54,10 +56,8 @@ export type AttachmentForeignKey = {
attachment_id: string | undefined;
};
export type WithUrl<A> = A & { url?: string };
export interface AttachmentPayload<
A extends WithUrl<AttachmentAttrs> | AttachmentForeignKey,
A extends AttachmentAttrs | AttachmentForeignKey,
> {
type: FileType;
payload?: A;
@ -172,7 +172,7 @@ export type StdOutgoingListMessage = {
};
};
export type StdOutgoingAttachmentMessage<
A extends WithUrl<AttachmentAttrs> | AttachmentForeignKey,
A extends AttachmentAttrs | AttachmentForeignKey,
> = {
// Stored in DB as `AttachmentPayload`, `Attachment` when populated for channels relaying
attachment: AttachmentPayload<A>;
@ -217,7 +217,7 @@ export type StdOutgoingMessage =
| StdOutgoingQuickRepliesMessage
| StdOutgoingButtonsMessage
| StdOutgoingListMessage
| StdOutgoingAttachmentMessage<WithUrl<AttachmentAttrs>>;
| StdOutgoingAttachmentMessage<AttachmentAttrs>;
export interface IMessageAttributes {
mid?: string;