pycti 6.6.3__tar.gz → 6.6.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pycti might be problematic. Click here for more details.

Files changed (84) hide show
  1. {pycti-6.6.3 → pycti-6.6.5}/PKG-INFO +12 -12
  2. {pycti-6.6.3 → pycti-6.6.5}/pycti/__init__.py +1 -1
  3. {pycti-6.6.3 → pycti-6.6.5}/pycti/api/opencti_api_client.py +34 -18
  4. {pycti-6.6.3 → pycti-6.6.5}/pycti/connector/opencti_connector_helper.py +8 -0
  5. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_attack_pattern.py +16 -0
  6. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_campaign.py +16 -0
  7. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_case_incident.py +16 -0
  8. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_case_rfi.py +16 -0
  9. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_case_rft.py +16 -0
  10. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_course_of_action.py +16 -0
  11. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_data_component.py +16 -0
  12. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_data_source.py +16 -0
  13. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_event.py +16 -0
  14. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_feedback.py +16 -0
  15. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_grouping.py +16 -0
  16. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_identity.py +16 -0
  17. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_incident.py +16 -0
  18. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_infrastructure.py +16 -0
  19. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_intrusion_set.py +16 -0
  20. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_language.py +16 -0
  21. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_location.py +16 -0
  22. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_malware.py +16 -0
  23. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_malware_analysis.py +16 -0
  24. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_narrative.py +16 -0
  25. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_note.py +16 -0
  26. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_observed_data.py +16 -0
  27. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_opinion.py +8 -0
  28. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_stix_core_relationship.py +8 -0
  29. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_stix_sighting_relationship.py +8 -0
  30. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_task.py +8 -0
  31. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_threat_actor_group.py +8 -0
  32. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_threat_actor_individual.py +8 -0
  33. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_tool.py +8 -0
  34. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_vulnerability.py +8 -0
  35. {pycti-6.6.3 → pycti-6.6.5}/pycti/utils/opencti_stix2.py +15 -0
  36. {pycti-6.6.3 → pycti-6.6.5}/pycti.egg-info/PKG-INFO +12 -12
  37. {pycti-6.6.3 → pycti-6.6.5}/pycti.egg-info/requires.txt +11 -11
  38. {pycti-6.6.3 → pycti-6.6.5}/setup.cfg +11 -11
  39. {pycti-6.6.3 → pycti-6.6.5}/LICENSE +0 -0
  40. {pycti-6.6.3 → pycti-6.6.5}/README.md +0 -0
  41. {pycti-6.6.3 → pycti-6.6.5}/pycti/api/__init__.py +0 -0
  42. {pycti-6.6.3 → pycti-6.6.5}/pycti/api/opencti_api_connector.py +0 -0
  43. {pycti-6.6.3 → pycti-6.6.5}/pycti/api/opencti_api_playbook.py +0 -0
  44. {pycti-6.6.3 → pycti-6.6.5}/pycti/api/opencti_api_work.py +0 -0
  45. {pycti-6.6.3 → pycti-6.6.5}/pycti/connector/__init__.py +0 -0
  46. {pycti-6.6.3 → pycti-6.6.5}/pycti/connector/opencti_connector.py +0 -0
  47. {pycti-6.6.3 → pycti-6.6.5}/pycti/connector/opencti_metric_handler.py +0 -0
  48. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/__init__.py +0 -0
  49. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/indicator/__init__.py +0 -0
  50. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/indicator/opencti_indicator_properties.py +0 -0
  51. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_capability.py +0 -0
  52. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_channel.py +0 -0
  53. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_external_reference.py +0 -0
  54. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_group.py +0 -0
  55. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_indicator.py +0 -0
  56. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_kill_chain_phase.py +0 -0
  57. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_label.py +0 -0
  58. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_marking_definition.py +0 -0
  59. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_report.py +0 -0
  60. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_role.py +0 -0
  61. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_settings.py +0 -0
  62. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_stix.py +0 -0
  63. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_stix_core_object.py +0 -0
  64. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_stix_cyber_observable.py +0 -0
  65. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_stix_domain_object.py +0 -0
  66. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_stix_nested_ref_relationship.py +0 -0
  67. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_stix_object_or_stix_relationship.py +0 -0
  68. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_threat_actor.py +0 -0
  69. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_user.py +0 -0
  70. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/opencti_vocabulary.py +0 -0
  71. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/stix_cyber_observable/__init__.py +0 -0
  72. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/stix_cyber_observable/opencti_stix_cyber_observable_deprecated.py +0 -0
  73. {pycti-6.6.3 → pycti-6.6.5}/pycti/entities/stix_cyber_observable/opencti_stix_cyber_observable_properties.py +0 -0
  74. {pycti-6.6.3 → pycti-6.6.5}/pycti/utils/__init__.py +0 -0
  75. {pycti-6.6.3 → pycti-6.6.5}/pycti/utils/constants.py +0 -0
  76. {pycti-6.6.3 → pycti-6.6.5}/pycti/utils/opencti_logger.py +0 -0
  77. {pycti-6.6.3 → pycti-6.6.5}/pycti/utils/opencti_stix2_identifier.py +0 -0
  78. {pycti-6.6.3 → pycti-6.6.5}/pycti/utils/opencti_stix2_splitter.py +0 -0
  79. {pycti-6.6.3 → pycti-6.6.5}/pycti/utils/opencti_stix2_update.py +0 -0
  80. {pycti-6.6.3 → pycti-6.6.5}/pycti/utils/opencti_stix2_utils.py +0 -0
  81. {pycti-6.6.3 → pycti-6.6.5}/pycti.egg-info/SOURCES.txt +0 -0
  82. {pycti-6.6.3 → pycti-6.6.5}/pycti.egg-info/dependency_links.txt +0 -0
  83. {pycti-6.6.3 → pycti-6.6.5}/pycti.egg-info/top_level.txt +0 -0
  84. {pycti-6.6.3 → pycti-6.6.5}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pycti
