diff --git a/api/src/channel/lib/__test__/common.mock.ts b/api/src/channel/lib/__test__/common.mock.ts index 0794fa92..e85a9542 100644 --- a/api/src/channel/lib/__test__/common.mock.ts +++ b/api/src/channel/lib/__test__/common.mock.ts @@ -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 = { +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 -> = { +export const attachmentMessage: StdOutgoingAttachmentMessage = { attachment: { type: FileType.image, payload: attachmentWithUrl, diff --git a/api/src/chat/schemas/types/attachment.ts b/api/src/chat/schemas/types/attachment.ts index 975d78fd..777dd7e9 100644 --- a/api/src/chat/schemas/types/attachment.ts +++ b/api/src/chat/schemas/types/attachment.ts @@ -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 & { url?: string }; - export interface AttachmentPayload< - A extends WithUrl | AttachmentForeignKey, + A extends Attachment | AttachmentForeignKey, > { type: FileType; payload: A; diff --git a/api/src/chat/schemas/types/message.ts b/api/src/chat/schemas/types/message.ts index 2c6f2fab..78b9fc1c 100644 --- a/api/src/chat/schemas/types/message.ts +++ b/api/src/chat/schemas/types/message.ts @@ -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 | AttachmentForeignKey, + A extends Attachment | AttachmentForeignKey, > = { // Stored in DB as `AttachmentPayload`, `Attachment` when populated for channels relaying attachment: AttachmentPayload; @@ -128,7 +127,7 @@ export type StdOutgoingMessage = | StdOutgoingQuickRepliesMessage | StdOutgoingButtonsMessage | StdOutgoingListMessage - | StdOutgoingAttachmentMessage>; + | StdOutgoingAttachmentMessage; type StdIncomingTextMessage = { text: string }; @@ -192,7 +191,7 @@ export interface StdOutgoingListEnvelope { export interface StdOutgoingAttachmentEnvelope { format: OutgoingMessageFormat.attachment; - message: StdOutgoingAttachmentMessage>; + message: StdOutgoingAttachmentMessage; } export type StdOutgoingEnvelope = diff --git a/api/src/chat/services/block.service.ts b/api/src/chat/services/block.service.ts index 0b2713cf..131f45f5 100644 --- a/api/src/chat/services/block.service.ts +++ b/api/src/chat/services/block.service.ts @@ -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 { message: { attachment: { type: blockMessage.attachment.type, - payload: attachment as WithUrl, + payload: attachment, }, quickReplies: blockMessage.quickReplies ? [...blockMessage.quickReplies] diff --git a/api/src/cms/services/content.service.ts b/api/src/cms/services/content.service.ts index f17ecfcb..2a491a2b 100644 --- a/api/src/cms/services/content.service.ts +++ b/api/src/cms/services/content.service.ts @@ -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 }, + {} as { [key: string]: Attachment }, ); const populatedContents = elements.map((content) => { const attachmentField = content[attachmentFieldName]; diff --git a/api/src/extensions/channels/web/base-web-channel.ts b/api/src/extensions/channels/web/base-web-channel.ts index 9bc8274f..273a3429 100644 --- a/api/src/extensions/channels/web/base-web-channel.ts +++ b/api/src/extensions/channels/web/base-web-channel.ts @@ -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>, + message: StdOutgoingAttachmentMessage, _options?: BlockOptions, ): Web.OutgoingMessageBase { const payload: Web.OutgoingMessageBase = { diff --git a/frontend/src/components/inbox/components/AttachmentViewer.tsx b/frontend/src/components/inbox/components/AttachmentViewer.tsx index 59a4e18a..f8ba00b6 100644 --- a/frontend/src/components/inbox/components/AttachmentViewer.tsx +++ b/frontend/src/components/inbox/components/AttachmentViewer.tsx @@ -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 } = { export const AttachmentViewer = (props: { message: | StdIncomingAttachmentMessage - | StdOutgoingAttachmentMessage>; + | StdOutgoingAttachmentMessage; }) => { const message = props.message; diff --git a/frontend/src/types/message.types.ts b/frontend/src/types/message.types.ts index 50b5fb7d..3c386de3 100644 --- a/frontend/src/types/message.types.ts +++ b/frontend/src/types/message.types.ts @@ -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; + url?: string; } export type AttachmentForeignKey = { @@ -54,10 +56,8 @@ export type AttachmentForeignKey = { attachment_id: string | undefined; }; -export type WithUrl = A & { url?: string }; - export interface AttachmentPayload< - A extends WithUrl | AttachmentForeignKey, + A extends AttachmentAttrs | AttachmentForeignKey, > { type: FileType; payload?: A; @@ -172,7 +172,7 @@ export type StdOutgoingListMessage = { }; }; export type StdOutgoingAttachmentMessage< - A extends WithUrl | AttachmentForeignKey, + A extends AttachmentAttrs | AttachmentForeignKey, > = { // Stored in DB as `AttachmentPayload`, `Attachment` when populated for channels relaying attachment: AttachmentPayload; @@ -217,7 +217,7 @@ export type StdOutgoingMessage = | StdOutgoingQuickRepliesMessage | StdOutgoingButtonsMessage | StdOutgoingListMessage - | StdOutgoingAttachmentMessage>; + | StdOutgoingAttachmentMessage; export interface IMessageAttributes { mid?: string;