diff --git a/opencti-platform/opencti-dev/1 - worker for dev (first dev platform).run.xml b/opencti-platform/opencti-dev/1 - worker for dev (first dev platform).run.xml
new file mode 100644
index 0000000000000..52128851ed089
--- /dev/null
+++ b/opencti-platform/opencti-dev/1 - worker for dev (first dev platform).run.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/opencti-platform/opencti-dev/2 - Backend start cluster (second platform).run.xml b/opencti-platform/opencti-dev/2 - Backend start cluster (second platform).run.xml
new file mode 100644
index 0000000000000..ceb7e7d31f7d8
--- /dev/null
+++ b/opencti-platform/opencti-dev/2 - Backend start cluster (second platform).run.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/opencti-platform/opencti-dev/2 - Frontend start cluster (second platform).run.xml b/opencti-platform/opencti-dev/2 - Frontend start cluster (second platform).run.xml
new file mode 100644
index 0000000000000..9bd5307039e52
--- /dev/null
+++ b/opencti-platform/opencti-dev/2 - Frontend start cluster (second platform).run.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/opencti-platform/opencti-dev/2 - worker for cluster (second dev platform).run.xml b/opencti-platform/opencti-dev/2 - worker for cluster (second dev platform).run.xml
new file mode 100644
index 0000000000000..0a690def99efb
--- /dev/null
+++ b/opencti-platform/opencti-dev/2 - worker for cluster (second dev platform).run.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/opencti-platform/opencti-dev/README.md b/opencti-platform/opencti-dev/README.md
new file mode 100644
index 0000000000000..983093fb58f88
--- /dev/null
+++ b/opencti-platform/opencti-dev/README.md
@@ -0,0 +1,13 @@
+# Development tools in this folder
+
+- **Backend start dev**:
+ - start one instance of the backend platform on http://localhost:4000
+ - requires a development.json file in `opencti-graphql/config` folder or environment variables (except for port)
+- **Backend start cluster**: start a second instance of opencti, using port 4001 on http://localhost:4001
+ - requires a cluster.json file in `opencti-graphql/config` folder or environment variables (except for port)
+- **Frontend start dev**:
+ - start one instance of the frontend with port `3000` using backend on http://localhost:4000
+- **Frontend start cluster**:
+ - start a second instance of the frontend with port `3001` using backend on http://localhost:4001
+
+For day to day development you can only start the "dev" pair (`Backend start dev` and `Frontend start dev`), if you want to have a cluster locally, add the "cluster" pair.
\ No newline at end of file
diff --git a/opencti-platform/opencti-front/builder/dev/dev.js b/opencti-platform/opencti-front/builder/dev/dev.js
index 34b0a0b15abe0..d9ebd47e0a1df 100644
--- a/opencti-platform/opencti-front/builder/dev/dev.js
+++ b/opencti-platform/opencti-front/builder/dev/dev.js
@@ -11,6 +11,7 @@ const fsExtra = require("fs-extra");
const basePath = "";
const clients = [];
const buildPath = "./builder/dev/build/";
+const frontPort = process.env.FRONT_END_URL ?? 3000;
const debounce = (func, timeout = 500) => {
let timer;
return (...args) => {
@@ -34,7 +35,7 @@ esbuild.context({
publicPath: "/",
bundle: true,
banner: {
- js: ' (() => new EventSource("http://localhost:3000/dev").onmessage = () => location.reload())();',
+ js: ` (() => new EventSource("http://localhost:${frontPort}/dev").onmessage = () => location.reload())();`,
},
loader: {
".js": "jsx",
@@ -132,6 +133,6 @@ esbuild.context({
}
return res.send(withOptionValued);
});
- app.listen(3000);
+ app.listen(frontPort);
// endregion
});
diff --git a/opencti-platform/opencti-front/src/private/components/settings/CustomizationMenu.tsx b/opencti-platform/opencti-front/src/private/components/settings/CustomizationMenu.tsx
index 22c4a44533807..5db171c50c5b1 100644
--- a/opencti-platform/opencti-front/src/private/components/settings/CustomizationMenu.tsx
+++ b/opencti-platform/opencti-front/src/private/components/settings/CustomizationMenu.tsx
@@ -23,6 +23,10 @@ const CustomizationMenu: FunctionComponent = () => {
path: '/dashboard/settings/customization/decay',
label: 'Decay rules',
},
+ {
+ path: '/dashboard/settings/customization/support',
+ label: 'Support package',
+ },
];
return ;
};
diff --git a/opencti-platform/opencti-front/src/private/components/settings/Root.jsx b/opencti-platform/opencti-front/src/private/components/settings/Root.tsx
similarity index 96%
rename from opencti-platform/opencti-front/src/private/components/settings/Root.jsx
rename to opencti-platform/opencti-front/src/private/components/settings/Root.tsx
index 3d93e4c2aabec..59dd514857ca2 100644
--- a/opencti-platform/opencti-front/src/private/components/settings/Root.jsx
+++ b/opencti-platform/opencti-front/src/private/components/settings/Root.tsx
@@ -21,6 +21,7 @@ const Roles = lazy(() => import('./Roles'));
const RootRole = lazy(() => import('./roles/Root'));
const Rules = lazy(() => import('./Rules'));
const RootDecay = lazy(() => import('./decay/Root'));
+const RootSupport = lazy(() => import('./support/Root'));
const Sessions = lazy(() => import('./Sessions'));
const Settings = lazy(() => import('./Settings'));
const SettingsOrganizations = lazy(() => import('./SettingsOrganizations'));
@@ -38,8 +39,8 @@ const Root = () => {
return (
}>
-
- }>
+ }>
+
{
path="/dashboard/settings/customization/decay"
component={RootDecay}
/>
+
{
)}
/>
-
-
+
+
);
diff --git a/opencti-platform/opencti-front/src/private/components/settings/support/Root.tsx b/opencti-platform/opencti-front/src/private/components/settings/support/Root.tsx
new file mode 100644
index 0000000000000..25c0753c93c96
--- /dev/null
+++ b/opencti-platform/opencti-front/src/private/components/settings/support/Root.tsx
@@ -0,0 +1,16 @@
+// TODO Remove this when V6
+// eslint-disable-next-line @typescript-eslint/ban-ts-comment
+// @ts-nocheck
+import React from 'react';
+import { Route, Switch } from 'react-router-dom';
+import SupportPackages from '@components/settings/support/SupportPackages';
+
+const RootSupportPackage = () => {
+ return (
+
+
+
+ );
+};
+
+export default RootSupportPackage;
diff --git a/opencti-platform/opencti-front/src/private/components/settings/support/SupportPackages.tsx b/opencti-platform/opencti-front/src/private/components/settings/support/SupportPackages.tsx
new file mode 100644
index 0000000000000..5bd6512d713ec
--- /dev/null
+++ b/opencti-platform/opencti-front/src/private/components/settings/support/SupportPackages.tsx
@@ -0,0 +1,64 @@
+import React from 'react';
+import CustomizationMenu from '@components/settings/CustomizationMenu';
+import makeStyles from '@mui/styles/makeStyles';
+import Button from '@mui/material/Button';
+import { graphql, useMutation } from 'react-relay';
+import { useFormatter } from '../../../../components/i18n';
+import Breadcrumbs from '../../../../components/Breadcrumbs';
+import type { Theme } from '../../../../components/Theme';
+import { handleError, MESSAGING$ } from '../../../../relay/environment';
+
+const useStyles = makeStyles(() => ({}));
+
+export const supportPackageAddMutation = graphql`
+ mutation SupportPackagesMutation(
+ $input: SupportPackageAddInput!
+ ) {
+ supportPackageAdd(input: $input) {
+ id
+ }
+ }
+`;
+
+const SupportPackages = () => {
+ const { t_i18n, nsdt } = useFormatter();
+ const classes = useStyles();
+
+ const generateSupportPackage = () => {
+ alert('Go !');
+ const [commitSupportPackageAdd] = useMutation(supportPackageAddMutation);
+ const supportPackageName = `support-package-${nsdt(new Date())}`;
+ commitSupportPackageAdd({
+ variables: {
+ input: {
+ name: supportPackageName,
+ },
+ },
+ onCompleted: () => {
+ MESSAGING$.notifySuccess(
+ `Support package request send for ${supportPackageName}.`,
+ );
+ },
+ onError: (error) => {
+ handleError(error);
+ },
+ });
+ };
+
+ return (
+
+
+
+
+
+ );
+};
+
+export default SupportPackages;
diff --git a/opencti-platform/opencti-front/src/schema/relay.schema.graphql b/opencti-platform/opencti-front/src/schema/relay.schema.graphql
index c3c23da9f63d2..14d40a61b1d5f 100644
--- a/opencti-platform/opencti-front/src/schema/relay.schema.graphql
+++ b/opencti-platform/opencti-front/src/schema/relay.schema.graphql
@@ -7406,6 +7406,8 @@ type Query {
publicBookmarks(uriKey: String!, widgetId: String!): StixDomainObjectConnection
publicStixCoreObjects(uriKey: String!, widgetId: String!, startDate: DateTime, endDate: DateTime): StixCoreObjectConnection
publicStixRelationships(uriKey: String!, widgetId: String!, startDate: DateTime, endDate: DateTime): StixRelationshipConnection
+ supportPackage(id: String!): SupportPackage
+ supportPackages(first: Int, after: ID, orderBy: DecayRuleOrdering, orderMode: OrderingMode): SupportPackage
}
type Subscription {
@@ -8173,6 +8175,7 @@ type Mutation {
aiChangeTone(id: ID!, content: String!, format: Format, tone: Tone): String
aiSummarize(id: ID!, content: String!, format: Format): String
aiExplain(id: ID!, content: String!): String
+ supportPackageAdd(input: SupportPackageAddInput!): SupportPackage
}
type Channel implements BasicObject & StixObject & StixCoreObject & StixDomainObject {
@@ -11266,4 +11269,17 @@ enum IndicatorFormat {
type AIBus {
bus_id: String!
content: String!
+}
+
+type SupportPackage implements InternalObject & BasicObject {
+ id: ID!
+ name: String!
+ standard_id: String!
+ entity_type: String!
+ parent_types: [String]!
+ created_at: DateTime!
+}
+
+input SupportPackageAddInput {
+ name: name_String_NotNull_minLength_2!
}
\ No newline at end of file
diff --git a/opencti-platform/opencti-graphql/.gitignore b/opencti-platform/opencti-graphql/.gitignore
index d2a7e2bf1add1..a59d4cc03c2f6 100644
--- a/opencti-platform/opencti-graphql/.gitignore
+++ b/opencti-platform/opencti-graphql/.gitignore
@@ -8,6 +8,7 @@ node_modules
public
config/ssl
config/demo.json
+config/cluster.json
config/development.json
config/development.json.bak
config/production.json
@@ -20,6 +21,7 @@ config/prod-*.json
coverage
test-results
logs
+.support
yarn-error.log
graphql.schema.json
__pycache__
diff --git a/opencti-platform/opencti-graphql/graphql-codegen.yml b/opencti-platform/opencti-graphql/graphql-codegen.yml
index 763257a4c3654..902e659ee1ea5 100644
--- a/opencti-platform/opencti-graphql/graphql-codegen.yml
+++ b/opencti-platform/opencti-graphql/graphql-codegen.yml
@@ -49,6 +49,7 @@ generates:
CsvMapper: ../modules/internal/csvMapper/csvMapper-types#BasicStoreEntityCsvMapper
Playbook: ../modules/playbook/playbook-types#BasicStoreEntityPlaybook
PublicDashboard: ../modules/publicDashboard/publicDashboard-types#BasicStoreEntityPublicDashboard
+ SupportPackage: ../modules/support/support-types#BasicStoreEntitySupportPackage
./graphql.schema.json:
plugins:
- "introspection"
diff --git a/opencti-platform/opencti-graphql/package.json b/opencti-platform/opencti-graphql/package.json
index 8d5299286a749..69de38226df47 100644
--- a/opencti-platform/opencti-graphql/package.json
+++ b/opencti-platform/opencti-graphql/package.json
@@ -15,8 +15,9 @@
"lint": "cross-env DEBUG=eslint:cli-engine TIMING=1 eslint --max-warnings 0 --cache -c .eslintrc.js src",
"build": "yarn install:python && yarn build:prod",
"start": "NODE_ENV=dev yarn build:dev && node build/back.js",
- "start-light": "NODE_ENV=dev node build/back.js",
- "start-cluster": "NODE_ENV=cluster node build/back.js",
+ "start:dev": "NODE_ENV=dev yarn build:dev && node build/back.js",
+ "start:light": "NODE_ENV=dev node build/back.js",
+ "start:cluster": "NODE_ENV=cluster node build/back.js",
"serv": "node build/back.js",
"insert:dev": "node build/script-insert-dataset.js",
"test:dev:init": "INIT_TEST_PLATFORM=true vitest run --config vitest.config.dev.ts --testNamePattern=\"Should import creation succeed\" tests/02-integration/00-inject/loader-test.ts",
diff --git a/opencti-platform/opencti-graphql/src/config/conf.js b/opencti-platform/opencti-graphql/src/config/conf.js
index 7d8b9203b61a9..f9d29cead25c2 100644
--- a/opencti-platform/opencti-graphql/src/config/conf.js
+++ b/opencti-platform/opencti-graphql/src/config/conf.js
@@ -220,7 +220,7 @@ nconf.add('argv', {
const { timestamp } = format;
const currentPath = process.env.INIT_CWD || process.cwd();
const resolvePath = (relativePath) => path.join(currentPath, relativePath);
-const environment = nconf.get('env') || nconf.get('node_env') || process.env.NODE_ENV || DEFAULT_ENV;
+export const environment = nconf.get('env') || nconf.get('node_env') || process.env.NODE_ENV || DEFAULT_ENV;
const resolveEnvFile = (env) => path.join(resolvePath('config'), `${env.toLowerCase()}.json`);
export const DEV_MODE = environment !== 'production';
const externalConfigurationFile = nconf.get('conf');
@@ -239,13 +239,13 @@ const appLogLevel = nconf.get('app:app_logs:logs_level');
const appLogFileTransport = booleanConf('app:app_logs:logs_files', true);
const appLogConsoleTransport = booleanConf('app:app_logs:logs_console', true);
const appLogTransports = [];
+const logsDirname = nconf.get('app:app_logs:logs_directory');
if (appLogFileTransport) {
- const dirname = nconf.get('app:app_logs:logs_directory');
const maxFiles = nconf.get('app:app_logs:logs_max_files');
appLogTransports.push(
new DailyRotateFile({
filename: 'error.log',
- dirname,
+ logsDirname,
level: 'error',
maxFiles,
})
@@ -253,7 +253,7 @@ if (appLogFileTransport) {
appLogTransports.push(
new DailyRotateFile({
filename: 'opencti.log',
- dirname,
+ logsDirname,
maxFiles,
})
);
@@ -261,6 +261,7 @@ if (appLogFileTransport) {
if (appLogConsoleTransport) {
appLogTransports.push(new winston.transports.Console());
}
+
const appLogger = winston.createLogger({
level: appLogLevel,
format: format.combine(timestamp(), format.errors({ stack: true }), format.json()),
@@ -291,6 +292,24 @@ const auditLogger = winston.createLogger({
transports: auditLogTransports,
});
+// Setup support logs
+const supportLogTransports = [];
+supportLogTransports.push(
+ new DailyRotateFile({
+ filename: 'support.log',
+ dirname: '.support',
+ maxFiles: 3,
+ maxSize: '1g',
+ level: 'warn'
+ })
+);
+
+const supportLogger = winston.createLogger({
+ level: 'warn',
+ format: format.combine(timestamp(), format.errors({ stack: true }), format.json()),
+ transports: supportLogTransports,
+});
+
// Specific case to fail any test that produce an error log
const LOG_APP = 'APP';
const buildMetaErrors = (error) => {
@@ -323,22 +342,20 @@ export const logApp = {
},
_logWithError: (level, messageOrError, meta = {}) => {
const isError = messageOrError instanceof Error;
- const message = isError ? messageOrError.message : messageOrError;
- if (isError) {
- if (messageOrError instanceof ApolloError) {
- logApp._log(level, message, messageOrError, meta);
- } else {
- const error = UnknownError(message, { cause: messageOrError });
- logApp._log(level, 'Platform unmanaged direct error', error, meta);
- }
- } else {
- logApp._log(level, message, null, meta);
+ let message = isError ? messageOrError.message : messageOrError;
+ let error = null;
+ if (isError && !(messageOrError instanceof ApolloError)) {
+ error = UnknownError(message, { cause: messageOrError });
+ message = 'Platform unmanaged direct error';
}
+ logApp._log(level, message, error, meta);
+ logSupport._log(level, message, error, meta);
},
debug: (message, meta = {}) => logApp._log('debug', message, null, meta),
info: (message, meta = {}) => logApp._log('info', message, null, meta),
warn: (messageOrError, meta = {}) => logApp._logWithError('warn', messageOrError, meta),
- error: (messageOrError, meta = {}) => logApp._logWithError('error', messageOrError, meta)
+ error: (messageOrError, meta = {}) => logApp._logWithError('error', messageOrError, meta),
+ query: (options, errCallback) => appLogger.query(options, errCallback),
};
const LOG_AUDIT = 'AUDIT';
@@ -354,6 +371,14 @@ export const logAudit = {
error: (user, operation, meta = {}) => logAudit._log('error', user, operation, meta),
};
+const LOG_TELEMETRY = 'TELEMETRY';
+export const logSupport = {
+ _log: (level, message, error, meta = {}) => {
+ supportLogger.log(level, `${addBasicMetaInformation(LOG_TELEMETRY, error, meta)} ${message}`);
+ },
+ warn: (message, meta = {}) => logSupport._log('warn', message, null, meta),
+};
+
const BasePathConfig = nconf.get('app:base_path')?.trim() ?? '';
const AppBasePath = BasePathConfig.endsWith('/') ? BasePathConfig.slice(0, -1) : BasePathConfig;
export const basePath = isEmpty(AppBasePath) || AppBasePath.startsWith('/') ? AppBasePath : `/${AppBasePath}`;
diff --git a/opencti-platform/opencti-graphql/src/generated/graphql.ts b/opencti-platform/opencti-graphql/src/generated/graphql.ts
index 6a4745b8ec2d8..14c7c0bde8224 100644
--- a/opencti-platform/opencti-graphql/src/generated/graphql.ts
+++ b/opencti-platform/opencti-graphql/src/generated/graphql.ts
@@ -30,6 +30,7 @@ import type { BasicStoreEntityOrganization } from '../modules/organization/organ
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';
+import type { BasicStoreEntitySupportPackage } from '../modules/support/support-types';
export type Maybe = T | null | undefined;
export type InputMaybe = T | null;
export type Exact = { [K in keyof T]: T[K] };
@@ -12414,6 +12415,7 @@ export type Mutation = {
streamCollectionAdd?: Maybe;
streamCollectionEdit?: Maybe;
subTypeEdit?: Maybe;
+ supportPackageAdd?: Maybe;
synchronizerAdd?: Maybe;
synchronizerEdit?: Maybe;
synchronizerStart?: Maybe;
@@ -14060,6 +14062,11 @@ export type MutationSubTypeEditArgs = {
};
+export type MutationSupportPackageAddArgs = {
+ input: SupportPackageAddInput;
+};
+
+
export type MutationSynchronizerAddArgs = {
input: SynchronizerAddInput;
};
@@ -17693,6 +17700,8 @@ export type Query = {
streamCollections: StreamCollectionConnection;
subType?: Maybe;
subTypes: SubTypeConnection;
+ supportPackage?: Maybe;
+ supportPackages?: Maybe;
synchronizer?: Maybe;
synchronizerFetch?: Maybe>>;
synchronizers?: Maybe;
@@ -19867,6 +19876,19 @@ export type QuerySubTypesArgs = {
};
+export type QuerySupportPackageArgs = {
+ id: Scalars['String']['input'];
+};
+
+
+export type QuerySupportPackagesArgs = {
+ after?: InputMaybe;
+ first?: InputMaybe;
+ orderBy?: InputMaybe;
+ orderMode?: InputMaybe;
+};
+
+
export type QuerySynchronizerArgs = {
id: Scalars['String']['input'];
};
@@ -23814,6 +23836,20 @@ export type SubscriptionWorkspaceArgs = {
id: Scalars['ID']['input'];
};
+export type SupportPackage = BasicObject & InternalObject & {
+ __typename?: 'SupportPackage';
+ created_at: Scalars['DateTime']['output'];
+ entity_type: Scalars['String']['output'];
+ id: Scalars['ID']['output'];
+ name: Scalars['String']['output'];
+ parent_types: Array>;
+ standard_id: Scalars['String']['output'];
+};
+
+export type SupportPackageAddInput = {
+ name: Scalars['String']['input'];
+};
+
export type Synchronizer = {
__typename?: 'Synchronizer';
current_state_date?: Maybe;
@@ -27857,13 +27893,13 @@ export type ResolversUnionTypes> = Resol
/** 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