3
- Version: 6.6.3
3
+ Version: 6.6.5
4
4
  Summary: Python API client for OpenCTI.
5
5
  Home-page: https://github.com/OpenCTI-Platform/client-python
6
6
  Author: Filigran
@@ -23,37 +23,37 @@ Description-Content-Type: text/markdown
23
23
  License-File: LICENSE
24
24
  Requires-Dist: datefinder~=0.7.3
25
25
  Requires-Dist: pika~=1.3.0
26
- Requires-Dist: pydantic<2.11.0,>=2.8.2
26
+ Requires-Dist: pydantic~=2.11.3
27
27
  Requires-Dist: python-magic~=0.4.27; sys_platform == "linux" or sys_platform == "darwin"
28
28
  Requires-Dist: python-magic-bin~=0.4.14; sys_platform == "win32"
29
- Requires-Dist: python_json_logger~=2.0.4
29
+ Requires-Dist: python_json_logger~=3.3.0
30
30
  Requires-Dist: PyYAML~=6.0
31
- Requires-Dist: requests<=2.32.3,>=2.32.0
32
- Requires-Dist: setuptools~=71.1.0
31
+ Requires-Dist: requests~=2.32.3
32
+ Requires-Dist: setuptools~=78.1.0
33
33
  Requires-Dist: cachetools~=5.5.0
34
34
  Requires-Dist: prometheus-client~=0.21.1
35
- Requires-Dist: opentelemetry-api<=1.30.0,>=1.22.0
36
- Requires-Dist: opentelemetry-sdk<=1.30.0,>=1.22.0
35
+ Requires-Dist: opentelemetry-api~=1.32.0
36
+ Requires-Dist: opentelemetry-sdk~=1.32.0
37
37
  Requires-Dist: deprecation~=2.1.0
38
38
  Requires-Dist: fastapi<0.116.0,>=0.115.8
39
39
  Requires-Dist: uvicorn[standard]<0.35.0,>=0.33.0
40
40
  Requires-Dist: filigran-sseclient>=1.0.2
41
41
  Requires-Dist: stix2~=3.0.1
42
42
  Provides-Extra: dev
43
- Requires-Dist: black~=24.4.0; extra == "dev"
43
+ Requires-Dist: black~=25.1.0; extra == "dev"
44
44
  Requires-Dist: build~=1.2.1; extra == "dev"
45
45
  Requires-Dist: isort~=6.0.0; extra == "dev"
46
- Requires-Dist: types-pytz~=2025.1.0.20250204; extra == "dev"
47
- Requires-Dist: pre-commit~=3.8.0; extra == "dev"
46
+ Requires-Dist: types-pytz~=2025.2.0.20250326; extra == "dev"
47
+ Requires-Dist: pre-commit~=4.2.0; extra == "dev"
48
48
  Requires-Dist: pytest-cases~=3.8.0; extra == "dev"
