From cae516ccee4bc04dd36c8b609bb71f2e99455185 Mon Sep 17 00:00:00 2001 From: Marie Flores <73853856+marieflorescontact@users.noreply.github.com> Date: Tue, 13 Feb 2024 17:54:05 +0100 Subject: [PATCH] [frontend/backend] Public dashboard: phase 1 (create/delete public dashboards and first widget) (#4903) Co-authored-by: Landry Trebon --- .../opencti-front/lang/front/de.json | 16 +- .../opencti-front/lang/front/en.json | 14 + .../opencti-front/lang/front/es.json | 20 +- .../opencti-front/lang/front/fr.json | 14 + .../opencti-front/lang/front/ja.json | 14 + .../opencti-front/lang/front/zh.json | 14 + opencti-platform/opencti-front/package.json | 1 + .../dashboard/WidgetAccessDenied.tsx | 27 ++ .../components/dashboard/WidgetContainer.tsx | 60 ++++ .../src/components/dashboard/WidgetLoader.tsx | 19 ++ .../src/components/dashboard/WidgetNoData.tsx | 21 ++ .../src/components/dashboard/WidgetNumber.tsx | 27 ++ .../components/common/audits/AuditsNumber.jsx | 114 +------ .../components/common/drawer/Drawer.tsx | 6 +- .../common/form/ObjectMarkingField.tsx | 19 +- .../StixCoreObjectsMultiAreaChart.jsx | 3 - .../StixCoreObjectsMultiHeatMap.jsx | 3 - .../StixCoreObjectsMultiLineChart.jsx | 3 - .../StixCoreObjectsMultiVerticalBars.jsx | 3 - .../StixCoreObjectsNumber.jsx | 96 +----- .../StixRelationshipsNumber.jsx | 95 +----- .../components/workspaces/WorkspaceHeader.jsx | 12 +- .../workspaces/WorkspaceShareButton.tsx | 188 ++++++++++ .../workspaces/WorkspaceShareForm.tsx | 106 ++++++ .../workspaces/WorkspaceShareList.tsx | 141 ++++++++ .../workspaces/dashboards/Dashboard.jsx | 14 +- .../opencti-front/src/public/PublicRoot.tsx | 63 +--- .../src/public/components/PublicDashboard.tsx | 136 ++++++++ .../public/components/PublicDataSharing.tsx | 65 ++++ .../src/public/components/PublicTopBar.tsx | 47 +++ .../dashboard/PublicDashboardHeader.tsx | 114 +++++++ .../components/dashboard/PublicManifest.d.ts | 28 ++ .../dashboard/PublicStixCoreObjectsNumber.tsx | 91 +++++ .../dashboard/usePublicDashboardWidgets.tsx | 99 ++++++ .../src/schema/relay.schema.graphql | 72 +++- .../opencti-front/src/utils/Time.js | 20 ++ .../src/utils/hooks/useGranted.ts | 1 + opencti-platform/opencti-front/yarn.lock | 10 + .../opencti-graphql/config/default.json | 2 +- .../config/schema/opencti.graphql | 15 +- .../opencti-graphql/graphql-codegen.yml | 1 + .../opencti-graphql/src/config/conf.js | 6 + .../opencti-graphql/src/database/cache.ts | 15 + .../src/database/data-initialization.js | 5 +- .../src/domain/stixCoreObject.js | 2 +- .../opencti-graphql/src/generated/graphql.ts | 218 +++++++++++- .../src/manager/cacheManager.ts | 29 +- ...4893567321-capability-publish-knowledge.js | 16 + .../opencti-graphql/src/modules/index.ts | 2 + .../publicDashboard-converter.ts | 27 ++ .../publicDashboard/publicDashboard-domain.ts | 248 ++++++++++++++ .../publicDashboard-graphql.ts | 8 + .../publicDashboard-resolvers.ts | 40 +++ .../publicDashboard/publicDashboard-types.ts | 64 ++++ .../publicDashboard/publicDashboard-utils.ts | 89 +++++ .../publicDashboard/publicDashboard.graphql | 80 +++++ .../publicDashboard/publicDashboard.ts | 37 ++ .../src/modules/workspace/workspace-domain.ts | 2 +- .../src/schema/internalObject.ts | 3 + .../01-database/elasticSearch-test.js | 12 +- .../02-resolvers/publicDashboard-test.js | 320 ++++++++++++++++++ .../02-integration/02-resolvers/role-test.js | 2 +- .../02-resolvers/workspace-test.js | 30 +- .../opencti-graphql/tests/utils/testQuery.ts | 2 +- 64 files changed, 2671 insertions(+), 400 deletions(-) create mode 100644 opencti-platform/opencti-front/src/components/dashboard/WidgetAccessDenied.tsx create mode 100644 opencti-platform/opencti-front/src/components/dashboard/WidgetContainer.tsx create mode 100644 opencti-platform/opencti-front/src/components/dashboard/WidgetLoader.tsx create mode 100644 opencti-platform/opencti-front/src/components/dashboard/WidgetNoData.tsx create mode 100644 opencti-platform/opencti-front/src/components/dashboard/WidgetNumber.tsx create mode 100644 opencti-platform/opencti-front/src/private/components/workspaces/WorkspaceShareButton.tsx create mode 100644 opencti-platform/opencti-front/src/private/components/workspaces/WorkspaceShareForm.tsx create mode 100644 opencti-platform/opencti-front/src/private/components/workspaces/WorkspaceShareList.tsx create mode 100644 opencti-platform/opencti-front/src/public/components/PublicDashboard.tsx create mode 100644 opencti-platform/opencti-front/src/public/components/PublicDataSharing.tsx create mode 100644 opencti-platform/opencti-front/src/public/components/PublicTopBar.tsx create mode 100644 opencti-platform/opencti-front/src/public/components/dashboard/PublicDashboardHeader.tsx create mode 100644 opencti-platform/opencti-front/src/public/components/dashboard/PublicManifest.d.ts create mode 100644 opencti-platform/opencti-front/src/public/components/dashboard/PublicStixCoreObjectsNumber.tsx create mode 100644 opencti-platform/opencti-front/src/public/components/dashboard/usePublicDashboardWidgets.tsx create mode 100644 opencti-platform/opencti-graphql/src/migrations/1704893567321-capability-publish-knowledge.js create mode 100644 opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard-converter.ts create mode 100644 opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard-domain.ts create mode 100644 opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard-graphql.ts create mode 100644 opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard-resolvers.ts create mode 100644 opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard-types.ts create mode 100644 opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard-utils.ts create mode 100644 opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard.graphql create mode 100644 opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard.ts create mode 100644 opencti-platform/opencti-graphql/tests/02-integration/02-resolvers/publicDashboard-test.js diff --git a/opencti-platform/opencti-front/lang/front/de.json b/opencti-platform/opencti-front/lang/front/de.json index 5af22be8c7fe6..203c59f82b65b 100644 --- a/opencti-platform/opencti-front/lang/front/de.json +++ b/opencti-platform/opencti-front/lang/front/de.json @@ -2651,5 +2651,19 @@ "AI Powered": "KI-gesteuert", "Missing token": "Fehlendes Token", "Generative AI is a beta feature as we are currently fine-tuning our models. Consider checking important information.": "Die generative KI ist eine Betafunktion, da wir derzeit unsere Modelle feinabstimmen. Überprüfen Sie wichtige Informationen.", - "Accept": "Akzeptieren Sie" + "Accept": "Akzeptieren Sie", + "Share as public dashboard": "Als öffentliches Dashboard freigeben", + "To prevent people seeing all the data...": "Um zu verhindern, dass andere Personen alle Daten im öffentlichen Dashboard sehen können, wählen Sie eine Markierungsdefinition, um die gemeinsamen Daten einzuschränken.", + "Max level markings": "Max Level Markierungen", + "Copy link": "Link kopieren", + "Public dashboards": "Öffentliche Dashboards", + "Existing public dashboards": "Vorhandene öffentliche Dashboards", + "No public dashboard created yet": "Noch kein öffentliches Dashboard erstellt", + "Create a new public dashboard": "Erstellen Sie ein neues öffentliches Dashboard", + "Public dashboard ID": "Öffentliche Dashboard-ID", + "Specify the ID of your public dashboard": "Geben Sie die ID Ihres öffentlichen Dashboards an", + "Disable public dashboard": "Öffentliches Dashboard deaktivieren", + "Delete public dashboard": "Öffentliches Dashboard löschen", + "Are you sure you want to delete this public dashboard?": "Sind Sie sicher, dass Sie dieses öffentliche Dashboard löschen möchten?", + "A public dashboard is a snapshot...": "Ein öffentliches Dashboard ist ein Schnappschuss eines privaten Dashboards zu einem bestimmten Zeitpunkt. Wenn Sie das private Dashboard ändern, werden die bereits erstellten öffentlichen Dashboards nicht geändert." } \ No newline at end of file diff --git a/opencti-platform/opencti-front/lang/front/en.json b/opencti-platform/opencti-front/lang/front/en.json index a0dbeacf4b8f9..9f8b0dc0a4f14 100644 --- a/opencti-platform/opencti-front/lang/front/en.json +++ b/opencti-platform/opencti-front/lang/front/en.json @@ -2563,9 +2563,23 @@ "Option 'Let the user choose marking definitions'...": "Option 'Let the user choose marking definitions' will ask the user to choose (when importing the CSV file) which marking definitions to apply when the data is missing in the CSV file.", "Update without references": "Update without references", "Max Confidence Level:": "Max Confidence Level:", + "Share as public dashboard": "Share as public dashboard", + "Public dashboards": "Public dashboards", + "Existing public dashboards": "Existing public dashboards", + "No public dashboard created yet": "No public dashboard created yet", + "Create a new public dashboard": "Create a new public dashboard", + "To prevent people seeing all the data...": "To prevent people seeing all the data in the public dashboard, select a marking definition to restrict the shared data.", + "Max level markings": "Max level markings", + "Public dashboard ID": "Public dashboard ID", + "Specify the ID of your public dashboard": "Specify the ID of your public dashboard", + "Copy link": "Copy link", + "Disable public dashboard": "Disable public dashboard", + "Delete public dashboard": "Delete public dashboard", + "Are you sure you want to delete this public dashboard?": "Are you sure you want to delete this public dashboard?", "Please, verify the validity of the selected CSV mapper for the given URL.": "Please, verify the validity of the selected CSV mapper for the given URL.", "Only successful tests allow the ingestion creation.": "Only successful tests allow the ingestion creation.", "Only successful tests allow the ingestion edition.": "Only successful tests allow the ingestion edition.", + "A public dashboard is a snapshot...": "A public dashboard is a snapshot of a private dashboard at a specific time. If you modify the private dashboard, already created public dashboards won't be modified.", "Request for takedown date": "Request for takedown date", "Enable AI powered platform": "Enable AI powered platform", "To use AI, please enable it in the configuration of your platform.": "To use AI, please enable it in the configuration of your platform.", diff --git a/opencti-platform/opencti-front/lang/front/es.json b/opencti-platform/opencti-front/lang/front/es.json index 18e737cd16634..0ac51fd74a1e2 100644 --- a/opencti-platform/opencti-front/lang/front/es.json +++ b/opencti-platform/opencti-front/lang/front/es.json @@ -2563,6 +2563,14 @@ "Option 'Let the user choose marking definitions'...": "La opción 'Dejar que el usuario elija las definiciones de marcado' pedirá al usuario que elija (al importar el archivo CSV) qué definiciones de marcado aplicar cuando falten datos en el archivo CSV.", "Update without references": "Actualizar sin referencias", "Max Confidence Level:": "Nivel Máximo de Confianza:", + "Share as public dashboard": "Compartir como tablero público", + "To prevent people seeing all the data...": "Para evitar que los usuarios vean todos los datos del panel público, seleccione una definición de marcado para restringir los datos compartidos.", + "Max level markings": "Marcas de nivel máximo", + "Copy link": "Copiar enlace", + "Disable link": "Desactivar enlace", + "Delete link": "Borrar enlace", + "Are you sure you want to delete this dashboard link?": "¿Está seguro de que desea eliminar este enlace del panel de control?", + "The Max Confidence Level is currently defined at the user level. It overrides Max Confidence Level from user’s groups.": "El nivel de confianza máximo se define actualmente a nivel de usuario. Anula el nivel de confianza máximo de los grupos de usuarios.", "Please, verify the validity of the selected CSV mapper for the given URL.": "Por favor, verifique la validez del asignador CSV seleccionado para la URL proporcionada.", "Only successful tests allow the ingestion creation.": "Sólo las pruebas exitosas permiten la creación de la ingesta.", "Only successful tests allow the ingestion edition.": "Sólo las pruebas exitosas permiten la edición de ingesta.", @@ -2651,5 +2659,15 @@ "AI Powered": "AI Powered", "Missing token": "Ficha perdida", "Generative AI is a beta feature as we are currently fine-tuning our models. Consider checking important information.": "La IA Generativa es una característica beta ya que actualmente estamos afinando nuestros modelos. Considere comprobar la información importante.", - "Accept": "Aceptar" + "Accept": "Aceptar", + "Public dashboards": "Cuadros de mando públicos", + "Existing public dashboards": "Cuadros de mando públicos existentes", + "No public dashboard created yet": "Aún no se ha creado ningún panel público", + "Create a new public dashboard": "Crear un nuevo panel público", + "Public dashboard ID": "ID del panel público", + "Specify the ID of your public dashboard": "Especifique el ID de su panel de control público", + "Disable public dashboard": "Desactivar panel público", + "Delete public dashboard": "Borrar panel público", + "Are you sure you want to delete this public dashboard?": "¿Está seguro de que desea eliminar este panel público?", + "A public dashboard is a snapshot...": "Un panel público es una instantánea de un panel privado en un momento determinado. Si modifica el panel privado, los paneles públicos ya creados no se modificarán." } \ No newline at end of file diff --git a/opencti-platform/opencti-front/lang/front/fr.json b/opencti-platform/opencti-front/lang/front/fr.json index 27069d6f4d1ef..d6d87c17c4334 100644 --- a/opencti-platform/opencti-front/lang/front/fr.json +++ b/opencti-platform/opencti-front/lang/front/fr.json @@ -2563,9 +2563,23 @@ "Option 'Let the user choose marking definitions'...": "L'option 'Let the user choose marking definitions' demandera à l'utilisateur de choisir (lors de l'importation du fichier CSV) les définitions de marquage à appliquer lorsque les données sont manquantes dans le fichier CSV.", "Update without references": "Mise à jour sans références", "Max Confidence Level:": "Niveau de confiance maximum :", + "Share as public dashboard": "Partager comme tableau de bord public", + "To prevent people seeing all the data...": "Pour empêcher les gens de voir toutes les données du tableau de bord public, sélectionnez une définition de marquage pour restreindre les données partagées.", + "Max level markings": "Marquage de niveau maximum", + "Copy link": "Copier le lien", "Please, verify the validity of the selected CSV mapper for the given URL.": "Veuillez vérifier la validité du mappeur CSV sélectionné pour l'URL donnée.", "Only successful tests allow the ingestion creation.": "Seuls les tests réussis permettent la création de l'ingestion.", "Only successful tests allow the ingestion edition.": "Seuls les tests réussis permettent l'édition de l'ingestion.", + "Public dashboards": "Tableaux de bord publics", + "Existing public dashboards": "Tableaux de bord publics existants", + "No public dashboard created yet": "Aucun tableau de bord public n'a encore été créé", + "Create a new public dashboard": "Créer un nouveau tableau de bord public", + "Public dashboard ID": "ID du tableau de bord public", + "Specify the ID of your public dashboard": "Spécifiez l'ID de votre tableau de bord public", + "Disable public dashboard": "Désactiver le tableau de bord public", + "Delete public dashboard": "Supprimer le tableau de bord public", + "Are you sure you want to delete this public dashboard?": "Êtes-vous sûr de vouloir supprimer ce tableau de bord public ?", + "A public dashboard is a snapshot...": "Un tableau de bord public est un instantané d'un tableau de bord privé à un moment précis. Si vous modifiez le tableau de bord privé, les tableaux de bord publics déjà créés ne seront pas modifiés.", "Home": "Accueil", "Request for takedown date": "Date de la demande de démontage", "Enable AI powered platform": "Activer la plateforme alimentée par l'IA", diff --git a/opencti-platform/opencti-front/lang/front/ja.json b/opencti-platform/opencti-front/lang/front/ja.json index 4f42109c901a8..b6a9cf8a0f12a 100644 --- a/opencti-platform/opencti-front/lang/front/ja.json +++ b/opencti-platform/opencti-front/lang/front/ja.json @@ -2563,9 +2563,23 @@ "Option 'Let the user choose marking definitions'...": "オプション 'ユーザーにマーキング定義を選択させる' は、CSVファイルにデータがない場合に適用するマーキング定義を(CSVファイルのインポート時に)ユーザーに選択させます。", "Update without references": "参照なしで更新", "Max Confidence Level:": "最大信頼度:", + "Share as public dashboard": "公開ダッシュボードとして共有", + "To prevent people seeing all the data...": "公開ダッシュボードのすべてのデータを見られないようにするには、共有データを制限するマーキング定義を選択します。", + "Max level markings": "最大レベルのマーキング", + "Copy link": "リンクをコピー", "Please, verify the validity of the selected CSV mapper for the given URL.": "指定された URL に対して選択した CSV マッパーが有効であることを確認してください。", "Only successful tests allow the ingestion creation.": "成功したテストのみが取り込みの作成を許可します。", "Only successful tests allow the ingestion edition.": "テストが成功した場合のみ、インジェスト エディションが許可されます。", + "Public dashboards": "公開ダッシュボード", + "Existing public dashboards": "既存の公開ダッシュボード", + "No public dashboard created yet": "まだ作成されていない公開ダッシュボード", + "Create a new public dashboard": "新しい公開ダッシュボードを作成する", + "Public dashboard ID": "公開ダッシュボードID", + "Specify the ID of your public dashboard": "公開ダッシュボードのIDを指定する", + "Disable public dashboard": "公開ダッシュボードを無効にする", + "Delete public dashboard": "公開ダッシュボードを削除する", + "Are you sure you want to delete this public dashboard?": "本当にこの公開ダッシュボードを削除しますか?", + "A public dashboard is a snapshot...": "パブリック・ダッシュボードは、特定の時刻におけるプライベート・ダッシュボードのスナップショットです。プライベートダッシュボードを変更しても、すでに作成されたパブリックダッシュボードは変更されません。", "Request for takedown date": "削除要請日", "Enable AI powered platform": "AIプラットフォームの有効化", "To use AI, please enable it in the configuration of your platform.": "AIを使用するには、プラットフォームの設定でAIを有効にしてください。", diff --git a/opencti-platform/opencti-front/lang/front/zh.json b/opencti-platform/opencti-front/lang/front/zh.json index 9028afc9396ae..682cb8487c874 100644 --- a/opencti-platform/opencti-front/lang/front/zh.json +++ b/opencti-platform/opencti-front/lang/front/zh.json @@ -2563,9 +2563,23 @@ "Option 'Let the user choose marking definitions'...": "选项 '让用户选择标记定义'将要求用户(在导入 CSV 文件时)选择在 CSV 文件中缺少数据时应用哪些标记定义。", "Update without references": "无引用更新", "Max Confidence Level:": "最大置信度:", + "Share as public dashboard": "作为公共仪表板共享", + "To prevent people seeing all the data...": "要防止他人看到公共仪表板中的所有数据,请选择标记定义来限制共享数据。", + "Max level markings": "最大级别标记", + "Copy link": "复制链接", "Please, verify the validity of the selected CSV mapper for the given URL.": "请验证给定 URL 所选 CSV 映射器的有效性。", "Only successful tests allow the ingestion creation.": "只有成功的测试才允许创建摄取。", "Only successful tests allow the ingestion edition.": "只有成功的测试才允许摄取版本。", + "Public dashboards": "公共仪表板", + "Existing public dashboards": "现有公共仪表盘", + "No public dashboard created yet": "尚未创建公共仪表盘", + "Create a new public dashboard": "创建新的公共仪表盘", + "Public dashboard ID": "公共仪表板 ID", + "Specify the ID of your public dashboard": "指定公共仪表板的 ID", + "Disable public dashboard": "禁用公共仪表盘", + "Delete public dashboard": "删除公共仪表板", + "Are you sure you want to delete this public dashboard?": "您确定要删除此公共仪表板吗?", + "A public dashboard is a snapshot...": "公共仪表盘是私人仪表盘在特定时间的快照。如果修改了私人仪表盘,则不会修改已创建的公共仪表盘。", "Request for takedown date": "请求删除日期", "Enable AI powered platform": "启用人工智能平台", "To use AI, please enable it in the configuration of your platform.": "要使用人工智能,请在平台配置中启用人工智能。", diff --git a/opencti-platform/opencti-front/package.json b/opencti-platform/opencti-front/package.json index 24e55d65a1c6a..a7f147dbc774b 100644 --- a/opencti-platform/opencti-front/package.json +++ b/opencti-platform/opencti-front/package.json @@ -97,6 +97,7 @@ "@types/react": "18.2.55", "@types/react-csv": "1.1.10", "@types/react-dom": "18.2.19", + "@types/react-grid-layout": "^1.3.5", "@types/react-relay": "16.0.6", "@types/react-router-dom": "5.3.3", "@types/react-syntax-highlighter": "15.5.11", diff --git a/opencti-platform/opencti-front/src/components/dashboard/WidgetAccessDenied.tsx b/opencti-platform/opencti-front/src/components/dashboard/WidgetAccessDenied.tsx new file mode 100644 index 0000000000000..817e834402fef --- /dev/null +++ b/opencti-platform/opencti-front/src/components/dashboard/WidgetAccessDenied.tsx @@ -0,0 +1,27 @@ +import React from 'react'; +import { useFormatter } from '../i18n'; +import useEnterpriseEdition from '../../utils/hooks/useEnterpriseEdition'; + +const WidgetAccessDenied = () => { + const { t_i18n } = useFormatter(); + const isEnterpriseEdition = useEnterpriseEdition(); + + return ( +
+ + {!isEnterpriseEdition + ? t_i18n('This feature is only available in OpenCTI Enterprise Edition.') + : t_i18n('You are not authorized to see this data.')} + +
+ ); +}; + +export default WidgetAccessDenied; diff --git a/opencti-platform/opencti-front/src/components/dashboard/WidgetContainer.tsx b/opencti-platform/opencti-front/src/components/dashboard/WidgetContainer.tsx new file mode 100644 index 0000000000000..1b5d06d28ccca --- /dev/null +++ b/opencti-platform/opencti-front/src/components/dashboard/WidgetContainer.tsx @@ -0,0 +1,60 @@ +import Typography from '@mui/material/Typography'; +import Paper from '@mui/material/Paper'; +import React, { CSSProperties, ReactNode } from 'react'; +import makeStyles from '@mui/styles/makeStyles'; + +const useStyles = makeStyles({ + paper: { + minHeight: 110, + height: '100%', + margin: '4px 0 0 0', + padding: '0 0 10px 0', + borderRadius: 4, + }, +}); + +interface WidgetContainerProps { + children: ReactNode + height?: CSSProperties['height'] + title: string + variant: string + withoutTitle?: boolean +} + +const WidgetContainer = ({ + children, + height, + title, + variant, + withoutTitle = false, +}: WidgetContainerProps) => { + const classes = useStyles(); + + return ( +
+ {!withoutTitle && ( + + {title} + + )} + {variant !== 'inLine' ? ( + + {children} + + ) : ( + children + )} +
+ ); +}; + +export default WidgetContainer; diff --git a/opencti-platform/opencti-front/src/components/dashboard/WidgetLoader.tsx b/opencti-platform/opencti-front/src/components/dashboard/WidgetLoader.tsx new file mode 100644 index 0000000000000..6d2f3cdf312a4 --- /dev/null +++ b/opencti-platform/opencti-front/src/components/dashboard/WidgetLoader.tsx @@ -0,0 +1,19 @@ +import CircularProgress from '@mui/material/CircularProgress'; +import React from 'react'; + +const WidgetLoader = () => { + return ( +
+ +
+ ); +}; + +export default WidgetLoader; diff --git a/opencti-platform/opencti-front/src/components/dashboard/WidgetNoData.tsx b/opencti-platform/opencti-front/src/components/dashboard/WidgetNoData.tsx new file mode 100644 index 0000000000000..9a811487a3927 --- /dev/null +++ b/opencti-platform/opencti-front/src/components/dashboard/WidgetNoData.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import { useFormatter } from '../i18n'; + +const WidgetNoData = () => { + const { t_i18n } = useFormatter(); + + return ( +
+

{t_i18n('No entities of this type has been found.')}

+
+ ); +}; + +export default WidgetNoData; diff --git a/opencti-platform/opencti-front/src/components/dashboard/WidgetNumber.tsx b/opencti-platform/opencti-front/src/components/dashboard/WidgetNumber.tsx new file mode 100644 index 0000000000000..e3d753d19c802 --- /dev/null +++ b/opencti-platform/opencti-front/src/components/dashboard/WidgetNumber.tsx @@ -0,0 +1,27 @@ +import React from 'react'; +import ItemNumberDifference from '../ItemNumberDifference'; +import { useFormatter } from '../i18n'; + +interface WidgetNumberProps { + total: number + value: number +} + +const WidgetNumber = ({ total, value }: WidgetNumberProps) => { + const { t_i18n, n } = useFormatter(); + const difference = total - value; + + return ( + <> +
+ {n(total)} +
+ + + ); +}; + +export default WidgetNumber; diff --git a/opencti-platform/opencti-front/src/private/components/common/audits/AuditsNumber.jsx b/opencti-platform/opencti-front/src/private/components/common/audits/AuditsNumber.jsx index 69fedc7498924..4850031f31f04 100644 --- a/opencti-platform/opencti-front/src/private/components/common/audits/AuditsNumber.jsx +++ b/opencti-platform/opencti-front/src/private/components/common/audits/AuditsNumber.jsx @@ -15,31 +15,17 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. import React from 'react'; import { graphql } from 'react-relay'; -import CircularProgress from '@mui/material/CircularProgress'; -import Paper from '@mui/material/Paper'; -import Typography from '@mui/material/Typography'; -import makeStyles from '@mui/styles/makeStyles'; import { QueryRenderer } from '../../../../relay/environment'; import { useFormatter } from '../../../../components/i18n'; -import ItemNumberDifference from '../../../../components/ItemNumberDifference'; import { dayAgo } from '../../../../utils/Time'; import useGranted, { SETTINGS } from '../../../../utils/hooks/useGranted'; import useEnterpriseEdition from '../../../../utils/hooks/useEnterpriseEdition'; import { buildFiltersAndOptionsForWidgets } from '../../../../utils/filters/filtersUtils'; - -const useStyles = makeStyles({ - paper: { - minHeight: 280, - height: '100%', - margin: '4px 0 0 0', - padding: '0 0 10px 0', - borderRadius: 4, - }, - number: { - float: 'left', - fontSize: 40, - }, -}); +import WidgetContainer from '../../../../components/dashboard/WidgetContainer'; +import WidgetNoData from '../../../../components/dashboard/WidgetNoData'; +import WidgetLoader from '../../../../components/dashboard/WidgetLoader'; +import WidgetNumber from '../../../../components/dashboard/WidgetNumber'; +import WidgetAccessDenied from '../../../../components/dashboard/WidgetAccessDenied'; const auditsNumberNumberQuery = graphql` query AuditsNumberNumberSeriesQuery( @@ -72,29 +58,12 @@ const AuditsNumber = ({ dataSelection, parameters = {}, }) => { - const classes = useStyles(); - const { t_i18n, n } = useFormatter(); + const { t_i18n } = useFormatter(); const isGrantedToSettings = useGranted([SETTINGS]); const isEnterpriseEdition = useEnterpriseEdition(); const renderContent = () => { if (!isGrantedToSettings || !isEnterpriseEdition) { - return ( -
- - {!isEnterpriseEdition - ? t_i18n( - 'This feature is only available in OpenCTI Enterprise Edition.', - ) - : t_i18n('You are not authorized to see this data.')} - -
- ); + return ; } const selection = dataSelection[0]; const types = ['History', 'Activity']; @@ -108,72 +77,25 @@ const AuditsNumber = ({ variables={{ types, filters, startDate, endDate: dayAgo() }} render={({ props }) => { if (props && props.auditsNumber) { - const { total } = props.auditsNumber; - const difference = total - props.auditsNumber.count; - return ( -
-
{n(total)}
- -
- ); + const { total, count } = props.auditsNumber; + return ; } if (props) { - return ( -
- - {t_i18n('No entities of this type has been found.')} - -
- ); + return ; } - return ( -
- - - -
- ); + return ; }} /> ); }; return ( -
- - {parameters.title ?? t_i18n('Entities number')} - - {variant !== 'inLine' ? ( - - {renderContent()} - - ) : ( - renderContent() - )} -
+ + {renderContent()} + ); }; diff --git a/opencti-platform/opencti-front/src/private/components/common/drawer/Drawer.tsx b/opencti-platform/opencti-front/src/private/components/common/drawer/Drawer.tsx index 5254abd8d0dc9..09aeb3a58db47 100644 --- a/opencti-platform/opencti-front/src/private/components/common/drawer/Drawer.tsx +++ b/opencti-platform/opencti-front/src/private/components/common/drawer/Drawer.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react'; +import React, { CSSProperties, useEffect, useState } from 'react'; import DrawerMUI from '@mui/material/Drawer'; import makeStyles from '@mui/styles/makeStyles'; import IconButton from '@mui/material/IconButton'; @@ -70,6 +70,7 @@ interface DrawerProps { header?: React.ReactElement; controlledDial?: ({ onOpen, onClose }:{ onOpen: () => void, onClose: () => void }) => React.ReactElement; containerRef?: HTMLInputElement; + containerStyle?: CSSProperties } const Drawer = ({ @@ -82,6 +83,7 @@ const Drawer = ({ header, controlledDial, containerRef, + containerStyle, }: DrawerProps) => { const { bannerSettings: { bannerHeightNumber }, @@ -162,7 +164,7 @@ const Drawer = ({ {context && } {header} -
{component}
+
{component}
); diff --git a/opencti-platform/opencti-front/src/private/components/common/form/ObjectMarkingField.tsx b/opencti-platform/opencti-front/src/private/components/common/form/ObjectMarkingField.tsx index b5aaf4be1a2e0..48c6bad7a2fde 100644 --- a/opencti-platform/opencti-front/src/private/components/common/form/ObjectMarkingField.tsx +++ b/opencti-platform/opencti-front/src/private/components/common/form/ObjectMarkingField.tsx @@ -96,9 +96,6 @@ const ObjectMarkingField: FunctionComponent = ({ const { currentValues } = newMarking as OptionValues; currentValues.pop(); setFieldValue?.(name, currentValues); - } else { - (newMarking as Option[]).pop(); - setFieldValue?.(name, newMarking as Option[]); } handleClose(); }; @@ -113,11 +110,9 @@ const ObjectMarkingField: FunctionComponent = ({ .concat([markingAdded]); onChange?.(name, markingsReplace as Option[], operation); + setFieldValue?.(name, markingsReplace); setOperation(undefined); handleClose(); - } else { - onChange?.(name, newMarking as Option[], operation); - handleClose(); } }; const handleOnChange = (n: string, values: Option[]) => { @@ -128,16 +123,8 @@ const ObjectMarkingField: FunctionComponent = ({ ); if (valueToReplace) { - if ( - (valueToReplace.x_opencti_order ?? 0) - > (valueAdded.x_opencti_order ?? 0) - ) { - setOperation('replace'); - setNewMarking({ currentValues: values, valueToReplace }); - } else { - setNewMarking(values); - setOperation(undefined); - } + setOperation('replace'); + setNewMarking({ currentValues: values, valueToReplace }); } else onChange?.(name, values); }; diff --git a/opencti-platform/opencti-front/src/private/components/common/stix_core_objects/StixCoreObjectsMultiAreaChart.jsx b/opencti-platform/opencti-front/src/private/components/common/stix_core_objects/StixCoreObjectsMultiAreaChart.jsx index c930f6bf5b97e..dcbfa2b24ee28 100644 --- a/opencti-platform/opencti-front/src/private/components/common/stix_core_objects/StixCoreObjectsMultiAreaChart.jsx +++ b/opencti-platform/opencti-front/src/private/components/common/stix_core_objects/StixCoreObjectsMultiAreaChart.jsx @@ -25,14 +25,12 @@ const useStyles = makeStyles(() => ({ const stixCoreObjectsMultiAreaChartTimeSeriesQuery = graphql` query StixCoreObjectsMultiAreaChartTimeSeriesQuery( - $operation: StatsOperation! $startDate: DateTime! $endDate: DateTime! $interval: String! $timeSeriesParameters: [StixCoreObjectsTimeSeriesParameters] ) { stixCoreObjectsMultiTimeSeries( - operation: $operation startDate: $startDate endDate: $endDate interval: $interval @@ -83,7 +81,6 @@ const StixCoreObjectsMultiAreaChart = ({ ({ const stixCoreObjectsMultiLineChartTimeSeriesQuery = graphql` query StixCoreObjectsMultiLineChartTimeSeriesQuery( - $operation: StatsOperation! $startDate: DateTime! $endDate: DateTime! $interval: String! $timeSeriesParameters: [StixCoreObjectsTimeSeriesParameters] ) { stixCoreObjectsMultiTimeSeries( - operation: $operation startDate: $startDate endDate: $endDate interval: $interval @@ -83,7 +81,6 @@ const StixCoreObjectsMultiLineChart = ({ ({ const stixCoreObjectsMultiVerticalBarsTimeSeriesQuery = graphql` query StixCoreObjectsMultiVerticalBarsTimeSeriesQuery( - $operation: StatsOperation! $startDate: DateTime! $endDate: DateTime! $interval: String! $timeSeriesParameters: [StixCoreObjectsTimeSeriesParameters] ) { stixCoreObjectsMultiTimeSeries( - operation: $operation startDate: $startDate endDate: $endDate interval: $interval @@ -83,7 +81,6 @@ const StixCoreObjectsMultiVerticalBars = ({ { - const classes = useStyles(); - const { t_i18n, n } = useFormatter(); + const { t_i18n } = useFormatter(); const renderContent = () => { const selection = dataSelection[0]; const dataSelectionTypes = ['Stix-Core-Object']; @@ -79,72 +63,26 @@ const StixCoreObjectsNumber = ({ }} render={({ props }) => { if (props && props.stixCoreObjectsNumber) { - const { total } = props.stixCoreObjectsNumber; - const difference = total - props.stixCoreObjectsNumber.count; - return ( -
-
{n(total)}
- -
- ); + const { total, count } = props.stixCoreObjectsNumber; + return ; } if (props) { - return ( -
- - {t_i18n('No entities of this type has been found.')} - -
- ); + return ; } - return ( -
- - - -
- ); + return ; }} /> ); }; return ( -
- {!withoutTitle && - {parameters.title ?? t_i18n('Entities number')} - } - {variant !== 'inLine' ? ( - - {renderContent()} - - ) : ( - renderContent() - )} -
+ + {renderContent()} + ); }; diff --git a/opencti-platform/opencti-front/src/private/components/common/stix_relationships/StixRelationshipsNumber.jsx b/opencti-platform/opencti-front/src/private/components/common/stix_relationships/StixRelationshipsNumber.jsx index 6568848977f72..b0e246b00fb73 100644 --- a/opencti-platform/opencti-front/src/private/components/common/stix_relationships/StixRelationshipsNumber.jsx +++ b/opencti-platform/opencti-front/src/private/components/common/stix_relationships/StixRelationshipsNumber.jsx @@ -1,28 +1,13 @@ import React from 'react'; import { graphql } from 'react-relay'; -import CircularProgress from '@mui/material/CircularProgress'; -import Paper from '@mui/material/Paper'; -import Typography from '@mui/material/Typography'; -import makeStyles from '@mui/styles/makeStyles'; import { QueryRenderer } from '../../../../relay/environment'; import { useFormatter } from '../../../../components/i18n'; -import ItemNumberDifference from '../../../../components/ItemNumberDifference'; import { dayAgo } from '../../../../utils/Time'; import { buildFiltersAndOptionsForWidgets } from '../../../../utils/filters/filtersUtils'; - -const useStyles = makeStyles({ - paper: { - minHeight: 280, - height: '100%', - margin: '4px 0 0 0', - padding: '0 0 10px 0', - borderRadius: 4, - }, - number: { - float: 'left', - fontSize: 40, - }, -}); +import WidgetContainer from '../../../../components/dashboard/WidgetContainer'; +import WidgetNoData from '../../../../components/dashboard/WidgetNoData'; +import WidgetLoader from '../../../../components/dashboard/WidgetLoader'; +import WidgetNumber from '../../../../components/dashboard/WidgetNumber'; const stixRelationshipsNumberNumberQuery = graphql` query StixRelationshipsNumberNumberSeriesQuery( @@ -78,8 +63,7 @@ const StixRelationshipsNumber = ({ dataSelection, parameters = {}, }) => { - const classes = useStyles(); - const { t_i18n, n } = useFormatter(); + const { t_i18n } = useFormatter(); const renderContent = () => { const selection = dataSelection[0]; const dateAttribute = selection.date_attribute && selection.date_attribute.length > 0 @@ -99,72 +83,25 @@ const StixRelationshipsNumber = ({ }} render={({ props }) => { if (props && props.stixRelationshipsNumber) { - const { total } = props.stixRelationshipsNumber; - const difference = total - props.stixRelationshipsNumber.count; - return ( -
-
{n(total)}
- -
- ); + const { total, count } = props.stixRelationshipsNumber; + return ; } if (props) { - return ( -
- - {t_i18n('No entities of this type has been found.')} - -
- ); + return ; } - return ( -
- - - -
- ); + return ; }} /> ); }; return ( -
- - {parameters.title ?? t_i18n('Entities number')} - - {variant !== 'inLine' ? ( - - {renderContent()} - - ) : ( - renderContent() - )} -
+ + {renderContent()} + ); }; diff --git a/opencti-platform/opencti-front/src/private/components/workspaces/WorkspaceHeader.jsx b/opencti-platform/opencti-front/src/private/components/workspaces/WorkspaceHeader.jsx index b20e914cac76d..08b9dc300f924 100644 --- a/opencti-platform/opencti-front/src/private/components/workspaces/WorkspaceHeader.jsx +++ b/opencti-platform/opencti-front/src/private/components/workspaces/WorkspaceHeader.jsx @@ -29,18 +29,20 @@ import ListItemText from '@mui/material/ListItemText'; import ListItemSecondaryAction from '@mui/material/ListItemSecondaryAction'; import DialogActions from '@mui/material/DialogActions'; import Dialog from '@mui/material/Dialog'; +import WorkspaceShareButton from './WorkspaceShareButton'; import WorkspaceDuplicationDialog from './WorkspaceDuplicationDialog'; import handleExportJson from './workspaceExportHandler'; import WorkspaceTurnToContainerDialog from './WorkspaceTurnToContainerDialog'; import { commitMutation, fetchQuery, MESSAGING$ } from '../../../relay/environment'; import Security from '../../../utils/Security'; import { nowUTC } from '../../../utils/Time'; -import { EXPLORE_EXUPDATE } from '../../../utils/hooks/useGranted'; +import { EXPLORE_EXUPDATE, EXPLORE_EXUPDATE_PUBLISH } from '../../../utils/hooks/useGranted'; import WorkspacePopover from './WorkspacePopover'; import ExportButtons from '../../../components/ExportButtons'; import { useFormatter } from '../../../components/i18n'; import WorkspaceManageAccessDialog from './WorkspaceManageAccessDialog'; import Transition from '../../../components/Transition'; +import useHelper from '../../../utils/hooks/useHelper'; const useStyles = makeStyles(() => ({ title: { @@ -117,6 +119,7 @@ const WorkspaceHeader = ({ const handleCloseDuplicate = () => setDisplayDuplicate(false); const [duplicating, setDuplicating] = useState(false); const tags = workspace.tags ? workspace.tags : []; + const { isFeatureEnable } = useHelper(); const handleOpenTag = () => { setOpenTag(!openTag); @@ -349,6 +352,13 @@ const WorkspaceHeader = ({ )} + {isFeatureEnable('PUBLIC_DASHBOARD') && ( + +
+ +
+
+ )} { + const { t_i18n } = useFormatter(); + + const idToDelete = useRef(); + const deletion = useDeletion({}); + + const [drawerOpen, setDrawerOpen] = useState(false); + const [commitCreateMutation] = useMutation(workspaceShareButtonCreateMutation); + const [commitDeleteMutation] = useMutation(workspaceShareButtonDeleteMutation); + + const [publicDashboardsQueryRef, fetchList] = useQueryLoader(workspaceShareListQuery); + const fetchWithFilters = (options?: UseQueryLoaderLoadQueryOptions) => { + fetchList( + { + filters: { + mode: 'and', + filterGroups: [], + filters: [{ + key: ['dashboard_id'], + mode: 'or', + operator: 'eq', + values: [workspaceId], + }], + }, + }, + options, + ); + }; + + useEffect(() => { + fetchWithFilters(); + }, []); + + const onSubmit: FormikConfig['onSubmit'] = (values, { setSubmitting, resetForm }) => { + commitCreateMutation({ + variables: { + input: { + name: values.name, + dashboard_id: workspaceId, + allowed_markings_ids: values.max_markings.map((marking) => marking.value), + }, + }, + onCompleted: () => { + setSubmitting(false); + resetForm(); + fetchWithFilters({ fetchPolicy: 'network-only' }); + }, + onError: (error) => { + setSubmitting(false); + handleError(error); + }, + }); + }; + + const confirmDelete = (id: string) => { + idToDelete.current = id; + deletion.handleOpenDelete(); + }; + + const onDelete = () => { + if (idToDelete.current) { + deletion.setDeleting(true); + commitDeleteMutation({ + variables: { + id: idToDelete.current, + }, + onCompleted: () => { + deletion.setDeleting(false); + deletion.handleCloseDelete(); + idToDelete.current = undefined; + fetchList({}, { fetchPolicy: 'network-only' }); + }, + }); + } + }; + + return ( + <> + + + setDrawerOpen(true)} + > + + + + + + setDrawerOpen(false)} + > +
+
+ + {t_i18n('Create a new public dashboard')} + + + +
+ +
+ + {t_i18n('Existing public dashboards')} + + + + {t_i18n('A public dashboard is a snapshot...')} + + + {publicDashboardsQueryRef && ( + }> + + + )} +
+
+
+ + + + ); +}; + +export default WorkspaceShareButton; diff --git a/opencti-platform/opencti-front/src/private/components/workspaces/WorkspaceShareForm.tsx b/opencti-platform/opencti-front/src/private/components/workspaces/WorkspaceShareForm.tsx new file mode 100644 index 0000000000000..61942d047820c --- /dev/null +++ b/opencti-platform/opencti-front/src/private/components/workspaces/WorkspaceShareForm.tsx @@ -0,0 +1,106 @@ +import { Field, Form, Formik } from 'formik'; +import React from 'react'; +import ObjectMarkingField from '@components/common/form/ObjectMarkingField'; +import InputAdornment from '@mui/material/InputAdornment'; +import Button from '@mui/material/Button'; +import { Option } from '@components/common/form/ReferenceField'; +import { FormikConfig } from 'formik/dist/types'; +import * as Yup from 'yup'; +import { useFormatter } from '../../../components/i18n'; +import TextField from '../../../components/TextField'; +import { fieldSpacingContainerStyle } from '../../../utils/field'; + +export interface WorkspaceShareFormData { + name: string; + uri_key: string; + max_markings: Option[]; +} + +interface WorkspaceShareFormProps { + onSubmit: FormikConfig['onSubmit'] +} + +const WorkspaceShareForm = ({ onSubmit }: WorkspaceShareFormProps) => { + const { t_i18n } = useFormatter(); + + const formValidation = Yup.object().shape({ + name: Yup.string().required(t_i18n('This field is required')), + max_markings: Yup.array().min(1, 'This field is required').required(t_i18n('This field is required')), + }); + + return ( + + enableReinitialize={true} + validationSchema={formValidation} + initialValues={{ + name: '', + uri_key: '', + max_markings: [], + }} + onSubmit={onSubmit} + > + {({ isSubmitting, isValid, dirty, handleReset, submitForm, setFieldValue }) => ( +
+ + + public/dashboard/ + + ), + }} + /> + {}} + setFieldValue={setFieldValue} + /> + +
+ + +
+ + )} + + ); +}; + +export default WorkspaceShareForm; diff --git a/opencti-platform/opencti-front/src/private/components/workspaces/WorkspaceShareList.tsx b/opencti-platform/opencti-front/src/private/components/workspaces/WorkspaceShareList.tsx new file mode 100644 index 0000000000000..65897f76080cb --- /dev/null +++ b/opencti-platform/opencti-front/src/private/components/workspaces/WorkspaceShareList.tsx @@ -0,0 +1,141 @@ +import React from 'react'; +import { graphql, PreloadedQuery, usePreloadedQuery } from 'react-relay'; +import { WorkspaceShareListQuery } from '@components/workspaces/__generated__/WorkspaceShareListQuery.graphql'; +import Paper from '@mui/material/Paper'; +import Typography from '@mui/material/Typography'; +import ToggleButtonGroup from '@mui/material/ToggleButtonGroup'; +import ToggleButton from '@mui/material/ToggleButton'; +import Tooltip from '@mui/material/Tooltip'; +import ContentCopyIcon from '@mui/icons-material/ContentCopy'; +import { useTheme } from '@mui/styles'; +import DeleteIcon from '@mui/icons-material/Delete'; +import { useFormatter } from '../../../components/i18n'; +import type { Theme } from '../../../components/Theme'; +import { copyToClipboard } from '../../../utils/utils'; +import ItemMarkings from '../../../components/ItemMarkings'; + +export const workspaceShareListQuery = graphql` + query WorkspaceShareListQuery($filters: FilterGroup) { + publicDashboards(filters: $filters) { + edges { + node { + id + uri_key + name + user_id + created_at + updated_at + allowed_markings { + id + definition + x_opencti_color + } + } + } + } + } +`; + +interface WorkspaceShareListProps { + queryRef: PreloadedQuery + onDelete: (id: string) => void +} + +const WorkspaceShareList = ({ queryRef, onDelete }: WorkspaceShareListProps) => { + const theme = useTheme(); + const { t_i18n, fld } = useFormatter(); + const { publicDashboards } = usePreloadedQuery(workspaceShareListQuery, queryRef); + const dashboards = publicDashboards?.edges + .map((edge) => edge.node) + .sort((a, b) => a.created_at.localeCompare(b.created_at)); + + const copyLinkUrl = (uriKey: string) => { + copyToClipboard( + t_i18n, + `${window.location.origin}/public/dashboard/${uriKey}`, + ); + }; + + if (!dashboards || dashboards.length === 0) { + return

{t_i18n('No public dashboard created yet')}

; + } + + return ( +
+ {dashboards.map((dashboard) => ( + +
+
+ + {dashboard.name} + + + public/dashboard/{dashboard.uri_key} + +
+ + + + copyLinkUrl(dashboard.uri_key)} + > + + + + {/* */} + {/* */} + {/* */} + {/* */} + {/* */} + + onDelete(dashboard.id)} + > + + + + +
+ +
+ + + {t_i18n('Link created')} {fld(dashboard.created_at)} + +
+
+ ))} +
+ ); +}; + +export default WorkspaceShareList; diff --git a/opencti-platform/opencti-front/src/private/components/workspaces/dashboards/Dashboard.jsx b/opencti-platform/opencti-front/src/private/components/workspaces/dashboards/Dashboard.jsx index f8622f1a86850..6e36489e39c2f 100644 --- a/opencti-platform/opencti-front/src/private/components/workspaces/dashboards/Dashboard.jsx +++ b/opencti-platform/opencti-front/src/private/components/workspaces/dashboards/Dashboard.jsx @@ -5,7 +5,7 @@ import RGL, { WidthProvider } from 'react-grid-layout'; import Paper from '@mui/material/Paper'; import makeStyles from '@mui/styles/makeStyles'; import { v4 as uuid } from 'uuid'; -import { daysAgo, dayStartDate, monthsAgo, parse, yearsAgo } from '../../../../utils/Time'; +import { computerRelativeDate, dayStartDate, parse } from '../../../../utils/Time'; import WorkspaceHeader from '../WorkspaceHeader'; import { commitMutation } from '../../../../relay/environment'; import { workspaceMutationFieldPatch } from '../WorkspaceEditionOverview'; @@ -207,18 +207,6 @@ const DashboardComponent = ({ workspace, noToolbar }) => { const getDayStartDate = () => { return dayStartDate(null, false); }; - const computerRelativeDate = (relativeDate) => { - if (relativeDate.includes('days')) { - return daysAgo(relativeDate.split('-')[1], null, false); - } - if (relativeDate.includes('months')) { - return monthsAgo(relativeDate.split('-')[1]); - } - if (relativeDate.includes('years')) { - return yearsAgo(relativeDate.split('-')[1]); - } - return null; - }; const renderEntitiesVisualization = (widget, config) => { const { relativeDate } = config; const startDate = relativeDate diff --git a/opencti-platform/opencti-front/src/public/PublicRoot.tsx b/opencti-platform/opencti-front/src/public/PublicRoot.tsx index 43833dd50eefc..27f2dc69c8d57 100644 --- a/opencti-platform/opencti-front/src/public/PublicRoot.tsx +++ b/opencti-platform/opencti-front/src/public/PublicRoot.tsx @@ -1,67 +1,23 @@ import React from 'react'; import CssBaseline from '@mui/material/CssBaseline'; import { StyledEngineProvider } from '@mui/material/styles'; -import makeStyles from '@mui/styles/makeStyles'; -import { useTheme } from '@mui/styles'; import { loadQuery, usePreloadedQuery } from 'react-relay'; -import PublicFeedLines from '@components/data/feeds/PublicFeedLines'; +import { Switch } from 'react-router-dom'; +import { BoundaryRoute } from '@components/Error'; import { ConnectedThemeProvider } from '../components/AppThemeProvider'; import { ConnectedIntlProvider } from '../components/AppIntlProvider'; -import { environment, fileUri } from '../relay/environment'; -import logoDark from '../static/images/logo_dark.png'; -import logoLight from '../static/images/logo_light.png'; -import type { Theme } from '../components/Theme'; +import { environment } from '../relay/environment'; import { rootPublicQuery } from './LoginRoot'; -import PublicStreamLines from '../private/components/data/stream/PublicStreamLines'; -import { LoginRootPublicQuery, LoginRootPublicQuery$data } from './__generated__/LoginRootPublicQuery.graphql'; -import Message from '../components/Message'; -import PublicTaxiiLines from '../private/components/data/taxii/PublicTaxiiLines'; - -const useStyles = makeStyles({ - container: { - textAlign: 'center', - margin: '0 auto', - width: '70%', - marginTop: '8rem', - }, - logo: { - width: 200, - margin: '0px 0px 50px 0px', - }, -}); - -const PublicRootWithStyle = ({ - settings, -}: { - settings: LoginRootPublicQuery$data['settings']; -}) => { - const theme = useTheme(); - const classes = useStyles(); - const loginLogo = theme.palette.mode === 'dark' - ? settings.platform_theme_dark_logo_login - : settings.platform_theme_light_logo_login; - return ( - <> - -
- 0 ? loginLogo : fileUri(theme.palette.mode === 'dark' ? logoDark : logoLight)} - alt="logo" - className={classes.logo} - /> - - - -
- - ); -}; +import { LoginRootPublicQuery } from './__generated__/LoginRootPublicQuery.graphql'; +import PublicDataSharing from './components/PublicDataSharing'; +import PublicDashboard from './components/PublicDashboard'; const queryRef = loadQuery( environment, rootPublicQuery, {}, ); + const PublicRoot = () => { const { settings } = usePreloadedQuery( rootPublicQuery, @@ -72,7 +28,10 @@ const PublicRoot = () => { - + + + + diff --git a/opencti-platform/opencti-front/src/public/components/PublicDashboard.tsx b/opencti-platform/opencti-front/src/public/components/PublicDashboard.tsx new file mode 100644 index 0000000000000..ea8fa6ed2cb7d --- /dev/null +++ b/opencti-platform/opencti-front/src/public/components/PublicDashboard.tsx @@ -0,0 +1,136 @@ +import React, { useEffect, useMemo } from 'react'; +import { graphql, PreloadedQuery, usePreloadedQuery } from 'react-relay'; +import { useParams } from 'react-router-dom'; +import RGL, { WidthProvider } from 'react-grid-layout'; +import { ErrorBoundary, SimpleError } from '@components/Error'; +import Paper from '@mui/material/Paper'; +import { useNavigate } from 'react-router-dom-v5-compat'; +import Loader, { LoaderVariant } from '../../components/Loader'; +import { PublicDashboardQuery } from './__generated__/PublicDashboardQuery.graphql'; +import useQueryLoading from '../../utils/hooks/useQueryLoading'; +import { fromB64 } from '../../utils/String'; +import type { PublicManifest } from './dashboard/PublicManifest'; +import usePublicDashboardWidgets from './dashboard/usePublicDashboardWidgets'; +import PublicTopBar from './PublicTopBar'; +import PublicDashboardHeader from './dashboard/PublicDashboardHeader'; + +const publicDashboardQuery = graphql` + query PublicDashboardQuery($uri_key: String!) { + publicDashboardByUriKey(uri_key: $uri_key) { + name + public_manifest + } + } +`; + +interface PublicDashboardComponentProps { + queryRef: PreloadedQuery; + uriKey: string; +} + +const PublicDashboardComponent = ({ + queryRef, + uriKey, +}: PublicDashboardComponentProps) => { + const navigate = useNavigate(); + const ReactGridLayout = useMemo(() => WidthProvider(RGL), []); + + const { publicDashboardByUriKey } = usePreloadedQuery(publicDashboardQuery, queryRef); + const manifest = publicDashboardByUriKey?.public_manifest; + const parsedManifest: PublicManifest = JSON.parse(manifest ? fromB64(manifest) : '{}'); + const { widgets, config } = parsedManifest; + + useEffect(() => { + if (publicDashboardByUriKey === null) { + navigate('/'); + } + }, [publicDashboardByUriKey]); + + const { + entityWidget, + relationshipWidget, + rawWidget, + } = usePublicDashboardWidgets(uriKey, config); + + const onChangeRelativeDate = () => {}; + const onChangeStartDate = () => {}; + const onChangeEndDate = () => {}; + + if (!publicDashboardByUriKey || !config) { + return null; + } + + return ( + <> + + + + + {Object.values(widgets ?? {}).map((widget) => ( + + + + + } + > + {widget.perspective === 'entities' && entityWidget(widget)} + {widget.perspective === 'relationships' && relationshipWidget(widget)} + {widget.perspective === null && rawWidget(widget)} + + + ))} + + + + ); +}; + +const PublicDashboard = () => { + const { uriKey } = useParams(); + if (!uriKey) return null; + + const queryRef = useQueryLoading( + publicDashboardQuery, + { uri_key: uriKey }, + ); + + return queryRef ? ( + }> + + + ) : ( + + ); +}; + +export default PublicDashboard; diff --git a/opencti-platform/opencti-front/src/public/components/PublicDataSharing.tsx b/opencti-platform/opencti-front/src/public/components/PublicDataSharing.tsx new file mode 100644 index 0000000000000..04fd0f3b28091 --- /dev/null +++ b/opencti-platform/opencti-front/src/public/components/PublicDataSharing.tsx @@ -0,0 +1,65 @@ +import makeStyles from '@mui/styles/makeStyles'; +import { useTheme } from '@mui/styles'; +import PublicStreamLines from '@components/data/stream/PublicStreamLines'; +import PublicTaxiiLines from '@components/data/taxii/PublicTaxiiLines'; +import PublicFeedLines from '@components/data/feeds/PublicFeedLines'; +import React from 'react'; +import { loadQuery, usePreloadedQuery } from 'react-relay'; +import type { Theme } from '../../components/Theme'; +import Message from '../../components/Message'; +import { environment, fileUri } from '../../relay/environment'; +import { LoginRootPublicQuery } from '../__generated__/LoginRootPublicQuery.graphql'; +import { rootPublicQuery } from '../LoginRoot'; +import logoLight from '../../static/images/logo_light.png'; +import logoDark from '../../static/images/logo_dark.png'; + +const useStyles = makeStyles({ + container: { + textAlign: 'center', + margin: '0 auto', + width: '70%', + marginTop: '8rem', + }, + logo: { + width: 200, + margin: '0px 0px 50px 0px', + }, +}); + +const queryRef = loadQuery( + environment, + rootPublicQuery, + {}, +); + +const PublicDataSharing = () => { + const theme = useTheme(); + const classes = useStyles(); + + const { settings } = usePreloadedQuery( + rootPublicQuery, + queryRef, + ); + + const loginLogo = theme.palette.mode === 'dark' + ? settings.platform_theme_dark_logo_login + : settings.platform_theme_light_logo_login; + + return ( + <> + +
+ 0 ? loginLogo : fileUri(theme.palette.mode === 'dark' ? logoDark : logoLight)} + alt="logo" + className={classes.logo} + /> + + + +
+ + ); +}; + +export default PublicDataSharing; diff --git a/opencti-platform/opencti-front/src/public/components/PublicTopBar.tsx b/opencti-platform/opencti-front/src/public/components/PublicTopBar.tsx new file mode 100644 index 0000000000000..9013340e6a0bb --- /dev/null +++ b/opencti-platform/opencti-front/src/public/components/PublicTopBar.tsx @@ -0,0 +1,47 @@ +import { useTheme } from '@mui/styles'; +import AppBar from '@mui/material/AppBar'; +import React from 'react'; +import Toolbar from '@mui/material/Toolbar'; +import Button from '@mui/material/Button'; +import { useFormatter } from '../../components/i18n'; +import type { Theme } from '../../components/Theme'; + +const PublicTopBar = () => { + const theme = useTheme(); + const { t_i18n } = useFormatter(); + + return ( + + + logo +
+ +
+
+
+ ); +}; + +export default PublicTopBar; diff --git a/opencti-platform/opencti-front/src/public/components/dashboard/PublicDashboardHeader.tsx b/opencti-platform/opencti-front/src/public/components/dashboard/PublicDashboardHeader.tsx new file mode 100644 index 0000000000000..b9c41e0d8b18e --- /dev/null +++ b/opencti-platform/opencti-front/src/public/components/dashboard/PublicDashboardHeader.tsx @@ -0,0 +1,114 @@ +import Typography from '@mui/material/Typography'; +import React from 'react'; +import InputLabel from '@mui/material/InputLabel'; +import Select from '@mui/material/Select'; +import MenuItem from '@mui/material/MenuItem'; +import FormControl from '@mui/material/FormControl'; +import { DatePicker } from '@mui/x-date-pickers/DatePicker'; +import { useFormatter } from '../../../components/i18n'; +import type { PublicManifestConfig } from './PublicManifest'; + +interface PublicDashboardHeaderProps { + title: string + manifestConfig: PublicManifestConfig + onChangeRelativeDate: (value: string) => void + onChangeStartDate: (value: string | null) => void + onChangeEndDate: (value: string | null) => void +} + +const PublicDashboardHeader = ({ + title, + manifestConfig, + onChangeRelativeDate, + onChangeStartDate, + onChangeEndDate, +}: PublicDashboardHeaderProps) => { + const { t_i18n } = useFormatter(); + const { relativeDate, startDate, endDate } = manifestConfig; + + return ( +
+ + {title} + + + + + {t_i18n('Relative time')} + + + + !context.validationError && onChangeStartDate(value)} + slotProps={{ + field: { + clearable: true, + }, + textField: { + variant: 'outlined', + size: 'small', + }, + toolbar: { + hidden: true, + }, + }} + /> + !context.validationError && onChangeEndDate(value)} + sx={{ width: 220 }} + slotProps={{ + field: { + clearable: true, + }, + textField: { + variant: 'outlined', + size: 'small', + }, + toolbar: { + hidden: true, + }, + }} + /> +
+ ); +}; + +export default PublicDashboardHeader; diff --git a/opencti-platform/opencti-front/src/public/components/dashboard/PublicManifest.d.ts b/opencti-platform/opencti-front/src/public/components/dashboard/PublicManifest.d.ts new file mode 100644 index 0000000000000..9ff86ae9e0ae6 --- /dev/null +++ b/opencti-platform/opencti-front/src/public/components/dashboard/PublicManifest.d.ts @@ -0,0 +1,28 @@ +export interface PublicManifestWidget { + id: string + layout: { + w: number + h: number, + x: number + y: number + i: string + moved: boolean + static: boolean + } + parameters: { + title: string + } + perspective: 'entities' | 'relationships' | 'audits' | null + type: string +} + +export interface PublicManifestConfig { + startDate?: string + endDate?: string + relativeDate?: string +} + +export interface PublicManifest { + config?: PublicManifestConfig + widgets?: Record +} diff --git a/opencti-platform/opencti-front/src/public/components/dashboard/PublicStixCoreObjectsNumber.tsx b/opencti-platform/opencti-front/src/public/components/dashboard/PublicStixCoreObjectsNumber.tsx new file mode 100644 index 0000000000000..a3af66d1af455 --- /dev/null +++ b/opencti-platform/opencti-front/src/public/components/dashboard/PublicStixCoreObjectsNumber.tsx @@ -0,0 +1,91 @@ +import { graphql, PreloadedQuery, usePreloadedQuery } from 'react-relay'; +import React from 'react'; +import useQueryLoading from '../../../utils/hooks/useQueryLoading'; +import { PublicStixCoreObjectsNumberQuery } from './__generated__/PublicStixCoreObjectsNumberQuery.graphql'; +import WidgetContainer from '../../../components/dashboard/WidgetContainer'; +import { useFormatter } from '../../../components/i18n'; +import WidgetLoader from '../../../components/dashboard/WidgetLoader'; +import WidgetNumber from '../../../components/dashboard/WidgetNumber'; +import WidgetNoData from '../../../components/dashboard/WidgetNoData'; +import type { PublicManifestWidget } from './PublicManifest'; + +const publicStixCoreObjectsNumberQuery = graphql` + query PublicStixCoreObjectsNumberQuery( + $startDate: DateTime + $endDate: DateTime + $uriKey: String! + $widgetId : String! + ) { + publicStixCoreObjectsNumber( + startDate: $startDate + endDate: $endDate + uriKey: $uriKey + widgetId : $widgetId + ) { + total + count + } + } +`; + +interface PublicStixCoreObjectsNumberComponentProps { + queryRef: PreloadedQuery +} + +const PublicStixCoreObjectsNumberComponent = ({ + queryRef, +}: PublicStixCoreObjectsNumberComponentProps) => { + const { publicStixCoreObjectsNumber } = usePreloadedQuery( + publicStixCoreObjectsNumberQuery, + queryRef, + ); + + if (publicStixCoreObjectsNumber) { + const { total, count } = publicStixCoreObjectsNumber; + return ; + } + return ; +}; + +interface PublicStixCoreObjectsNumberProps { + startDate: string | null | undefined + endDate: string | null | undefined + uriKey: string + widget: PublicManifestWidget +} + +const PublicStixCoreObjectsNumber = ({ + uriKey, + widget, + startDate, + endDate, +}: PublicStixCoreObjectsNumberProps) => { + const { t_i18n } = useFormatter(); + const { id, parameters } = widget; + const queryRef = useQueryLoading( + publicStixCoreObjectsNumberQuery, + { + uriKey, + widgetId: id, + startDate, + endDate, + }, + ); + + return ( + + {queryRef ? ( + }> + + + ) : ( + + )} + + ); +}; + +export default PublicStixCoreObjectsNumber; diff --git a/opencti-platform/opencti-front/src/public/components/dashboard/usePublicDashboardWidgets.tsx b/opencti-platform/opencti-front/src/public/components/dashboard/usePublicDashboardWidgets.tsx new file mode 100644 index 0000000000000..f3b631f81a9c3 --- /dev/null +++ b/opencti-platform/opencti-front/src/public/components/dashboard/usePublicDashboardWidgets.tsx @@ -0,0 +1,99 @@ +import React from 'react'; +import type { PublicManifestConfig, PublicManifestWidget } from './PublicManifest'; +import { computerRelativeDate, dayStartDate, formatDate } from '../../../utils/Time'; +import PublicStixCoreObjectsNumber from './PublicStixCoreObjectsNumber'; + +const usePublicDashboardWidgets = (uriKey: string, config?: PublicManifestConfig) => { + const startDate = config?.relativeDate ? computerRelativeDate(config.relativeDate) : config?.startDate; + const endDate = config?.relativeDate ? formatDate(dayStartDate(null, false)) : config?.endDate; + + const entityWidget = (widget: PublicManifestWidget) => { + switch (widget.type) { + case 'bookmark': + return 'Not implemented yet'; + case 'number': + return ( + + ); + case 'list': + return 'Not implemented yet'; + case 'distribution-list': + return 'Not implemented yet'; + case 'vertical-bar': + return 'Not implemented yet'; + case 'line': + return 'Not implemented yet'; + case 'area': + return 'Not implemented yet'; + case 'timeline': + return 'Not implemented yet'; + case 'donut': + return 'Not implemented yet'; + case 'horizontal-bar': + return 'Not implemented yet'; + case 'radar': + return 'Not implemented yet'; + case 'heatmap': + return 'Not implemented yet'; + case 'tree': + return 'Not implemented yet'; + default: + return 'Not implemented yet'; + } + }; + + const relationshipWidget = (widget: PublicManifestWidget) => { + switch (widget.type) { + case 'number': + return 'Not implemented yet'; + case 'list': + return 'Not implemented yet'; + case 'distribution-list': + return 'Not implemented yet'; + case 'vertical-bar': + return 'Not implemented yet'; + case 'line': + return 'Not implemented yet'; + case 'area': + return 'Not implemented yet'; + case 'timeline': + return 'Not implemented yet'; + case 'donut': + return 'Not implemented yet'; + case 'horizontal-bar': + return 'Not implemented yet'; + case 'radar': + return 'Not implemented yet'; + case 'heatmap': + return 'Not implemented yet'; + case 'tree': + return 'Not implemented yet'; + case 'map': + return 'Not implemented yet'; + default: + return 'Not implemented yet'; + } + }; + + const rawWidget = (widget: PublicManifestWidget) => { + switch (widget.type) { + case 'text': + return 'Not implemented yet'; + default: + return 'Not implemented yet'; + } + }; + + return { + entityWidget, + relationshipWidget, + rawWidget, + }; +}; + +export default usePublicDashboardWidgets; diff --git a/opencti-platform/opencti-front/src/schema/relay.schema.graphql b/opencti-platform/opencti-front/src/schema/relay.schema.graphql index 49bc5d828be56..27787c33082a2 100644 --- a/opencti-platform/opencti-front/src/schema/relay.schema.graphql +++ b/opencti-platform/opencti-front/src/schema/relay.schema.graphql @@ -48,6 +48,7 @@ enum Capabilities { EXPLORE EXPLORE_EXUPDATE EXPLORE_EXUPDATE_EXDELETE + EXPLORE_EXUPDATE_PUBLISH MODULES MODULES_MODMANAGE SETTINGS @@ -1805,6 +1806,17 @@ input MarkingDefinitionAddInput { update: Boolean } +type MarkingDefinitionShort { + id: ID! + standard_id: String! + entity_type: String! + representative: Representative + definition_type: String + definition: String + x_opencti_order: Int! + x_opencti_color: String +} + enum LabelsOrdering { value color @@ -6673,11 +6685,11 @@ type StixObjectOrStixRelationshipRefEdge { node: StixObjectOrStixRelationship! } -union StixObjectOrStixRelationshipOrCreator = MarkingDefinition | Label | KillChainPhase | ExternalReference | AttackPattern | Campaign | Channel | Event | Narrative | Note | ObservedData | Opinion | Report | Grouping | CourseOfAction | Individual | Organization | Sector | System | Indicator | Infrastructure | IntrusionSet | Language | City | AdministrativeArea | Country | Region | Position | Malware | MalwareAnalysis | ThreatActorGroup | ThreatActorIndividual | Tool | Vulnerability | Incident | AutonomousSystem | Directory | DomainName | EmailAddr | EmailMessage | EmailMimePartType | Artifact | StixFile | X509Certificate | IPv4Addr | IPv6Addr | MacAddr | Mutex | NetworkTraffic | Process | Software | Url | UserAccount | WindowsRegistryKey | WindowsRegistryValueType | CryptographicKey | CryptocurrencyWallet | Hostname | Text | UserAgent | BankAccount | PhoneNumber | PaymentCard | MediaContent | StixCoreRelationship | StixSightingRelationship | StixRefRelationship | Task | DataComponent | DataSource | CaseIncident | CaseRfi | CaseRft | Feedback | CaseTemplate | EntitySetting | ManagerConfiguration | Creator | Group | Workspace | CsvMapper | Status +union StixObjectOrStixRelationshipOrCreator = MarkingDefinition | Label | KillChainPhase | ExternalReference | AttackPattern | Campaign | Channel | Event | Narrative | Note | ObservedData | Opinion | Report | Grouping | CourseOfAction | Individual | Organization | Sector | System | Indicator | Infrastructure | IntrusionSet | Language | City | AdministrativeArea | Country | Region | Position | Malware | MalwareAnalysis | ThreatActorGroup | ThreatActorIndividual | Tool | Vulnerability | Incident | AutonomousSystem | Directory | DomainName | EmailAddr | EmailMessage | EmailMimePartType | Artifact | StixFile | X509Certificate | IPv4Addr | IPv6Addr | MacAddr | Mutex | NetworkTraffic | Process | Software | Url | UserAccount | WindowsRegistryKey | WindowsRegistryValueType | CryptographicKey | CryptocurrencyWallet | Hostname | Text | UserAgent | BankAccount | PhoneNumber | PaymentCard | MediaContent | StixCoreRelationship | StixSightingRelationship | StixRefRelationship | Task | DataComponent | DataSource | CaseIncident | CaseRfi | CaseRft | Feedback | CaseTemplate | EntitySetting | ManagerConfiguration | Creator | Group | Workspace | CsvMapper | Status | PublicDashboard -union StixObjectOrStixRelationship = MarkingDefinition | Label | KillChainPhase | ExternalReference | AttackPattern | Campaign | Channel | Event | Narrative | Note | ObservedData | Opinion | Report | Grouping | CourseOfAction | Individual | Organization | Sector | System | Indicator | Infrastructure | IntrusionSet | Language | City | AdministrativeArea | Country | Region | Position | Malware | MalwareAnalysis | ThreatActorGroup | ThreatActorIndividual | Tool | Vulnerability | Incident | AutonomousSystem | Directory | DomainName | EmailAddr | EmailMessage | EmailMimePartType | Artifact | StixFile | X509Certificate | IPv4Addr | IPv6Addr | MacAddr | Mutex | NetworkTraffic | Process | Software | Url | UserAccount | WindowsRegistryKey | WindowsRegistryValueType | CryptographicKey | CryptocurrencyWallet | Hostname | Text | UserAgent | BankAccount | PhoneNumber | PaymentCard | MediaContent | StixCoreRelationship | StixSightingRelationship | StixRefRelationship | DataComponent | DataSource | CaseIncident | CaseRfi | CaseRft | Feedback | CaseTemplate | Task | EntitySetting | ManagerConfiguration | Workspace | CsvMapper +union StixObjectOrStixRelationship = MarkingDefinition | Label | KillChainPhase | ExternalReference | AttackPattern | Campaign | Channel | Event | Narrative | Note | ObservedData | Opinion | Report | Grouping | CourseOfAction | Individual | Organization | Sector | System | Indicator | Infrastructure | IntrusionSet | Language | City | AdministrativeArea | Country | Region | Position | Malware | MalwareAnalysis | ThreatActorGroup | ThreatActorIndividual | Tool | Vulnerability | Incident | AutonomousSystem | Directory | DomainName | EmailAddr | EmailMessage | EmailMimePartType | Artifact | StixFile | X509Certificate | IPv4Addr | IPv6Addr | MacAddr | Mutex | NetworkTraffic | Process | Software | Url | UserAccount | WindowsRegistryKey | WindowsRegistryValueType | CryptographicKey | CryptocurrencyWallet | Hostname | Text | UserAgent | BankAccount | PhoneNumber | PaymentCard | MediaContent | StixCoreRelationship | StixSightingRelationship | StixRefRelationship | DataComponent | DataSource | CaseIncident | CaseRfi | CaseRft | Feedback | CaseTemplate | Task | EntitySetting | ManagerConfiguration | Workspace | CsvMapper | PublicDashboard -union StixCoreObjectOrStixCoreRelationship = AttackPattern | Campaign | Channel | Event | Note | ObservedData | Opinion | Report | Grouping | CourseOfAction | Individual | Organization | Sector | Indicator | Infrastructure | IntrusionSet | Language | City | AdministrativeArea | Country | Region | Position | Malware | MalwareAnalysis | Narrative | ThreatActorGroup | ThreatActorIndividual | Tool | Vulnerability | Incident | AutonomousSystem | Directory | DomainName | EmailAddr | EmailMessage | EmailMimePartType | Artifact | StixFile | X509Certificate | IPv4Addr | IPv6Addr | MacAddr | Mutex | NetworkTraffic | Process | Software | Url | UserAccount | WindowsRegistryKey | WindowsRegistryValueType | CryptographicKey | CryptocurrencyWallet | Hostname | Text | UserAgent | BankAccount | PhoneNumber | PaymentCard | MediaContent | StixCoreRelationship | DataComponent | DataSource | CaseIncident | CaseRfi | CaseRft | Feedback | CaseTemplate | Task | EntitySetting | ManagerConfiguration | Workspace +union StixCoreObjectOrStixCoreRelationship = AttackPattern | Campaign | Channel | Event | Note | ObservedData | Opinion | Report | Grouping | CourseOfAction | Individual | Organization | Sector | Indicator | Infrastructure | IntrusionSet | Language | City | AdministrativeArea | Country | Region | Position | Malware | MalwareAnalysis | Narrative | ThreatActorGroup | ThreatActorIndividual | Tool | Vulnerability | Incident | AutonomousSystem | Directory | DomainName | EmailAddr | EmailMessage | EmailMimePartType | Artifact | StixFile | X509Certificate | IPv4Addr | IPv6Addr | MacAddr | Mutex | NetworkTraffic | Process | Software | Url | UserAccount | WindowsRegistryKey | WindowsRegistryValueType | CryptographicKey | CryptocurrencyWallet | Hostname | Text | UserAgent | BankAccount | PhoneNumber | PaymentCard | MediaContent | StixCoreRelationship | DataComponent | DataSource | CaseIncident | CaseRfi | CaseRft | Feedback | CaseTemplate | Task | EntitySetting | ManagerConfiguration | Workspace | PublicDashboard enum StixRelationshipsOrdering { entity_type @@ -7129,7 +7141,7 @@ type Query { globalSearch(first: Int, after: ID, search: String, types: [String], orderBy: StixCoreObjectsOrdering, orderMode: OrderingMode, filters: FilterGroup): StixCoreObjectConnection stixCoreObjectsExportFiles(first: Int, exportContext: ExportContext!): FileConnection stixCoreObjectsTimeSeries(authorId: String, field: String!, operation: StatsOperation!, startDate: DateTime!, endDate: DateTime, interval: String!, onlyInferred: Boolean, types: [String], filters: FilterGroup, search: String): [TimeSeries] - stixCoreObjectsMultiTimeSeries(operation: StatsOperation!, startDate: DateTime!, endDate: DateTime, interval: String!, onlyInferred: Boolean, timeSeriesParameters: [StixCoreObjectsTimeSeriesParameters]): [MultiTimeSeries] + stixCoreObjectsMultiTimeSeries(startDate: DateTime!, endDate: DateTime, interval: String!, onlyInferred: Boolean, timeSeriesParameters: [StixCoreObjectsTimeSeriesParameters]): [MultiTimeSeries] stixCoreObjectsNumber(dateAttribute: String, types: [String], startDate: DateTime, endDate: DateTime, onlyInferred: Boolean, filters: FilterGroup, search: String): Number stixCoreObjectsMultiNumber(dateAttribute: String, startDate: DateTime, endDate: DateTime, onlyInferred: Boolean, numberParameters: [StixCoreObjectsNumberParameters]): [Number] stixCoreObjectsDistribution(objectId: [String], relationship_type: [String], toTypes: [String], elementWithTargetTypes: [String], field: String!, startDate: DateTime, endDate: DateTime, dateAttribute: String, operation: StatsOperation!, limit: Int, order: String, types: [String], filters: FilterGroup, search: String): [Distribution] @@ -7338,6 +7350,11 @@ type Query { csvMappers(first: Int, after: ID, orderBy: CsvMapperOrdering, orderMode: OrderingMode, filters: FilterGroup, search: String): CsvMapperConnection csvMapperTest(configuration: String!, content: String!): CsvMapperTestResult csvMapperSchemaAttributes: [CsvMapperSchemaAttributes!]! + publicDashboard(id: String!): PublicDashboard + publicDashboards(first: Int, after: ID, orderBy: PublicDashboardsOrdering, orderMode: OrderingMode, filters: FilterGroup, search: String): PublicDashboardConnection + publicDashboardByUriKey(uri_key: String!): PublicDashboard + publicStixCoreObjectsNumber(startDate: DateTime, endDate: DateTime, uriKey: String!, widgetId: String!): Number + publicStixCoreObjectsMultiTimeSeries(startDate: DateTime!, endDate: DateTime, uriKey: String!, widgetId: String!): [MultiTimeSeries] } type Subscription { @@ -8088,6 +8105,9 @@ type Mutation { csvMapperAdd(input: CsvMapperAddInput!): CsvMapper csvMapperDelete(id: ID!): ID csvMapperFieldPatch(id: ID!, input: [EditInput!]!): CsvMapper + publicDashboardAdd(input: PublicDashboardAddInput!): PublicDashboard + publicDashboardDelete(id: ID!): ID + publicDashboardFieldPatch(id: ID!, input: [EditInput!]!): PublicDashboard aiContainerGenerateReport(id: ID!, containerId: String!, paragraphs: Int, tone: Tone, format: Format): String aiThreatGenerateReport(id: ID!, threatId: String!, paragraphs: Int, tone: Tone, format: Format): String aiVictimGenerateReport(id: ID!, victimId: String!, paragraphs: Int, tone: Tone, format: Format): String @@ -11109,6 +11129,50 @@ input CsvMapperAddInput { skipLineChar: String } +type PublicDashboard implements InternalObject & BasicObject { + id: ID! + entity_type: String! + standard_id: String! + parent_types: [String!]! + name: String! + description: String + dashboard_id: String + user_id: String! + public_manifest: String + private_manifest: String + uri_key: String! + allowed_markings_ids: [String!] + allowed_markings: [MarkingDefinitionShort!] + created_at: DateTime + updated_at: DateTime + editContext: [EditUserContext!] + authorized_members: [MemberAccess!] +} + +enum PublicDashboardsOrdering { + name + created_at + updated_at + creator +} + +type PublicDashboardConnection { + pageInfo: PageInfo! + edges: [PublicDashboardEdge!]! +} + +type PublicDashboardEdge { + cursor: String! + node: PublicDashboard! +} + +input PublicDashboardAddInput { + name: String! + description: String + dashboard_id: String! + allowed_markings_ids: [String!] +} + enum Tone { tactical operational diff --git a/opencti-platform/opencti-front/src/utils/Time.js b/opencti-platform/opencti-front/src/utils/Time.js index 98aca2b457de0..d64d2499d6e92 100644 --- a/opencti-platform/opencti-front/src/utils/Time.js +++ b/opencti-platform/opencti-front/src/utils/Time.js @@ -123,3 +123,23 @@ export const formatSeconds = (seconds) => { const formattedSecs = `${leadingZero(secondsLeft)}`; return `${formattedHours}${formattedMins}${formattedSecs}`; }; + +/** + * Get a past date in a string format based on a relative string + * used to compute how much time we go before. + * + * @param relativeDate How much time to go before (ex: days-7). + * @return {string|null} The past date. + */ +export const computerRelativeDate = (relativeDate) => { + if (relativeDate.includes('days')) { + return daysAgo(relativeDate.split('-')[1], null, false); + } + if (relativeDate.includes('months')) { + return monthsAgo(relativeDate.split('-')[1]); + } + if (relativeDate.includes('years')) { + return yearsAgo(relativeDate.split('-')[1]); + } + return null; +}; diff --git a/opencti-platform/opencti-front/src/utils/hooks/useGranted.ts b/opencti-platform/opencti-front/src/utils/hooks/useGranted.ts index 3901cc73da1e6..76d6d0697f8e5 100644 --- a/opencti-platform/opencti-front/src/utils/hooks/useGranted.ts +++ b/opencti-platform/opencti-front/src/utils/hooks/useGranted.ts @@ -18,6 +18,7 @@ export const KNOWLEDGE_KNENRICHMENT = 'KNOWLEDGE_KNENRICHMENT'; export const EXPLORE = 'EXPLORE'; export const EXPLORE_EXUPDATE = 'EXPLORE_EXUPDATE'; export const EXPLORE_EXUPDATE_EXDELETE = 'EXPLORE_EXUPDATE_EXDELETE'; +export const EXPLORE_EXUPDATE_PUBLISH = 'EXPLORE_EXUPDATE_PUBLISH'; export const MODULES = 'MODULES'; export const MODULES_MODMANAGE = 'MODULES_MODMANAGE'; export const SETTINGS = 'SETTINGS'; diff --git a/opencti-platform/opencti-front/yarn.lock b/opencti-platform/opencti-front/yarn.lock index 91a5bacef5b92..70385c364c12e 100644 --- a/opencti-platform/opencti-front/yarn.lock +++ b/opencti-platform/opencti-front/yarn.lock @@ -5327,6 +5327,15 @@ __metadata: languageName: node linkType: hard +"@types/react-grid-layout@npm:^1.3.5": + version: 1.3.5 + resolution: "@types/react-grid-layout@npm:1.3.5" + dependencies: + "@types/react": "npm:*" + checksum: 10/21599054dfa977ed8445b1ab3198a842531cb36bd620564c3f8a469688cbea051149eb644a99b2f8f6d02f8d9909a6145668f385781b5647601e9663de216946 + languageName: node + linkType: hard + "@types/react-relay@npm:*, @types/react-relay@npm:16.0.6": version: 16.0.6 resolution: "@types/react-relay@npm:16.0.6" @@ -15164,6 +15173,7 @@ __metadata: "@types/react": "npm:18.2.55" "@types/react-csv": "npm:1.1.10" "@types/react-dom": "npm:18.2.19" + "@types/react-grid-layout": "npm:^1.3.5" "@types/react-relay": "npm:16.0.6" "@types/react-router-dom": "npm:5.3.3" "@types/react-syntax-highlighter": "npm:15.5.11" diff --git a/opencti-platform/opencti-graphql/config/default.json b/opencti-platform/opencti-graphql/config/default.json index c255d537fe75d..8bbb6af685c0d 100644 --- a/opencti-platform/opencti-graphql/config/default.json +++ b/opencti-platform/opencti-graphql/config/default.json @@ -4,7 +4,7 @@ "base_path": "", "base_url": "http://localhost:4000/", "enabled": true, - "disabled_dev_features": [], + "disabled_dev_features": ["PUBLIC_DASHBOARD"], "https_cert": { "ca": [], "key": null, diff --git a/opencti-platform/opencti-graphql/config/schema/opencti.graphql b/opencti-platform/opencti-graphql/config/schema/opencti.graphql index f4f5a4d088a3a..99200d5c87ba4 100644 --- a/opencti-platform/opencti-graphql/config/schema/opencti.graphql +++ b/opencti-platform/opencti-graphql/config/schema/opencti.graphql @@ -51,6 +51,7 @@ enum Capabilities { EXPLORE EXPLORE_EXUPDATE EXPLORE_EXUPDATE_EXDELETE + EXPLORE_EXUPDATE_PUBLISH MODULES MODULES_MODMANAGE SETTINGS @@ -1736,6 +1737,16 @@ input MarkingDefinitionAddInput { clientMutationId: String update: Boolean } +type MarkingDefinitionShort { + id: ID! # internal_id + standard_id: String! + entity_type: String! + representative: Representative + definition_type: String + definition: String + x_opencti_order: Int! + x_opencti_color: String +} ############## Labels enum LabelsOrdering { @@ -10128,6 +10139,7 @@ union StixObjectOrStixRelationshipOrCreator = | Workspace | CsvMapper | Status + | PublicDashboard union StixObjectOrStixRelationship = MarkingDefinition | Label @@ -10208,6 +10220,7 @@ union StixObjectOrStixRelationship = | ManagerConfiguration | Workspace | CsvMapper + | PublicDashboard union StixCoreObjectOrStixCoreRelationship = #### Stix Core Objects ## Stix Domain Objects @@ -10282,6 +10295,7 @@ union StixCoreObjectOrStixCoreRelationship = | EntitySetting | ManagerConfiguration | Workspace + | PublicDashboard enum StixRelationshipsOrdering { entity_type @@ -10978,7 +10992,6 @@ type Query { search: String ): [TimeSeries] @auth(for: [KNOWLEDGE, EXPLORE]) stixCoreObjectsMultiTimeSeries( - operation: StatsOperation! startDate: DateTime! endDate: DateTime interval: String! diff --git a/opencti-platform/opencti-graphql/graphql-codegen.yml b/opencti-platform/opencti-graphql/graphql-codegen.yml index 3692a870bf02a..763257a4c3654 100644 --- a/opencti-platform/opencti-graphql/graphql-codegen.yml +++ b/opencti-platform/opencti-graphql/graphql-codegen.yml @@ -48,6 +48,7 @@ generates: Organization: ../modules/organization/organization-types#BasicStoreEntityOrganization CsvMapper: ../modules/internal/csvMapper/csvMapper-types#BasicStoreEntityCsvMapper Playbook: ../modules/playbook/playbook-types#BasicStoreEntityPlaybook + PublicDashboard: ../modules/publicDashboard/publicDashboard-types#BasicStoreEntityPublicDashboard ./graphql.schema.json: plugins: - "introspection" diff --git a/opencti-platform/opencti-graphql/src/config/conf.js b/opencti-platform/opencti-graphql/src/config/conf.js index a0388091c648b..7d8b9203b61a9 100644 --- a/opencti-platform/opencti-graphql/src/config/conf.js +++ b/opencti-platform/opencti-graphql/src/config/conf.js @@ -30,6 +30,7 @@ import { ENTITY_TYPE_MANAGER_CONFIGURATION } from '../modules/managerConfigurati import { ENTITY_TYPE_WORKSPACE } from '../modules/workspace/workspace-types'; import { ENTITY_TYPE_NOTIFIER } from '../modules/notifier/notifier-types'; import { UnknownError, UnsupportedError } from './errors'; +import { ENTITY_TYPE_PUBLIC_DASHBOARD } from '../modules/publicDashboard/publicDashboard-types'; import { AI_BUS } from '../modules/ai/ai-types'; // https://golang.org/src/crypto/x509/root_linux.go @@ -74,6 +75,11 @@ export const BUS_TOPICS = { EDIT_TOPIC: `${TOPIC_PREFIX}WORKSPACE_EDIT_TOPIC`, ADDED_TOPIC: `${TOPIC_PREFIX}WORKSPACE_ADDED_TOPIC`, }, + [ENTITY_TYPE_PUBLIC_DASHBOARD]: { + EDIT_TOPIC: `${TOPIC_PREFIX}PUBLIC_DASHBOARD_EDIT_TOPIC`, + ADDED_TOPIC: `${TOPIC_PREFIX}PUBLIC_DASHBOARD_ADDED_TOPIC`, + DELETE_TOPIC: `${TOPIC_PREFIX}PUBLIC_DASHBOARD_DELETE_TOPIC`, + }, [M.ENTITY_TYPE_LABEL]: { EDIT_TOPIC: `${TOPIC_PREFIX}LABEL_EDIT_TOPIC`, ADDED_TOPIC: `${TOPIC_PREFIX}LABEL_ADDED_TOPIC`, diff --git a/opencti-platform/opencti-graphql/src/database/cache.ts b/opencti-platform/opencti-graphql/src/database/cache.ts index 63a8585d872a4..7552cb63013b4 100644 --- a/opencti-platform/opencti-graphql/src/database/cache.ts +++ b/opencti-platform/opencti-graphql/src/database/cache.ts @@ -9,6 +9,7 @@ import { ENTITY_TYPE_RESOLVED_FILTERS } from '../schema/stixDomainObject'; import { ENTITY_TYPE_TRIGGER } from '../modules/notification/notification-types'; import { convertStoreToStix } from './stix-converter'; import { ENTITY_TYPE_PLAYBOOK } from '../modules/playbook/playbook-types'; +import { type BasicStoreEntityPublicDashboard, ENTITY_TYPE_PUBLIC_DASHBOARD } from '../modules/publicDashboard/publicDashboard-types'; const STORE_ENTITIES_LINKS: Record = { // Filters must be reset depending on stream and triggers modifications @@ -38,6 +39,16 @@ const buildStoreEntityMap = (entities: Array) return entityById; }; +const buildStorePublicDashboardMap = (entities: Array) => { + const entityByUriKey = new Map(); + for (let i = 0; i < entities.length; i += 1) { + const entity = entities[i]; + const { uri_key } = entity; + entityByUriKey.set(uri_key, entity); + } + return entityByUriKey; +}; + export const writeCacheForEntity = (entityType: string, data: unknown) => { cache[entityType] = data; }; @@ -107,6 +118,10 @@ export const getEntitiesMapFromCache = async ; // map of } + if (type === ENTITY_TYPE_PUBLIC_DASHBOARD) { + const data = await getEntitiesFromCache(context, user, type) as BasicStoreEntityPublicDashboard[]; + return buildStorePublicDashboardMap(data); // map of + } const data = await getEntitiesFromCache(context, user, type) as BasicStoreIdentifier[]; return buildStoreEntityMap(data); // map of for all the instance ids (internal_id, standard_id, stix ids) }; diff --git a/opencti-platform/opencti-graphql/src/database/data-initialization.js b/opencti-platform/opencti-graphql/src/database/data-initialization.js index b1aec47360a9e..171c9e05d7fcc 100644 --- a/opencti-platform/opencti-graphql/src/database/data-initialization.js +++ b/opencti-platform/opencti-graphql/src/database/data-initialization.js @@ -76,7 +76,10 @@ export const CAPABILITIES = [ name: 'EXUPDATE', description: 'Create / Update exploration', attribute_order: 1100, - dependencies: [{ name: 'EXDELETE', description: 'Delete exploration', attribute_order: 1200 }], + dependencies: [ + { name: 'EXDELETE', description: 'Delete exploration', attribute_order: 1200 }, + { name: 'PUBLISH', description: 'Publish exploration', attribute_order: 1300 }, + ], }, ], }, diff --git a/opencti-platform/opencti-graphql/src/domain/stixCoreObject.js b/opencti-platform/opencti-graphql/src/domain/stixCoreObject.js index ca53cf9353b74..e71e89f23aeb2 100644 --- a/opencti-platform/opencti-graphql/src/domain/stixCoreObject.js +++ b/opencti-platform/opencti-graphql/src/domain/stixCoreObject.js @@ -51,8 +51,8 @@ import { extractEntityRepresentativeName } from '../database/entity-representati import { addFilter, extractFilterGroupValues, findFiltersFromKey } from '../utils/filtering/filtering-utils'; import { INSTANCE_REGARDING_OF, specialFilterKeysWhoseValueToResolve } from '../utils/filtering/filtering-constants'; import { schemaRelationsRefDefinition } from '../schema/schema-relationsRef'; -import { getEntitiesMapFromCache } from '../database/cache'; import { ENTITY_TYPE_CONTAINER_GROUPING } from '../modules/grouping/grouping-types'; +import { getEntitiesMapFromCache } from '../database/cache'; export const findAll = async (context, user, args) => { let types = []; diff --git a/opencti-platform/opencti-graphql/src/generated/graphql.ts b/opencti-platform/opencti-graphql/src/generated/graphql.ts index 3a08de4f1e863..8f44fe7ce61dc 100644 --- a/opencti-platform/opencti-graphql/src/generated/graphql.ts +++ b/opencti-platform/opencti-graphql/src/generated/graphql.ts @@ -29,6 +29,7 @@ import type { BasicStoreEntityDecayRule } from '../modules/decayRule/decayRule-t import type { BasicStoreEntityOrganization } from '../modules/organization/organization-types'; import type { BasicStoreEntityCsvMapper } from '../modules/internal/csvMapper/csvMapper-types'; import type { BasicStoreEntityPlaybook } from '../modules/playbook/playbook-types'; +import type { BasicStoreEntityPublicDashboard } from '../modules/publicDashboard/publicDashboard-types'; export type Maybe = T | null | undefined; export type InputMaybe = T | null; export type Exact = { [K in keyof T]: T[K] }; @@ -1697,6 +1698,7 @@ export enum Capabilities { Explore = 'EXPLORE', ExploreExupdate = 'EXPLORE_EXUPDATE', ExploreExupdateExdelete = 'EXPLORE_EXUPDATE_EXDELETE', + ExploreExupdatePublish = 'EXPLORE_EXUPDATE_PUBLISH', Knowledge = 'KNOWLEDGE', KnowledgeKnaskimport = 'KNOWLEDGE_KNASKIMPORT', KnowledgeKnenrichment = 'KNOWLEDGE_KNENRICHMENT', @@ -11731,6 +11733,18 @@ export type MarkingDefinitionEditMutationsFieldPatchArgs = { input: Array>; }; +export type MarkingDefinitionShort = { + __typename?: 'MarkingDefinitionShort'; + definition?: Maybe; + definition_type?: Maybe; + entity_type: Scalars['String']['output']; + id: Scalars['ID']['output']; + representative?: Maybe; + standard_id: Scalars['String']['output']; + x_opencti_color?: Maybe; + x_opencti_order: Scalars['Int']['output']; +}; + export enum MarkingDefinitionsOrdering { Created = 'created', CreatedAt = 'created_at', @@ -12287,6 +12301,9 @@ export type Mutation = { playbookUpdatePositions?: Maybe; positionAdd?: Maybe; positionEdit?: Maybe; + publicDashboardAdd?: Maybe; + publicDashboardDelete?: Maybe; + publicDashboardFieldPatch?: Maybe; queryTaskAdd: BackgroundTask; regionAdd?: Maybe; regionEdit?: Maybe; @@ -13611,6 +13628,22 @@ export type MutationPositionEditArgs = { }; +export type MutationPublicDashboardAddArgs = { + input: PublicDashboardAddInput; +}; + + +export type MutationPublicDashboardDeleteArgs = { + id: Scalars['ID']['input']; +}; + + +export type MutationPublicDashboardFieldPatchArgs = { + id: Scalars['ID']['input']; + input: Array; +}; + + export type MutationQueryTaskAddArgs = { input: QueryTaskAddInput; }; @@ -17273,6 +17306,53 @@ export type Provider = { type?: Maybe; }; +export type PublicDashboard = BasicObject & InternalObject & { + __typename?: 'PublicDashboard'; + allowed_markings?: Maybe>; + allowed_markings_ids?: Maybe>; + authorized_members?: Maybe>; + created_at?: Maybe; + dashboard_id?: Maybe; + description?: Maybe; + editContext?: Maybe>; + entity_type: Scalars['String']['output']; + id: Scalars['ID']['output']; + name: Scalars['String']['output']; + parent_types: Array; + private_manifest?: Maybe; + public_manifest?: Maybe; + standard_id: Scalars['String']['output']; + updated_at?: Maybe; + uri_key: Scalars['String']['output']; + user_id: Scalars['String']['output']; +}; + +export type PublicDashboardAddInput = { + allowed_markings_ids?: InputMaybe>; + dashboard_id: Scalars['String']['input']; + description?: InputMaybe; + name: Scalars['String']['input']; +}; + +export type PublicDashboardConnection = { + __typename?: 'PublicDashboardConnection'; + edges: Array; + pageInfo: PageInfo; +}; + +export type PublicDashboardEdge = { + __typename?: 'PublicDashboardEdge'; + cursor: Scalars['String']['output']; + node: PublicDashboard; +}; + +export enum PublicDashboardsOrdering { + CreatedAt = 'created_at', + Creator = 'creator', + Name = 'name', + UpdatedAt = 'updated_at' +} + export type Query = { __typename?: 'Query'; about?: Maybe; @@ -17446,6 +17526,11 @@ export type Query = { playbooks?: Maybe; position?: Maybe; positions?: Maybe; + publicDashboard?: Maybe; + publicDashboardByUriKey?: Maybe; + publicDashboards?: Maybe; + publicStixCoreObjectsMultiTimeSeries?: Maybe>>; + publicStixCoreObjectsNumber?: Maybe; rabbitMQMetrics?: Maybe; region?: Maybe; regions?: Maybe; @@ -18774,6 +18859,42 @@ export type QueryPositionsArgs = { }; +export type QueryPublicDashboardArgs = { + id: Scalars['String']['input']; +}; + + +export type QueryPublicDashboardByUriKeyArgs = { + uri_key: Scalars['String']['input']; +}; + + +export type QueryPublicDashboardsArgs = { + after?: InputMaybe; + filters?: InputMaybe; + first?: InputMaybe; + orderBy?: InputMaybe; + orderMode?: InputMaybe; + search?: InputMaybe; +}; + + +export type QueryPublicStixCoreObjectsMultiTimeSeriesArgs = { + endDate?: InputMaybe; + startDate: Scalars['DateTime']['input']; + uriKey: Scalars['String']['input']; + widgetId: Scalars['String']['input']; +}; + + +export type QueryPublicStixCoreObjectsNumberArgs = { + endDate?: InputMaybe; + startDate?: InputMaybe; + uriKey: Scalars['String']['input']; + widgetId: Scalars['String']['input']; +}; + + export type QueryRabbitMqMetricsArgs = { prefix?: InputMaybe; }; @@ -19025,7 +19146,6 @@ export type QueryStixCoreObjectsMultiTimeSeriesArgs = { endDate?: InputMaybe; interval: Scalars['String']['input']; onlyInferred?: InputMaybe; - operation: StatsOperation; startDate: Scalars['DateTime']['input']; timeSeriesParameters?: InputMaybe>>; }; @@ -21669,7 +21789,7 @@ export type StixCoreObjectEditMutationsRestrictionOrganizationDeleteArgs = { organizationId: Scalars['ID']['input']; }; -export type StixCoreObjectOrStixCoreRelationship = AdministrativeArea | Artifact | AttackPattern | AutonomousSystem | BankAccount | Campaign | CaseIncident | CaseRfi | CaseRft | CaseTemplate | Channel | City | Country | CourseOfAction | CryptocurrencyWallet | CryptographicKey | DataComponent | DataSource | Directory | DomainName | EmailAddr | EmailMessage | EmailMimePartType | EntitySetting | Event | Feedback | Grouping | Hostname | IPv4Addr | IPv6Addr | Incident | Indicator | Individual | Infrastructure | IntrusionSet | Language | MacAddr | Malware | MalwareAnalysis | ManagerConfiguration | MediaContent | Mutex | Narrative | NetworkTraffic | Note | ObservedData | Opinion | Organization | PaymentCard | PhoneNumber | Position | Process | Region | Report | Sector | Software | StixCoreRelationship | StixFile | Task | Text | ThreatActorGroup | ThreatActorIndividual | Tool | Url | UserAccount | UserAgent | Vulnerability | WindowsRegistryKey | WindowsRegistryValueType | Workspace | X509Certificate; +export type StixCoreObjectOrStixCoreRelationship = AdministrativeArea | Artifact | AttackPattern | AutonomousSystem | BankAccount | Campaign | CaseIncident | CaseRfi | CaseRft | CaseTemplate | Channel | City | Country | CourseOfAction | CryptocurrencyWallet | CryptographicKey | DataComponent | DataSource | Directory | DomainName | EmailAddr | EmailMessage | EmailMimePartType | EntitySetting | Event | Feedback | Grouping | Hostname | IPv4Addr | IPv6Addr | Incident | Indicator | Individual | Infrastructure | IntrusionSet | Language | MacAddr | Malware | MalwareAnalysis | ManagerConfiguration | MediaContent | Mutex | Narrative | NetworkTraffic | Note | ObservedData | Opinion | Organization | PaymentCard | PhoneNumber | Position | Process | PublicDashboard | Region | Report | Sector | Software | StixCoreRelationship | StixFile | Task | Text | ThreatActorGroup | ThreatActorIndividual | Tool | Url | UserAccount | UserAgent | Vulnerability | WindowsRegistryKey | WindowsRegistryValueType | Workspace | X509Certificate; export type StixCoreObjectsDistributionParameters = { filters?: InputMaybe; @@ -22853,7 +22973,7 @@ export type StixObject = { x_opencti_stix_ids?: Maybe>>; }; -export type StixObjectOrStixRelationship = AdministrativeArea | Artifact | AttackPattern | AutonomousSystem | BankAccount | Campaign | CaseIncident | CaseRfi | CaseRft | CaseTemplate | Channel | City | Country | CourseOfAction | CryptocurrencyWallet | CryptographicKey | CsvMapper | DataComponent | DataSource | Directory | DomainName | EmailAddr | EmailMessage | EmailMimePartType | EntitySetting | Event | ExternalReference | Feedback | Grouping | Hostname | IPv4Addr | IPv6Addr | Incident | Indicator | Individual | Infrastructure | IntrusionSet | KillChainPhase | Label | Language | MacAddr | Malware | MalwareAnalysis | ManagerConfiguration | MarkingDefinition | MediaContent | Mutex | Narrative | NetworkTraffic | Note | ObservedData | Opinion | Organization | PaymentCard | PhoneNumber | Position | Process | Region | Report | Sector | Software | StixCoreRelationship | StixFile | StixRefRelationship | StixSightingRelationship | System | Task | Text | ThreatActorGroup | ThreatActorIndividual | Tool | Url | UserAccount | UserAgent | Vulnerability | WindowsRegistryKey | WindowsRegistryValueType | Workspace | X509Certificate; +export type StixObjectOrStixRelationship = AdministrativeArea | Artifact | AttackPattern | AutonomousSystem | BankAccount | Campaign | CaseIncident | CaseRfi | CaseRft | CaseTemplate | Channel | City | Country | CourseOfAction | CryptocurrencyWallet | CryptographicKey | CsvMapper | DataComponent | DataSource | Directory | DomainName | EmailAddr | EmailMessage | EmailMimePartType | EntitySetting | Event | ExternalReference | Feedback | Grouping | Hostname | IPv4Addr | IPv6Addr | Incident | Indicator | Individual | Infrastructure | IntrusionSet | KillChainPhase | Label | Language | MacAddr | Malware | MalwareAnalysis | ManagerConfiguration | MarkingDefinition | MediaContent | Mutex | Narrative | NetworkTraffic | Note | ObservedData | Opinion | Organization | PaymentCard | PhoneNumber | Position | Process | PublicDashboard | Region | Report | Sector | Software | StixCoreRelationship | StixFile | StixRefRelationship | StixSightingRelationship | System | Task | Text | ThreatActorGroup | ThreatActorIndividual | Tool | Url | UserAccount | UserAgent | Vulnerability | WindowsRegistryKey | WindowsRegistryValueType | Workspace | X509Certificate; export type StixObjectOrStixRelationshipConnection = { __typename?: 'StixObjectOrStixRelationshipConnection'; @@ -22867,7 +22987,7 @@ export type StixObjectOrStixRelationshipEdge = { node: StixObjectOrStixRelationship; }; -export type StixObjectOrStixRelationshipOrCreator = AdministrativeArea | Artifact | AttackPattern | AutonomousSystem | BankAccount | Campaign | CaseIncident | CaseRfi | CaseRft | CaseTemplate | Channel | City | Country | CourseOfAction | Creator | CryptocurrencyWallet | CryptographicKey | CsvMapper | DataComponent | DataSource | Directory | DomainName | EmailAddr | EmailMessage | EmailMimePartType | EntitySetting | Event | ExternalReference | Feedback | Group | Grouping | Hostname | IPv4Addr | IPv6Addr | Incident | Indicator | Individual | Infrastructure | IntrusionSet | KillChainPhase | Label | Language | MacAddr | Malware | MalwareAnalysis | ManagerConfiguration | MarkingDefinition | MediaContent | Mutex | Narrative | NetworkTraffic | Note | ObservedData | Opinion | Organization | PaymentCard | PhoneNumber | Position | Process | Region | Report | Sector | Software | Status | StixCoreRelationship | StixFile | StixRefRelationship | StixSightingRelationship | System | Task | Text | ThreatActorGroup | ThreatActorIndividual | Tool | Url | UserAccount | UserAgent | Vulnerability | WindowsRegistryKey | WindowsRegistryValueType | Workspace | X509Certificate; +export type StixObjectOrStixRelationshipOrCreator = AdministrativeArea | Artifact | AttackPattern | AutonomousSystem | BankAccount | Campaign | CaseIncident | CaseRfi | CaseRft | CaseTemplate | Channel | City | Country | CourseOfAction | Creator | CryptocurrencyWallet | CryptographicKey | CsvMapper | DataComponent | DataSource | Directory | DomainName | EmailAddr | EmailMessage | EmailMimePartType | EntitySetting | Event | ExternalReference | Feedback | Group | Grouping | Hostname | IPv4Addr | IPv6Addr | Incident | Indicator | Individual | Infrastructure | IntrusionSet | KillChainPhase | Label | Language | MacAddr | Malware | MalwareAnalysis | ManagerConfiguration | MarkingDefinition | MediaContent | Mutex | Narrative | NetworkTraffic | Note | ObservedData | Opinion | Organization | PaymentCard | PhoneNumber | Position | Process | PublicDashboard | Region | Report | Sector | Software | Status | StixCoreRelationship | StixFile | StixRefRelationship | StixSightingRelationship | System | Task | Text | ThreatActorGroup | ThreatActorIndividual | Tool | Url | UserAccount | UserAgent | Vulnerability | WindowsRegistryKey | WindowsRegistryValueType | Workspace | X509Certificate; export type StixObjectOrStixRelationshipRefConnection = { __typename?: 'StixObjectOrStixRelationshipRefConnection'; @@ -27588,21 +27708,21 @@ export type DirectiveResolverFn> = ResolversObject<{ EffectiveConfidenceLevelSource: ( Omit & { default_dashboard?: Maybe, members?: Maybe } ) | ( Omit & { administrated_organizations: Array, groups?: Maybe, objectOrganization?: Maybe } ); OrganizationOrIndividual: ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, organizations?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityOrganization ); - StixCoreObjectOrStixCoreRelationship: ( BasicStoreEntityAdministrativeArea ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, coursesOfAction?: Maybe, createdBy?: Maybe, dataComponents?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentAttackPatterns?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subAttackPatterns?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityCaseIncident ) | ( BasicStoreEntityCaseRfi ) | ( BasicStoreEntityCaseRft ) | ( BasicStoreEntityCaseTemplate ) | ( BasicStoreEntityChannel ) | ( Omit & { administrativeArea?: Maybe, cases?: Maybe, containers?: Maybe, country?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, region?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { attackPatterns?: Maybe, cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityDataComponent ) | ( BasicStoreEntityDataSource ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityEntitySetting ) | ( BasicStoreEntityEvent ) | ( BasicStoreEntityFeedback ) | ( BasicStoreEntityGrouping ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityIndicator ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, organizations?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, locations?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityLanguage ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityMalwareAnalysis ) | ( BasicStoreEntityManagerConfiguration ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityNarrative ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityOrganization ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, city?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, serviceDlls?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentRegions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subRegions?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentSectors?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subSectors?: Maybe, targetedOrganizations?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, vulnerabilities?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, from?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, to?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, obsContent?: Maybe, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityTask ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, locations?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityThreatActorIndividual ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, softwares?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityWorkspace ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ); - StixObjectOrStixRelationship: ( BasicStoreEntityAdministrativeArea ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, coursesOfAction?: Maybe, createdBy?: Maybe, dataComponents?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentAttackPatterns?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subAttackPatterns?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityCaseIncident ) | ( BasicStoreEntityCaseRfi ) | ( BasicStoreEntityCaseRft ) | ( BasicStoreEntityCaseTemplate ) | ( BasicStoreEntityChannel ) | ( Omit & { administrativeArea?: Maybe, cases?: Maybe, containers?: Maybe, country?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, region?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { attackPatterns?: Maybe, cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityCsvMapper ) | ( BasicStoreEntityDataComponent ) | ( BasicStoreEntityDataSource ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityEntitySetting ) | ( BasicStoreEntityEvent ) | ( ExternalReference ) | ( BasicStoreEntityFeedback ) | ( BasicStoreEntityGrouping ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityIndicator ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, organizations?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, locations?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( KillChainPhase ) | ( Label ) | ( BasicStoreEntityLanguage ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityMalwareAnalysis ) | ( BasicStoreEntityManagerConfiguration ) | ( MarkingDefinition ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityNarrative ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityOrganization ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, city?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, serviceDlls?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentRegions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subRegions?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentSectors?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subSectors?: Maybe, targetedOrganizations?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, vulnerabilities?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, from?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, to?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, obsContent?: Maybe, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, from?: Maybe, groupings?: Maybe, notes?: Maybe, opinions?: Maybe, reports?: Maybe, to?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, from?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, opinions?: Maybe, reports?: Maybe, to?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, organizations?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityTask ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, locations?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityThreatActorIndividual ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, softwares?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityWorkspace ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ); - StixObjectOrStixRelationshipOrCreator: ( BasicStoreEntityAdministrativeArea ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, coursesOfAction?: Maybe, createdBy?: Maybe, dataComponents?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentAttackPatterns?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subAttackPatterns?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityCaseIncident ) | ( BasicStoreEntityCaseRfi ) | ( BasicStoreEntityCaseRft ) | ( BasicStoreEntityCaseTemplate ) | ( BasicStoreEntityChannel ) | ( Omit & { administrativeArea?: Maybe, cases?: Maybe, containers?: Maybe, country?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, region?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { attackPatterns?: Maybe, cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Creator ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityCsvMapper ) | ( BasicStoreEntityDataComponent ) | ( BasicStoreEntityDataSource ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityEntitySetting ) | ( BasicStoreEntityEvent ) | ( ExternalReference ) | ( BasicStoreEntityFeedback ) | ( Omit & { default_dashboard?: Maybe, members?: Maybe } ) | ( BasicStoreEntityGrouping ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityIndicator ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, organizations?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, locations?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( KillChainPhase ) | ( Label ) | ( BasicStoreEntityLanguage ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityMalwareAnalysis ) | ( BasicStoreEntityManagerConfiguration ) | ( MarkingDefinition ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityNarrative ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityOrganization ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, city?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, serviceDlls?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentRegions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subRegions?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentSectors?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subSectors?: Maybe, targetedOrganizations?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, vulnerabilities?: Maybe } ) | ( Status ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, from?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, to?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, obsContent?: Maybe, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, from?: Maybe, groupings?: Maybe, notes?: Maybe, opinions?: Maybe, reports?: Maybe, to?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, from?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, opinions?: Maybe, reports?: Maybe, to?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, organizations?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityTask ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, locations?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityThreatActorIndividual ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, softwares?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityWorkspace ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ); + StixCoreObjectOrStixCoreRelationship: ( BasicStoreEntityAdministrativeArea ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, coursesOfAction?: Maybe, createdBy?: Maybe, dataComponents?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentAttackPatterns?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subAttackPatterns?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityCaseIncident ) | ( BasicStoreEntityCaseRfi ) | ( BasicStoreEntityCaseRft ) | ( BasicStoreEntityCaseTemplate ) | ( BasicStoreEntityChannel ) | ( Omit & { administrativeArea?: Maybe, cases?: Maybe, containers?: Maybe, country?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, region?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { attackPatterns?: Maybe, cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityDataComponent ) | ( BasicStoreEntityDataSource ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityEntitySetting ) | ( BasicStoreEntityEvent ) | ( BasicStoreEntityFeedback ) | ( BasicStoreEntityGrouping ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityIndicator ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, organizations?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, locations?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityLanguage ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityMalwareAnalysis ) | ( BasicStoreEntityManagerConfiguration ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityNarrative ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityOrganization ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, city?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, serviceDlls?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityPublicDashboard ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentRegions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subRegions?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentSectors?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subSectors?: Maybe, targetedOrganizations?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, vulnerabilities?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, from?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, to?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, obsContent?: Maybe, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityTask ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, locations?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityThreatActorIndividual ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, softwares?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityWorkspace ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ); + StixObjectOrStixRelationship: ( BasicStoreEntityAdministrativeArea ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, coursesOfAction?: Maybe, createdBy?: Maybe, dataComponents?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentAttackPatterns?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subAttackPatterns?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityCaseIncident ) | ( BasicStoreEntityCaseRfi ) | ( BasicStoreEntityCaseRft ) | ( BasicStoreEntityCaseTemplate ) | ( BasicStoreEntityChannel ) | ( Omit & { administrativeArea?: Maybe, cases?: Maybe, containers?: Maybe, country?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, region?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { attackPatterns?: Maybe, cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityCsvMapper ) | ( BasicStoreEntityDataComponent ) | ( BasicStoreEntityDataSource ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityEntitySetting ) | ( BasicStoreEntityEvent ) | ( ExternalReference ) | ( BasicStoreEntityFeedback ) | ( BasicStoreEntityGrouping ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityIndicator ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, organizations?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, locations?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( KillChainPhase ) | ( Label ) | ( BasicStoreEntityLanguage ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityMalwareAnalysis ) | ( BasicStoreEntityManagerConfiguration ) | ( MarkingDefinition ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityNarrative ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityOrganization ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, city?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, serviceDlls?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityPublicDashboard ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentRegions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subRegions?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentSectors?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subSectors?: Maybe, targetedOrganizations?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, vulnerabilities?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, from?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, to?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, obsContent?: Maybe, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, from?: Maybe, groupings?: Maybe, notes?: Maybe, opinions?: Maybe, reports?: Maybe, to?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, from?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, opinions?: Maybe, reports?: Maybe, to?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, organizations?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityTask ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, locations?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityThreatActorIndividual ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, softwares?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityWorkspace ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ); + StixObjectOrStixRelationshipOrCreator: ( BasicStoreEntityAdministrativeArea ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, coursesOfAction?: Maybe, createdBy?: Maybe, dataComponents?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentAttackPatterns?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subAttackPatterns?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityCaseIncident ) | ( BasicStoreEntityCaseRfi ) | ( BasicStoreEntityCaseRft ) | ( BasicStoreEntityCaseTemplate ) | ( BasicStoreEntityChannel ) | ( Omit & { administrativeArea?: Maybe, cases?: Maybe, containers?: Maybe, country?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, region?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { attackPatterns?: Maybe, cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Creator ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityCsvMapper ) | ( BasicStoreEntityDataComponent ) | ( BasicStoreEntityDataSource ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityEntitySetting ) | ( BasicStoreEntityEvent ) | ( ExternalReference ) | ( BasicStoreEntityFeedback ) | ( Omit & { default_dashboard?: Maybe, members?: Maybe } ) | ( BasicStoreEntityGrouping ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityIndicator ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, organizations?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, locations?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( KillChainPhase ) | ( Label ) | ( BasicStoreEntityLanguage ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityMalwareAnalysis ) | ( BasicStoreEntityManagerConfiguration ) | ( MarkingDefinition ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityNarrative ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityOrganization ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, city?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, serviceDlls?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityPublicDashboard ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentRegions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subRegions?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentSectors?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subSectors?: Maybe, targetedOrganizations?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, vulnerabilities?: Maybe } ) | ( Status ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, from?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, to?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, obsContent?: Maybe, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, from?: Maybe, groupings?: Maybe, notes?: Maybe, opinions?: Maybe, reports?: Maybe, to?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, from?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, opinions?: Maybe, reports?: Maybe, to?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, organizations?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityTask ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, locations?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityThreatActorIndividual ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, softwares?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityWorkspace ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ); }>; /** Mapping of interface types */ export type ResolversInterfaceTypes> = ResolversObject<{ BackgroundTask: ( ListTask ) | ( QueryTask ) | ( RuleTask ); - BasicObject: ( BasicStoreEntityAdministrativeArea ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, coursesOfAction?: Maybe, createdBy?: Maybe, dataComponents?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentAttackPatterns?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subAttackPatterns?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Capability ) | ( BasicStoreEntityCaseIncident ) | ( BasicStoreEntityCaseRfi ) | ( BasicStoreEntityCaseRft ) | ( BasicStoreEntityCaseTemplate ) | ( BasicStoreEntityChannel ) | ( Omit & { administrativeArea?: Maybe, cases?: Maybe, containers?: Maybe, country?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Connector ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, region?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { attackPatterns?: Maybe, cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityCsvMapper ) | ( BasicStoreEntityDataComponent ) | ( BasicStoreEntityDataSource ) | ( BasicStoreEntityDecayRule ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityEntitySetting ) | ( BasicStoreEntityEvent ) | ( ExternalReference ) | ( BasicStoreEntityFeedback ) | ( Omit & { default_dashboard?: Maybe, members?: Maybe } ) | ( BasicStoreEntityGrouping ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityIndicator ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, organizations?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityIngestionCsv ) | ( BasicStoreEntityIngestionRss ) | ( BasicStoreEntityIngestionTaxii ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, locations?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( KillChainPhase ) | ( Label ) | ( BasicStoreEntityLanguage ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityMalwareAnalysis ) | ( BasicStoreEntityManagerConfiguration ) | ( MarkingDefinition ) | ( Omit & { administrated_organizations: Array, default_dashboard?: Maybe, default_dashboards: Array, groups?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityNarrative ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityNotification ) | ( BasicStoreEntityNotifier ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityOrganization ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityPlaybook ) | ( Omit & { cases?: Maybe, city?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, serviceDlls?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentRegions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subRegions?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Role ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentSectors?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subSectors?: Maybe, targetedOrganizations?: Maybe } ) | ( Omit & { platform_critical_alerts: Array, platform_organization?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, vulnerabilities?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, obsContent?: Maybe, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, organizations?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityTask ) | ( TaskTemplate ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, locations?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityThreatActorIndividual ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityTrigger ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { administrated_organizations: Array, groups?: Maybe, objectOrganization?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityVocabulary ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, softwares?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityWorkspace ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ); + BasicObject: ( BasicStoreEntityAdministrativeArea ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, coursesOfAction?: Maybe, createdBy?: Maybe, dataComponents?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentAttackPatterns?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subAttackPatterns?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Capability ) | ( BasicStoreEntityCaseIncident ) | ( BasicStoreEntityCaseRfi ) | ( BasicStoreEntityCaseRft ) | ( BasicStoreEntityCaseTemplate ) | ( BasicStoreEntityChannel ) | ( Omit & { administrativeArea?: Maybe, cases?: Maybe, containers?: Maybe, country?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Connector ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, region?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { attackPatterns?: Maybe, cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityCsvMapper ) | ( BasicStoreEntityDataComponent ) | ( BasicStoreEntityDataSource ) | ( BasicStoreEntityDecayRule ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityEntitySetting ) | ( BasicStoreEntityEvent ) | ( ExternalReference ) | ( BasicStoreEntityFeedback ) | ( Omit & { default_dashboard?: Maybe, members?: Maybe } ) | ( BasicStoreEntityGrouping ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityIndicator ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, organizations?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityIngestionCsv ) | ( BasicStoreEntityIngestionRss ) | ( BasicStoreEntityIngestionTaxii ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, locations?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( KillChainPhase ) | ( Label ) | ( BasicStoreEntityLanguage ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityMalwareAnalysis ) | ( BasicStoreEntityManagerConfiguration ) | ( MarkingDefinition ) | ( Omit & { administrated_organizations: Array, default_dashboard?: Maybe, default_dashboards: Array, groups?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityNarrative ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityNotification ) | ( BasicStoreEntityNotifier ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityOrganization ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityPlaybook ) | ( Omit & { cases?: Maybe, city?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, serviceDlls?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityPublicDashboard ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentRegions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subRegions?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Role ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentSectors?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subSectors?: Maybe, targetedOrganizations?: Maybe } ) | ( Omit & { platform_critical_alerts: Array, platform_organization?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, vulnerabilities?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, obsContent?: Maybe, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, organizations?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityTask ) | ( TaskTemplate ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, locations?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityThreatActorIndividual ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityTrigger ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { administrated_organizations: Array, groups?: Maybe, objectOrganization?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityVocabulary ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, softwares?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityWorkspace ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ); BasicRelationship: ( InternalRelationship ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, from?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, to?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, from?: Maybe, groupings?: Maybe, notes?: Maybe, opinions?: Maybe, reports?: Maybe, to?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, from?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, opinions?: Maybe, reports?: Maybe, to?: Maybe } ); Case: ( BasicStoreEntityCaseIncident ) | ( BasicStoreEntityCaseRfi ) | ( BasicStoreEntityCaseRft ) | ( BasicStoreEntityFeedback ); Container: ( BasicStoreEntityCaseIncident ) | ( BasicStoreEntityCaseRfi ) | ( BasicStoreEntityCaseRft ) | ( BasicStoreEntityFeedback ) | ( BasicStoreEntityGrouping ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityTask ); HashedObservable: ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, obsContent?: Maybe, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ); Identity: ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, organizations?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityOrganization ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentSectors?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subSectors?: Maybe, targetedOrganizations?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, organizations?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ); - InternalObject: ( Capability ) | ( BasicStoreEntityCaseTemplate ) | ( Connector ) | ( BasicStoreEntityCsvMapper ) | ( BasicStoreEntityDecayRule ) | ( BasicStoreEntityEntitySetting ) | ( Omit & { default_dashboard?: Maybe, members?: Maybe } ) | ( BasicStoreEntityIngestionCsv ) | ( BasicStoreEntityIngestionRss ) | ( BasicStoreEntityIngestionTaxii ) | ( BasicStoreEntityManagerConfiguration ) | ( Omit & { administrated_organizations: Array, default_dashboard?: Maybe, default_dashboards: Array, groups?: Maybe } ) | ( BasicStoreEntityNotification ) | ( BasicStoreEntityNotifier ) | ( BasicStoreEntityPlaybook ) | ( Role ) | ( Omit & { platform_critical_alerts: Array, platform_organization?: Maybe } ) | ( TaskTemplate ) | ( BasicStoreEntityTrigger ) | ( Omit & { administrated_organizations: Array, groups?: Maybe, objectOrganization?: Maybe } ) | ( BasicStoreEntityWorkspace ); + InternalObject: ( Capability ) | ( BasicStoreEntityCaseTemplate ) | ( Connector ) | ( BasicStoreEntityCsvMapper ) | ( BasicStoreEntityDecayRule ) | ( BasicStoreEntityEntitySetting ) | ( Omit & { default_dashboard?: Maybe, members?: Maybe } ) | ( BasicStoreEntityIngestionCsv ) | ( BasicStoreEntityIngestionRss ) | ( BasicStoreEntityIngestionTaxii ) | ( BasicStoreEntityManagerConfiguration ) | ( Omit & { administrated_organizations: Array, default_dashboard?: Maybe, default_dashboards: Array, groups?: Maybe } ) | ( BasicStoreEntityNotification ) | ( BasicStoreEntityNotifier ) | ( BasicStoreEntityPlaybook ) | ( BasicStoreEntityPublicDashboard ) | ( Role ) | ( Omit & { platform_critical_alerts: Array, platform_organization?: Maybe } ) | ( TaskTemplate ) | ( BasicStoreEntityTrigger ) | ( Omit & { administrated_organizations: Array, groups?: Maybe, objectOrganization?: Maybe } ) | ( BasicStoreEntityWorkspace ); Location: ( BasicStoreEntityAdministrativeArea ) | ( Omit & { administrativeArea?: Maybe, cases?: Maybe, containers?: Maybe, country?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, region?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, city?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentRegions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subRegions?: Maybe } ); StixCoreObject: ( BasicStoreEntityAdministrativeArea ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, coursesOfAction?: Maybe, createdBy?: Maybe, dataComponents?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentAttackPatterns?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subAttackPatterns?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityCaseIncident ) | ( BasicStoreEntityCaseRfi ) | ( BasicStoreEntityCaseRft ) | ( BasicStoreEntityChannel ) | ( Omit & { administrativeArea?: Maybe, cases?: Maybe, containers?: Maybe, country?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, region?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { attackPatterns?: Maybe, cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityDataComponent ) | ( BasicStoreEntityDataSource ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityEvent ) | ( BasicStoreEntityFeedback ) | ( BasicStoreEntityGrouping ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityIndicator ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, organizations?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, locations?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityLanguage ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityMalwareAnalysis ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityNarrative ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityOrganization ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, city?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, serviceDlls?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentRegions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subRegions?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, relatedContainers?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, parentSectors?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, subSectors?: Maybe, targetedOrganizations?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, vulnerabilities?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, obsContent?: Maybe, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, organizations?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityTask ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, locations?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( BasicStoreEntityThreatActorIndividual ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, softwares?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ); StixCyberObservable: ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, countries?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, serviceDlls?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe, vulnerabilities?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, obsContent?: Maybe, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ) | ( Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, stixCoreRelationships?: Maybe } ); @@ -28001,6 +28121,7 @@ export type ResolversTypes = ResolversObject<{ MarkingDefinitionConnection: ResolverTypeWrapper; MarkingDefinitionEdge: ResolverTypeWrapper; MarkingDefinitionEditMutations: ResolverTypeWrapper; + MarkingDefinitionShort: ResolverTypeWrapper; MarkingDefinitionsOrdering: MarkingDefinitionsOrdering; MeOrganization: ResolverTypeWrapper; MeOrganizationConnection: ResolverTypeWrapper; @@ -28112,6 +28233,11 @@ export type ResolversTypes = ResolversObject<{ Process: ResolverTypeWrapper & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, serviceDlls?: Maybe, stixCoreRelationships?: Maybe }>; ProcessAddInput: ProcessAddInput; Provider: ResolverTypeWrapper; + PublicDashboard: ResolverTypeWrapper; + PublicDashboardAddInput: PublicDashboardAddInput; + PublicDashboardConnection: ResolverTypeWrapper & { edges: Array }>; + PublicDashboardEdge: ResolverTypeWrapper & { node: ResolversTypes['PublicDashboard'] }>; + PublicDashboardsOrdering: PublicDashboardsOrdering; Query: ResolverTypeWrapper<{}>; QueryTask: ResolverTypeWrapper; QueryTaskAddInput: QueryTaskAddInput; @@ -28715,6 +28841,7 @@ export type ResolversParentTypes = ResolversObject<{ MarkingDefinitionConnection: MarkingDefinitionConnection; MarkingDefinitionEdge: MarkingDefinitionEdge; MarkingDefinitionEditMutations: MarkingDefinitionEditMutations; + MarkingDefinitionShort: MarkingDefinitionShort; MeOrganization: MeOrganization; MeOrganizationConnection: MeOrganizationConnection; MeOrganizationEdge: MeOrganizationEdge; @@ -28812,6 +28939,10 @@ export type ResolversParentTypes = ResolversObject<{ Process: Omit & { cases?: Maybe, containers?: Maybe, createdBy?: Maybe, groupings?: Maybe, indicators?: Maybe, notes?: Maybe, objectOrganization?: Maybe>, observedData?: Maybe, opinions?: Maybe, reports?: Maybe, serviceDlls?: Maybe, stixCoreRelationships?: Maybe }; ProcessAddInput: ProcessAddInput; Provider: Provider; + PublicDashboard: BasicStoreEntityPublicDashboard; + PublicDashboardAddInput: PublicDashboardAddInput; + PublicDashboardConnection: Omit & { edges: Array }; + PublicDashboardEdge: Omit & { node: ResolversParentTypes['PublicDashboard'] }; Query: {}; QueryTask: QueryTask; QueryTaskAddInput: QueryTaskAddInput; @@ -29535,7 +29666,7 @@ export type BankAccountResolvers; export type BasicObjectResolvers = ResolversObject<{ - __resolveType: TypeResolveFn<'AdministrativeArea' | 'Artifact' | 'AttackPattern' | 'AutonomousSystem' | 'BankAccount' | 'Campaign' | 'Capability' | 'CaseIncident' | 'CaseRfi' | 'CaseRft' | 'CaseTemplate' | 'Channel' | 'City' | 'Connector' | 'Country' | 'CourseOfAction' | 'CryptocurrencyWallet' | 'CryptographicKey' | 'CsvMapper' | 'DataComponent' | 'DataSource' | 'DecayRule' | 'Directory' | 'DomainName' | 'EmailAddr' | 'EmailMessage' | 'EmailMimePartType' | 'EntitySetting' | 'Event' | 'ExternalReference' | 'Feedback' | 'Group' | 'Grouping' | 'Hostname' | 'IPv4Addr' | 'IPv6Addr' | 'Incident' | 'Indicator' | 'Individual' | 'Infrastructure' | 'IngestionCsv' | 'IngestionRss' | 'IngestionTaxii' | 'IntrusionSet' | 'KillChainPhase' | 'Label' | 'Language' | 'MacAddr' | 'Malware' | 'MalwareAnalysis' | 'ManagerConfiguration' | 'MarkingDefinition' | 'MeUser' | 'MediaContent' | 'Mutex' | 'Narrative' | 'NetworkTraffic' | 'Note' | 'Notification' | 'Notifier' | 'ObservedData' | 'Opinion' | 'Organization' | 'PaymentCard' | 'PhoneNumber' | 'Playbook' | 'Position' | 'Process' | 'Region' | 'Report' | 'Role' | 'Sector' | 'Settings' | 'Software' | 'StixFile' | 'System' | 'Task' | 'TaskTemplate' | 'Text' | 'ThreatActorGroup' | 'ThreatActorIndividual' | 'Tool' | 'Trigger' | 'Url' | 'User' | 'UserAccount' | 'UserAgent' | 'Vocabulary' | 'Vulnerability' | 'WindowsRegistryKey' | 'WindowsRegistryValueType' | 'Workspace' | 'X509Certificate', ParentType, ContextType>; + __resolveType: TypeResolveFn<'AdministrativeArea' | 'Artifact' | 'AttackPattern' | 'AutonomousSystem' | 'BankAccount' | 'Campaign' | 'Capability' | 'CaseIncident' | 'CaseRfi' | 'CaseRft' | 'CaseTemplate' | 'Channel' | 'City' | 'Connector' | 'Country' | 'CourseOfAction' | 'CryptocurrencyWallet' | 'CryptographicKey' | 'CsvMapper' | 'DataComponent' | 'DataSource' | 'DecayRule' | 'Directory' | 'DomainName' | 'EmailAddr' | 'EmailMessage' | 'EmailMimePartType' | 'EntitySetting' | 'Event' | 'ExternalReference' | 'Feedback' | 'Group' | 'Grouping' | 'Hostname' | 'IPv4Addr' | 'IPv6Addr' | 'Incident' | 'Indicator' | 'Individual' | 'Infrastructure' | 'IngestionCsv' | 'IngestionRss' | 'IngestionTaxii' | 'IntrusionSet' | 'KillChainPhase' | 'Label' | 'Language' | 'MacAddr' | 'Malware' | 'MalwareAnalysis' | 'ManagerConfiguration' | 'MarkingDefinition' | 'MeUser' | 'MediaContent' | 'Mutex' | 'Narrative' | 'NetworkTraffic' | 'Note' | 'Notification' | 'Notifier' | 'ObservedData' | 'Opinion' | 'Organization' | 'PaymentCard' | 'PhoneNumber' | 'Playbook' | 'Position' | 'Process' | 'PublicDashboard' | 'Region' | 'Report' | 'Role' | 'Sector' | 'Settings' | 'Software' | 'StixFile' | 'System' | 'Task' | 'TaskTemplate' | 'Text' | 'ThreatActorGroup' | 'ThreatActorIndividual' | 'Tool' | 'Trigger' | 'Url' | 'User' | 'UserAccount' | 'UserAgent' | 'Vocabulary' | 'Vulnerability' | 'WindowsRegistryKey' | 'WindowsRegistryValueType' | 'Workspace' | 'X509Certificate', ParentType, ContextType>; entity_type?: Resolver; id?: Resolver; parent_types?: Resolver>, ParentType, ContextType>; @@ -32329,7 +32460,7 @@ export type IngestionTaxiiEdgeResolvers; export type InternalObjectResolvers = ResolversObject<{ - __resolveType: TypeResolveFn<'Capability' | 'CaseTemplate' | 'Connector' | 'CsvMapper' | 'DecayRule' | 'EntitySetting' | 'Group' | 'IngestionCsv' | 'IngestionRss' | 'IngestionTaxii' | 'ManagerConfiguration' | 'MeUser' | 'Notification' | 'Notifier' | 'Playbook' | 'Role' | 'Settings' | 'TaskTemplate' | 'Trigger' | 'User' | 'Workspace', ParentType, ContextType>; + __resolveType: TypeResolveFn<'Capability' | 'CaseTemplate' | 'Connector' | 'CsvMapper' | 'DecayRule' | 'EntitySetting' | 'Group' | 'IngestionCsv' | 'IngestionRss' | 'IngestionTaxii' | 'ManagerConfiguration' | 'MeUser' | 'Notification' | 'Notifier' | 'Playbook' | 'PublicDashboard' | 'Role' | 'Settings' | 'TaskTemplate' | 'Trigger' | 'User' | 'Workspace', ParentType, ContextType>; entity_type?: Resolver; id?: Resolver; }>; @@ -32982,6 +33113,18 @@ export type MarkingDefinitionEditMutationsResolvers; }>; +export type MarkingDefinitionShortResolvers = ResolversObject<{ + definition?: Resolver, ParentType, ContextType>; + definition_type?: Resolver, ParentType, ContextType>; + entity_type?: Resolver; + id?: Resolver; + representative?: Resolver, ParentType, ContextType>; + standard_id?: Resolver; + x_opencti_color?: Resolver, ParentType, ContextType>; + x_opencti_order?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}>; + export type MeOrganizationResolvers = ResolversObject<{ id?: Resolver; name?: Resolver; @@ -33360,6 +33503,9 @@ export type MutationResolvers, ParentType, ContextType, RequireFields>; positionAdd?: Resolver, ParentType, ContextType, RequireFields>; positionEdit?: Resolver, ParentType, ContextType, RequireFields>; + publicDashboardAdd?: Resolver, ParentType, ContextType, RequireFields>; + publicDashboardDelete?: Resolver, ParentType, ContextType, RequireFields>; + publicDashboardFieldPatch?: Resolver, ParentType, ContextType, RequireFields>; queryTaskAdd?: Resolver>; regionAdd?: Resolver, ParentType, ContextType, RequireFields>; regionEdit?: Resolver, ParentType, ContextType, RequireFields>; @@ -34444,6 +34590,39 @@ export type ProviderResolvers; }>; +export type PublicDashboardResolvers = ResolversObject<{ + allowed_markings?: Resolver>, ParentType, ContextType>; + allowed_markings_ids?: Resolver>, ParentType, ContextType>; + authorized_members?: Resolver>, ParentType, ContextType>; + created_at?: Resolver, ParentType, ContextType>; + dashboard_id?: Resolver, ParentType, ContextType>; + description?: Resolver, ParentType, ContextType>; + editContext?: Resolver>, ParentType, ContextType>; + entity_type?: Resolver; + id?: Resolver; + name?: Resolver; + parent_types?: Resolver, ParentType, ContextType>; + private_manifest?: Resolver, ParentType, ContextType>; + public_manifest?: Resolver, ParentType, ContextType>; + standard_id?: Resolver; + updated_at?: Resolver, ParentType, ContextType>; + uri_key?: Resolver; + user_id?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type PublicDashboardConnectionResolvers = ResolversObject<{ + edges?: Resolver, ParentType, ContextType>; + pageInfo?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}>; + +export type PublicDashboardEdgeResolvers = ResolversObject<{ + cursor?: Resolver; + node?: Resolver; + __isTypeOf?: IsTypeOfResolverFn; +}>; + export type QueryResolvers = ResolversObject<{ about?: Resolver, ParentType, ContextType>; administrativeArea?: Resolver, ParentType, ContextType, RequireFields>; @@ -34616,6 +34795,11 @@ export type QueryResolvers, ParentType, ContextType, Partial>; position?: Resolver, ParentType, ContextType, RequireFields>; positions?: Resolver, ParentType, ContextType, Partial>; + publicDashboard?: Resolver, ParentType, ContextType, RequireFields>; + publicDashboardByUriKey?: Resolver, ParentType, ContextType, RequireFields>; + publicDashboards?: Resolver, ParentType, ContextType, Partial>; + publicStixCoreObjectsMultiTimeSeries?: Resolver>>, ParentType, ContextType, RequireFields>; + publicStixCoreObjectsNumber?: Resolver, ParentType, ContextType, RequireFields>; rabbitMQMetrics?: Resolver, ParentType, ContextType, Partial>; region?: Resolver, ParentType, ContextType, RequireFields>; regions?: Resolver, ParentType, ContextType, Partial>; @@ -34653,7 +34837,7 @@ export type QueryResolvers, ParentType, ContextType, RequireFields>; stixCoreObjectsMultiDistribution?: Resolver>>, ParentType, ContextType, RequireFields>; stixCoreObjectsMultiNumber?: Resolver>>, ParentType, ContextType, Partial>; - stixCoreObjectsMultiTimeSeries?: Resolver>>, ParentType, ContextType, RequireFields>; + stixCoreObjectsMultiTimeSeries?: Resolver>>, ParentType, ContextType, RequireFields>; stixCoreObjectsNumber?: Resolver, ParentType, ContextType, Partial>; stixCoreObjectsTimeSeries?: Resolver>>, ParentType, ContextType, RequireFields>; stixCoreRelationship?: Resolver, ParentType, ContextType, Partial>; @@ -35467,7 +35651,7 @@ export type StixCoreObjectEditMutationsResolvers; export type StixCoreObjectOrStixCoreRelationshipResolvers = ResolversObject<{ - __resolveType: TypeResolveFn<'AdministrativeArea' | 'Artifact' | 'AttackPattern' | 'AutonomousSystem' | 'BankAccount' | 'Campaign' | 'CaseIncident' | 'CaseRfi' | 'CaseRft' | 'CaseTemplate' | 'Channel' | 'City' | 'Country' | 'CourseOfAction' | 'CryptocurrencyWallet' | 'CryptographicKey' | 'DataComponent' | 'DataSource' | 'Directory' | 'DomainName' | 'EmailAddr' | 'EmailMessage' | 'EmailMimePartType' | 'EntitySetting' | 'Event' | 'Feedback' | 'Grouping' | 'Hostname' | 'IPv4Addr' | 'IPv6Addr' | 'Incident' | 'Indicator' | 'Individual' | 'Infrastructure' | 'IntrusionSet' | 'Language' | 'MacAddr' | 'Malware' | 'MalwareAnalysis' | 'ManagerConfiguration' | 'MediaContent' | 'Mutex' | 'Narrative' | 'NetworkTraffic' | 'Note' | 'ObservedData' | 'Opinion' | 'Organization' | 'PaymentCard' | 'PhoneNumber' | 'Position' | 'Process' | 'Region' | 'Report' | 'Sector' | 'Software' | 'StixCoreRelationship' | 'StixFile' | 'Task' | 'Text' | 'ThreatActorGroup' | 'ThreatActorIndividual' | 'Tool' | 'Url' | 'UserAccount' | 'UserAgent' | 'Vulnerability' | 'WindowsRegistryKey' | 'WindowsRegistryValueType' | 'Workspace' | 'X509Certificate', ParentType, ContextType>; + __resolveType: TypeResolveFn<'AdministrativeArea' | 'Artifact' | 'AttackPattern' | 'AutonomousSystem' | 'BankAccount' | 'Campaign' | 'CaseIncident' | 'CaseRfi' | 'CaseRft' | 'CaseTemplate' | 'Channel' | 'City' | 'Country' | 'CourseOfAction' | 'CryptocurrencyWallet' | 'CryptographicKey' | 'DataComponent' | 'DataSource' | 'Directory' | 'DomainName' | 'EmailAddr' | 'EmailMessage' | 'EmailMimePartType' | 'EntitySetting' | 'Event' | 'Feedback' | 'Grouping' | 'Hostname' | 'IPv4Addr' | 'IPv6Addr' | 'Incident' | 'Indicator' | 'Individual' | 'Infrastructure' | 'IntrusionSet' | 'Language' | 'MacAddr' | 'Malware' | 'MalwareAnalysis' | 'ManagerConfiguration' | 'MediaContent' | 'Mutex' | 'Narrative' | 'NetworkTraffic' | 'Note' | 'ObservedData' | 'Opinion' | 'Organization' | 'PaymentCard' | 'PhoneNumber' | 'Position' | 'Process' | 'PublicDashboard' | 'Region' | 'Report' | 'Sector' | 'Software' | 'StixCoreRelationship' | 'StixFile' | 'Task' | 'Text' | 'ThreatActorGroup' | 'ThreatActorIndividual' | 'Tool' | 'Url' | 'UserAccount' | 'UserAgent' | 'Vulnerability' | 'WindowsRegistryKey' | 'WindowsRegistryValueType' | 'Workspace' | 'X509Certificate', ParentType, ContextType>; }>; export type StixCoreRelationshipResolvers = ResolversObject<{ @@ -35815,7 +35999,7 @@ export type StixObjectResolvers; export type StixObjectOrStixRelationshipResolvers = ResolversObject<{ - __resolveType: TypeResolveFn<'AdministrativeArea' | 'Artifact' | 'AttackPattern' | 'AutonomousSystem' | 'BankAccount' | 'Campaign' | 'CaseIncident' | 'CaseRfi' | 'CaseRft' | 'CaseTemplate' | 'Channel' | 'City' | 'Country' | 'CourseOfAction' | 'CryptocurrencyWallet' | 'CryptographicKey' | 'CsvMapper' | 'DataComponent' | 'DataSource' | 'Directory' | 'DomainName' | 'EmailAddr' | 'EmailMessage' | 'EmailMimePartType' | 'EntitySetting' | 'Event' | 'ExternalReference' | 'Feedback' | 'Grouping' | 'Hostname' | 'IPv4Addr' | 'IPv6Addr' | 'Incident' | 'Indicator' | 'Individual' | 'Infrastructure' | 'IntrusionSet' | 'KillChainPhase' | 'Label' | 'Language' | 'MacAddr' | 'Malware' | 'MalwareAnalysis' | 'ManagerConfiguration' | 'MarkingDefinition' | 'MediaContent' | 'Mutex' | 'Narrative' | 'NetworkTraffic' | 'Note' | 'ObservedData' | 'Opinion' | 'Organization' | 'PaymentCard' | 'PhoneNumber' | 'Position' | 'Process' | 'Region' | 'Report' | 'Sector' | 'Software' | 'StixCoreRelationship' | 'StixFile' | 'StixRefRelationship' | 'StixSightingRelationship' | 'System' | 'Task' | 'Text' | 'ThreatActorGroup' | 'ThreatActorIndividual' | 'Tool' | 'Url' | 'UserAccount' | 'UserAgent' | 'Vulnerability' | 'WindowsRegistryKey' | 'WindowsRegistryValueType' | 'Workspace' | 'X509Certificate', ParentType, ContextType>; + __resolveType: TypeResolveFn<'AdministrativeArea' | 'Artifact' | 'AttackPattern' | 'AutonomousSystem' | 'BankAccount' | 'Campaign' | 'CaseIncident' | 'CaseRfi' | 'CaseRft' | 'CaseTemplate' | 'Channel' | 'City' | 'Country' | 'CourseOfAction' | 'CryptocurrencyWallet' | 'CryptographicKey' | 'CsvMapper' | 'DataComponent' | 'DataSource' | 'Directory' | 'DomainName' | 'EmailAddr' | 'EmailMessage' | 'EmailMimePartType' | 'EntitySetting' | 'Event' | 'ExternalReference' | 'Feedback' | 'Grouping' | 'Hostname' | 'IPv4Addr' | 'IPv6Addr' | 'Incident' | 'Indicator' | 'Individual' | 'Infrastructure' | 'IntrusionSet' | 'KillChainPhase' | 'Label' | 'Language' | 'MacAddr' | 'Malware' | 'MalwareAnalysis' | 'ManagerConfiguration' | 'MarkingDefinition' | 'MediaContent' | 'Mutex' | 'Narrative' | 'NetworkTraffic' | 'Note' | 'ObservedData' | 'Opinion' | 'Organization' | 'PaymentCard' | 'PhoneNumber' | 'Position' | 'Process' | 'PublicDashboard' | 'Region' | 'Report' | 'Sector' | 'Software' | 'StixCoreRelationship' | 'StixFile' | 'StixRefRelationship' | 'StixSightingRelationship' | 'System' | 'Task' | 'Text' | 'ThreatActorGroup' | 'ThreatActorIndividual' | 'Tool' | 'Url' | 'UserAccount' | 'UserAgent' | 'Vulnerability' | 'WindowsRegistryKey' | 'WindowsRegistryValueType' | 'Workspace' | 'X509Certificate', ParentType, ContextType>; }>; export type StixObjectOrStixRelationshipConnectionResolvers = ResolversObject<{ @@ -35831,7 +36015,7 @@ export type StixObjectOrStixRelationshipEdgeResolvers; export type StixObjectOrStixRelationshipOrCreatorResolvers = ResolversObject<{ - __resolveType: TypeResolveFn<'AdministrativeArea' | 'Artifact' | 'AttackPattern' | 'AutonomousSystem' | 'BankAccount' | 'Campaign' | 'CaseIncident' | 'CaseRfi' | 'CaseRft' | 'CaseTemplate' | 'Channel' | 'City' | 'Country' | 'CourseOfAction' | 'Creator' | 'CryptocurrencyWallet' | 'CryptographicKey' | 'CsvMapper' | 'DataComponent' | 'DataSource' | 'Directory' | 'DomainName' | 'EmailAddr' | 'EmailMessage' | 'EmailMimePartType' | 'EntitySetting' | 'Event' | 'ExternalReference' | 'Feedback' | 'Group' | 'Grouping' | 'Hostname' | 'IPv4Addr' | 'IPv6Addr' | 'Incident' | 'Indicator' | 'Individual' | 'Infrastructure' | 'IntrusionSet' | 'KillChainPhase' | 'Label' | 'Language' | 'MacAddr' | 'Malware' | 'MalwareAnalysis' | 'ManagerConfiguration' | 'MarkingDefinition' | 'MediaContent' | 'Mutex' | 'Narrative' | 'NetworkTraffic' | 'Note' | 'ObservedData' | 'Opinion' | 'Organization' | 'PaymentCard' | 'PhoneNumber' | 'Position' | 'Process' | 'Region' | 'Report' | 'Sector' | 'Software' | 'Status' | 'StixCoreRelationship' | 'StixFile' | 'StixRefRelationship' | 'StixSightingRelationship' | 'System' | 'Task' | 'Text' | 'ThreatActorGroup' | 'ThreatActorIndividual' | 'Tool' | 'Url' | 'UserAccount' | 'UserAgent' | 'Vulnerability' | 'WindowsRegistryKey' | 'WindowsRegistryValueType' | 'Workspace' | 'X509Certificate', ParentType, ContextType>; + __resolveType: TypeResolveFn<'AdministrativeArea' | 'Artifact' | 'AttackPattern' | 'AutonomousSystem' | 'BankAccount' | 'Campaign' | 'CaseIncident' | 'CaseRfi' | 'CaseRft' | 'CaseTemplate' | 'Channel' | 'City' | 'Country' | 'CourseOfAction' | 'Creator' | 'CryptocurrencyWallet' | 'CryptographicKey' | 'CsvMapper' | 'DataComponent' | 'DataSource' | 'Directory' | 'DomainName' | 'EmailAddr' | 'EmailMessage' | 'EmailMimePartType' | 'EntitySetting' | 'Event' | 'ExternalReference' | 'Feedback' | 'Group' | 'Grouping' | 'Hostname' | 'IPv4Addr' | 'IPv6Addr' | 'Incident' | 'Indicator' | 'Individual' | 'Infrastructure' | 'IntrusionSet' | 'KillChainPhase' | 'Label' | 'Language' | 'MacAddr' | 'Malware' | 'MalwareAnalysis' | 'ManagerConfiguration' | 'MarkingDefinition' | 'MediaContent' | 'Mutex' | 'Narrative' | 'NetworkTraffic' | 'Note' | 'ObservedData' | 'Opinion' | 'Organization' | 'PaymentCard' | 'PhoneNumber' | 'Position' | 'Process' | 'PublicDashboard' | 'Region' | 'Report' | 'Sector' | 'Software' | 'Status' | 'StixCoreRelationship' | 'StixFile' | 'StixRefRelationship' | 'StixSightingRelationship' | 'System' | 'Task' | 'Text' | 'ThreatActorGroup' | 'ThreatActorIndividual' | 'Tool' | 'Url' | 'UserAccount' | 'UserAgent' | 'Vulnerability' | 'WindowsRegistryKey' | 'WindowsRegistryValueType' | 'Workspace' | 'X509Certificate', ParentType, ContextType>; }>; export type StixObjectOrStixRelationshipRefConnectionResolvers = ResolversObject<{ @@ -37649,6 +37833,7 @@ export type Resolvers = ResolversObject<{ MarkingDefinitionConnection?: MarkingDefinitionConnectionResolvers; MarkingDefinitionEdge?: MarkingDefinitionEdgeResolvers; MarkingDefinitionEditMutations?: MarkingDefinitionEditMutationsResolvers; + MarkingDefinitionShort?: MarkingDefinitionShortResolvers; MeOrganization?: MeOrganizationResolvers; MeOrganizationConnection?: MeOrganizationConnectionResolvers; MeOrganizationEdge?: MeOrganizationEdgeResolvers; @@ -37724,6 +37909,9 @@ export type Resolvers = ResolversObject<{ PositionEditMutations?: PositionEditMutationsResolvers; Process?: ProcessResolvers; Provider?: ProviderResolvers; + PublicDashboard?: PublicDashboardResolvers; + PublicDashboardConnection?: PublicDashboardConnectionResolvers; + PublicDashboardEdge?: PublicDashboardEdgeResolvers; Query?: QueryResolvers; QueryTask?: QueryTaskResolvers; QueueArguments?: QueueArgumentsResolvers; diff --git a/opencti-platform/opencti-graphql/src/manager/cacheManager.ts b/opencti-platform/opencti-graphql/src/manager/cacheManager.ts index 9c56fce5e73fd..37b10cfe6a0d8 100644 --- a/opencti-platform/opencti-graphql/src/manager/cacheManager.ts +++ b/opencti-platform/opencti-graphql/src/manager/cacheManager.ts @@ -38,8 +38,10 @@ import { ENTITY_TYPE_MANAGER_CONFIGURATION } from '../modules/managerConfigurati import type { BasicStoreEntityPlaybook, ComponentDefinition } from '../modules/playbook/playbook-types'; import { ENTITY_TYPE_PLAYBOOK } from '../modules/playbook/playbook-types'; import { ENTITY_TYPE_DECAY_RULE } from '../modules/decayRule/decayRule-types'; -import { isNotEmptyField } from '../database/utils'; +import { fromBase64, isNotEmptyField } from '../database/utils'; import { findAllPlaybooks } from '../modules/playbook/playbook-domain'; +import { type BasicStoreEntityPublicDashboard, ENTITY_TYPE_PUBLIC_DASHBOARD, type PublicDashboardCached } from '../modules/publicDashboard/publicDashboard-types'; +import { getAllowedMarkings } from '../modules/publicDashboard/publicDashboard-domain'; const workflowStatuses = (context: AuthContext) => { const reloadStatuses = async () => { @@ -187,6 +189,30 @@ const platformNotifiers = (context: AuthContext) => { }; return { values: null, fn: reloadNotifiers }; }; +const platformPublicDashboards = (context: AuthContext) => { + const reloadPublicDashboards = async () => { + const publicDashboards = await listAllEntities(context, SYSTEM_USER, [ENTITY_TYPE_PUBLIC_DASHBOARD], { connectionFormat: false }); + const publicDashboardsForCache: PublicDashboardCached[] = []; + for (let i = 0; i < publicDashboards.length; i += 1) { + const dash = publicDashboards[i]; + const markings = await getAllowedMarkings(context, SYSTEM_USER, dash); + publicDashboardsForCache.push( + { + id: dash.id, + internal_id: dash.internal_id, + uri_key: dash.uri_key, + dashboard_id: dash.dashboard_id, + private_manifest: JSON.parse(fromBase64(dash.private_manifest) ?? ''), + user_id: dash.user_id, + allowed_markings_ids: dash.allowed_markings_ids, + allowed_markings: markings, + } + ); + } + return publicDashboardsForCache; + }; + return { values: null, fn: reloadPublicDashboards }; +}; const initCacheManager = () => { let subscribeIdentifier: { topic: string; unsubscribe: () => void; }; @@ -207,6 +233,7 @@ const initCacheManager = () => { writeCacheForEntity(ENTITY_TYPE_RESOLVED_FILTERS, platformResolvedFilters(context)); writeCacheForEntity(ENTITY_TYPE_STREAM_COLLECTION, platformStreams(context)); writeCacheForEntity(ENTITY_TYPE_NOTIFIER, platformNotifiers(context)); + writeCacheForEntity(ENTITY_TYPE_PUBLIC_DASHBOARD, platformPublicDashboards(context)); }; const resetCacheContent = async (event: { instance: StoreEntity | StoreRelation }) => { const { instance } = event; diff --git a/opencti-platform/opencti-graphql/src/migrations/1704893567321-capability-publish-knowledge.js b/opencti-platform/opencti-graphql/src/migrations/1704893567321-capability-publish-knowledge.js new file mode 100644 index 0000000000000..563bcf6646f27 --- /dev/null +++ b/opencti-platform/opencti-graphql/src/migrations/1704893567321-capability-publish-knowledge.js @@ -0,0 +1,16 @@ +import { executionContext, SYSTEM_USER } from '../utils/access'; +import { addCapability } from '../domain/grant'; + +export const up = async (next) => { + const context = executionContext('migration'); + await addCapability(context, SYSTEM_USER, { + name: 'EXPLORE_EXUPDATE_PUBLISH', + description: 'Publish exploration', + attribute_order: 1300 + }); + next(); +}; + +export const down = async (next) => { + next(); +}; diff --git a/opencti-platform/opencti-graphql/src/modules/index.ts b/opencti-platform/opencti-graphql/src/modules/index.ts index 03c503e49365e..7a0c34694e459 100644 --- a/opencti-platform/opencti-graphql/src/modules/index.ts +++ b/opencti-platform/opencti-graphql/src/modules/index.ts @@ -58,6 +58,7 @@ import './decayRule/decayRule'; import './organization/organization'; import './internal/csvMapper/csvMapper'; import './internal/document/document'; +import './publicDashboard/publicDashboard'; // endregion // region graphql registration @@ -93,6 +94,7 @@ import './indicator/indicator-graphql'; import './decayRule/decayRule-graphql'; import './organization/organization-graphql'; import './internal/csvMapper/csvMapper-graphql'; +import './publicDashboard/publicDashboard-graphql'; import './ai/ai-graphql'; // import './internal/document/document-graphql'; # Not needed as document is not fully registered // endregion diff --git a/opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard-converter.ts b/opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard-converter.ts new file mode 100644 index 0000000000000..3398f35c228ef --- /dev/null +++ b/opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard-converter.ts @@ -0,0 +1,27 @@ +import { STIX_EXT_OCTI } from '../../types/stix-extensions'; +import { buildStixDomain, cleanObject } from '../../database/stix-converter'; +import type { StixPublicDashboard, StoreEntityPublicDashboard } from './publicDashboard-types'; + +const convertPublicDashboardToStix = (instance: StoreEntityPublicDashboard): StixPublicDashboard => { + const stixDomainObject = buildStixDomain(instance); + return { + ...stixDomainObject, + name: instance.name, + description: instance.description, + dashboard_id: instance.dashboard_id, + user_id: instance.user_id, + public_manifest: instance.public_manifest, + private_manifest: instance.private_manifest, + uri_key: instance.uri_key, + allowed_markings_ids: instance.allowed_markings_ids, + allowed_markings: instance.allowed_markings, + extensions: { + [STIX_EXT_OCTI]: cleanObject({ + ...stixDomainObject.extensions[STIX_EXT_OCTI], + extension_type: 'new-sdo', + }) + } + }; +}; + +export default convertPublicDashboardToStix; diff --git a/opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard-domain.ts b/opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard-domain.ts new file mode 100644 index 0000000000000..09d644bdb0a12 --- /dev/null +++ b/opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard-domain.ts @@ -0,0 +1,248 @@ +import { v4 as uuidv4 } from 'uuid'; +import type { AuthContext, AuthUser } from '../../types/user'; +import { internalLoadById, listEntitiesPaginated, storeLoadById } from '../../database/middleware-loader'; +import { ENTITY_TYPE_PUBLIC_DASHBOARD, type BasicStoreEntityPublicDashboard, type PublicDashboardCached } from './publicDashboard-types'; +import { createEntity, deleteElementById, loadEntity, updateAttribute } from '../../database/middleware'; +import { type BasicStoreEntityWorkspace } from '../workspace/workspace-types'; +import { fromBase64, isNotEmptyField, toBase64 } from '../../database/utils'; +import { notify } from '../../database/redis'; +import { BUS_TOPICS } from '../../config/conf'; +import type { + EditInput, + FilterGroup, + PublicDashboardAddInput, + QueryPublicDashboardsArgs, + QueryPublicStixCoreObjectsNumberArgs, + QueryPublicStixCoreObjectsMultiTimeSeriesArgs +} from '../../generated/graphql'; +import { FunctionalError, UnsupportedError } from '../../config/errors'; +import { SYSTEM_USER } from '../../utils/access'; +import { publishUserAction } from '../../listener/UserActionListener'; +import { initializeAuthorizedMembers } from '../workspace/workspace-domain'; +import { ENTITY_TYPE_MARKING_DEFINITION } from '../../schema/stixMetaObject'; +import { getEntitiesMapFromCache } from '../../database/cache'; +import type { NumberResult, StoreMarkingDefinition } from '../../types/store'; +import { getWidgetArguments } from './publicDashboard-utils'; +import { stixCoreObjectsMultiTimeSeries, stixCoreObjectsNumber } from '../../domain/stixCoreObject'; +import { ABSTRACT_STIX_CORE_OBJECT } from '../../schema/general'; + +export const findById = ( + context: AuthContext, + user: AuthUser, + id: string, +) => { + return storeLoadById( + context, + user, + id, + ENTITY_TYPE_PUBLIC_DASHBOARD, + ); +}; + +export const findAll = ( + context: AuthContext, + user: AuthUser, + args: QueryPublicDashboardsArgs, +) => { + return listEntitiesPaginated( + context, + user, + [ENTITY_TYPE_PUBLIC_DASHBOARD], + args, + ); +}; + +export const getPublicDashboardByUriKey = ( + context: AuthContext, + uri_key: string, +) => { + return loadEntity( + context, + SYSTEM_USER, + [ENTITY_TYPE_PUBLIC_DASHBOARD], + { + filters: { + mode: 'and', + filters: [ + { key: ['uri_key'], values: [uri_key], mode: 'or', operator: 'eq' } + ], + filterGroups: [], + } as FilterGroup + } + ) as Promise; +}; + +export const getAllowedMarkings = async ( + context: AuthContext, + user: AuthUser, + publicDashboard: BasicStoreEntityPublicDashboard | PublicDashboardCached, +): Promise => { + // get markings from cache + const markingsMap = await getEntitiesMapFromCache(context, user, ENTITY_TYPE_MARKING_DEFINITION); + const publicDashboardMarkingsIds = publicDashboard.allowed_markings_ids; + return publicDashboardMarkingsIds.flatMap((id: string) => markingsMap.get(id) || []); +}; + +export const addPublicDashboard = async ( + context: AuthContext, + user: AuthUser, + input: PublicDashboardAddInput, +) => { + // Get private dashboard manifest + const dashboard: BasicStoreEntityWorkspace = await internalLoadById( + context, + user, + input.dashboard_id, + ); + if (!dashboard) { + throw FunctionalError('Cannot find dashboard'); + } + if (!dashboard.manifest) { + throw FunctionalError('Cannot published empty dashboard'); + } + + const parsedManifest = JSON.parse(fromBase64(dashboard.manifest) ?? '{}'); + // Removing the "dataSelection" key + if (parsedManifest && isNotEmptyField(parsedManifest.widgets)) { + Object.keys(parsedManifest.widgets).forEach((widgetId) => { + delete parsedManifest.widgets[widgetId].dataSelection; + }); + } + + // Create public manifest + const publicManifest = toBase64(JSON.stringify(parsedManifest) ?? '{}'); + + const authorizedMembers = initializeAuthorizedMembers( + [{ id: user.id, access_right: 'admin' }, { id: 'ALL', access_right: 'view' }], + user, + ); + // Create publicDashboard + const publicDashboardToCreate = { + name: input.name, + description: input.description, + public_manifest: publicManifest, + private_manifest: dashboard.manifest, + dashboard_id: input.dashboard_id, + user_id: user.id, + uri_key: uuidv4(), + authorized_members: authorizedMembers, + allowed_markings_ids: input.allowed_markings_ids, + }; + + const created = await createEntity( + context, + user, + publicDashboardToCreate, + ENTITY_TYPE_PUBLIC_DASHBOARD, + ); + + await publishUserAction({ + user, + event_type: 'mutation', + event_scope: 'create', + event_access: 'extended', + message: `creates public dashboard \`${created.name}\``, + context_data: { + id: created.id, + entity_type: ENTITY_TYPE_PUBLIC_DASHBOARD, + input, + }, + }); + + return notify(BUS_TOPICS[ENTITY_TYPE_PUBLIC_DASHBOARD].ADDED_TOPIC, created, user); +}; + +export const publicDashboardEditField = async ( + context: AuthContext, + user: AuthUser, + id: string, + input: EditInput[], +) => { + const invalidInput = input.some((item: EditInput) => item.key !== 'name' && item.key !== 'uri_key'); + if (invalidInput) { + throw UnsupportedError('Only name and uri_key can be updated'); + } + + const { element } = await updateAttribute( + context, + user, + id, + ENTITY_TYPE_PUBLIC_DASHBOARD, + input, + ); + + await publishUserAction({ + user, + event_type: 'mutation', + event_scope: 'update', + event_access: 'administration', + message: 'Uupdate public dashbaord', + context_data: { id: element.id, entity_type: ENTITY_TYPE_PUBLIC_DASHBOARD, input }, + }); + + return notify(BUS_TOPICS[ENTITY_TYPE_PUBLIC_DASHBOARD].EDIT_TOPIC, element, user); +}; + +export const publicDashboardDelete = async (context: AuthContext, user: AuthUser, id: string) => { + const deleted = await deleteElementById( + context, + user, + id, + ENTITY_TYPE_PUBLIC_DASHBOARD, + ); + + await publishUserAction({ + user, + event_type: 'mutation', + event_scope: 'delete', + event_access: 'extended', + message: `deletes public dashboard \`${deleted.name}\``, + context_data: { + id: deleted.id, + entity_type: ENTITY_TYPE_PUBLIC_DASHBOARD, + input: deleted, + }, + }); + + return notify(BUS_TOPICS[ENTITY_TYPE_PUBLIC_DASHBOARD].DELETE_TOPIC, deleted, user).then(() => id); +}; + +// Widgets Public API + +// Heatmap +export const publicStixCoreObjectsMultiTimeSeries = async (context: AuthContext, args: QueryPublicStixCoreObjectsMultiTimeSeriesArgs) => { + const { user, config, timeSeriesParameters } = await getWidgetArguments(context, args.uriKey, args.widgetId, true); + + const standardArgs = { + startDate: args.startDate, + endDate: args.endDate, + interval: config.interval, + timeSeriesParameters + }; + + // Use standard API + return stixCoreObjectsMultiTimeSeries(context, user, standardArgs); +}; + +// Number +export const publicStixCoreObjectsNumber = async ( + context: AuthContext, + args: QueryPublicStixCoreObjectsNumberArgs +): Promise => { + const { user, config, filters, dateAttribute } = await getWidgetArguments(context, args.uriKey, args.widgetId); + + const parameters = { + dateAttribute, + startDate: args.startDate, + endDate: args.endDate, + filters, + onlyInferred: config.onlyInferred, + search: config.search, + types: [ + ABSTRACT_STIX_CORE_OBJECT, + ] + }; + + // Use standard API + return stixCoreObjectsNumber(context, user, parameters) as unknown as Promise; +}; diff --git a/opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard-graphql.ts b/opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard-graphql.ts new file mode 100644 index 0000000000000..2bb20fdc3ec3b --- /dev/null +++ b/opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard-graphql.ts @@ -0,0 +1,8 @@ +import { registerGraphqlSchema } from '../../graphql/schema'; +import publicDashboardResolvers from './publicDashboard-resolvers'; +import publicDashboardTypeDefs from './publicDashboard.graphql'; + +registerGraphqlSchema({ + schema: publicDashboardTypeDefs, + resolver: publicDashboardResolvers, +}); diff --git a/opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard-resolvers.ts b/opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard-resolvers.ts new file mode 100644 index 0000000000000..46dccd0b8afae --- /dev/null +++ b/opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard-resolvers.ts @@ -0,0 +1,40 @@ +import type { Resolvers } from '../../generated/graphql'; +import { + addPublicDashboard, + findById, + findAll, + publicDashboardDelete, + publicDashboardEditField, + getPublicDashboardByUriKey, + getAllowedMarkings, + publicStixCoreObjectsNumber, + publicStixCoreObjectsMultiTimeSeries +} from './publicDashboard-domain'; +import { getAuthorizedMembers } from '../../utils/authorizedMembers'; + +const publicDashboardResolvers: Resolvers = { + Query: { + publicDashboard: (_, { id }, context) => findById(context, context.user, id), + publicDashboards: (_, args, context) => findAll(context, context.user, args), + publicDashboardByUriKey: (_, { uri_key }, context) => getPublicDashboardByUriKey(context, uri_key), + publicStixCoreObjectsNumber: (_, args, context) => publicStixCoreObjectsNumber(context, args), + publicStixCoreObjectsMultiTimeSeries: (_, args, context) => publicStixCoreObjectsMultiTimeSeries(context, args), + }, + PublicDashboard: { + authorized_members: (publicDashboard, _, context) => getAuthorizedMembers(context, context.user, publicDashboard), + allowed_markings: (publicDashboard, _, context) => getAllowedMarkings(context, context.user, publicDashboard), + }, + Mutation: { + publicDashboardAdd: (_, { input }, context) => { + return addPublicDashboard(context, context.user, input); + }, + publicDashboardDelete: (_, { id }, context) => { + return publicDashboardDelete(context, context.user, id); + }, + publicDashboardFieldPatch: (_, { id, input }, context) => { + return publicDashboardEditField(context, context.user, id, input); + }, + }, +}; + +export default publicDashboardResolvers; diff --git a/opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard-types.ts b/opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard-types.ts new file mode 100644 index 0000000000000..44fe93ba7ed5c --- /dev/null +++ b/opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard-types.ts @@ -0,0 +1,64 @@ +import type { BasicStoreEntity, StoreEntity, StoreMarkingDefinition } from '../../types/store'; +import type { StixDomainObject, StixOpenctiExtensionSDO } from '../../types/stix-common'; +import { STIX_EXT_OCTI } from '../../types/stix-extensions'; +import type { AuthorizedMember } from '../../utils/access'; + +export const ENTITY_TYPE_PUBLIC_DASHBOARD = 'PublicDashboard'; + +// region Database types +export interface BasicStoreEntityPublicDashboard extends BasicStoreEntity { + name: string; + description: string; + dashboard_id: string; + user_id: string; + public_manifest: string; + private_manifest: string; + uri_key: string; + authorized_members: Array; + allowed_markings_ids: Array; + allowed_markings: Array; +} + +export interface StoreEntityPublicDashboard extends StoreEntity { + name: string; + description: string; + dashboard_id: string; + user_id: string; + public_manifest: string; + private_manifest: string; + uri_key: string; + authorized_members: Array; + allowed_markings_ids: Array; + allowed_markings: Array; +} +// endregion + +// region cache type +export interface PublicDashboardCached { + id: string; + internal_id: string; + uri_key: string; + dashboard_id: string; + private_manifest: { widgets:any, config: any }; + user_id: string; + allowed_markings_ids: string[]; + allowed_markings: Array; +} +// endregion + +// region Stix type +export interface StixPublicDashboard extends StixDomainObject { + name: string; + description: string; + dashboard_id: string; + user_id: string; + public_manifest: string; + private_manifest: string; + uri_key: string; + allowed_markings_ids: Array; + allowed_markings: Array; + extensions: { + [STIX_EXT_OCTI] : StixOpenctiExtensionSDO + }; +} +// endregion diff --git a/opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard-utils.ts b/opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard-utils.ts new file mode 100644 index 0000000000000..6969be2f815ca --- /dev/null +++ b/opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard-utils.ts @@ -0,0 +1,89 @@ +import { getEntitiesMapFromCache, getEntitiesListFromCache } from '../../database/cache'; +import { SYSTEM_USER } from '../../utils/access'; +import { ENTITY_TYPE_PUBLIC_DASHBOARD, type PublicDashboardCached } from './publicDashboard-types'; +import { ENTITY_TYPE_USER } from '../../schema/internalObject'; +import type { AuthContext, AuthUser, UserCapability } from '../../types/user'; +import { UnsupportedError } from '../../config/errors'; +import { computeAvailableMarkings } from '../../domain/user'; +import type { StoreMarkingDefinition } from '../../types/store'; +import { ENTITY_TYPE_MARKING_DEFINITION } from '../../schema/stixMetaObject'; +import { elLoadById } from '../../database/engine'; + +interface WidgetArguments { + user: AuthUser, + dateAttribute?: string, + config: any, + filters?: any, + timeSeriesParameters?: any +} + +export const getWidgetArguments = async ( + context: AuthContext, + uriKey: string, + widgetId: string, + multiTime = false, +): Promise => { + // Get publicDashboard from cache + const publicDashboardsMapByUriKey = await getEntitiesMapFromCache(context, SYSTEM_USER, ENTITY_TYPE_PUBLIC_DASHBOARD); + const publicDashboard = publicDashboardsMapByUriKey.get(uriKey); + if (!publicDashboard) { + throw UnsupportedError('Dashboard not found'); + } + + const { user_id, private_manifest, allowed_markings }: PublicDashboardCached = publicDashboard; + + // Get user from cache + const platformUsersMap = await getEntitiesMapFromCache(context, SYSTEM_USER, ENTITY_TYPE_USER); + const plateformUser = platformUsersMap.get(user_id); + if (!plateformUser) { + throw UnsupportedError('User not found'); + } + + // replace User markings by publicDashboard allowed_markings + const allMarkings = await getEntitiesListFromCache(context, SYSTEM_USER, ENTITY_TYPE_MARKING_DEFINITION); + + // replace User capabilities by KNOWLEDGE capability + const accessKnowledgeCapability: UserCapability = await elLoadById(context, SYSTEM_USER, 'capability--cbc68f4b-1d0c-51f6-a1b9-10344503b493') as unknown as UserCapability; + + const user = { + ...plateformUser, + origin: { user_id: plateformUser.id, referer: 'public-dashboard' }, + allowed_marking: computeAvailableMarkings(allowed_markings, allMarkings), // TODO what if user is downgraded ?? + capabilities: [accessKnowledgeCapability] + }; + + // Get widget query configuration + const { widgets, config } = private_manifest; + + // if multiTimeSerie + if (multiTime) { + const { dataSelection } = widgets[widgetId]; + const timeSeriesParameters = dataSelection.map((selection: { filters: any; date_attribute: any; }) => { + const filters = { + filterGroups: [selection.filters], + filters: [], + mode: 'and' + }; + return { + field: selection.date_attribute, + filters, + }; + }); + + return { user, config, timeSeriesParameters }; + } + + const widgetConfig = widgets[widgetId].dataSelection[0]; + const filters = { + filterGroups: [widgetConfig.filters], + filters: [], + mode: 'and' + }; + + return { + user, + config, + filters, + dateAttribute: widgetConfig.date_attribute + }; +}; diff --git a/opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard.graphql b/opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard.graphql new file mode 100644 index 0000000000000..3f6d7961fe48d --- /dev/null +++ b/opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard.graphql @@ -0,0 +1,80 @@ +type PublicDashboard implements InternalObject & BasicObject { + id: ID! + entity_type: String! @auth(for: [KNOWLEDGE, EXPLORE]) + standard_id: String! @auth(for: [KNOWLEDGE, EXPLORE]) + parent_types: [String!]! @auth(for: [KNOWLEDGE, EXPLORE]) + # PublicDashboard + name: String! + description: String + dashboard_id: String @auth(for: [KNOWLEDGE, EXPLORE]) + user_id: String! @auth(for: [KNOWLEDGE, EXPLORE]) + public_manifest: String + private_manifest: String @auth(for: [KNOWLEDGE, EXPLORE]) + uri_key: String! + allowed_markings_ids: [String!] @auth(for: [KNOWLEDGE, EXPLORE]) + allowed_markings: [MarkingDefinitionShort!] @auth(for: [KNOWLEDGE, EXPLORE]) + created_at: DateTime @auth(for: [KNOWLEDGE, EXPLORE]) + updated_at: DateTime @auth(for: [KNOWLEDGE, EXPLORE]) + editContext: [EditUserContext!] @auth(for: [KNOWLEDGE, EXPLORE]) + authorized_members: [MemberAccess!] @auth(for: [KNOWLEDGE, EXPLORE]) +} + +# Ordering +enum PublicDashboardsOrdering { + name + created_at + updated_at + creator +} + +# Relay connections +type PublicDashboardConnection { + pageInfo: PageInfo! + edges: [PublicDashboardEdge!]! +} + +# Queries +type Query { + publicDashboard(id: String!): PublicDashboard @auth(for: [KNOWLEDGE, EXPLORE]) + publicDashboards( + first: Int + after: ID + orderBy: PublicDashboardsOrdering + orderMode: OrderingMode + filters: FilterGroup + search: String + ): PublicDashboardConnection @auth(for: [EXPLORE]) + publicDashboardByUriKey(uri_key: String!): PublicDashboard + publicStixCoreObjectsNumber( + startDate: DateTime + endDate: DateTime + uriKey: String! + widgetId : String! + ): Number + publicStixCoreObjectsMultiTimeSeries( + startDate: DateTime! + endDate: DateTime + uriKey: String! + widgetId : String! + ): [MultiTimeSeries] +} + +type PublicDashboardEdge { + cursor: String! + node: PublicDashboard! +} + +# Mutation +input PublicDashboardAddInput { + name: String! + description: String + dashboard_id: String! + allowed_markings_ids: [String!] +} + +type Mutation { + publicDashboardAdd(input: PublicDashboardAddInput!): PublicDashboard @auth(for: [EXPLORE_EXUPDATE_PUBLISH]) + publicDashboardDelete(id: ID!): ID @auth(for: [EXPLORE_EXUPDATE_PUBLISH]) + publicDashboardFieldPatch(id: ID!, input: [EditInput!]!): PublicDashboard @auth(for: [EXPLORE_EXUPDATE_PUBLISH]) +} + diff --git a/opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard.ts b/opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard.ts new file mode 100644 index 0000000000000..74ac578fa2589 --- /dev/null +++ b/opencti-platform/opencti-graphql/src/modules/publicDashboard/publicDashboard.ts @@ -0,0 +1,37 @@ +import { v4 as uuidv4 } from 'uuid'; +import { ABSTRACT_INTERNAL_OBJECT } from '../../schema/general'; +import type { ModuleDefinition } from '../../schema/module'; +import { registerDefinition } from '../../schema/module'; +import { ENTITY_TYPE_PUBLIC_DASHBOARD, type StixPublicDashboard, type StoreEntityPublicDashboard } from './publicDashboard-types'; +import convertPublicDashboardToStix from './publicDashboard-converter'; +import { authorizedMembers } from '../../schema/attribute-definition'; + +export const PUBLIC_DASHBOARD_DEFINITION: ModuleDefinition = { + type: { + id: 'publicDashboards', + name: ENTITY_TYPE_PUBLIC_DASHBOARD, + category: ABSTRACT_INTERNAL_OBJECT, + aliased: false + }, + identifier: { + definition: { + [ENTITY_TYPE_PUBLIC_DASHBOARD]: () => uuidv4(), + }, + }, + attributes: [ + { name: 'name', label: 'Name', type: 'string', format: 'short', mandatoryType: 'external', editDefault: true, multiple: false, upsert: false, isFilterable: true }, + { name: 'description', label: 'Description', type: 'string', format: 'short', mandatoryType: 'no', editDefault: false, multiple: false, upsert: true, isFilterable: true }, + { name: 'dashboard_id', label: 'Dashboard id', type: 'string', format: 'short', mandatoryType: 'internal', editDefault: false, multiple: false, upsert: true, isFilterable: false }, + { name: 'public_manifest', label: 'Public manifest', type: 'string', format: 'short', mandatoryType: 'internal', editDefault: false, multiple: false, upsert: false, isFilterable: false }, + { name: 'private_manifest', label: 'Public manifest', type: 'string', format: 'short', mandatoryType: 'internal', editDefault: false, multiple: false, upsert: false, isFilterable: false }, + { name: 'uri_key', label: 'Uri key', type: 'string', format: 'short', mandatoryType: 'internal', editDefault: false, multiple: false, upsert: false, isFilterable: false }, + authorizedMembers + ], + relations: [], + representative: (stix: StixPublicDashboard) => { + return stix.name; + }, + converter: convertPublicDashboardToStix +}; + +registerDefinition(PUBLIC_DASHBOARD_DEFINITION); diff --git a/opencti-platform/opencti-graphql/src/modules/workspace/workspace-domain.ts b/opencti-platform/opencti-graphql/src/modules/workspace/workspace-domain.ts index b5608d83b66e2..d20225e5e76d7 100644 --- a/opencti-platform/opencti-graphql/src/modules/workspace/workspace-domain.ts +++ b/opencti-platform/opencti-graphql/src/modules/workspace/workspace-domain.ts @@ -152,7 +152,7 @@ const checkInvestigatedEntitiesInputs = async ( } }; -const initializeAuthorizedMembers = ( +export const initializeAuthorizedMembers = ( authorizedMembers: InputMaybe | undefined, user: AuthUser, ) => { diff --git a/opencti-platform/opencti-graphql/src/schema/internalObject.ts b/opencti-platform/opencti-graphql/src/schema/internalObject.ts index 11974f8b2dfc4..ac1421d52de55 100644 --- a/opencti-platform/opencti-graphql/src/schema/internalObject.ts +++ b/opencti-platform/opencti-graphql/src/schema/internalObject.ts @@ -1,6 +1,7 @@ import { ABSTRACT_INTERNAL_OBJECT } from './general'; import { schemaTypesDefinition } from './schema-types'; import { ENTITY_TYPE_WORKSPACE } from '../modules/workspace/workspace-types'; +import { ENTITY_TYPE_PUBLIC_DASHBOARD } from '../modules/publicDashboard/publicDashboard-types'; export const ENTITY_TYPE_SETTINGS = 'Settings'; export const ENTITY_TYPE_MIGRATION_STATUS = 'MigrationStatus'; @@ -33,6 +34,7 @@ const DATED_INTERNAL_OBJECTS = [ ENTITY_TYPE_CONNECTOR, ENTITY_TYPE_WORKSPACE, ENTITY_TYPE_SYNC, + ENTITY_TYPE_PUBLIC_DASHBOARD, ]; const INTERNAL_OBJECTS = [ ENTITY_TYPE_SETTINGS, @@ -54,6 +56,7 @@ const INTERNAL_OBJECTS = [ ENTITY_TYPE_CAPABILITY, ENTITY_TYPE_CONNECTOR, ENTITY_TYPE_WORKSPACE, + ENTITY_TYPE_PUBLIC_DASHBOARD, ENTITY_TYPE_HISTORY, ENTITY_TYPE_ACTIVITY, ENTITY_TYPE_INTERNAL_FILE, diff --git a/opencti-platform/opencti-graphql/tests/02-integration/01-database/elasticSearch-test.js b/opencti-platform/opencti-graphql/tests/02-integration/01-database/elasticSearch-test.js index 33ab4d22771ba..47ebe20a37ff4 100644 --- a/opencti-platform/opencti-graphql/tests/02-integration/01-database/elasticSearch-test.js +++ b/opencti-platform/opencti-graphql/tests/02-integration/01-database/elasticSearch-test.js @@ -396,7 +396,7 @@ describe('Elasticsearch pagination', () => { it('should entity paginate everything', async () => { const data = await elPaginate(testContext, ADMIN_USER, READ_ENTITIES_INDICES, { first: ES_MAX_PAGINATION }); expect(data).not.toBeNull(); - expect(data.edges.length).toEqual(496); + expect(data.edges.length).toEqual(497); const filterBaseTypes = R.uniq(R.map((e) => e.node.base_type, data.edges)); expect(filterBaseTypes.length).toEqual(1); expect(R.head(filterBaseTypes)).toEqual('ENTITY'); @@ -472,7 +472,7 @@ describe('Elasticsearch pagination', () => { filterGroups: [], }; const data = await elPaginate(testContext, ADMIN_USER, READ_ENTITIES_INDICES, { filters, first: ES_MAX_PAGINATION }); - expect(data.edges.length).toEqual(489); + expect(data.edges.length).toEqual(490); }); it('should entity paginate with field exist filter', async () => { const filters = { @@ -553,7 +553,7 @@ describe('Elasticsearch pagination', () => { orderMode: 'asc', first: ES_MAX_PAGINATION }); - expect(data.edges.length).toEqual(496); + expect(data.edges.length).toEqual(497); const createdDates = R.map((e) => e.node.created, data.edges); let previousCreatedDate = null; for (let index = 0; index < createdDates.length; index += 1) { @@ -593,7 +593,7 @@ describe('Elasticsearch pagination', () => { let data = await elPaginate(testContext, ADMIN_USER, READ_RELATIONSHIPS_INDICES, { includeAuthorities: true }); expect(data).not.toBeNull(); const groupByIndices = R.groupBy((e) => e.node._index, data.edges); - expect(groupByIndices[`${ES_INDEX_PREFIX}_internal_relationships-000001`].length).toEqual(42); + expect(groupByIndices[`${ES_INDEX_PREFIX}_internal_relationships-000001`].length).toEqual(43); expect(groupByIndices[`${ES_INDEX_PREFIX}_stix_core_relationships-000001`].length).toEqual(24); expect(groupByIndices[`${ES_INDEX_PREFIX}_stix_meta_relationships-000001`].length).toEqual(124); expect(groupByIndices[`${ES_INDEX_PREFIX}_stix_sighting_relationships-000001`].length).toEqual(2); @@ -605,14 +605,14 @@ describe('Elasticsearch pagination', () => { expect(metaByEntityType['external-reference'].length).toEqual(7); expect(metaByEntityType['object-marking'].length).toEqual(26); expect(metaByEntityType['kill-chain-phase'].length).toEqual(3); - expect(data.edges.length).toEqual(192); + expect(data.edges.length).toEqual(193); let filterBaseTypes = R.uniq(R.map((e) => e.node.base_type, data.edges)); expect(filterBaseTypes.length).toEqual(1); expect(R.head(filterBaseTypes)).toEqual('RELATION'); // Same query with no pagination data = await elPaginate(testContext, ADMIN_USER, READ_RELATIONSHIPS_INDICES, { connectionFormat: false }); expect(data).not.toBeNull(); - expect(data.length).toEqual(192); + expect(data.length).toEqual(193); filterBaseTypes = R.uniq(R.map((e) => e.base_type, data)); expect(filterBaseTypes.length).toEqual(1); expect(R.head(filterBaseTypes)).toEqual('RELATION'); diff --git a/opencti-platform/opencti-graphql/tests/02-integration/02-resolvers/publicDashboard-test.js b/opencti-platform/opencti-graphql/tests/02-integration/02-resolvers/publicDashboard-test.js new file mode 100644 index 0000000000000..2549fa0651c89 --- /dev/null +++ b/opencti-platform/opencti-graphql/tests/02-integration/02-resolvers/publicDashboard-test.js @@ -0,0 +1,320 @@ +import { describe, expect, it, beforeAll, afterAll } from 'vitest'; +import gql from 'graphql-tag'; +import { editorQuery, participantQuery, queryAsAdmin } from '../../utils/testQuery'; +import { toBase64 } from '../../../src/database/utils'; + +const LIST_QUERY = gql` + query publicDashboards( + $first: Int + $after: ID + $orderBy: PublicDashboardsOrdering + $orderMode: OrderingMode + $filters: FilterGroup + $search: String + ) { + publicDashboards( + first: $first + after: $after + orderBy: $orderBy + orderMode: $orderMode + filters: $filters + search: $search + ) { + edges { + node { + id + name + } + } + } + } +`; + +const READ_QUERY = gql` + query PublicDashboard($id: String!) { + publicDashboard(id: $id) { + id + name + } + } +`; + +const CREATE_PRIVATE_DASHBOARD_QUERY = gql` + mutation WorkspaceAdd($input: WorkspaceAddInput!) { + workspaceAdd(input: $input) { + id + name + } + } +`; + +const CREATE_QUERY = gql` + mutation PublicDashboardAdd($input: PublicDashboardAddInput!) { + publicDashboardAdd(input: $input) { + id + name + } + } +`; + +const UPDATE_QUERY = gql` + mutation PublicDashboardEdit($id: ID!, $input: [EditInput!]!) { + publicDashboardFieldPatch(id: $id, input: $input) { + id + name + } + } +`; + +const UPDATE_PRIVATE_DASHBOARD_QUERY = gql` + mutation WorkspaceEdit($id: ID!, $input: [EditInput!]!) { + workspaceFieldPatch(id: $id, input: $input) { + id + name + } + } +`; + +const DELETE_QUERY = gql` + mutation PublicDashboardDelete($id: ID!) { + publicDashboardDelete(id: $id) + } +`; + +const DELETE_PRIVATE_DASHBOARD_QUERY = gql` + mutation workspaceDelete($id: ID!) { + workspaceDelete(id: $id) + } +`; + +describe('PublicDashboard resolver', () => { + let privateDashboardInternalId; + const publicDashboardName = 'publicDashboard'; + + beforeAll(async () => { + // Create Private dashboard + const privateDashboard = await queryAsAdmin({ + query: CREATE_PRIVATE_DASHBOARD_QUERY, + variables: { + input: { + type: 'dashboard', + name: 'private dashboard', + }, + }, + }); + privateDashboardInternalId = privateDashboard.data.workspaceAdd.id; + }); + + afterAll(async () => { + // Delete private dashboard + await queryAsAdmin({ + query: DELETE_PRIVATE_DASHBOARD_QUERY, + variables: { id: privateDashboardInternalId }, + }); + }); + + it('Empty dashboard should not be published', async () => { + // Create the publicDashboard + const PUBLICDASHBOARD_TO_CREATE = { + input: { + name: 'private dashboard', + dashboard_id: privateDashboardInternalId, + }, + }; + const emptyPublicDashboard = await queryAsAdmin({ + query: CREATE_QUERY, + variables: PUBLICDASHBOARD_TO_CREATE, + }); + + expect(emptyPublicDashboard).not.toBeNull(); + expect(emptyPublicDashboard.errors.length).toEqual(1); + expect(emptyPublicDashboard.errors.at(0).message).toEqual('Cannot published empty dashboard'); + }); + + describe('Tests with manifest', () => { + beforeAll(async () => { + // Add manifest to Private dashboard as empty dashboard should not be published + const parsedManifest = { + widgets: { + 'ebb25410-7048-4de7-9288-704e962215f6': { + id: 'ebb25410-7048-4de7-9288-704e962215f6', + type: 'number', + perspective: 'entities', + dataSelection: [ + { + label: 'area', + attribute: 'entity_type', + date_attribute: 'created_at', + perspective: 'entities', + isTo: true, + filters: { + mode: 'and', + filters: [ + + ], + filterGroups: [ + + ] + }, + dynamicFrom: { + mode: 'and', + filters: [ + + ], + filterGroups: [ + + ] + }, + dynamicTo: { + mode: 'and', + filters: [ + + ], + filterGroups: [ + + ] + } + } + ], + parameters: { + title: 'area number' + }, + layout: { + w: 4, + h: 2, + x: 4, + y: 0, + i: 'ebb25410-7048-4de7-9288-704e962215f6', + moved: false, + static: false + } + } + }, + config: { + + } + }; + const manifest = toBase64(JSON.stringify(parsedManifest)); + await queryAsAdmin({ + query: UPDATE_PRIVATE_DASHBOARD_QUERY, + variables: { + id: privateDashboardInternalId, + input: { key: 'manifest', value: manifest }, + }, + }); + }); + + describe('PublicDashboard resolver standard behavior', () => { + let publicDashboardInternalId; + + it('User without EXPLORE_EXUPDATE_PUBLISH capability should not create private dashboards', async () => { + // Create the publicDashboard + const PUBLICDASHBOARD2_TO_CREATE = { + input: { + name: publicDashboardName, + dashboard_id: privateDashboardInternalId, + }, + }; + const publicDashboard = await participantQuery({ + query: CREATE_QUERY, + variables: PUBLICDASHBOARD2_TO_CREATE, + }); + + expect(publicDashboard).not.toBeNull(); + expect(publicDashboard.errors.length).toEqual(1); + expect(publicDashboard.errors.at(0).name).toEqual('FORBIDDEN_ACCESS'); + }); + + it('should publicDashboard created', async () => { + // Create the publicDashboard + const PUBLICDASHBOARD_TO_CREATE = { + input: { + name: publicDashboardName, + dashboard_id: privateDashboardInternalId, + }, + }; + const publicDashboard = await queryAsAdmin({ + query: CREATE_QUERY, + variables: PUBLICDASHBOARD_TO_CREATE, + }); + + expect(publicDashboard.data.publicDashboardAdd).not.toBeNull(); + expect(publicDashboard.data.publicDashboardAdd.name).toEqual(publicDashboardName); + publicDashboardInternalId = publicDashboard.data.publicDashboardAdd.id; + }); + + it('should publicDashboard loaded by internal id', async () => { + const queryResult = await queryAsAdmin({ + query: READ_QUERY, + variables: { id: publicDashboardInternalId }, + }); + expect(queryResult).not.toBeNull(); + expect(queryResult.data.publicDashboard).not.toBeNull(); + expect(queryResult.data.publicDashboard.id).toEqual(publicDashboardInternalId); + }); + + it('should list publicDashboards', async () => { + const queryResult = await queryAsAdmin({ + query: LIST_QUERY, + variables: { first: 10 }, + }); + expect(queryResult.data.publicDashboards.edges.length).toEqual(1); + }); + + it('should not update publicDashboard if invalidInput key', async () => { + const updatedDescription = 'updated Description'; + const queryResult = await queryAsAdmin({ + query: UPDATE_QUERY, + variables: { + id: publicDashboardInternalId, + input: { key: 'description', value: updatedDescription }, + }, + }); + expect(queryResult).not.toBeNull(); + expect(queryResult.errors.length).toEqual(1); + expect(queryResult.errors.at(0).message).toEqual('Only name and uri_key can be updated'); + }); + + it('should update publicDashboard', async () => { + const updatedName = `${publicDashboardName} - updated`; + const queryResult = await queryAsAdmin({ + query: UPDATE_QUERY, + variables: { + id: publicDashboardInternalId, + input: { key: 'name', value: updatedName }, + }, + }); + expect(queryResult.data.publicDashboardFieldPatch.name).toEqual(updatedName); + }); + + it('User with EXPLORE_EXUPDATE_PUBLISH capability but view access right cannot update public dashboard', async () => { + const queryResult = await editorQuery({ + query: UPDATE_QUERY, + variables: { + id: publicDashboardInternalId, + input: { key: 'name', value: ['updated name'] }, + }, + }); + expect(queryResult).not.toBeNull(); + expect(queryResult.errors.length).toEqual(1); + expect(queryResult.errors.at(0).message).toEqual('You are not allowed to do this.'); + }); + + it('should delete publicDashboard', async () => { + // Delete the publicDashboard + await queryAsAdmin({ + query: DELETE_QUERY, + variables: { id: publicDashboardInternalId }, + }); + + // Verify is no longer found + const queryResult = await queryAsAdmin({ + query: LIST_QUERY, + variables: { first: 10 }, + }); + expect(queryResult).not.toBeNull(); + expect(queryResult.data.publicDashboards.edges.length).toEqual(0); + }); + }); + }); +}); diff --git a/opencti-platform/opencti-graphql/tests/02-integration/02-resolvers/role-test.js b/opencti-platform/opencti-graphql/tests/02-integration/02-resolvers/role-test.js index e77abce255ed6..997f58a8eb87a 100644 --- a/opencti-platform/opencti-graphql/tests/02-integration/02-resolvers/role-test.js +++ b/opencti-platform/opencti-graphql/tests/02-integration/02-resolvers/role-test.js @@ -83,7 +83,7 @@ describe('Role resolver standard behavior', () => { } `; const queryResult = await queryAsAdmin({ query: LIST_CAPABILITIES_QUERY, variables: { first: 50 } }); - expect(queryResult.data.capabilities.edges.length).toEqual(26); + expect(queryResult.data.capabilities.edges.length).toEqual(27); }); it('should update role', async () => { const UPDATE_QUERY = gql` diff --git a/opencti-platform/opencti-graphql/tests/02-integration/02-resolvers/workspace-test.js b/opencti-platform/opencti-graphql/tests/02-integration/02-resolvers/workspace-test.js index 49575f52b7425..e6c130f5a0df5 100644 --- a/opencti-platform/opencti-graphql/tests/02-integration/02-resolvers/workspace-test.js +++ b/opencti-platform/opencti-graphql/tests/02-integration/02-resolvers/workspace-test.js @@ -375,7 +375,7 @@ describe('Workspace resolver standard behavior', () => { const queryResult = await queryAsAdmin({ query: gql` mutation workspaceImportWidget($id: ID!, $input: ImportConfigurationInput!) { - workspaceWidgetConfigurationImport(id: $id, input: $input) { + workspaceWidgetConfigurationImport(id: $id, input: $input) { id manifest } @@ -416,7 +416,7 @@ describe('Workspace resolver standard behavior', () => { const queryResult = await queryAsAdmin({ query: gql` mutation workspaceImportWidget($id: ID!, $input: ImportConfigurationInput!) { - workspaceWidgetConfigurationImport(id: $id, input: $input) { + workspaceWidgetConfigurationImport(id: $id, input: $input) { manifest } } @@ -452,7 +452,7 @@ describe('Workspace resolver standard behavior', () => { const queryResult = await queryAsAdmin({ query: gql` mutation workspaceImportWidget($id: ID!, $input: ImportConfigurationInput!) { - workspaceWidgetConfigurationImport(id: $id, input: $input) { + workspaceWidgetConfigurationImport(id: $id, input: $input) { manifest } } @@ -761,22 +761,22 @@ describe('Workspace resolver standard behavior', () => { // Delete entities await queryAsAdmin({ query: gql` - mutation sectorDelete($id: ID!) { - sectorEdit(id: $id) { - delete - } - } - `, + mutation sectorDelete($id: ID!) { + sectorEdit(id: $id) { + delete + } + } + `, variables: { id: sectorId }, }); await queryAsAdmin({ query: gql` - mutation individualDelete($id: ID!) { - individualEdit(id: $id) { - delete - } - } - `, + mutation individualDelete($id: ID!) { + individualEdit(id: $id) { + delete + } + } + `, variables: { id: individualId }, }); diff --git a/opencti-platform/opencti-graphql/tests/utils/testQuery.ts b/opencti-platform/opencti-graphql/tests/utils/testQuery.ts index d1a41afd125f7..8cbf490187c10 100644 --- a/opencti-platform/opencti-graphql/tests/utils/testQuery.ts +++ b/opencti-platform/opencti-graphql/tests/utils/testQuery.ts @@ -91,7 +91,7 @@ export const ROLE_EDITOR: Role = { id: generateStandardId(ENTITY_TYPE_ROLE, { name: 'Access knowledge/exploration and edit/delete' }), name: 'Access knowledge/exploration and edit/delete', description: 'Knowledge/exploration edit/delete', - capabilities: ['KNOWLEDGE_KNUPDATE_KNDELETE', 'EXPLORE_EXUPDATE_EXDELETE'] + capabilities: ['KNOWLEDGE_KNUPDATE_KNDELETE', 'EXPLORE_EXUPDATE_EXDELETE', 'EXPLORE_EXUPDATE_PUBLISH'] }; export const ROLE_SECURITY: Role = {