@strapi/content-type-builder 5.25.0 → 5.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/AIChat/Chat.js +431 -0
- package/dist/admin/components/AIChat/Chat.js.map +1 -0
- package/dist/admin/components/AIChat/Chat.mjs +429 -0
- package/dist/admin/components/AIChat/Chat.mjs.map +1 -0
- package/dist/admin/components/AIChat/FeedbackModal.js +237 -0
- package/dist/admin/components/AIChat/FeedbackModal.js.map +1 -0
- package/dist/admin/components/AIChat/FeedbackModal.mjs +233 -0
- package/dist/admin/components/AIChat/FeedbackModal.mjs.map +1 -0
- package/dist/admin/components/AIChat/UploadCodeModal.js +427 -0
- package/dist/admin/components/AIChat/UploadCodeModal.js.map +1 -0
- package/dist/admin/components/AIChat/UploadCodeModal.mjs +423 -0
- package/dist/admin/components/AIChat/UploadCodeModal.mjs.map +1 -0
- package/dist/admin/components/AIChat/UploadFigmaModal.js +377 -0
- package/dist/admin/components/AIChat/UploadFigmaModal.js.map +1 -0
- package/dist/admin/components/AIChat/UploadFigmaModal.mjs +373 -0
- package/dist/admin/components/AIChat/UploadFigmaModal.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/Alert.js +46 -0
- package/dist/admin/components/AIChat/components/Alert.js.map +1 -0
- package/dist/admin/components/AIChat/components/Alert.mjs +44 -0
- package/dist/admin/components/AIChat/components/Alert.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/AnimatedBox.js +34 -0
- package/dist/admin/components/AIChat/components/AnimatedBox.js.map +1 -0
- package/dist/admin/components/AIChat/components/AnimatedBox.mjs +32 -0
- package/dist/admin/components/AIChat/components/AnimatedBox.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/Attachments/AttachmentPreview.js +92 -0
- package/dist/admin/components/AIChat/components/Attachments/AttachmentPreview.js.map +1 -0
- package/dist/admin/components/AIChat/components/Attachments/AttachmentPreview.mjs +90 -0
- package/dist/admin/components/AIChat/components/Attachments/AttachmentPreview.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/Attachments/components/Attachment.js +100 -0
- package/dist/admin/components/AIChat/components/Attachments/components/Attachment.js.map +1 -0
- package/dist/admin/components/AIChat/components/Attachments/components/Attachment.mjs +97 -0
- package/dist/admin/components/AIChat/components/Attachments/components/Attachment.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/Base64Image.js +127 -0
- package/dist/admin/components/AIChat/components/Base64Image.js.map +1 -0
- package/dist/admin/components/AIChat/components/Base64Image.mjs +125 -0
- package/dist/admin/components/AIChat/components/Base64Image.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/Collapsible.js +71 -0
- package/dist/admin/components/AIChat/components/Collapsible.js.map +1 -0
- package/dist/admin/components/AIChat/components/Collapsible.mjs +66 -0
- package/dist/admin/components/AIChat/components/Collapsible.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/Dropzone.js +172 -0
- package/dist/admin/components/AIChat/components/Dropzone.js.map +1 -0
- package/dist/admin/components/AIChat/components/Dropzone.mjs +167 -0
- package/dist/admin/components/AIChat/components/Dropzone.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/FloatingPanel.js +166 -0
- package/dist/admin/components/AIChat/components/FloatingPanel.js.map +1 -0
- package/dist/admin/components/AIChat/components/FloatingPanel.mjs +163 -0
- package/dist/admin/components/AIChat/components/FloatingPanel.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/FullScreenImage.js +190 -0
- package/dist/admin/components/AIChat/components/FullScreenImage.js.map +1 -0
- package/dist/admin/components/AIChat/components/FullScreenImage.mjs +187 -0
- package/dist/admin/components/AIChat/components/FullScreenImage.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/ImagePreview.js +87 -0
- package/dist/admin/components/AIChat/components/ImagePreview.js.map +1 -0
- package/dist/admin/components/AIChat/components/ImagePreview.mjs +85 -0
- package/dist/admin/components/AIChat/components/ImagePreview.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/Input.js +126 -0
- package/dist/admin/components/AIChat/components/Input.js.map +1 -0
- package/dist/admin/components/AIChat/components/Input.mjs +121 -0
- package/dist/admin/components/AIChat/components/Input.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/Messages/Marker.js +138 -0
- package/dist/admin/components/AIChat/components/Messages/Marker.js.map +1 -0
- package/dist/admin/components/AIChat/components/Messages/Marker.mjs +136 -0
- package/dist/admin/components/AIChat/components/Messages/Marker.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/Messages/Message.js +214 -0
- package/dist/admin/components/AIChat/components/Messages/Message.js.map +1 -0
- package/dist/admin/components/AIChat/components/Messages/Message.mjs +212 -0
- package/dist/admin/components/AIChat/components/Messages/Message.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/ResizableTextArea.js +78 -0
- package/dist/admin/components/AIChat/components/ResizableTextArea.js.map +1 -0
- package/dist/admin/components/AIChat/components/ResizableTextArea.mjs +76 -0
- package/dist/admin/components/AIChat/components/ResizableTextArea.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/SimpleMenu.js +60 -0
- package/dist/admin/components/AIChat/components/SimpleMenu.js.map +1 -0
- package/dist/admin/components/AIChat/components/SimpleMenu.mjs +35 -0
- package/dist/admin/components/AIChat/components/SimpleMenu.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/StepModal.js +175 -0
- package/dist/admin/components/AIChat/components/StepModal.js.map +1 -0
- package/dist/admin/components/AIChat/components/StepModal.mjs +171 -0
- package/dist/admin/components/AIChat/components/StepModal.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/animations.js +67 -0
- package/dist/admin/components/AIChat/components/animations.js.map +1 -0
- package/dist/admin/components/AIChat/components/animations.mjs +65 -0
- package/dist/admin/components/AIChat/components/animations.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/icons/FigmaIcon.js +50 -0
- package/dist/admin/components/AIChat/components/icons/FigmaIcon.js.map +1 -0
- package/dist/admin/components/AIChat/components/icons/FigmaIcon.mjs +48 -0
- package/dist/admin/components/AIChat/components/icons/FigmaIcon.mjs.map +1 -0
- package/dist/admin/components/AIChat/components/icons/StopIcon.js +25 -0
- package/dist/admin/components/AIChat/components/icons/StopIcon.js.map +1 -0
- package/dist/admin/components/AIChat/components/icons/StopIcon.mjs +23 -0
- package/dist/admin/components/AIChat/components/icons/StopIcon.mjs.map +1 -0
- package/dist/admin/components/AIChat/hooks/useAIFetch.js +107 -0
- package/dist/admin/components/AIChat/hooks/useAIFetch.js.map +1 -0
- package/dist/admin/components/AIChat/hooks/useAIFetch.mjs +96 -0
- package/dist/admin/components/AIChat/hooks/useAIFetch.mjs.map +1 -0
- package/dist/admin/components/AIChat/hooks/useAttachments.js +152 -0
- package/dist/admin/components/AIChat/hooks/useAttachments.js.map +1 -0
- package/dist/admin/components/AIChat/hooks/useAttachments.mjs +150 -0
- package/dist/admin/components/AIChat/hooks/useAttachments.mjs.map +1 -0
- package/dist/admin/components/AIChat/hooks/useChatTitle.js +47 -0
- package/dist/admin/components/AIChat/hooks/useChatTitle.js.map +1 -0
- package/dist/admin/components/AIChat/hooks/useChatTitle.mjs +45 -0
- package/dist/admin/components/AIChat/hooks/useChatTitle.mjs.map +1 -0
- package/dist/admin/components/AIChat/hooks/useCodeUpload.js +212 -0
- package/dist/admin/components/AIChat/hooks/useCodeUpload.js.map +1 -0
- package/dist/admin/components/AIChat/hooks/useCodeUpload.mjs +207 -0
- package/dist/admin/components/AIChat/hooks/useCodeUpload.mjs.map +1 -0
- package/dist/admin/components/AIChat/hooks/useFeedback.js +76 -0
- package/dist/admin/components/AIChat/hooks/useFeedback.js.map +1 -0
- package/dist/admin/components/AIChat/hooks/useFeedback.mjs +74 -0
- package/dist/admin/components/AIChat/hooks/useFeedback.mjs.map +1 -0
- package/dist/admin/components/AIChat/hooks/useFigmaUpload.js +206 -0
- package/dist/admin/components/AIChat/hooks/useFigmaUpload.js.map +1 -0
- package/dist/admin/components/AIChat/hooks/useFigmaUpload.mjs +200 -0
- package/dist/admin/components/AIChat/hooks/useFigmaUpload.mjs.map +1 -0
- package/dist/admin/components/AIChat/hooks/useLastSeenSchemas.js +115 -0
- package/dist/admin/components/AIChat/hooks/useLastSeenSchemas.js.map +1 -0
- package/dist/admin/components/AIChat/hooks/useLastSeenSchemas.mjs +113 -0
- package/dist/admin/components/AIChat/hooks/useLastSeenSchemas.mjs.map +1 -0
- package/dist/admin/components/AIChat/hooks/useTranslations.js +19 -0
- package/dist/admin/components/AIChat/hooks/useTranslations.js.map +1 -0
- package/dist/admin/components/AIChat/hooks/useTranslations.mjs +17 -0
- package/dist/admin/components/AIChat/hooks/useTranslations.mjs.map +1 -0
- package/dist/admin/components/AIChat/lib/aiClient.js +168 -0
- package/dist/admin/components/AIChat/lib/aiClient.js.map +1 -0
- package/dist/admin/components/AIChat/lib/aiClient.mjs +161 -0
- package/dist/admin/components/AIChat/lib/aiClient.mjs.map +1 -0
- package/dist/admin/components/AIChat/lib/constants.js +16 -0
- package/dist/admin/components/AIChat/lib/constants.js.map +1 -0
- package/dist/admin/components/AIChat/lib/constants.mjs +10 -0
- package/dist/admin/components/AIChat/lib/constants.mjs.map +1 -0
- package/dist/admin/components/AIChat/lib/misc.js +8 -0
- package/dist/admin/components/AIChat/lib/misc.js.map +1 -0
- package/dist/admin/components/AIChat/lib/misc.mjs +6 -0
- package/dist/admin/components/AIChat/lib/misc.mjs.map +1 -0
- package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.js +46 -0
- package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.js.map +1 -0
- package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.mjs +44 -0
- package/dist/admin/components/AIChat/lib/transforms/schemas/fromCTB.mjs.map +1 -0
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.js +151 -0
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.js.map +1 -0
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs +148 -0
- package/dist/admin/components/AIChat/lib/transforms/schemas/toCTB.mjs.map +1 -0
- package/dist/admin/components/AIChat/providers/ChatProvider.js +191 -0
- package/dist/admin/components/AIChat/providers/ChatProvider.js.map +1 -0
- package/dist/admin/components/AIChat/providers/ChatProvider.mjs +187 -0
- package/dist/admin/components/AIChat/providers/ChatProvider.mjs.map +1 -0
- package/dist/admin/components/AIChat/providers/SchemaProvider.js +90 -0
- package/dist/admin/components/AIChat/providers/SchemaProvider.js.map +1 -0
- package/dist/admin/components/AIChat/providers/SchemaProvider.mjs +88 -0
- package/dist/admin/components/AIChat/providers/SchemaProvider.mjs.map +1 -0
- package/dist/admin/components/ComponentList.js +1 -0
- package/dist/admin/components/ComponentList.js.map +1 -1
- package/dist/admin/components/ComponentList.mjs +1 -0
- package/dist/admin/components/ComponentList.mjs.map +1 -1
- package/dist/admin/components/DataManager/DataManagerContext.js.map +1 -1
- package/dist/admin/components/DataManager/DataManagerContext.mjs.map +1 -1
- package/dist/admin/components/DataManager/reducer.js +48 -6
- package/dist/admin/components/DataManager/reducer.js.map +1 -1
- package/dist/admin/components/DataManager/reducer.mjs +48 -6
- package/dist/admin/components/DataManager/reducer.mjs.map +1 -1
- package/dist/admin/components/FormModal/utils/canEditContentType.js.map +1 -1
- package/dist/admin/components/FormModal/utils/canEditContentType.mjs.map +1 -1
- package/dist/admin/pages/App/index.js +60 -29
- package/dist/admin/pages/App/index.js.map +1 -1
- package/dist/admin/pages/App/index.mjs +62 -31
- package/dist/admin/pages/App/index.mjs.map +1 -1
- package/dist/admin/pages/ListView/EmptyState.js +75 -9
- package/dist/admin/pages/ListView/EmptyState.js.map +1 -1
- package/dist/admin/pages/ListView/EmptyState.mjs +77 -11
- package/dist/admin/pages/ListView/EmptyState.mjs.map +1 -1
- package/dist/admin/src/components/AIChat/Chat.d.ts +2 -0
- package/dist/admin/src/components/AIChat/FeedbackModal.d.ts +13 -0
- package/dist/admin/src/components/AIChat/UploadCodeModal.d.ts +12 -0
- package/dist/admin/src/components/AIChat/UploadFigmaModal.d.ts +12 -0
- package/dist/admin/src/components/AIChat/components/Alert.d.ts +6 -0
- package/dist/admin/src/components/AIChat/components/AnimatedBox.d.ts +13 -0
- package/dist/admin/src/components/AIChat/components/Attachments/AttachmentPreview.d.ts +9 -0
- package/dist/admin/src/components/AIChat/components/Attachments/components/Attachment.d.ts +27 -0
- package/dist/admin/src/components/AIChat/components/Base64Image.d.ts +9 -0
- package/dist/admin/src/components/AIChat/components/Collapsible.d.ts +18 -0
- package/dist/admin/src/components/AIChat/components/Dropzone.d.ts +35 -0
- package/dist/admin/src/components/AIChat/components/FloatingPanel.d.ts +34 -0
- package/dist/admin/src/components/AIChat/components/FullScreenImage.d.ts +20 -0
- package/dist/admin/src/components/AIChat/components/ImagePreview.d.ts +8 -0
- package/dist/admin/src/components/AIChat/components/ImagePreviewGroup.d.ts +7 -0
- package/dist/admin/src/components/AIChat/components/Input.d.ts +43 -0
- package/dist/admin/src/components/AIChat/components/Messages/Marker.d.ts +2 -0
- package/dist/admin/src/components/AIChat/components/Messages/Message.d.ts +5 -0
- package/dist/admin/src/components/AIChat/components/ResizableTextArea.d.ts +9 -0
- package/dist/admin/src/components/AIChat/components/SimpleMenu.d.ts +32 -0
- package/dist/admin/src/components/AIChat/components/StepModal.d.ts +37 -0
- package/dist/admin/src/components/AIChat/components/animations.d.ts +8 -0
- package/dist/admin/src/components/AIChat/components/icons/FigmaIcon.d.ts +5 -0
- package/dist/admin/src/components/AIChat/components/icons/StopIcon.d.ts +5 -0
- package/dist/admin/src/components/AIChat/hooks/useAIFetch.d.ts +147 -0
- package/dist/admin/src/components/AIChat/hooks/useAttachments.d.ts +8 -0
- package/dist/admin/src/components/AIChat/hooks/useChatTitle.d.ts +13 -0
- package/dist/admin/src/components/AIChat/hooks/useCodeUpload.d.ts +31 -0
- package/dist/admin/src/components/AIChat/hooks/useFeedback.d.ts +7 -0
- package/dist/admin/src/components/AIChat/hooks/useFigmaUpload.d.ts +61 -0
- package/dist/admin/src/components/AIChat/hooks/useLastSeenSchemas.d.ts +10 -0
- package/dist/admin/src/components/AIChat/hooks/useTranslations.d.ts +3 -0
- package/dist/admin/src/components/AIChat/lib/aiClient.d.ts +32 -0
- package/dist/admin/src/components/AIChat/lib/constants.d.ts +12 -0
- package/dist/admin/src/components/AIChat/lib/fileToAttachment.d.ts +2 -0
- package/dist/admin/src/components/AIChat/lib/misc.d.ts +1 -0
- package/dist/admin/src/components/AIChat/lib/transforms/schemas/fromCTB.d.ts +3 -0
- package/dist/admin/src/components/AIChat/lib/transforms/schemas/toCTB.d.ts +16 -0
- package/dist/admin/src/components/AIChat/lib/types/annotations.d.ts +19 -0
- package/dist/admin/src/components/AIChat/lib/types/attachments.d.ts +15 -0
- package/dist/admin/src/components/AIChat/lib/types/feedback.d.ts +1 -0
- package/dist/admin/src/components/AIChat/lib/types/messages.d.ts +26 -0
- package/dist/admin/src/components/AIChat/lib/types/schema.d.ts +20 -0
- package/dist/admin/src/components/AIChat/providers/ChatProvider.d.ts +30 -0
- package/dist/admin/src/components/AIChat/providers/SchemaProvider.d.ts +10 -0
- package/dist/admin/src/components/ComponentList.d.ts +1 -1
- package/dist/admin/src/components/DataManager/DataManagerContext.d.ts +1 -1
- package/dist/admin/translations/ar.json.js +187 -2
- package/dist/admin/translations/ar.json.js.map +1 -1
- package/dist/admin/translations/ar.json.mjs +187 -3
- package/dist/admin/translations/ar.json.mjs.map +1 -1
- package/dist/admin/translations/de.json.js +42 -7
- package/dist/admin/translations/de.json.js.map +1 -1
- package/dist/admin/translations/de.json.mjs +42 -7
- package/dist/admin/translations/de.json.mjs.map +1 -1
- package/dist/admin/translations/en.json.js +53 -2
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +53 -2
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/es.json.js +37 -15
- package/dist/admin/translations/es.json.js.map +1 -1
- package/dist/admin/translations/es.json.mjs +37 -15
- package/dist/admin/translations/es.json.mjs.map +1 -1
- package/dist/admin/translations/fr.json.js +165 -3
- package/dist/admin/translations/fr.json.js.map +1 -1
- package/dist/admin/translations/fr.json.mjs +165 -4
- package/dist/admin/translations/fr.json.mjs.map +1 -1
- package/dist/admin/translations/id.json.js +93 -23
- package/dist/admin/translations/id.json.js.map +1 -1
- package/dist/admin/translations/id.json.mjs +93 -23
- package/dist/admin/translations/id.json.mjs.map +1 -1
- package/dist/admin/translations/it.json.js +75 -6
- package/dist/admin/translations/it.json.js.map +1 -1
- package/dist/admin/translations/it.json.mjs +75 -6
- package/dist/admin/translations/it.json.mjs.map +1 -1
- package/dist/admin/translations/ja.json.js +191 -5
- package/dist/admin/translations/ja.json.js.map +1 -1
- package/dist/admin/translations/ja.json.mjs +191 -6
- package/dist/admin/translations/ja.json.mjs.map +1 -1
- package/dist/admin/translations/ko.json.js +70 -16
- package/dist/admin/translations/ko.json.js.map +1 -1
- package/dist/admin/translations/ko.json.mjs +70 -16
- package/dist/admin/translations/ko.json.mjs.map +1 -1
- package/dist/admin/translations/ms.json.js +104 -31
- package/dist/admin/translations/ms.json.js.map +1 -1
- package/dist/admin/translations/ms.json.mjs +104 -31
- package/dist/admin/translations/ms.json.mjs.map +1 -1
- package/dist/admin/translations/nl.json.js +95 -15
- package/dist/admin/translations/nl.json.js.map +1 -1
- package/dist/admin/translations/nl.json.mjs +95 -15
- package/dist/admin/translations/nl.json.mjs.map +1 -1
- package/dist/admin/translations/pl.json.js +55 -11
- package/dist/admin/translations/pl.json.js.map +1 -1
- package/dist/admin/translations/pl.json.mjs +55 -11
- package/dist/admin/translations/pl.json.mjs.map +1 -1
- package/dist/admin/translations/pt-BR.json.js +54 -10
- package/dist/admin/translations/pt-BR.json.js.map +1 -1
- package/dist/admin/translations/pt-BR.json.mjs +54 -10
- package/dist/admin/translations/pt-BR.json.mjs.map +1 -1
- package/dist/admin/translations/pt.json.js +187 -2
- package/dist/admin/translations/pt.json.js.map +1 -1
- package/dist/admin/translations/pt.json.mjs +187 -3
- package/dist/admin/translations/pt.json.mjs.map +1 -1
- package/dist/admin/translations/ru.json.js +26 -1
- package/dist/admin/translations/ru.json.js.map +1 -1
- package/dist/admin/translations/ru.json.mjs +26 -1
- package/dist/admin/translations/ru.json.mjs.map +1 -1
- package/dist/admin/translations/sk.json.js +21 -1
- package/dist/admin/translations/sk.json.js.map +1 -1
- package/dist/admin/translations/sk.json.mjs +21 -1
- package/dist/admin/translations/sk.json.mjs.map +1 -1
- package/dist/admin/translations/sv.json.js +21 -1
- package/dist/admin/translations/sv.json.js.map +1 -1
- package/dist/admin/translations/sv.json.mjs +21 -1
- package/dist/admin/translations/sv.json.mjs.map +1 -1
- package/dist/admin/translations/th.json.js +21 -1
- package/dist/admin/translations/th.json.js.map +1 -1
- package/dist/admin/translations/th.json.mjs +21 -1
- package/dist/admin/translations/th.json.mjs.map +1 -1
- package/dist/admin/translations/tr.json.js +21 -1
- package/dist/admin/translations/tr.json.js.map +1 -1
- package/dist/admin/translations/tr.json.mjs +21 -1
- package/dist/admin/translations/tr.json.mjs.map +1 -1
- package/dist/admin/translations/uk.json.js +21 -2
- package/dist/admin/translations/uk.json.js.map +1 -1
- package/dist/admin/translations/uk.json.mjs +21 -2
- package/dist/admin/translations/uk.json.mjs.map +1 -1
- package/dist/admin/translations/zh-Hans.json.js +222 -133
- package/dist/admin/translations/zh-Hans.json.js.map +1 -1
- package/dist/admin/translations/zh-Hans.json.mjs +222 -133
- package/dist/admin/translations/zh-Hans.json.mjs.map +1 -1
- package/dist/admin/translations/zh.json.js +21 -1
- package/dist/admin/translations/zh.json.js.map +1 -1
- package/dist/admin/translations/zh.json.mjs +21 -1
- package/dist/admin/translations/zh.json.mjs.map +1 -1
- package/dist/server/index.js +2 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +2 -0
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/register.js +98 -0
- package/dist/server/register.js.map +1 -0
- package/dist/server/register.mjs +96 -0
- package/dist/server/register.mjs.map +1 -0
- package/dist/server/src/controllers/ai/auth.d.ts +1 -0
- package/dist/server/src/controllers/ai/auth.d.ts.map +1 -0
- package/dist/server/src/controllers/ai/index.d.ts +1 -0
- package/dist/server/src/controllers/ai/index.d.ts.map +1 -0
- package/dist/server/src/index.d.ts +1 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/register.d.ts +11 -0
- package/dist/server/src/register.d.ts.map +1 -0
- package/package.json +12 -5
- package/dist/admin/components/DataManager/utils/formatSchemas.js +0 -21
- package/dist/admin/components/DataManager/utils/formatSchemas.js.map +0 -1
- package/dist/admin/components/DataManager/utils/formatSchemas.mjs +0 -18
- package/dist/admin/components/DataManager/utils/formatSchemas.mjs.map +0 -1
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { keyframes } from 'styled-components';
|
|
2
|
+
|
|
3
|
+
const ANIMATIONS = {
|
|
4
|
+
fadeIn: keyframes`
|
|
5
|
+
from {
|
|
6
|
+
opacity: 0;
|
|
7
|
+
}
|
|
8
|
+
to {
|
|
9
|
+
opacity: 1;
|
|
10
|
+
}
|
|
11
|
+
`,
|
|
12
|
+
scaleIn: keyframes`
|
|
13
|
+
from {
|
|
14
|
+
opacity: 0;
|
|
15
|
+
transform: scale(0.7);
|
|
16
|
+
}
|
|
17
|
+
to {
|
|
18
|
+
opacity: 1;
|
|
19
|
+
transform: scale(1);
|
|
20
|
+
}
|
|
21
|
+
`,
|
|
22
|
+
slideUpIn: keyframes`
|
|
23
|
+
from {
|
|
24
|
+
opacity: 0;
|
|
25
|
+
transform: translateY(10px);
|
|
26
|
+
}
|
|
27
|
+
to {
|
|
28
|
+
opacity: 1;
|
|
29
|
+
transform: translateY(0);
|
|
30
|
+
}
|
|
31
|
+
`,
|
|
32
|
+
slideUpOut: keyframes`
|
|
33
|
+
from {
|
|
34
|
+
opacity: 1;
|
|
35
|
+
transform: translateY(0);
|
|
36
|
+
}
|
|
37
|
+
to {
|
|
38
|
+
opacity: 0;
|
|
39
|
+
transform: translateY(10px);
|
|
40
|
+
}
|
|
41
|
+
`,
|
|
42
|
+
slideDownIn: keyframes`
|
|
43
|
+
from {
|
|
44
|
+
opacity: 0;
|
|
45
|
+
transform: translateY(-10px);
|
|
46
|
+
}
|
|
47
|
+
to {
|
|
48
|
+
opacity: 1;
|
|
49
|
+
transform: translateY(0);
|
|
50
|
+
}
|
|
51
|
+
`,
|
|
52
|
+
slideDownOut: keyframes`
|
|
53
|
+
from {
|
|
54
|
+
opacity: 1;
|
|
55
|
+
transform: translateY(0);
|
|
56
|
+
}
|
|
57
|
+
to {
|
|
58
|
+
opacity: 0;
|
|
59
|
+
transform: translateY(-10px);
|
|
60
|
+
}
|
|
61
|
+
`
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export { ANIMATIONS };
|
|
65
|
+
//# sourceMappingURL=animations.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animations.mjs","sources":["../../../../../admin/src/components/AIChat/components/animations.ts"],"sourcesContent":["import { keyframes } from 'styled-components';\n\nexport const ANIMATIONS = {\n fadeIn: keyframes`\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n `,\n\n scaleIn: keyframes`\n from {\n opacity: 0;\n transform: scale(0.7);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n `,\n\n slideUpIn: keyframes`\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n `,\n\n slideUpOut: keyframes`\n from {\n opacity: 1;\n transform: translateY(0);\n }\n to {\n opacity: 0;\n transform: translateY(10px);\n }\n `,\n\n slideDownIn: keyframes`\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n `,\n\n slideDownOut: keyframes`\n from {\n opacity: 1;\n transform: translateY(0);\n }\n to {\n opacity: 0;\n transform: translateY(-10px);\n }\n `,\n};\n"],"names":["ANIMATIONS","fadeIn","keyframes","scaleIn","slideUpIn","slideUpOut","slideDownIn","slideDownOut"],"mappings":";;MAEaA,UAAa,GAAA;AACxBC,IAAAA,MAAAA,EAAQC,SAAS;;;;;;;EAOjB,CAAC;AAEDC,IAAAA,OAAAA,EAASD,SAAS;;;;;;;;;EASlB,CAAC;AAEDE,IAAAA,SAAAA,EAAWF,SAAS;;;;;;;;;EASpB,CAAC;AAEDG,IAAAA,UAAAA,EAAYH,SAAS;;;;;;;;;EASrB,CAAC;AAEDI,IAAAA,WAAAA,EAAaJ,SAAS;;;;;;;;;EAStB,CAAC;AAEDK,IAAAA,YAAAA,EAAcL,SAAS;;;;;;;;;EASvB;AACF;;;;"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
|
|
5
|
+
const FigmaIcon = (props)=>{
|
|
6
|
+
return /*#__PURE__*/ jsxRuntime.jsxs("svg", {
|
|
7
|
+
width: props.width || 16,
|
|
8
|
+
height: props.height || 16,
|
|
9
|
+
viewBox: "0 0 200 300",
|
|
10
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
11
|
+
"aria-label": "Figma logo",
|
|
12
|
+
style: {
|
|
13
|
+
display: 'block',
|
|
14
|
+
margin: '0 auto',
|
|
15
|
+
...props.style
|
|
16
|
+
},
|
|
17
|
+
...props,
|
|
18
|
+
children: [
|
|
19
|
+
/*#__PURE__*/ jsxRuntime.jsx("title", {
|
|
20
|
+
children: "Figma.logo"
|
|
21
|
+
}),
|
|
22
|
+
/*#__PURE__*/ jsxRuntime.jsx("desc", {
|
|
23
|
+
children: "Created using Figma"
|
|
24
|
+
}),
|
|
25
|
+
/*#__PURE__*/ jsxRuntime.jsx("path", {
|
|
26
|
+
d: "M50 300c27.6 0 50-22.4 50-50v-50H50c-27.6 0-50 22.4-50 50s22.4 50 50 50z",
|
|
27
|
+
fill: "#0acf83"
|
|
28
|
+
}),
|
|
29
|
+
/*#__PURE__*/ jsxRuntime.jsx("path", {
|
|
30
|
+
d: "M50 200c-27.6 0-50-22.4-50-50s22.4-50 50-50h50v100H50z",
|
|
31
|
+
fill: "#a259ff"
|
|
32
|
+
}),
|
|
33
|
+
/*#__PURE__*/ jsxRuntime.jsx("path", {
|
|
34
|
+
d: "M0 50C0 22.4 22.4 0 50 0h50v100H50C22.4 100 0 77.6 0 50z",
|
|
35
|
+
fill: "#f24e1e"
|
|
36
|
+
}),
|
|
37
|
+
/*#__PURE__*/ jsxRuntime.jsx("path", {
|
|
38
|
+
d: "M100 0h50c27.6 0 50 22.4 50 50s-22.4 50-50 50h-50V0z",
|
|
39
|
+
fill: "#ff7262"
|
|
40
|
+
}),
|
|
41
|
+
/*#__PURE__*/ jsxRuntime.jsx("path", {
|
|
42
|
+
d: "M200 150c0 27.6-22.4 50-50 50s-50-22.4-50-50 22.4-50 50-50 50 22.4 50 50z",
|
|
43
|
+
fill: "#1abcfe"
|
|
44
|
+
})
|
|
45
|
+
]
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
exports.FigmaIcon = FigmaIcon;
|
|
50
|
+
//# sourceMappingURL=FigmaIcon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FigmaIcon.js","sources":["../../../../../../admin/src/components/AIChat/components/icons/FigmaIcon.tsx"],"sourcesContent":["interface FigmaIconProps extends React.SVGProps<SVGSVGElement> {}\n\nexport const FigmaIcon = (props: FigmaIconProps) => {\n return (\n <svg\n width={props.width || 16}\n height={props.height || 16}\n viewBox=\"0 0 200 300\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-label=\"Figma logo\"\n style={{ display: 'block', margin: '0 auto', ...props.style }}\n {...props}\n >\n <title>Figma.logo</title>\n <desc>Created using Figma</desc>\n <path\n d=\"M50 300c27.6 0 50-22.4 50-50v-50H50c-27.6 0-50 22.4-50 50s22.4 50 50 50z\"\n fill=\"#0acf83\"\n />\n <path d=\"M50 200c-27.6 0-50-22.4-50-50s22.4-50 50-50h50v100H50z\" fill=\"#a259ff\" />\n <path d=\"M0 50C0 22.4 22.4 0 50 0h50v100H50C22.4 100 0 77.6 0 50z\" fill=\"#f24e1e\" />\n <path d=\"M100 0h50c27.6 0 50 22.4 50 50s-22.4 50-50 50h-50V0z\" fill=\"#ff7262\" />\n <path\n d=\"M200 150c0 27.6-22.4 50-50 50s-50-22.4-50-50 22.4-50 50-50 50 22.4 50 50z\"\n fill=\"#1abcfe\"\n />\n </svg>\n );\n};\n"],"names":["FigmaIcon","props","_jsxs","svg","width","height","viewBox","xmlns","aria-label","style","display","margin","_jsx","title","desc","path","d","fill"],"mappings":";;;;AAEO,MAAMA,YAAY,CAACC,KAAAA,GAAAA;AACxB,IAAA,qBACEC,eAACC,CAAAA,KAAAA,EAAAA;QACCC,KAAOH,EAAAA,KAAAA,CAAMG,KAAK,IAAI,EAAA;QACtBC,MAAQJ,EAAAA,KAAAA,CAAMI,MAAM,IAAI,EAAA;QACxBC,OAAQ,EAAA,aAAA;QACRC,KAAM,EAAA,4BAAA;QACNC,YAAW,EAAA,YAAA;QACXC,KAAO,EAAA;YAAEC,OAAS,EAAA,OAAA;YAASC,MAAQ,EAAA,QAAA;AAAU,YAAA,GAAGV,MAAMQ;AAAM,SAAA;AAC3D,QAAA,GAAGR,KAAK;;0BAETW,cAACC,CAAAA,OAAAA,EAAAA;AAAM,gBAAA,QAAA,EAAA;;0BACPD,cAACE,CAAAA,MAAAA,EAAAA;AAAK,gBAAA,QAAA,EAAA;;0BACNF,cAACG,CAAAA,MAAAA,EAAAA;gBACCC,CAAE,EAAA,0EAAA;gBACFC,IAAK,EAAA;;0BAEPL,cAACG,CAAAA,MAAAA,EAAAA;gBAAKC,CAAE,EAAA,wDAAA;gBAAyDC,IAAK,EAAA;;0BACtEL,cAACG,CAAAA,MAAAA,EAAAA;gBAAKC,CAAE,EAAA,0DAAA;gBAA2DC,IAAK,EAAA;;0BACxEL,cAACG,CAAAA,MAAAA,EAAAA;gBAAKC,CAAE,EAAA,sDAAA;gBAAuDC,IAAK,EAAA;;0BACpEL,cAACG,CAAAA,MAAAA,EAAAA;gBACCC,CAAE,EAAA,2EAAA;gBACFC,IAAK,EAAA;;;;AAIb;;;;"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
const FigmaIcon = (props)=>{
|
|
4
|
+
return /*#__PURE__*/ jsxs("svg", {
|
|
5
|
+
width: props.width || 16,
|
|
6
|
+
height: props.height || 16,
|
|
7
|
+
viewBox: "0 0 200 300",
|
|
8
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
9
|
+
"aria-label": "Figma logo",
|
|
10
|
+
style: {
|
|
11
|
+
display: 'block',
|
|
12
|
+
margin: '0 auto',
|
|
13
|
+
...props.style
|
|
14
|
+
},
|
|
15
|
+
...props,
|
|
16
|
+
children: [
|
|
17
|
+
/*#__PURE__*/ jsx("title", {
|
|
18
|
+
children: "Figma.logo"
|
|
19
|
+
}),
|
|
20
|
+
/*#__PURE__*/ jsx("desc", {
|
|
21
|
+
children: "Created using Figma"
|
|
22
|
+
}),
|
|
23
|
+
/*#__PURE__*/ jsx("path", {
|
|
24
|
+
d: "M50 300c27.6 0 50-22.4 50-50v-50H50c-27.6 0-50 22.4-50 50s22.4 50 50 50z",
|
|
25
|
+
fill: "#0acf83"
|
|
26
|
+
}),
|
|
27
|
+
/*#__PURE__*/ jsx("path", {
|
|
28
|
+
d: "M50 200c-27.6 0-50-22.4-50-50s22.4-50 50-50h50v100H50z",
|
|
29
|
+
fill: "#a259ff"
|
|
30
|
+
}),
|
|
31
|
+
/*#__PURE__*/ jsx("path", {
|
|
32
|
+
d: "M0 50C0 22.4 22.4 0 50 0h50v100H50C22.4 100 0 77.6 0 50z",
|
|
33
|
+
fill: "#f24e1e"
|
|
34
|
+
}),
|
|
35
|
+
/*#__PURE__*/ jsx("path", {
|
|
36
|
+
d: "M100 0h50c27.6 0 50 22.4 50 50s-22.4 50-50 50h-50V0z",
|
|
37
|
+
fill: "#ff7262"
|
|
38
|
+
}),
|
|
39
|
+
/*#__PURE__*/ jsx("path", {
|
|
40
|
+
d: "M200 150c0 27.6-22.4 50-50 50s-50-22.4-50-50 22.4-50 50-50 50 22.4 50 50z",
|
|
41
|
+
fill: "#1abcfe"
|
|
42
|
+
})
|
|
43
|
+
]
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export { FigmaIcon };
|
|
48
|
+
//# sourceMappingURL=FigmaIcon.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FigmaIcon.mjs","sources":["../../../../../../admin/src/components/AIChat/components/icons/FigmaIcon.tsx"],"sourcesContent":["interface FigmaIconProps extends React.SVGProps<SVGSVGElement> {}\n\nexport const FigmaIcon = (props: FigmaIconProps) => {\n return (\n <svg\n width={props.width || 16}\n height={props.height || 16}\n viewBox=\"0 0 200 300\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-label=\"Figma logo\"\n style={{ display: 'block', margin: '0 auto', ...props.style }}\n {...props}\n >\n <title>Figma.logo</title>\n <desc>Created using Figma</desc>\n <path\n d=\"M50 300c27.6 0 50-22.4 50-50v-50H50c-27.6 0-50 22.4-50 50s22.4 50 50 50z\"\n fill=\"#0acf83\"\n />\n <path d=\"M50 200c-27.6 0-50-22.4-50-50s22.4-50 50-50h50v100H50z\" fill=\"#a259ff\" />\n <path d=\"M0 50C0 22.4 22.4 0 50 0h50v100H50C22.4 100 0 77.6 0 50z\" fill=\"#f24e1e\" />\n <path d=\"M100 0h50c27.6 0 50 22.4 50 50s-22.4 50-50 50h-50V0z\" fill=\"#ff7262\" />\n <path\n d=\"M200 150c0 27.6-22.4 50-50 50s-50-22.4-50-50 22.4-50 50-50 50 22.4 50 50z\"\n fill=\"#1abcfe\"\n />\n </svg>\n );\n};\n"],"names":["FigmaIcon","props","_jsxs","svg","width","height","viewBox","xmlns","aria-label","style","display","margin","_jsx","title","desc","path","d","fill"],"mappings":";;AAEO,MAAMA,YAAY,CAACC,KAAAA,GAAAA;AACxB,IAAA,qBACEC,IAACC,CAAAA,KAAAA,EAAAA;QACCC,KAAOH,EAAAA,KAAAA,CAAMG,KAAK,IAAI,EAAA;QACtBC,MAAQJ,EAAAA,KAAAA,CAAMI,MAAM,IAAI,EAAA;QACxBC,OAAQ,EAAA,aAAA;QACRC,KAAM,EAAA,4BAAA;QACNC,YAAW,EAAA,YAAA;QACXC,KAAO,EAAA;YAAEC,OAAS,EAAA,OAAA;YAASC,MAAQ,EAAA,QAAA;AAAU,YAAA,GAAGV,MAAMQ;AAAM,SAAA;AAC3D,QAAA,GAAGR,KAAK;;0BAETW,GAACC,CAAAA,OAAAA,EAAAA;AAAM,gBAAA,QAAA,EAAA;;0BACPD,GAACE,CAAAA,MAAAA,EAAAA;AAAK,gBAAA,QAAA,EAAA;;0BACNF,GAACG,CAAAA,MAAAA,EAAAA;gBACCC,CAAE,EAAA,0EAAA;gBACFC,IAAK,EAAA;;0BAEPL,GAACG,CAAAA,MAAAA,EAAAA;gBAAKC,CAAE,EAAA,wDAAA;gBAAyDC,IAAK,EAAA;;0BACtEL,GAACG,CAAAA,MAAAA,EAAAA;gBAAKC,CAAE,EAAA,0DAAA;gBAA2DC,IAAK,EAAA;;0BACxEL,GAACG,CAAAA,MAAAA,EAAAA;gBAAKC,CAAE,EAAA,sDAAA;gBAAuDC,IAAK,EAAA;;0BACpEL,GAACG,CAAAA,MAAAA,EAAAA;gBACCC,CAAE,EAAA,2EAAA;gBACFC,IAAK,EAAA;;;;AAIb;;;;"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
|
|
5
|
+
const StopIcon = (props)=>{
|
|
6
|
+
return /*#__PURE__*/ jsxRuntime.jsx("svg", {
|
|
7
|
+
width: "16",
|
|
8
|
+
height: "16",
|
|
9
|
+
viewBox: "0 0 16 16",
|
|
10
|
+
fill: "none",
|
|
11
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
12
|
+
...props,
|
|
13
|
+
children: /*#__PURE__*/ jsxRuntime.jsx("rect", {
|
|
14
|
+
x: "2",
|
|
15
|
+
y: "2",
|
|
16
|
+
width: "11",
|
|
17
|
+
height: "11",
|
|
18
|
+
rx: "2",
|
|
19
|
+
fill: "white"
|
|
20
|
+
})
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
exports.StopIcon = StopIcon;
|
|
25
|
+
//# sourceMappingURL=StopIcon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StopIcon.js","sources":["../../../../../../admin/src/components/AIChat/components/icons/StopIcon.tsx"],"sourcesContent":["interface StopIconProps extends React.SVGProps<SVGSVGElement> {}\n\nexport const StopIcon = (props: StopIconProps) => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <rect x=\"2\" y=\"2\" width=\"11\" height=\"11\" rx=\"2\" fill=\"white\" />\n </svg>\n );\n};\n"],"names":["StopIcon","props","_jsx","svg","width","height","viewBox","fill","xmlns","rect","x","y","rx"],"mappings":";;;;AAEO,MAAMA,WAAW,CAACC,KAAAA,GAAAA;AACvB,IAAA,qBACEC,cAACC,CAAAA,KAAAA,EAAAA;QACCC,KAAM,EAAA,IAAA;QACNC,MAAO,EAAA,IAAA;QACPC,OAAQ,EAAA,WAAA;QACRC,IAAK,EAAA,MAAA;QACLC,KAAM,EAAA,4BAAA;AACL,QAAA,GAAGP,KAAK;AAET,QAAA,QAAA,gBAAAC,cAACO,CAAAA,MAAAA,EAAAA;YAAKC,CAAE,EAAA,GAAA;YAAIC,CAAE,EAAA,GAAA;YAAIP,KAAM,EAAA,IAAA;YAAKC,MAAO,EAAA,IAAA;YAAKO,EAAG,EAAA,GAAA;YAAIL,IAAK,EAAA;;;AAG3D;;;;"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
const StopIcon = (props)=>{
|
|
4
|
+
return /*#__PURE__*/ jsx("svg", {
|
|
5
|
+
width: "16",
|
|
6
|
+
height: "16",
|
|
7
|
+
viewBox: "0 0 16 16",
|
|
8
|
+
fill: "none",
|
|
9
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
10
|
+
...props,
|
|
11
|
+
children: /*#__PURE__*/ jsx("rect", {
|
|
12
|
+
x: "2",
|
|
13
|
+
y: "2",
|
|
14
|
+
width: "11",
|
|
15
|
+
height: "11",
|
|
16
|
+
rx: "2",
|
|
17
|
+
fill: "white"
|
|
18
|
+
})
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export { StopIcon };
|
|
23
|
+
//# sourceMappingURL=StopIcon.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StopIcon.mjs","sources":["../../../../../../admin/src/components/AIChat/components/icons/StopIcon.tsx"],"sourcesContent":["interface StopIconProps extends React.SVGProps<SVGSVGElement> {}\n\nexport const StopIcon = (props: StopIconProps) => {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <rect x=\"2\" y=\"2\" width=\"11\" height=\"11\" rx=\"2\" fill=\"white\" />\n </svg>\n );\n};\n"],"names":["StopIcon","props","_jsx","svg","width","height","viewBox","fill","xmlns","rect","x","y","rx"],"mappings":";;AAEO,MAAMA,WAAW,CAACC,KAAAA,GAAAA;AACvB,IAAA,qBACEC,GAACC,CAAAA,KAAAA,EAAAA;QACCC,KAAM,EAAA,IAAA;QACNC,MAAO,EAAA,IAAA;QACPC,OAAQ,EAAA,WAAA;QACRC,IAAK,EAAA,MAAA;QACLC,KAAM,EAAA,4BAAA;AACL,QAAA,GAAGP,KAAK;AAET,QAAA,QAAA,gBAAAC,GAACO,CAAAA,MAAAA,EAAAA;YAAKC,CAAE,EAAA,GAAA;YAAIC,CAAE,EAAA,GAAA;YAAIP,KAAM,EAAA,IAAA;YAAKC,MAAO,EAAA,IAAA;YAAKO,EAAG,EAAA,GAAA;YAAIL,IAAK,EAAA;;;AAG3D;;;;"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var react = require('@ai-sdk/react');
|
|
5
|
+
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
6
|
+
var ee = require('@strapi/admin/strapi-admin/ee');
|
|
7
|
+
var ai = require('ai');
|
|
8
|
+
var aiClient = require('../lib/aiClient.js');
|
|
9
|
+
var constants = require('../lib/constants.js');
|
|
10
|
+
|
|
11
|
+
/* -------------------------------------------------------------------------------------------------
|
|
12
|
+
* Hooks
|
|
13
|
+
* -----------------------------------------------------------------------------------------------*/ const TOO_MANY_REQUESTS_ERROR = 'Too many requests';
|
|
14
|
+
const LICENSE_LIMIT_REACHED_ERROR = 'License limit';
|
|
15
|
+
const LICENSE_LIMIT_EXCEEDED_ERROR = 'AI credit limit exceeded';
|
|
16
|
+
const CHAT_TOO_LONG_ERROR = 'Chat too long';
|
|
17
|
+
/**
|
|
18
|
+
* Base hook factory for making type-safe API calls to Strapi AI endpoints.
|
|
19
|
+
* Creates a hook specific to a single endpoint.
|
|
20
|
+
*/ const createAIFetchHook = (endpoint)=>{
|
|
21
|
+
return ()=>{
|
|
22
|
+
const strapiVersion = strapiAdmin.useAppInfo('useAIFetch', (state)=>state.strapiVersion);
|
|
23
|
+
const projectId = strapiAdmin.useAppInfo('useAIFetch', (state)=>state.projectId);
|
|
24
|
+
const userId = strapiAdmin.useAppInfo('useAIFetch-user', (state)=>state.userId);
|
|
25
|
+
const aiUsage = ee.useGetAIUsageQuery(undefined, {
|
|
26
|
+
refetchOnMountOrArgChange: true
|
|
27
|
+
});
|
|
28
|
+
const [isPending, setIsPending] = React.useState(false);
|
|
29
|
+
const [error, setError] = React.useState(null);
|
|
30
|
+
/**
|
|
31
|
+
* Make a type-safe API call to the specified Strapi AI endpoint with retry logic
|
|
32
|
+
*/ const fetchData = async (options = {})=>{
|
|
33
|
+
setIsPending(true);
|
|
34
|
+
setError(null);
|
|
35
|
+
try {
|
|
36
|
+
const fullUrl = `${constants.STRAPI_AI_URL}${endpoint}`;
|
|
37
|
+
const isJson = !!options.body && !options.formData;
|
|
38
|
+
const response = await aiClient.fetchAI(fullUrl, {
|
|
39
|
+
method: 'POST',
|
|
40
|
+
headers: isJson ? {
|
|
41
|
+
'Content-Type': 'application/json',
|
|
42
|
+
...options.headers || {}
|
|
43
|
+
} : options.headers,
|
|
44
|
+
body: options.formData ? options.formData : isJson ? JSON.stringify(options.body || {}) : undefined,
|
|
45
|
+
ctx: {
|
|
46
|
+
strapiVersion,
|
|
47
|
+
projectId,
|
|
48
|
+
userId
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
// refetch ai usage data on every successful request
|
|
52
|
+
aiUsage.refetch();
|
|
53
|
+
const body = await aiClient.safeParseJson(response);
|
|
54
|
+
if (!response.ok) {
|
|
55
|
+
throw new Error(`Error: ${response.statusText}`);
|
|
56
|
+
}
|
|
57
|
+
return body;
|
|
58
|
+
} catch (err) {
|
|
59
|
+
setError(err instanceof Error ? err.message : `Failed to fetch data from ${endpoint}`);
|
|
60
|
+
return null;
|
|
61
|
+
} finally{
|
|
62
|
+
setIsPending(false);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
return {
|
|
66
|
+
isPending,
|
|
67
|
+
error,
|
|
68
|
+
fetch: fetchData
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
// Create specific hooks for each endpoint
|
|
73
|
+
const useFetchGenerateTitle = createAIFetchHook('/schemas/chat/generate-title');
|
|
74
|
+
const useFetchUploadProject = createAIFetchHook('/schemas/chat/attachment');
|
|
75
|
+
const useFetchSendFeedback = createAIFetchHook('/schemas/chat/feedback');
|
|
76
|
+
const useFetchUploadMedia = createAIFetchHook('/media/upload');
|
|
77
|
+
/**
|
|
78
|
+
* Hook wrapper for AI SDK's useChat with Strapi-specific configuration
|
|
79
|
+
*/ const useAIChat = (props)=>{
|
|
80
|
+
const strapiVersion = strapiAdmin.useAppInfo('useAIChat', (state)=>state.strapiVersion);
|
|
81
|
+
const projectId = strapiAdmin.useAppInfo('useAIFetch', (state)=>state.projectId);
|
|
82
|
+
const userId = strapiAdmin.useAppInfo('useAIChat-user', (state)=>state.userId);
|
|
83
|
+
const customFetch = aiClient.makeChatFetch({
|
|
84
|
+
strapiVersion,
|
|
85
|
+
projectId,
|
|
86
|
+
userId
|
|
87
|
+
});
|
|
88
|
+
return react.useChat({
|
|
89
|
+
...props,
|
|
90
|
+
transport: new ai.DefaultChatTransport({
|
|
91
|
+
api: constants.STRAPI_AI_CHAT_URL,
|
|
92
|
+
fetch: customFetch
|
|
93
|
+
})
|
|
94
|
+
});
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
exports.CHAT_TOO_LONG_ERROR = CHAT_TOO_LONG_ERROR;
|
|
98
|
+
exports.LICENSE_LIMIT_EXCEEDED_ERROR = LICENSE_LIMIT_EXCEEDED_ERROR;
|
|
99
|
+
exports.LICENSE_LIMIT_REACHED_ERROR = LICENSE_LIMIT_REACHED_ERROR;
|
|
100
|
+
exports.TOO_MANY_REQUESTS_ERROR = TOO_MANY_REQUESTS_ERROR;
|
|
101
|
+
exports.createAIFetchHook = createAIFetchHook;
|
|
102
|
+
exports.useAIChat = useAIChat;
|
|
103
|
+
exports.useFetchGenerateTitle = useFetchGenerateTitle;
|
|
104
|
+
exports.useFetchSendFeedback = useFetchSendFeedback;
|
|
105
|
+
exports.useFetchUploadMedia = useFetchUploadMedia;
|
|
106
|
+
exports.useFetchUploadProject = useFetchUploadProject;
|
|
107
|
+
//# sourceMappingURL=useAIFetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAIFetch.js","sources":["../../../../../admin/src/components/AIChat/hooks/useAIFetch.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-namespace */\n\n/**\n * In charge of fetching data from Strapi AI endpoints\n */\n\nimport { useState } from 'react';\n\nimport { UIMessage, useChat } from '@ai-sdk/react';\nimport { useAppInfo } from '@strapi/admin/strapi-admin';\nimport { useGetAIUsageQuery } from '@strapi/admin/strapi-admin/ee';\nimport { DefaultChatTransport } from 'ai';\n\nimport { fetchAI, makeChatFetch, safeParseJson } from '../lib/aiClient';\nimport { STRAPI_AI_CHAT_URL, STRAPI_AI_URL } from '../lib/constants';\nimport { Attachment } from '../lib/types/attachments';\nimport { Schema } from '../lib/types/schema';\n\n/* -------------------------------------------------------------------------------------------------\n * Types\n * -----------------------------------------------------------------------------------------------*/\n/**\n * Chat title\n */\nexport namespace GenerateTitle {\n export interface Request {\n body: {\n chatId: string;\n message: string;\n };\n }\n export interface Response {\n data: {\n title: string;\n };\n error?: string;\n }\n}\n\n/**\n * Upload a project to the chat\n */\nexport namespace UploadProject {\n export interface Request {\n body: {\n chatId: string;\n name: string;\n type: 'code';\n files: {\n path: string;\n content: string;\n }[];\n };\n }\n export interface Response {\n data: Attachment;\n error?: string;\n }\n}\n\n/**\n * Send chat feedback\n */\nexport type FeedbackReasonIds =\n | 'invalid_schema'\n | 'bad_recommendation'\n | 'slow'\n | 'instructions_ignored'\n | 'being_lazy'\n | 'other';\n\nnamespace SendFeedback {\n export interface Request {\n body: {\n chatId: string;\n type: 'upvote' | 'downvote';\n feedback?: string;\n reasons?: FeedbackReasonIds[];\n messageId: string;\n messages: UIMessage[];\n schemas: Schema[];\n };\n }\n}\n\n/**\n * Upload media\n */\nexport namespace UploadMedia {\n export interface Request {\n body: {\n url: string; // base64 image\n filename: string;\n chatId: string;\n };\n }\n export interface Response {\n data: Attachment;\n error?: string;\n }\n}\n\n/**\n * Collection of API endpoints and their corresponding request/response types\n */\ntype AIEndpoints = {\n '/schemas/chat/generate-title': {\n request: GenerateTitle.Request;\n response: GenerateTitle.Response;\n };\n '/schemas/chat/attachment': {\n request: UploadProject.Request;\n response: UploadProject.Response;\n };\n '/schemas/chat/feedback': {\n request: SendFeedback.Request;\n response: void;\n };\n '/media/upload': {\n request: UploadMedia.Request;\n response: UploadMedia.Response;\n };\n};\n\n// Helper type to extract the request type for a given endpoint\ntype RequestType<T extends keyof AIEndpoints> = AIEndpoints[T]['request'];\n\n// Helper type to extract the response type for a given endpoint\ntype ResponseType<T extends keyof AIEndpoints> = AIEndpoints[T]['response'];\n\n/* -------------------------------------------------------------------------------------------------\n * Hooks\n * -----------------------------------------------------------------------------------------------*/\n\nexport const TOO_MANY_REQUESTS_ERROR = 'Too many requests';\nexport const LICENSE_LIMIT_REACHED_ERROR = 'License limit';\nexport const LICENSE_LIMIT_EXCEEDED_ERROR = 'AI credit limit exceeded';\nexport const CHAT_TOO_LONG_ERROR = 'Chat too long';\nexport const ATTACHMENT_TOO_BIG_ERROR = 'Attachment too big';\nexport const ATTACHMENT_NOT_FOUND_ERROR = 'Attachment not found';\nexport const INVALID_REQUEST_ERROR = 'Invalid request';\n\n/**\n * Base hook factory for making type-safe API calls to Strapi AI endpoints.\n * Creates a hook specific to a single endpoint.\n */\nexport const createAIFetchHook = <T extends keyof AIEndpoints>(endpoint: T) => {\n return () => {\n const strapiVersion = useAppInfo('useAIFetch', (state) => state.strapiVersion);\n const projectId = useAppInfo('useAIFetch', (state) => state.projectId);\n const userId = useAppInfo('useAIFetch-user', (state) => state.userId);\n const aiUsage = useGetAIUsageQuery(undefined, { refetchOnMountOrArgChange: true });\n\n const [isPending, setIsPending] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n /**\n * Make a type-safe API call to the specified Strapi AI endpoint with retry logic\n */\n const fetchData = async (\n options: Omit<RequestInit, 'body'> & Partial<RequestType<T>> & { formData?: FormData } = {}\n ): Promise<ResponseType<T> | null> => {\n setIsPending(true);\n setError(null);\n\n try {\n const fullUrl = `${STRAPI_AI_URL}${endpoint}`;\n const isJson = !!options.body && !options.formData;\n\n const response = await fetchAI(fullUrl, {\n method: 'POST',\n headers: isJson\n ? { 'Content-Type': 'application/json', ...(options.headers || {}) }\n : options.headers,\n body: options.formData\n ? options.formData\n : isJson\n ? JSON.stringify(options.body || {})\n : undefined,\n ctx: { strapiVersion, projectId, userId },\n });\n // refetch ai usage data on every successful request\n aiUsage.refetch();\n\n const body = await safeParseJson(response);\n\n if (!response.ok) {\n throw new Error(`Error: ${response.statusText}`);\n }\n return body as ResponseType<T>;\n } catch (err) {\n setError(err instanceof Error ? err.message : `Failed to fetch data from ${endpoint}`);\n return null;\n } finally {\n setIsPending(false);\n }\n };\n\n return {\n isPending,\n error,\n fetch: fetchData,\n };\n };\n};\n\n// Create specific hooks for each endpoint\nexport const useFetchGenerateTitle = createAIFetchHook('/schemas/chat/generate-title');\nexport const useFetchUploadProject = createAIFetchHook('/schemas/chat/attachment');\nexport const useFetchSendFeedback = createAIFetchHook('/schemas/chat/feedback');\nexport const useFetchUploadMedia = createAIFetchHook('/media/upload');\n\n/**\n * Hook wrapper for AI SDK's useChat with Strapi-specific configuration\n */\nexport const useAIChat: typeof useChat = (props) => {\n const strapiVersion = useAppInfo('useAIChat', (state) => state.strapiVersion);\n const projectId = useAppInfo('useAIFetch', (state) => state.projectId);\n const userId = useAppInfo('useAIChat-user', (state) => state.userId);\n\n const customFetch = makeChatFetch({ strapiVersion, projectId, userId });\n\n return useChat({\n ...props,\n transport: new DefaultChatTransport({\n api: STRAPI_AI_CHAT_URL,\n fetch: customFetch,\n }),\n });\n};\n"],"names":["TOO_MANY_REQUESTS_ERROR","LICENSE_LIMIT_REACHED_ERROR","LICENSE_LIMIT_EXCEEDED_ERROR","CHAT_TOO_LONG_ERROR","createAIFetchHook","endpoint","strapiVersion","useAppInfo","state","projectId","userId","aiUsage","useGetAIUsageQuery","undefined","refetchOnMountOrArgChange","isPending","setIsPending","useState","error","setError","fetchData","options","fullUrl","STRAPI_AI_URL","isJson","body","formData","response","fetchAI","method","headers","JSON","stringify","ctx","refetch","safeParseJson","ok","Error","statusText","err","message","fetch","useFetchGenerateTitle","useFetchUploadProject","useFetchSendFeedback","useFetchUploadMedia","useAIChat","props","customFetch","makeChatFetch","useChat","transport","DefaultChatTransport","api","STRAPI_AI_CHAT_URL"],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
import { useChat } from '@ai-sdk/react';
|
|
3
|
+
import { useAppInfo } from '@strapi/admin/strapi-admin';
|
|
4
|
+
import { useGetAIUsageQuery } from '@strapi/admin/strapi-admin/ee';
|
|
5
|
+
import { DefaultChatTransport } from 'ai';
|
|
6
|
+
import { makeChatFetch, fetchAI, safeParseJson } from '../lib/aiClient.mjs';
|
|
7
|
+
import { STRAPI_AI_CHAT_URL, STRAPI_AI_URL } from '../lib/constants.mjs';
|
|
8
|
+
|
|
9
|
+
/* -------------------------------------------------------------------------------------------------
|
|
10
|
+
* Hooks
|
|
11
|
+
* -----------------------------------------------------------------------------------------------*/ const TOO_MANY_REQUESTS_ERROR = 'Too many requests';
|
|
12
|
+
const LICENSE_LIMIT_REACHED_ERROR = 'License limit';
|
|
13
|
+
const LICENSE_LIMIT_EXCEEDED_ERROR = 'AI credit limit exceeded';
|
|
14
|
+
const CHAT_TOO_LONG_ERROR = 'Chat too long';
|
|
15
|
+
/**
|
|
16
|
+
* Base hook factory for making type-safe API calls to Strapi AI endpoints.
|
|
17
|
+
* Creates a hook specific to a single endpoint.
|
|
18
|
+
*/ const createAIFetchHook = (endpoint)=>{
|
|
19
|
+
return ()=>{
|
|
20
|
+
const strapiVersion = useAppInfo('useAIFetch', (state)=>state.strapiVersion);
|
|
21
|
+
const projectId = useAppInfo('useAIFetch', (state)=>state.projectId);
|
|
22
|
+
const userId = useAppInfo('useAIFetch-user', (state)=>state.userId);
|
|
23
|
+
const aiUsage = useGetAIUsageQuery(undefined, {
|
|
24
|
+
refetchOnMountOrArgChange: true
|
|
25
|
+
});
|
|
26
|
+
const [isPending, setIsPending] = useState(false);
|
|
27
|
+
const [error, setError] = useState(null);
|
|
28
|
+
/**
|
|
29
|
+
* Make a type-safe API call to the specified Strapi AI endpoint with retry logic
|
|
30
|
+
*/ const fetchData = async (options = {})=>{
|
|
31
|
+
setIsPending(true);
|
|
32
|
+
setError(null);
|
|
33
|
+
try {
|
|
34
|
+
const fullUrl = `${STRAPI_AI_URL}${endpoint}`;
|
|
35
|
+
const isJson = !!options.body && !options.formData;
|
|
36
|
+
const response = await fetchAI(fullUrl, {
|
|
37
|
+
method: 'POST',
|
|
38
|
+
headers: isJson ? {
|
|
39
|
+
'Content-Type': 'application/json',
|
|
40
|
+
...options.headers || {}
|
|
41
|
+
} : options.headers,
|
|
42
|
+
body: options.formData ? options.formData : isJson ? JSON.stringify(options.body || {}) : undefined,
|
|
43
|
+
ctx: {
|
|
44
|
+
strapiVersion,
|
|
45
|
+
projectId,
|
|
46
|
+
userId
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
// refetch ai usage data on every successful request
|
|
50
|
+
aiUsage.refetch();
|
|
51
|
+
const body = await safeParseJson(response);
|
|
52
|
+
if (!response.ok) {
|
|
53
|
+
throw new Error(`Error: ${response.statusText}`);
|
|
54
|
+
}
|
|
55
|
+
return body;
|
|
56
|
+
} catch (err) {
|
|
57
|
+
setError(err instanceof Error ? err.message : `Failed to fetch data from ${endpoint}`);
|
|
58
|
+
return null;
|
|
59
|
+
} finally{
|
|
60
|
+
setIsPending(false);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
return {
|
|
64
|
+
isPending,
|
|
65
|
+
error,
|
|
66
|
+
fetch: fetchData
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
// Create specific hooks for each endpoint
|
|
71
|
+
const useFetchGenerateTitle = createAIFetchHook('/schemas/chat/generate-title');
|
|
72
|
+
const useFetchUploadProject = createAIFetchHook('/schemas/chat/attachment');
|
|
73
|
+
const useFetchSendFeedback = createAIFetchHook('/schemas/chat/feedback');
|
|
74
|
+
const useFetchUploadMedia = createAIFetchHook('/media/upload');
|
|
75
|
+
/**
|
|
76
|
+
* Hook wrapper for AI SDK's useChat with Strapi-specific configuration
|
|
77
|
+
*/ const useAIChat = (props)=>{
|
|
78
|
+
const strapiVersion = useAppInfo('useAIChat', (state)=>state.strapiVersion);
|
|
79
|
+
const projectId = useAppInfo('useAIFetch', (state)=>state.projectId);
|
|
80
|
+
const userId = useAppInfo('useAIChat-user', (state)=>state.userId);
|
|
81
|
+
const customFetch = makeChatFetch({
|
|
82
|
+
strapiVersion,
|
|
83
|
+
projectId,
|
|
84
|
+
userId
|
|
85
|
+
});
|
|
86
|
+
return useChat({
|
|
87
|
+
...props,
|
|
88
|
+
transport: new DefaultChatTransport({
|
|
89
|
+
api: STRAPI_AI_CHAT_URL,
|
|
90
|
+
fetch: customFetch
|
|
91
|
+
})
|
|
92
|
+
});
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
export { CHAT_TOO_LONG_ERROR, LICENSE_LIMIT_EXCEEDED_ERROR, LICENSE_LIMIT_REACHED_ERROR, TOO_MANY_REQUESTS_ERROR, createAIFetchHook, useAIChat, useFetchGenerateTitle, useFetchSendFeedback, useFetchUploadMedia, useFetchUploadProject };
|
|
96
|
+
//# sourceMappingURL=useAIFetch.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAIFetch.mjs","sources":["../../../../../admin/src/components/AIChat/hooks/useAIFetch.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-namespace */\n\n/**\n * In charge of fetching data from Strapi AI endpoints\n */\n\nimport { useState } from 'react';\n\nimport { UIMessage, useChat } from '@ai-sdk/react';\nimport { useAppInfo } from '@strapi/admin/strapi-admin';\nimport { useGetAIUsageQuery } from '@strapi/admin/strapi-admin/ee';\nimport { DefaultChatTransport } from 'ai';\n\nimport { fetchAI, makeChatFetch, safeParseJson } from '../lib/aiClient';\nimport { STRAPI_AI_CHAT_URL, STRAPI_AI_URL } from '../lib/constants';\nimport { Attachment } from '../lib/types/attachments';\nimport { Schema } from '../lib/types/schema';\n\n/* -------------------------------------------------------------------------------------------------\n * Types\n * -----------------------------------------------------------------------------------------------*/\n/**\n * Chat title\n */\nexport namespace GenerateTitle {\n export interface Request {\n body: {\n chatId: string;\n message: string;\n };\n }\n export interface Response {\n data: {\n title: string;\n };\n error?: string;\n }\n}\n\n/**\n * Upload a project to the chat\n */\nexport namespace UploadProject {\n export interface Request {\n body: {\n chatId: string;\n name: string;\n type: 'code';\n files: {\n path: string;\n content: string;\n }[];\n };\n }\n export interface Response {\n data: Attachment;\n error?: string;\n }\n}\n\n/**\n * Send chat feedback\n */\nexport type FeedbackReasonIds =\n | 'invalid_schema'\n | 'bad_recommendation'\n | 'slow'\n | 'instructions_ignored'\n | 'being_lazy'\n | 'other';\n\nnamespace SendFeedback {\n export interface Request {\n body: {\n chatId: string;\n type: 'upvote' | 'downvote';\n feedback?: string;\n reasons?: FeedbackReasonIds[];\n messageId: string;\n messages: UIMessage[];\n schemas: Schema[];\n };\n }\n}\n\n/**\n * Upload media\n */\nexport namespace UploadMedia {\n export interface Request {\n body: {\n url: string; // base64 image\n filename: string;\n chatId: string;\n };\n }\n export interface Response {\n data: Attachment;\n error?: string;\n }\n}\n\n/**\n * Collection of API endpoints and their corresponding request/response types\n */\ntype AIEndpoints = {\n '/schemas/chat/generate-title': {\n request: GenerateTitle.Request;\n response: GenerateTitle.Response;\n };\n '/schemas/chat/attachment': {\n request: UploadProject.Request;\n response: UploadProject.Response;\n };\n '/schemas/chat/feedback': {\n request: SendFeedback.Request;\n response: void;\n };\n '/media/upload': {\n request: UploadMedia.Request;\n response: UploadMedia.Response;\n };\n};\n\n// Helper type to extract the request type for a given endpoint\ntype RequestType<T extends keyof AIEndpoints> = AIEndpoints[T]['request'];\n\n// Helper type to extract the response type for a given endpoint\ntype ResponseType<T extends keyof AIEndpoints> = AIEndpoints[T]['response'];\n\n/* -------------------------------------------------------------------------------------------------\n * Hooks\n * -----------------------------------------------------------------------------------------------*/\n\nexport const TOO_MANY_REQUESTS_ERROR = 'Too many requests';\nexport const LICENSE_LIMIT_REACHED_ERROR = 'License limit';\nexport const LICENSE_LIMIT_EXCEEDED_ERROR = 'AI credit limit exceeded';\nexport const CHAT_TOO_LONG_ERROR = 'Chat too long';\nexport const ATTACHMENT_TOO_BIG_ERROR = 'Attachment too big';\nexport const ATTACHMENT_NOT_FOUND_ERROR = 'Attachment not found';\nexport const INVALID_REQUEST_ERROR = 'Invalid request';\n\n/**\n * Base hook factory for making type-safe API calls to Strapi AI endpoints.\n * Creates a hook specific to a single endpoint.\n */\nexport const createAIFetchHook = <T extends keyof AIEndpoints>(endpoint: T) => {\n return () => {\n const strapiVersion = useAppInfo('useAIFetch', (state) => state.strapiVersion);\n const projectId = useAppInfo('useAIFetch', (state) => state.projectId);\n const userId = useAppInfo('useAIFetch-user', (state) => state.userId);\n const aiUsage = useGetAIUsageQuery(undefined, { refetchOnMountOrArgChange: true });\n\n const [isPending, setIsPending] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n /**\n * Make a type-safe API call to the specified Strapi AI endpoint with retry logic\n */\n const fetchData = async (\n options: Omit<RequestInit, 'body'> & Partial<RequestType<T>> & { formData?: FormData } = {}\n ): Promise<ResponseType<T> | null> => {\n setIsPending(true);\n setError(null);\n\n try {\n const fullUrl = `${STRAPI_AI_URL}${endpoint}`;\n const isJson = !!options.body && !options.formData;\n\n const response = await fetchAI(fullUrl, {\n method: 'POST',\n headers: isJson\n ? { 'Content-Type': 'application/json', ...(options.headers || {}) }\n : options.headers,\n body: options.formData\n ? options.formData\n : isJson\n ? JSON.stringify(options.body || {})\n : undefined,\n ctx: { strapiVersion, projectId, userId },\n });\n // refetch ai usage data on every successful request\n aiUsage.refetch();\n\n const body = await safeParseJson(response);\n\n if (!response.ok) {\n throw new Error(`Error: ${response.statusText}`);\n }\n return body as ResponseType<T>;\n } catch (err) {\n setError(err instanceof Error ? err.message : `Failed to fetch data from ${endpoint}`);\n return null;\n } finally {\n setIsPending(false);\n }\n };\n\n return {\n isPending,\n error,\n fetch: fetchData,\n };\n };\n};\n\n// Create specific hooks for each endpoint\nexport const useFetchGenerateTitle = createAIFetchHook('/schemas/chat/generate-title');\nexport const useFetchUploadProject = createAIFetchHook('/schemas/chat/attachment');\nexport const useFetchSendFeedback = createAIFetchHook('/schemas/chat/feedback');\nexport const useFetchUploadMedia = createAIFetchHook('/media/upload');\n\n/**\n * Hook wrapper for AI SDK's useChat with Strapi-specific configuration\n */\nexport const useAIChat: typeof useChat = (props) => {\n const strapiVersion = useAppInfo('useAIChat', (state) => state.strapiVersion);\n const projectId = useAppInfo('useAIFetch', (state) => state.projectId);\n const userId = useAppInfo('useAIChat-user', (state) => state.userId);\n\n const customFetch = makeChatFetch({ strapiVersion, projectId, userId });\n\n return useChat({\n ...props,\n transport: new DefaultChatTransport({\n api: STRAPI_AI_CHAT_URL,\n fetch: customFetch,\n }),\n });\n};\n"],"names":["TOO_MANY_REQUESTS_ERROR","LICENSE_LIMIT_REACHED_ERROR","LICENSE_LIMIT_EXCEEDED_ERROR","CHAT_TOO_LONG_ERROR","createAIFetchHook","endpoint","strapiVersion","useAppInfo","state","projectId","userId","aiUsage","useGetAIUsageQuery","undefined","refetchOnMountOrArgChange","isPending","setIsPending","useState","error","setError","fetchData","options","fullUrl","STRAPI_AI_URL","isJson","body","formData","response","fetchAI","method","headers","JSON","stringify","ctx","refetch","safeParseJson","ok","Error","statusText","err","message","fetch","useFetchGenerateTitle","useFetchUploadProject","useFetchSendFeedback","useFetchUploadMedia","useAIChat","props","customFetch","makeChatFetch","useChat","transport","DefaultChatTransport","api","STRAPI_AI_CHAT_URL"],"mappings":"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"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
5
|
+
var constants = require('../lib/constants.js');
|
|
6
|
+
var misc = require('../lib/misc.js');
|
|
7
|
+
var ChatProvider = require('../providers/ChatProvider.js');
|
|
8
|
+
var useAIFetch = require('./useAIFetch.js');
|
|
9
|
+
|
|
10
|
+
function useAttachments() {
|
|
11
|
+
const { setAttachments, attachments, id: chatId } = ChatProvider.useStrapiChat();
|
|
12
|
+
const { toggleNotification } = strapiAdmin.useNotification();
|
|
13
|
+
const { fetch: fetchUploadMedia } = useAIFetch.useFetchUploadMedia();
|
|
14
|
+
/**
|
|
15
|
+
* Add an attachment directly
|
|
16
|
+
*/ const addAttachments = React.useCallback((newAttachments)=>{
|
|
17
|
+
// TODO: Limits
|
|
18
|
+
if (!newAttachments) return;
|
|
19
|
+
setAttachments((prev)=>[
|
|
20
|
+
...prev,
|
|
21
|
+
...newAttachments
|
|
22
|
+
]);
|
|
23
|
+
}, [
|
|
24
|
+
setAttachments
|
|
25
|
+
]);
|
|
26
|
+
/**
|
|
27
|
+
* Update an attachment
|
|
28
|
+
*/ const updateAttachment = React.useCallback((attachment)=>{
|
|
29
|
+
setAttachments((prev)=>prev.map((a)=>a.id === attachment.id ? {
|
|
30
|
+
...a,
|
|
31
|
+
...attachment
|
|
32
|
+
} : a));
|
|
33
|
+
}, [
|
|
34
|
+
setAttachments
|
|
35
|
+
]);
|
|
36
|
+
/**
|
|
37
|
+
* Remove an attachment
|
|
38
|
+
*/ const removeAttachment = React.useCallback((attachment)=>{
|
|
39
|
+
setAttachments((prev)=>prev.filter((a)=>a.id !== attachment.id));
|
|
40
|
+
}, [
|
|
41
|
+
setAttachments
|
|
42
|
+
]);
|
|
43
|
+
/**
|
|
44
|
+
* Attach files to the chat
|
|
45
|
+
*/ const attachFiles = React.useCallback(async (newFiles, description)=>{
|
|
46
|
+
// Attachment number limit
|
|
47
|
+
const attachmentCount = attachments?.length || 0;
|
|
48
|
+
const attachedFileCount = Array.from(newFiles).length;
|
|
49
|
+
let limitedFiles = newFiles;
|
|
50
|
+
if (attachmentCount + attachedFileCount > constants.STRAPI_MAX_ATTACHMENTS) {
|
|
51
|
+
toggleNotification({
|
|
52
|
+
type: 'danger',
|
|
53
|
+
title: 'File limit reached: ',
|
|
54
|
+
message: `You can only upload up to ${constants.STRAPI_MAX_ATTACHMENTS} files`
|
|
55
|
+
});
|
|
56
|
+
// Prune the ones that would exceed the limit
|
|
57
|
+
const limit = constants.STRAPI_MAX_ATTACHMENTS - attachmentCount;
|
|
58
|
+
limitedFiles = newFiles.slice(0, limit);
|
|
59
|
+
}
|
|
60
|
+
// Size limit
|
|
61
|
+
for (const file of limitedFiles){
|
|
62
|
+
if (file.size > constants.STRAPI_MAX_ATTACHMENT_SIZE) {
|
|
63
|
+
toggleNotification({
|
|
64
|
+
type: 'danger',
|
|
65
|
+
title: 'File too large: ',
|
|
66
|
+
message: 'One of the files is too large (15MB limit)'
|
|
67
|
+
});
|
|
68
|
+
// Remove from list
|
|
69
|
+
limitedFiles = limitedFiles.filter((f)=>f !== file);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Upload
|
|
73
|
+
for (const file of limitedFiles){
|
|
74
|
+
const pendingAttachment = {
|
|
75
|
+
id: misc.generateId(),
|
|
76
|
+
type: 'file',
|
|
77
|
+
status: 'loading',
|
|
78
|
+
filename: file.name,
|
|
79
|
+
mediaType: file.type,
|
|
80
|
+
url: ''
|
|
81
|
+
};
|
|
82
|
+
// Store the attachment as loading
|
|
83
|
+
setAttachments((prev)=>[
|
|
84
|
+
...prev,
|
|
85
|
+
pendingAttachment
|
|
86
|
+
]);
|
|
87
|
+
// Prepare form data
|
|
88
|
+
const formData = new FormData();
|
|
89
|
+
formData.append('file', file);
|
|
90
|
+
formData.append('fileInfo', JSON.stringify({
|
|
91
|
+
name: file.name,
|
|
92
|
+
chatId: chatId
|
|
93
|
+
}));
|
|
94
|
+
// Upload file
|
|
95
|
+
fetchUploadMedia({
|
|
96
|
+
formData
|
|
97
|
+
}).then((result)=>{
|
|
98
|
+
const attachment = result?.data;
|
|
99
|
+
// Remove attachment if there is an error
|
|
100
|
+
if (!result || result.error) {
|
|
101
|
+
toggleNotification({
|
|
102
|
+
type: 'danger',
|
|
103
|
+
title: 'Failed to upload file: ',
|
|
104
|
+
message: result?.error || 'Unknown error',
|
|
105
|
+
timeout: 5000
|
|
106
|
+
});
|
|
107
|
+
removeAttachment(pendingAttachment);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
// Update the pending attachment
|
|
111
|
+
updateAttachment({
|
|
112
|
+
id: pendingAttachment.id,
|
|
113
|
+
url: attachment?.url || '',
|
|
114
|
+
status: 'ready'
|
|
115
|
+
});
|
|
116
|
+
}).catch(()=>removeAttachment(pendingAttachment));
|
|
117
|
+
}
|
|
118
|
+
if (description) {
|
|
119
|
+
toggleNotification({
|
|
120
|
+
title: 'Files attached',
|
|
121
|
+
message: description
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}, [
|
|
125
|
+
attachments,
|
|
126
|
+
setAttachments,
|
|
127
|
+
toggleNotification,
|
|
128
|
+
chatId,
|
|
129
|
+
fetchUploadMedia,
|
|
130
|
+
removeAttachment,
|
|
131
|
+
updateAttachment
|
|
132
|
+
]);
|
|
133
|
+
/**
|
|
134
|
+
* Remove an attachment by index
|
|
135
|
+
*/ const removeAttachmentByIndex = React.useCallback((index)=>{
|
|
136
|
+
if (!attachments) return;
|
|
137
|
+
setAttachments(attachments.filter((_, i)=>i !== index));
|
|
138
|
+
}, [
|
|
139
|
+
setAttachments,
|
|
140
|
+
attachments
|
|
141
|
+
]);
|
|
142
|
+
return {
|
|
143
|
+
attachments,
|
|
144
|
+
attachFiles,
|
|
145
|
+
addAttachments,
|
|
146
|
+
removeAttachment,
|
|
147
|
+
removeAttachmentByIndex
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
exports.useAttachments = useAttachments;
|
|
152
|
+
//# sourceMappingURL=useAttachments.js.map
|