49
- Requires-Dist: pytest-cov~=5.0.0; extra == "dev"
49
+ Requires-Dist: pytest-cov~=6.1.1; extra == "dev"
50
50
  Requires-Dist: pytest_randomly~=3.16.0; extra == "dev"
51
51
  Requires-Dist: pytest~=8.3.4; extra == "dev"
52
52
  Requires-Dist: types-python-dateutil~=2.9.0; extra == "dev"
53
53
  Requires-Dist: wheel~=0.45.1; extra == "dev"
54
54
  Provides-Extra: doc
55
55
  Requires-Dist: autoapi~=2.0.1; extra == "doc"
56
- Requires-Dist: sphinx-autodoc-typehints~=2.5.0; extra == "doc"
56
+ Requires-Dist: sphinx-autodoc-typehints~=3.1.0; extra == "doc"
57
57
  Requires-Dist: sphinx-rtd-theme~=3.0.2; extra == "doc"
58
58
  Dynamic: license-file
59
59
 
@@ -1,5 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
- __version__ = "6.6.3"
2
+ __version__ = "6.6.5"
3
3
 
4
4
  from .api.opencti_api_client import OpenCTIApiClient
5
5
  from .api.opencti_api_connector import OpenCTIApiConnector
@@ -71,6 +71,25 @@ from pycti.utils.opencti_stix2 import OpenCTIStix2
71
71
  from pycti.utils.opencti_stix2_utils import OpenCTIStix2Utils
72
72
 
73
73
 
74
+ def build_request_headers(token: str, custom_headers: str, app_logger):
75
+ headers_dict = {
76
+ "User-Agent": "pycti/" + __version__,
77
+ "Authorization": "Bearer " + token,
78
+ }
79
+ # Build and add custom headers
80
+ if custom_headers is not None:
81
+ for header_pair in custom_headers.strip().split(";"):
82
+ if header_pair: # Skip empty header pairs
83
+ try:
84
+ key, value = header_pair.split(":", 1)
85
+ headers_dict[key.strip()] = value.strip()
86
+ except ValueError:
87
+ app_logger.warning(
88
+ "Ignored invalid header pair", {"header_pair": header_pair}
89
+ )
90
+ return headers_dict
91
+
92
+
74
93
  class File:
75
94
  def __init__(self, name, data, mime="text/plain"):
76
95
  self.name = name
@@ -99,24 +118,28 @@ class OpenCTIApiClient:
99
118
  ```
100
119
  :param json_logging: format the logs as json if set to True
101
120
  :type json_logging: bool, optional
121
+ :param bundle_send_to_queue: if bundle will be sent to queue
122
+ :type bundle_send_to_queue: bool, optional
102
123
  :param cert: If String, file path to pem file. If Tuple, a ('path_to_cert.crt', 'path_to_key.key') pair representing the certificate and the key.
103
124
  :type cert: str, tuple, optional
104
- :param auth: Add a AuthBase class with custom authentication for you OpenCTI infrastructure.
105
- :type auth: requests.auth.AuthBase, optional
125
+ :param custom_headers: Add custom headers to use with the graphql queries
126
+ :type custom_headers: str, optional must in the format header01:value;header02:value
127
+ :param perform_health_check: if client init must check the api access
128
+ :type perform_health_check: bool, optional
106
129
  """
107
130
 
108
131
  def __init__(
109
132
  self,
110
133
  url: str,
111
134
  token: str,
112
- log_level="info",
135
+ log_level: str = "info",
113
136
  ssl_verify: Union[bool, str] = False,
114
137
  proxies: Union[Dict[str, str], None] = None,
115
- json_logging=False,
116
- bundle_send_to_queue=True,
138
+ json_logging: bool = False,
139
+ bundle_send_to_queue: bool = True,
117
140
  cert: Union[str, Tuple[str, str], None] = None,
118
- auth=None,
119
- perform_health_check=True,
141
+ custom_headers: str = None,
142
+ perform_health_check: bool = True,
120
143
  ):
121
144
  """Constructor method"""
122
145
 
@@ -138,17 +161,10 @@ class OpenCTIApiClient:
138
161
  # Define API
139
162
  self.api_token = token
140
163
  self.api_url = url + "/graphql"
141
- self.request_headers = {
142
- "User-Agent": "pycti/" + __version__,
143
- "Authorization": "Bearer " + token,
144
- }
145
-
146
- if auth is not None:
147
- self.session = requests.session()
148
- self.session.auth = auth
149
- else:
150
- self.session = requests.session()
151
-
164
+ self.request_headers = build_request_headers(
165
+ token, custom_headers, self.app_logger
166
+ )
167
+ self.session = requests.session()
152
168
  # Define the dependencies
153
169
  self.work = OpenCTIApiWork(self)
154
170
  self.playbook = OpenCTIApiPlaybook(self)
@@ -902,6 +902,12 @@ class OpenCTIConnectorHelper: # pylint: disable=too-many-public-methods
902
902
  self.opencti_token = get_config_variable(
903
903
  "OPENCTI_TOKEN", ["opencti", "token"], config
904
904
  )
905
+ self.opencti_custom_headers = get_config_variable(
906
+ "OPENCTI_CUSTOM_HEADERS",
907
+ ["opencti", "custom_headers"],
908
+ config,
909
+ default=None,
910
+ )
905
911
  self.opencti_ssl_verify = get_config_variable(
906
912
  "OPENCTI_SSL_VERIFY", ["opencti", "ssl_verify"], config, False, False
907
913
  )
@@ -1078,6 +1084,7 @@ class OpenCTIConnectorHelper: # pylint: disable=too-many-public-methods
1078
1084
  self.log_level,
1079
1085
  self.opencti_ssl_verify,
1080
1086
  json_logging=self.opencti_json_logging,
1087
+ custom_headers=self.opencti_custom_headers,
1081
1088
  bundle_send_to_queue=self.bundle_send_to_queue,
1082
1089
  )
1083
1090
  # - Impersonate API that will use applicant id
@@ -1088,6 +1095,7 @@ class OpenCTIConnectorHelper: # pylint: disable=too-many-public-methods
1088
1095
  self.log_level,
1089
1096
  self.opencti_ssl_verify,
1090
1097
  json_logging=self.opencti_json_logging,
1098
+ custom_headers=self.opencti_custom_headers,
1091
1099
  bundle_send_to_queue=self.bundle_send_to_queue,
1092
1100
  )
1093
1101
  self.connector_logger = self.api.logger_class(self.connect_name)
@@ -17,6 +17,14 @@ class AttackPattern:
17
17
  spec_version
18
18
  created_at
19
19
  updated_at
20
+ status {
21
+ id
22
+ template {
23
+ id
24
+ name
25
+ color
26
+ }
27
+ }
20
28
  createdBy {
21
29
  ... on Identity {
22
30
  id
@@ -109,6 +117,14 @@ class AttackPattern:
109
117
  spec_version
110
118
  created_at
111
119
  updated_at
120
+ status {
121
+ id
122
+ template {
123
+ id
124
+ name
125
+ color
126
+ }
127
+ }
112
128
  createdBy {
113
129
  ... on Identity {
114
130
  id
@@ -17,6 +17,14 @@ class Campaign:
17
17
  spec_version
18
18
  created_at
19
19
  updated_at
20
+ status {
21
+ id
22
+ template {
23
+ id
24
+ name
25
+ color
26
+ }
27
+ }
20
28
  createdBy {
21
29
  ... on Identity {
22
30
  id
@@ -103,6 +111,14 @@ class Campaign:
103
111
  spec_version
104
112
  created_at
105
113
  updated_at
114
+ status {
115
+ id
116
+ template {
117
+ id
118
+ name
119
+ color
120
+ }
121
+ }
106
122
  createdBy {
107
123
  ... on Identity {
108
124
  id
@@ -17,6 +17,14 @@ class CaseIncident:
17
17
  spec_version
18
18
  created_at
19
19
  updated_at
20
+ status {
21
+ id
22
+ template {
23
+ id
24
+ name
25
+ color
26
+ }
27
+ }
20
28
  createdBy {
21
29
  ... on Identity {
22
30
  id
@@ -233,6 +241,14 @@ class CaseIncident:
233
241
  spec_version
234
242
  created_at
235
243
  updated_at
244
+ status {
245
+ id
246
+ template {
247
+ id
248
+ name
249
+ color
250
+ }
251
+ }
236
252
  createdBy {
237
253
  ... on Identity {
238
254
  id
@@ -17,6 +17,14 @@ class CaseRfi:
17
17
  spec_version
18
18
  created_at
19
19
  updated_at
20
+ status {
21
+ id
22
+ template {
23
+ id
24
+ name
25
+ color
26
+ }
27
+ }
20
28
  createdBy {
21
29
  ... on Identity {
22
30
  id
@@ -232,6 +240,14 @@ class CaseRfi:
232
240
  spec_version
233
241
  created_at
234
242
  updated_at
243
+ status {
244
+ id
245
+ template {
246
+ id
247
+ name
248
+ color
249
+ }
250
+ }
235
251
  createdBy {
236
252
  ... on Identity {
237
253
  id
@@ -17,6 +17,14 @@ class CaseRft:
17
17
  spec_version
18
18
  created_at
19
19
  updated_at
20
+ status {
21
+ id
22
+ template {
23
+ id
24
+ name
25
+ color
26
+ }
27
+ }
20
28
  createdBy {
21
29
  ... on Identity {
22
30
  id
@@ -232,6 +240,14 @@ class CaseRft:
232
240
  spec_version
233
241
  created_at
234
242
  updated_at
243
+ status {
244
+ id
245
+ template {
246
+ id
247
+ name
248
+ color
249
+ }
250
+ }
235
251
  createdBy {
236
252
  ... on Identity {
237
253
  id
@@ -17,6 +17,14 @@ class CourseOfAction:
17
17
  spec_version
18
18
  created_at
19
19
  updated_at
20
+ status {
21
+ id
22
+ template {
23
+ id
24
+ name
25
+ color
26
+ }
27
+ }
20
28
  createdBy {
21
29
  ... on Identity {
22
30
  id
@@ -96,6 +104,14 @@ class CourseOfAction:
96
104
  spec_version
97
105
  created_at
98
106
  updated_at
107
+ status {
108
+ id
109
+ template {
110
+ id
111
+ name
112
+ color
113
+ }
114
+ }
99
115
  createdBy {
100
116
  ... on Identity {
101
117
  id
@@ -17,6 +17,14 @@ class DataComponent:
17
17
  spec_version
18
18
  created_at
19
19
  updated_at
20
+ status {
21
+ id
22
+ template {
23
+ id
24
+ name
25
+ color
26
+ }
27
+ }
20
28
  createdBy {
21
29
  ... on Identity {
22
30
  id
@@ -118,6 +126,14 @@ class DataComponent:
118
126
  spec_version
119
127
  created_at
120
128
  updated_at
129
+ status {
130
+ id
131
+ template {
132
+ id
133
+ name
134
+ color
135
+ }
136
+ }
121
137
  createdBy {
122
138
  ... on Identity {
123
139
  id
@@ -17,6 +17,14 @@ class DataSource:
17
17
  spec_version
18
18
  created_at
19
19
  updated_at
20
+ status {
21
+ id
22
+ template {
23
+ id
24
+ name
25
+ color
26
+ }
27
+ }
20
28
  createdBy {
21
29
  ... on Identity {
22
30
  id
@@ -97,6 +105,14 @@ class DataSource:
97
105
  spec_version
98
106
  created_at
99
107
  updated_at
108
+ status {
109
+ id
110
+ template {
111
+ id
112
+ name
113
+ color
114
+ }
115
+ }
100
116
  createdBy {
101
117
  ... on Identity {
102
118
  id
@@ -17,6 +17,14 @@ class Event:
17
17
  spec_version
18
18
  created_at
19
19
  updated_at
20
+ status {
21
+ id
22
+ template {
23
+ id
24
+ name
25
+ color
26
+ }
27
+ }
20
28
  createdBy {
21
29
  ... on Identity {
22
30
  id
@@ -103,6 +111,14 @@ class Event:
103
111
  spec_version
104
112
  created_at
105
113
  updated_at
114
+ status {
115
+ id
116
+ template {
117
+ id
118
+ name
119
+ color
120
+ }
121
+ }
106
122
  createdBy {
107
123
  ... on Identity {
108
124
  id
@@ -16,6 +16,14 @@ class Feedback:
16
16
  spec_version
17
17
  created_at
18
18
  updated_at
19
+ status {
20
+ id
21
+ template {
22
+ id
23
+ name
24
+ color
25
+ }
26
+ }
19
27
  createdBy {
20
28
  ... on Identity {
21
29
  id
@@ -204,6 +212,14 @@ class Feedback:
204
212
  spec_version
205
213
  created_at
206
214
  updated_at
215
+ status {
216
+ id
217
+ template {
218
+ id
219
+ name
220
+ color
221
+ }
222
+ }
207
223
  createdBy {
208
224
  ... on Identity {
209
225
  id
@@ -18,6 +18,14 @@ class Grouping:
18
18
  spec_version
19
19
  created_at
20
20
  updated_at
21
+ status {
22
+ id
23
+ template {
24
+ id
25
+ name
26
+ color
27
+ }
28
+ }
21
29
  createdBy {
22
30
  ... on Identity {
23
31
  id
@@ -197,6 +205,14 @@ class Grouping:
197
205
  spec_version
198
206
  created_at
199
207
  updated_at
208
+ status {
209
+ id
210
+ template {
211
+ id
212
+ name
213
+ color
214
+ }
215
+ }
200
216
  createdBy {
201
217
  ... on Identity {
202
218
  id
@@ -19,6 +19,14 @@ class Identity:
19
19
  spec_version
20
20
  created_at
21
21
  updated_at
22
+ status {
23
+ id
24
+ template {
25
+ id
26
+ name
27
+ color
28
+ }
29
+ }
22
30
  createdBy {
23
31
  ... on Identity {
24
32
  id
@@ -112,6 +120,14 @@ class Identity:
112
120
  spec_version
113
121
  created_at
114
122
  updated_at
123
+ status {
124
+ id
125
+ template {
126
+ id
127
+ name
128
+ color
129
+ }
130
+ }
115
131
  createdBy {
116
132
  ... on Identity {
117
133
  id
@@ -18,6 +18,14 @@ class Incident:
18
18
  spec_version
19
19
  created_at
20
20
  updated_at
21
+ status {
22
+ id
23
+ template {
24
+ id
25
+ name
26
+ color
27
+ }
28
+ }
21
29
  createdBy {
22
30
  ... on Identity {
23
31
  id
@@ -107,6 +115,14 @@ class Incident:
107
115
  spec_version
108
116
  created_at
109
117
  updated_at
118
+ status {
119
+ id
120
+ template {
121
+ id
122
+ name
123
+ color
124
+ }
125
+ }
110
126
  createdBy {
111
127
  ... on Identity {
112
128
  id
@@ -22,6 +22,14 @@ class Infrastructure:
22
22
  spec_version
23
23
  created_at
24
24
  updated_at
25
+ status {
26
+ id
27
+ template {
28
+ id
29
+ name
30
+ color
31
+ }
32
+ }
25
33
  createdBy {
26
34
  ... on Identity {
27
35
  id
@@ -117,6 +125,14 @@ class Infrastructure:
117
125
  spec_version
118
126
  created_at
119
127
  updated_at
128
+ status {
129
+ id
130
+ template {
131
+ id
132
+ name
133
+ color
134
+ }
135
+ }
120
136
  createdBy {
121
137
  ... on Identity {
122
138
  id
@@ -17,6 +17,14 @@ class IntrusionSet:
17
17
  spec_version
18
18
  created_at
19
19
  updated_at
20
+ status {
21
+ id
22
+ template {
23
+ id
24
+ name
25
+ color
26
+ }
27
+ }
20
28
  createdBy {
21
29
  ... on Identity {
22
30
  id
@@ -106,6 +114,14 @@ class IntrusionSet:
106
114
  spec_version
107
115
  created_at
108
116
  updated_at
117
+ status {
118
+ id
119
+ template {
120
+ id
121
+ name
122
+ color
123
+ }
124
+ }
109
125
  createdBy {
110
126
  ... on Identity {
111
127
  id
@@ -17,6 +17,14 @@ class Language:
17
17
  spec_version
18
18
  created_at
19
19
  updated_at
20
+ status {
21
+ id
22
+ template {
23
+ id
24
+ name
25
+ color
26
+ }
27
+ }
20
28
  createdBy {
21
29
  ... on Identity {
22
30
  id
@@ -120,6 +128,14 @@ class Language:
120
128
  spec_version
121
129
  created_at
122
130
  updated_at
131
+ status {
132
+ id
133
+ template {
134
+ id
135
+ name
136
+ color
137
+ }
138
+ }
123
139
  createdBy {
124
140
  ... on Identity {
125
141
  id