ethyca-fides 2.56.3b2__py2.py3-none-any.whl → 2.57.1b0__py2.py3-none-any.whl

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.
Files changed (118) hide show
  1. {ethyca_fides-2.56.3b2.dist-info → ethyca_fides-2.57.1b0.dist-info}/METADATA +1 -1
  2. {ethyca_fides-2.56.3b2.dist-info → ethyca_fides-2.57.1b0.dist-info}/RECORD +109 -107
  3. fides/_version.py +3 -3
  4. fides/api/alembic/migrations/versions/9a1eacd2666b_add_description_column_to_asset.py +25 -0
  5. fides/api/models/asset.py +36 -18
  6. fides/api/service/connectors/query_configs/bigquery_query_config.py +46 -15
  7. fides/api/service/connectors/query_configs/query_config.py +118 -21
  8. fides/api/util/collection_util.py +29 -4
  9. fides/api/util/logger_context_utils.py +36 -1
  10. fides/service/privacy_request/privacy_request_service.py +14 -5
  11. fides/ui-build/static/admin/404.html +1 -1
  12. fides/ui-build/static/admin/_next/static/7v-H0NGW-LcEPEo86bsrZ/_buildManifest.js +1 -0
  13. fides/ui-build/static/admin/_next/static/chunks/5574-a4047e826a8cd4c3.js +1 -0
  14. fides/ui-build/static/admin/_next/static/chunks/5834-bd9ed01c4ab2ef5c.js +1 -0
  15. fides/ui-build/static/admin/_next/static/chunks/5973-67c7562997f7d5cb.js +1 -0
  16. fides/ui-build/static/admin/_next/static/chunks/6277-515c922445b8edc5.js +1 -0
  17. fides/ui-build/static/admin/_next/static/chunks/9767-4c591bd478c72650.js +1 -0
  18. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{[id]-fdbafb5a47a6a28c.js → [id]-443e6dd191ce5588.js} +1 -1
  19. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-experience/{new-fc4635c6eea7165f.js → new-36162d5bea29dcc2.js} +1 -1
  20. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{[id]-bdc686761a0d2d60.js → [id]-2d651499c07d12d9.js} +1 -1
  21. fides/ui-build/static/admin/_next/static/chunks/pages/consent/privacy-notices/{new-8618ab5fa45cd074.js → new-36e57d2f2446be82.js} +1 -1
  22. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-740824dfa6823e26.js +1 -0
  23. fides/ui-build/static/admin/_next/static/chunks/pages/dataset-5541ecd2f62711a5.js +1 -0
  24. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{[id]-a6e793e9a8ed00a9.js → [id]-0616437e1a82d3ed.js} +1 -1
  25. fides/ui-build/static/admin/_next/static/chunks/pages/datastore-connection/{new-7d314bb7238af067.js → new-f8218440494e8532.js} +1 -1
  26. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-a6448ce6ba7f0cf5.js +1 -0
  27. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-1a6965d78bfb26b0.js +1 -0
  28. fides/ui-build/static/admin/_next/static/chunks/pages/systems/configure/{[id]-c6396feeefca887b.js → [id]-82d9af34546adaa2.js} +1 -1
  29. fides/ui-build/static/admin/_next/static/css/{bd5a72c010fa9c14.css → b8dbda131f8d4c05.css} +1 -1
  30. fides/ui-build/static/admin/add-systems/manual.html +1 -1
  31. fides/ui-build/static/admin/add-systems/multiple.html +1 -1
  32. fides/ui-build/static/admin/add-systems.html +1 -1
  33. fides/ui-build/static/admin/ant-poc.html +1 -1
  34. fides/ui-build/static/admin/consent/configure/add-vendors.html +1 -1
  35. fides/ui-build/static/admin/consent/configure.html +1 -1
  36. fides/ui-build/static/admin/consent/privacy-experience/[id].html +1 -1
  37. fides/ui-build/static/admin/consent/privacy-experience/new.html +1 -1
  38. fides/ui-build/static/admin/consent/privacy-experience.html +1 -1
  39. fides/ui-build/static/admin/consent/privacy-notices/[id].html +1 -1
  40. fides/ui-build/static/admin/consent/privacy-notices/new.html +1 -1
  41. fides/ui-build/static/admin/consent/privacy-notices.html +1 -1
  42. fides/ui-build/static/admin/consent/properties.html +1 -1
  43. fides/ui-build/static/admin/consent/reporting.html +1 -1
  44. fides/ui-build/static/admin/consent.html +1 -1
  45. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn].html +1 -1
  46. fides/ui-build/static/admin/data-catalog/[systemId]/projects/[projectUrn].html +1 -1
  47. fides/ui-build/static/admin/data-catalog/[systemId]/projects.html +1 -1
  48. fides/ui-build/static/admin/data-catalog/[systemId]/resources/[resourceUrn].html +1 -1
  49. fides/ui-build/static/admin/data-catalog/[systemId]/resources.html +1 -1
  50. fides/ui-build/static/admin/data-catalog.html +1 -1
  51. fides/ui-build/static/admin/data-discovery/action-center/[monitorId]/[systemId].html +1 -1
  52. fides/ui-build/static/admin/data-discovery/action-center/[monitorId].html +1 -1
  53. fides/ui-build/static/admin/data-discovery/action-center.html +1 -1
  54. fides/ui-build/static/admin/data-discovery/activity.html +1 -1
  55. fides/ui-build/static/admin/data-discovery/detection/[resourceUrn].html +1 -1
  56. fides/ui-build/static/admin/data-discovery/detection.html +1 -1
  57. fides/ui-build/static/admin/data-discovery/discovery/[resourceUrn].html +1 -1
  58. fides/ui-build/static/admin/data-discovery/discovery.html +1 -1
  59. fides/ui-build/static/admin/datamap.html +1 -1
  60. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName]/[...subfieldNames].html +1 -1
  61. fides/ui-build/static/admin/dataset/[datasetId]/[collectionName].html +1 -1
  62. fides/ui-build/static/admin/dataset/[datasetId].html +1 -1
  63. fides/ui-build/static/admin/dataset/new.html +1 -1
  64. fides/ui-build/static/admin/dataset.html +1 -1
  65. fides/ui-build/static/admin/datastore-connection/[id].html +1 -1
  66. fides/ui-build/static/admin/datastore-connection/new.html +1 -1
  67. fides/ui-build/static/admin/datastore-connection.html +1 -1
  68. fides/ui-build/static/admin/index.html +1 -1
  69. fides/ui-build/static/admin/integrations/[id].html +1 -1
  70. fides/ui-build/static/admin/integrations.html +1 -1
  71. fides/ui-build/static/admin/lib/fides-headless.js +1 -1
  72. fides/ui-build/static/admin/lib/fides-tcf.js +3 -3
  73. fides/ui-build/static/admin/lib/fides.js +2 -2
  74. fides/ui-build/static/admin/login/[provider].html +1 -1
  75. fides/ui-build/static/admin/login.html +1 -1
  76. fides/ui-build/static/admin/messaging/[id].html +1 -1
  77. fides/ui-build/static/admin/messaging/add-template.html +1 -1
  78. fides/ui-build/static/admin/messaging.html +1 -1
  79. fides/ui-build/static/admin/privacy-requests/[id].html +1 -1
  80. fides/ui-build/static/admin/privacy-requests/configure/messaging.html +1 -1
  81. fides/ui-build/static/admin/privacy-requests/configure/storage.html +1 -1
  82. fides/ui-build/static/admin/privacy-requests/configure.html +1 -1
  83. fides/ui-build/static/admin/privacy-requests.html +1 -1
  84. fides/ui-build/static/admin/properties/[id].html +1 -1
  85. fides/ui-build/static/admin/properties/add-property.html +1 -1
  86. fides/ui-build/static/admin/properties.html +1 -1
  87. fides/ui-build/static/admin/reporting/datamap.html +1 -1
  88. fides/ui-build/static/admin/settings/about.html +1 -1
  89. fides/ui-build/static/admin/settings/consent.html +1 -1
  90. fides/ui-build/static/admin/settings/custom-fields.html +1 -1
  91. fides/ui-build/static/admin/settings/domain-records.html +1 -1
  92. fides/ui-build/static/admin/settings/domains.html +1 -1
  93. fides/ui-build/static/admin/settings/email-templates.html +1 -1
  94. fides/ui-build/static/admin/settings/locations.html +1 -1
  95. fides/ui-build/static/admin/settings/organization.html +1 -1
  96. fides/ui-build/static/admin/settings/regulations.html +1 -1
  97. fides/ui-build/static/admin/systems/configure/[id]/test-datasets.html +1 -1
  98. fides/ui-build/static/admin/systems/configure/[id].html +1 -1
  99. fides/ui-build/static/admin/systems.html +1 -1
  100. fides/ui-build/static/admin/taxonomy.html +1 -1
  101. fides/ui-build/static/admin/user-management/new.html +1 -1
  102. fides/ui-build/static/admin/user-management/profile/[id].html +1 -1
  103. fides/ui-build/static/admin/user-management.html +1 -1
  104. fides/ui-build/static/admin/_next/static/chunks/2201-abd6092e6df98c26.js +0 -1
  105. fides/ui-build/static/admin/_next/static/chunks/6277-b55810d66362f56e.js +0 -1
  106. fides/ui-build/static/admin/_next/static/chunks/6362-8f79e403fdc2404a.js +0 -1
  107. fides/ui-build/static/admin/_next/static/chunks/7495-a61f0c9fcb458664.js +0 -1
  108. fides/ui-build/static/admin/_next/static/chunks/pages/dataset/new-fc00dbeb18a7b731.js +0 -1
  109. fides/ui-build/static/admin/_next/static/chunks/pages/dataset-295756e1fd640b59.js +0 -1
  110. fides/ui-build/static/admin/_next/static/chunks/pages/integrations/[id]-20489bceb7b068b8.js +0 -1
  111. fides/ui-build/static/admin/_next/static/chunks/pages/integrations-21c9902e7b098b39.js +0 -1
  112. fides/ui-build/static/admin/_next/static/n4uO6TqGfiKHQ-X5XYkoy/_buildManifest.js +0 -1
  113. {ethyca_fides-2.56.3b2.dist-info → ethyca_fides-2.57.1b0.dist-info}/LICENSE +0 -0
  114. {ethyca_fides-2.56.3b2.dist-info → ethyca_fides-2.57.1b0.dist-info}/WHEEL +0 -0
  115. {ethyca_fides-2.56.3b2.dist-info → ethyca_fides-2.57.1b0.dist-info}/entry_points.txt +0 -0
  116. {ethyca_fides-2.56.3b2.dist-info → ethyca_fides-2.57.1b0.dist-info}/top_level.txt +0 -0
  117. /fides/ui-build/static/admin/_next/static/{n4uO6TqGfiKHQ-X5XYkoy → 7v-H0NGW-LcEPEo86bsrZ}/_ssgManifest.js +0 -0
  118. /fides/ui-build/static/admin/_next/static/chunks/pages/{_app-3b7bbcdb61d952e7.js → _app-c580f4c12ff5a438.js} +0 -0
@@ -1,5 +1,6 @@
1
1
  from typing import Any, Dict, List, Optional, Union, cast
2
2
 
3
+ import pydash
3
4
  from fideslang.models import MaskingStrategies
4
5
  from loguru import logger
5
6
  from sqlalchemy import MetaData, Table, text
@@ -17,7 +18,14 @@ from fides.api.schemas.namespace_meta.bigquery_namespace_meta import (
17
18
  from fides.api.service.connectors.query_configs.query_config import (
18
19
  QueryStringWithoutTuplesOverrideQueryConfig,
19
20
  )
20
- from fides.api.util.collection_util import Row, filter_nonempty_values
21
+ from fides.api.util.collection_util import (
22
+ Row,
23
+ filter_nonempty_values,
24
+ flatten_dict,
25
+ merge_dicts,
26
+ replace_none_arrays,
27
+ unflatten_dict,
28
+ )
21
29
 
22
30
 
23
31
  class BigQueryQueryConfig(QueryStringWithoutTuplesOverrideQueryConfig):
@@ -120,18 +128,45 @@ class BigQueryQueryConfig(QueryStringWithoutTuplesOverrideQueryConfig):
120
128
  A List of multiple Update objects are returned for partitioned tables; for a non-partitioned table,
121
129
  a single Update object is returned in a List for consistent typing.
122
130
 
123
- TODO: DRY up this method and `generate_delete` a bit
131
+ This implementation handles nested fields by grouping them as JSON objects rather than
132
+ individual field updates.
133
+
134
+ See the README.md in this directory for a detailed example of how nested data is handled.
124
135
  """
136
+
137
+ # 1. Take update_value_map as-is (already flattened)
125
138
  update_value_map: Dict[str, Any] = self.update_value_map(row, policy, request)
139
+
140
+ # 2. Flatten the row
141
+ flattened_row = flatten_dict(row)
142
+
143
+ # 3. Merge flattened_row with update_value_map (update_value_map takes precedence)
144
+ merged_dict = merge_dicts(flattened_row, update_value_map)
145
+
146
+ # 4. Unflatten the merged dictionary
147
+ nested_result = unflatten_dict(merged_dict)
148
+
149
+ # 5. Replace any arrays containing only None values with empty arrays
150
+ nested_result = replace_none_arrays(nested_result) # type: ignore
151
+
152
+ # 6. Only keep top-level keys that are in the update_value_map
153
+ top_level_keys = {key.split(".")[0] for key in update_value_map}
154
+
155
+ # Filter the nested result to only include those top-level keys
156
+ final_update_map = {
157
+ k: v for k, v in nested_result.items() if k in top_level_keys
158
+ }
159
+
160
+ # Use existing non-empty reference fields mechanism for WHERE clause
126
161
  non_empty_reference_field_keys: Dict[str, Field] = filter_nonempty_values(
127
162
  {
128
- fpath.string_path: fld.cast(row[fpath.string_path])
163
+ fpath.string_path: fld.cast(pydash.get(row, fpath.string_path))
129
164
  for fpath, fld in self.reference_field_paths.items()
130
- if fpath.string_path in row
165
+ if pydash.get(row, fpath.string_path) is not None
131
166
  }
132
167
  )
133
168
 
134
- valid = len(non_empty_reference_field_keys) > 0 and update_value_map
169
+ valid = len(non_empty_reference_field_keys) > 0 and final_update_map
135
170
  if not valid:
136
171
  logger.warning(
137
172
  "There is not enough data to generate a valid update statement for {}",
@@ -154,12 +189,12 @@ class BigQueryQueryConfig(QueryStringWithoutTuplesOverrideQueryConfig):
154
189
  partitioned_queries.append(
155
190
  table.update()
156
191
  .where(*(where_clauses + [text(partition_clause)]))
157
- .values(**update_value_map)
192
+ .values(**final_update_map)
158
193
  )
159
194
 
160
195
  return partitioned_queries
161
196
 
162
- return [table.update().where(*where_clauses).values(**update_value_map)]
197
+ return [table.update().where(*where_clauses).values(**final_update_map)]
163
198
 
164
199
  def generate_delete(self, row: Row, client: Engine) -> List[Delete]:
165
200
  """Returns a List of SQLAlchemy DELETE statements for BigQuery. Does not actually execute the delete statement.
@@ -213,18 +248,14 @@ class BigQueryQueryConfig(QueryStringWithoutTuplesOverrideQueryConfig):
213
248
  self,
214
249
  field_paths: List[FieldPath],
215
250
  ) -> List[str]:
216
- """Returns field paths in a format they can be added into SQL queries.
217
-
251
+ """
252
+ Returns field paths in a format they can be added into SQL queries.
218
253
  Only returns non-nested fields (fields with exactly one level).
219
- Nested fields are skipped with a warning log.
220
254
  """
255
+
221
256
  formatted_fields = []
222
257
  for field_path in field_paths:
223
- if len(field_path.levels) > 1:
224
- logger.warning(
225
- f"Skipping nested field '{'.'.join(field_path.levels)}' as nested fields are not supported"
226
- )
227
- else:
258
+ if len(field_path.levels) == 1:
228
259
  formatted_fields.append(field_path.levels[0])
229
260
  return formatted_fields
230
261
 
@@ -144,6 +144,45 @@ class QueryConfig(Generic[T], ABC):
144
144
 
145
145
  return data
146
146
 
147
+ def _is_child_of_masked_parent(
148
+ self, path: str, masked_parent_paths: List[str]
149
+ ) -> bool:
150
+ """
151
+ Check if the given path is a child of any already masked parent object.
152
+ """
153
+ for parent_path in masked_parent_paths:
154
+ if path == parent_path or path.startswith(parent_path + "."):
155
+ return True
156
+ return False
157
+
158
+ def _is_object_or_array_with_data_category(
159
+ self, field_val: Any, field: Optional[Field]
160
+ ) -> bool:
161
+ """
162
+ Check if field is an object or array of objects with data categories
163
+ """
164
+ # First check if the field has data categories
165
+ has_data_category = (
166
+ field and field.data_categories and len(field.data_categories) > 0
167
+ )
168
+
169
+ if not has_data_category:
170
+ return False
171
+
172
+ # Check if it's an object
173
+ is_object = isinstance(field_val, dict)
174
+
175
+ # Check if it's a non-empty array of objects
176
+ is_array_of_objects = False
177
+ if (
178
+ isinstance(field_val, list) and field_val
179
+ ): # Check if it's a list and not empty
180
+ # Only check first element if the list is not empty
181
+ is_array_of_objects = isinstance(field_val[0], dict)
182
+
183
+ # Return true if it's either an object or an array of objects and has data categories
184
+ return is_object or is_array_of_objects
185
+
147
186
  def update_value_map( # pylint: disable=R0914
148
187
  self, row: Row, policy: Policy, request: PrivacyRequest
149
188
  ) -> Dict[str, Any]:
@@ -154,27 +193,44 @@ class QueryConfig(Generic[T], ABC):
154
193
  In this example, a Null Masking Strategy was used to determine that the name/ccn/code fields, nested
155
194
  workplace_info.employer field, and the first element in 'children' for a given customer_id will be replaced
156
195
  with null values.
157
-
158
196
  """
159
197
  rule_to_collection_field_paths: Dict[Rule, List[FieldPath]] = (
160
198
  self.build_rule_target_field_paths(policy)
161
199
  )
162
200
 
163
201
  value_map: Dict[str, Any] = {}
202
+ # Track which parent paths have been masked as whole objects/arrays
203
+ masked_parent_paths: List[str] = []
204
+
164
205
  for rule, field_paths in rule_to_collection_field_paths.items():
165
206
  strategy_config = rule.masking_strategy
166
207
  if not strategy_config:
167
208
  continue
209
+
168
210
  for rule_field_path in field_paths:
211
+ # Check if field is read-only before processing
212
+ field = self.field_map().get(rule_field_path)
213
+ if field and field.read_only:
214
+ logger.debug(
215
+ f"Skipping read-only field: {rule_field_path.string_path}"
216
+ )
217
+ continue
218
+
219
+ # Skip if this field is a child of an already masked parent object
220
+ if self._is_child_of_masked_parent(
221
+ rule_field_path.string_path, masked_parent_paths
222
+ ):
223
+ logger.debug(
224
+ f"Skipping field {rule_field_path.string_path} because its parent object has already been masked"
225
+ )
226
+ continue
227
+
228
+ # Determine masking strategy
169
229
  strategy: MaskingStrategy = MaskingStrategy.get_strategy(
170
230
  strategy_config["strategy"], strategy_config["configuration"]
171
231
  )
172
- truncation: MaskingTruncation = [
173
- MaskingTruncation(field.data_type_converter, field.length)
174
- for field_path, field in self.field_map().items()
175
- if field_path == rule_field_path
176
- ][0]
177
- field = self.field_map().get(rule_field_path)
232
+
233
+ # Apply field-level masking strategy override if present
178
234
  if field and field.masking_strategy_override:
179
235
  masking_strategy_override = field.masking_strategy_override
180
236
  strategy = MaskingStrategy.get_strategy(
@@ -184,7 +240,14 @@ class QueryConfig(Generic[T], ABC):
184
240
  logger.warning(
185
241
  f"Using field-level masking override of type '{strategy.name}' for {rule_field_path.string_path}"
186
242
  )
243
+
187
244
  null_masking: bool = strategy.name == NullMaskingStrategy.name
245
+ truncation: MaskingTruncation = [
246
+ MaskingTruncation(field.data_type_converter, field.length)
247
+ for field_path, field in self.field_map().items()
248
+ if field_path == rule_field_path
249
+ ][0]
250
+
188
251
  if not self._supported_data_type(truncation, null_masking, strategy):
189
252
  logger.warning(
190
253
  "Unable to generate a query for field {}: data_type is either not present on the field or not supported for the {} masking strategy. Received data type: {}",
@@ -194,21 +257,55 @@ class QueryConfig(Generic[T], ABC):
194
257
  )
195
258
  continue
196
259
 
197
- paths_to_mask: List[str] = [
198
- join_detailed_path(path)
199
- for path in build_refined_target_paths(
200
- row, query_paths={rule_field_path: None}
201
- )
202
- ]
203
- for detailed_path in paths_to_mask:
204
- value_map[detailed_path] = self._generate_masked_value(
205
- request_id=request.id,
206
- strategy=strategy,
207
- val=pydash.objects.get(row, detailed_path),
208
- masking_truncation=truncation,
209
- null_masking=null_masking,
210
- str_field_path=detailed_path,
260
+ # Get the actual field value to determine its type
261
+ field_val = pydash.objects.get(row, rule_field_path.string_path)
262
+
263
+ # Handle objects and arrays with data categories - mask as whole entities
264
+ if self._is_object_or_array_with_data_category(field_val, field):
265
+ logger.info(
266
+ f"Field {rule_field_path.string_path} is an object or array of objects with data category. Masking entire field."
211
267
  )
268
+ if field_val is not None:
269
+ value_map[rule_field_path.string_path] = (
270
+ self._generate_masked_value(
271
+ request_id=request.id,
272
+ strategy=strategy,
273
+ val=field_val,
274
+ masking_truncation=truncation,
275
+ null_masking=null_masking,
276
+ str_field_path=rule_field_path.string_path,
277
+ )
278
+ )
279
+ # Add this path to masked parent paths to skip its children later
280
+ masked_parent_paths.append(rule_field_path.string_path)
281
+ else:
282
+ # Standard approach: build refined target paths for individual fields
283
+ paths_to_mask = [
284
+ join_detailed_path(path)
285
+ for path in build_refined_target_paths(
286
+ row, query_paths={rule_field_path: None}
287
+ )
288
+ ]
289
+
290
+ # Process each detailed path, skipping those that are children of masked parents
291
+ for detailed_path in paths_to_mask:
292
+ if self._is_child_of_masked_parent(
293
+ detailed_path, masked_parent_paths
294
+ ):
295
+ logger.debug(
296
+ f"Skipping detailed path {detailed_path} because its parent object has already been masked"
297
+ )
298
+ continue
299
+
300
+ value_map[detailed_path] = self._generate_masked_value(
301
+ request_id=request.id,
302
+ strategy=strategy,
303
+ val=pydash.objects.get(row, detailed_path),
304
+ masking_truncation=truncation,
305
+ null_masking=null_masking,
306
+ str_field_path=detailed_path,
307
+ )
308
+
212
309
  return value_map
213
310
 
214
311
  @staticmethod
@@ -204,15 +204,12 @@ def flatten_dict(data: Any, prefix: str = "", separator: str = ".") -> Dict[str,
204
204
  }
205
205
 
206
206
  Args:
207
- data: The data to flatten (must be a dict or list)
207
+ data: The data to flatten (dict, list, or scalar value)
208
208
  prefix: The current key prefix (used in recursion)
209
209
  separator: The separator to use between key segments (default: ".")
210
210
 
211
211
  Returns:
212
212
  A flattened dictionary with dot-notation keys
213
-
214
- Raises:
215
- FidesopsException: If input is not a dict or list
216
213
  """
217
214
  items = {}
218
215
 
@@ -236,3 +233,31 @@ def flatten_dict(data: Any, prefix: str = "", separator: str = ".") -> Dict[str,
236
233
  )
237
234
 
238
235
  return items
236
+
237
+
238
+ def replace_none_arrays(
239
+ data: Any,
240
+ ) -> Any:
241
+ """
242
+ Recursively replace any arrays containing only None values with empty arrays.
243
+
244
+ Args:
245
+ data: Any Python object (dict, list, etc.)
246
+
247
+ Returns:
248
+ The transformed data structure with None-only arrays replaced by empty arrays
249
+ """
250
+ if isinstance(data, dict):
251
+ # Process each key-value pair in dictionaries
252
+ return {k: replace_none_arrays(v) for k, v in data.items()}
253
+
254
+ if isinstance(data, list):
255
+ # Check if list contains only None values
256
+ if all(item is None for item in data):
257
+ return []
258
+
259
+ # Otherwise process each item in the list
260
+ return [replace_none_arrays(item) for item in data]
261
+
262
+ # Return other data types unchanged
263
+ return data
@@ -1,3 +1,4 @@
1
+ import inspect
1
2
  from abc import abstractmethod
2
3
  from enum import Enum
3
4
  from functools import wraps
@@ -81,12 +82,46 @@ def log_context(
81
82
  def wrapper(*args: Any, **kwargs: Any) -> Any:
82
83
  context = dict(additional_context)
83
84
 
84
- # extract specified param values from kwargs
85
+ # extract specified param values from kwargs and args
85
86
  if capture_args:
87
+ # First, process kwargs as they're explicitly named
86
88
  for arg_name, context_name in capture_args.items():
87
89
  if arg_name in kwargs:
88
90
  context[context_name.value] = kwargs[arg_name]
89
91
 
92
+ # Process args using signature binding for more robust parameter mapping
93
+ if args:
94
+ try:
95
+ # Get the signature and bind the arguments
96
+ sig = inspect.signature(func)
97
+ # This will map positional args to their parameter names correctly
98
+ bound_args = sig.bind_partial(*args, **kwargs)
99
+
100
+ # Now we can iterate through the bound arguments
101
+ for param_name, arg_value in bound_args.arguments.items():
102
+ # Only process if this parameter is in capture_args and wasn't already found in kwargs
103
+ if param_name in capture_args and param_name not in kwargs:
104
+ context_name = capture_args[param_name]
105
+ context[context_name.value] = arg_value
106
+ except TypeError:
107
+ # Handle the case where the arguments don't match the signature
108
+ pass
109
+
110
+ # Handle default parameters that weren't provided in args or kwargs
111
+ if capture_args:
112
+ sig = inspect.signature(func)
113
+ for param_name, param in sig.parameters.items():
114
+ # Check if parameter has a default value and is in capture_args
115
+ # and hasn't been processed yet (not in context)
116
+ if (
117
+ param.default is not param.empty
118
+ and param_name in capture_args
119
+ and capture_args[param_name].value not in context
120
+ ):
121
+ context_name = capture_args[param_name]
122
+ context[context_name.value] = param.default
123
+
124
+ # Process Contextualizable args
90
125
  for arg in args:
91
126
  if isinstance(arg, Contextualizable):
92
127
  arg_context = arg.get_log_context()
@@ -332,11 +332,20 @@ class PrivacyRequestService:
332
332
  )
333
333
 
334
334
  if _manual_approval_required(self.config_proxy, privacy_request):
335
- self.approve_privacy_requests(
336
- [privacy_request_id],
337
- reviewed_by=reviewed_by,
338
- suppress_notification=True,
339
- )
335
+ has_webhooks = self.db.query(PreApprovalWebhook).count() > 0
336
+ # If there are pre-approval webhooks, then we do nothing since the
337
+ # create_privacy_request method will have already triggered them,
338
+ # and they will be responsible of approving the request.
339
+
340
+ # If there are no pre-approval webhooks, approve the request immediately
341
+ # since it was originally approved by a person and we don't want them to
342
+ # have to manually re-approve
343
+ if not has_webhooks:
344
+ self.approve_privacy_requests(
345
+ [privacy_request_id],
346
+ reviewed_by=reviewed_by,
347
+ suppress_notification=True,
348
+ )
340
349
 
341
350
  return privacy_request
342
351
 
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link data-next-font="" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/bd5a72c010fa9c14.css" as="style"/><link rel="stylesheet" href="/_next/static/css/bd5a72c010fa9c14.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-4df2ba5ee2d40f0a.js" defer=""></script><script src="/_next/static/chunks/framework-c92fc3344e6fd165.js" defer=""></script><script src="/_next/static/chunks/main-ce7f38a12ea8c223.js" defer=""></script><script src="/_next/static/chunks/pages/_app-3b7bbcdb61d952e7.js" defer=""></script><script src="/_next/static/chunks/pages/404-1087258931760074.js" defer=""></script><script src="/_next/static/n4uO6TqGfiKHQ-X5XYkoy/_buildManifest.js" defer=""></script><script src="/_next/static/n4uO6TqGfiKHQ-X5XYkoy/_ssgManifest.js" defer=""></script><style>.data-ant-cssinjs-cache-path{content:"";}</style></head><body><div id="__next"><div style="height:100%;display:flex"></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/404","query":{},"buildId":"n4uO6TqGfiKHQ-X5XYkoy","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link data-next-font="" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/b8dbda131f8d4c05.css" as="style"/><link rel="stylesheet" href="/_next/static/css/b8dbda131f8d4c05.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-4df2ba5ee2d40f0a.js" defer=""></script><script src="/_next/static/chunks/framework-c92fc3344e6fd165.js" defer=""></script><script src="/_next/static/chunks/main-ce7f38a12ea8c223.js" defer=""></script><script src="/_next/static/chunks/pages/_app-c580f4c12ff5a438.js" defer=""></script><script src="/_next/static/chunks/pages/404-1087258931760074.js" defer=""></script><script src="/_next/static/7v-H0NGW-LcEPEo86bsrZ/_buildManifest.js" defer=""></script><script src="/_next/static/7v-H0NGW-LcEPEo86bsrZ/_ssgManifest.js" defer=""></script><style>.data-ant-cssinjs-cache-path{content:"";}</style></head><body><div id="__next"><div style="height:100%;display:flex"></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/404","query":{},"buildId":"7v-H0NGW-LcEPEo86bsrZ","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -0,0 +1 @@
1
+ self.__BUILD_MANIFEST=function(s,e,t,a,c,n,i,d,o,r,u,g,p,f,b,j,k,h,m,y,l,v,I,U,_,w,q,x,N,B,F,z,A,D,E,L,M,S,T,C,P,G,H,J,K,O,Q){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/":[w,"static/chunks/pages/index-94e6d589c4edf360.js"],"/404":["static/chunks/pages/404-1087258931760074.js"],"/_error":["static/chunks/pages/_error-bede3a8288930dcf.js"],"/add-systems":[w,"static/chunks/pages/add-systems-136bcbd20ac59bf5.js"],"/add-systems/manual":[s,e,a,c,n,j,t,o,u,k,y,q,"static/chunks/pages/add-systems/manual-d7f60624cbc12217.js"],"/add-systems/multiple":[s,e,t,u,l,x,"static/chunks/pages/add-systems/multiple-18b0b521255289a3.js"],"/ant-poc":["static/chunks/pages/ant-poc-b3b4d0a98450ffd1.js"],"/consent":["static/chunks/pages/consent-24bef021ee71e36c.js"],"/consent/configure":[s,e,t,u,l,"static/chunks/pages/consent/configure-e11ace4f273ebb47.js"],"/consent/configure/add-vendors":[s,e,t,u,l,x,"static/chunks/pages/consent/configure/add-vendors-64f83e9a2b777bf3.js"],"/consent/privacy-experience":[s,e,j,t,N,"static/chunks/pages/consent/privacy-experience-35e9df60b21e21a6.js"],"/consent/privacy-experience/new":[a,c,g,B,i,p,h,F,"static/chunks/pages/consent/privacy-experience/new-36162d5bea29dcc2.js"],"/consent/privacy-experience/[id]":[a,c,g,B,i,p,h,F,"static/chunks/pages/consent/privacy-experience/[id]-443e6dd191ce5588.js"],"/consent/privacy-notices":[s,e,t,N,"static/chunks/pages/consent/privacy-notices-da37afbe5ec81339.js"],"/consent/privacy-notices/new":[a,c,g,z,i,p,h,A,"static/chunks/pages/consent/privacy-notices/new-36e57d2f2446be82.js"],"/consent/privacy-notices/[id]":[a,c,g,z,i,p,h,A,"static/chunks/pages/consent/privacy-notices/[id]-2d651499c07d12d9.js"],"/consent/properties":[s,e,t,D,"static/chunks/pages/consent/properties-c57b209feef7c2da.js"],"/consent/reporting":[s,e,a,t,"static/chunks/pages/consent/reporting-97fea4ac45093cbd.js"],"/data-catalog":[s,e,a,c,n,t,"static/css/95ac327e5d70148d.css","static/chunks/pages/data-catalog-942d68a88b321067.js"],"/data-catalog/[systemId]/projects":[s,e,a,c,n,t,f,v,d,"static/chunks/pages/data-catalog/[systemId]/projects-1f965b9c496071d1.js"],"/data-catalog/[systemId]/projects/[projectUrn]":[s,e,t,E,"static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]-46b9790da2fec05a.js"],"/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]":[s,e,a,c,n,t,f,v,L,d,"static/chunks/pages/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]-6cbd79481199812d.js"],"/data-catalog/[systemId]/resources":[s,e,t,E,"static/chunks/pages/data-catalog/[systemId]/resources-bed368d048ea6883.js"],"/data-catalog/[systemId]/resources/[resourceUrn]":[s,e,a,c,n,t,f,v,L,d,"static/chunks/pages/data-catalog/[systemId]/resources/[resourceUrn]-e7833c1c606081a9.js"],"/data-discovery/action-center":[s,e,t,"static/chunks/pages/data-discovery/action-center-2220c30c3863b5a5.js"],"/data-discovery/action-center/[monitorId]":[s,e,a,c,n,t,r,"static/chunks/pages/data-discovery/action-center/[monitorId]-f0ab51d0d5f995de.js"],"/data-discovery/action-center/[monitorId]/[systemId]":[s,e,a,c,n,t,y,d,"static/chunks/pages/data-discovery/action-center/[monitorId]/[systemId]-00526324583139ab.js"],"/data-discovery/activity":[s,e,t,r,I,"static/chunks/pages/data-discovery/activity-1d7936f05d23097f.js"],"/data-discovery/detection":[s,e,t,r,I,M,"static/chunks/pages/data-discovery/detection-0ceaf3c555e84714.js"],"/data-discovery/detection/[resourceUrn]":[s,e,t,r,I,M,"static/chunks/pages/data-discovery/detection/[resourceUrn]-68122dbf449a11b4.js"],"/data-discovery/discovery":[s,e,a,c,n,t,r,f,S,d,"static/chunks/pages/data-discovery/discovery-8f2b102e19b0b8f2.js"],"/data-discovery/discovery/[resourceUrn]":[s,e,a,c,n,t,r,f,S,d,"static/chunks/pages/data-discovery/discovery/[resourceUrn]-22c27fe0f898ad2a.js"],"/datamap":[s,e,"static/chunks/255-bf1797f78249d090.js",t,o,k,T,"static/chunks/pages/datamap-9cd0c40bef77b120.js"],"/dataset":[s,e,b,t,m,"static/chunks/pages/dataset-5541ecd2f62711a5.js"],"/dataset/new":[b,m,"static/chunks/pages/dataset/new-740824dfa6823e26.js"],"/dataset/[datasetId]":[s,e,"static/chunks/9729-fcf6ff4e3534e4a8.js",t,U,"static/chunks/pages/dataset/[datasetId]-e14c1c07658f8a10.js"],"/dataset/[datasetId]/[collectionName]":[s,e,a,c,n,C,t,U,d,"static/chunks/pages/dataset/[datasetId]/[collectionName]-17ec8385bb1fa6d4.js"],"/dataset/[datasetId]/[collectionName]/[...subfieldNames]":[s,e,a,c,n,C,t,U,d,"static/chunks/pages/dataset/[datasetId]/[collectionName]/[...subfieldNames]-ab9bc1a3640547db.js"],"/datastore-connection":["static/css/5f393dea1c0d031c.css","static/chunks/pages/datastore-connection-b8eaa9b9d3832b30.js"],"/datastore-connection/new":[b,j,m,P,"static/chunks/pages/datastore-connection/new-f8218440494e8532.js"],"/datastore-connection/[id]":[b,m,P,"static/chunks/pages/datastore-connection/[id]-0616437e1a82d3ed.js"],"/integrations":[a,c,n,"static/chunks/6834-dcda0a8ed484775e.js",G,"static/chunks/pages/integrations-1a6965d78bfb26b0.js"],"/integrations/[id]":[s,e,a,c,n,"static/chunks/9255-336a890ada321f89.js",t,p,G,"static/chunks/pages/integrations/[id]-a6448ce6ba7f0cf5.js"],"/login":["static/chunks/pages/login-0cb0eb44bf2dd24c.js"],"/login/[provider]":["static/chunks/pages/login/[provider]-c58beef131c3a82d.js"],"/messaging":[s,e,a,c,n,t,"static/chunks/pages/messaging-f263e6bacf0f2d19.js"],"/messaging/add-template":[i,H,"static/chunks/pages/messaging/add-template-c0d6ae68ff7979c6.js"],"/messaging/[id]":[i,H,"static/chunks/pages/messaging/[id]-6b032de0a6c2c400.js"],"/privacy-requests":[s,e,t,J,"static/chunks/pages/privacy-requests-eebd2f4ead19cfd6.js"],"/privacy-requests/configure":["static/chunks/pages/privacy-requests/configure-4bad69cd42c9722c.js"],"/privacy-requests/configure/messaging":["static/chunks/pages/privacy-requests/configure/messaging-b96ee3fea3920fcf.js"],"/privacy-requests/configure/storage":["static/chunks/pages/privacy-requests/configure/storage-1b0f9469cb65abfc.js"],"/privacy-requests/[id]":[J,"static/css/15fb7d4837a1de34.css","static/chunks/pages/privacy-requests/[id]-c685d19a131d6960.js"],"/properties":[s,e,t,D,"static/chunks/pages/properties-9a1899dfe052023e.js"],"/properties/add-property":[i,K,"static/chunks/pages/properties/add-property-5a701477b006a63b.js"],"/properties/[id]":[i,K,"static/chunks/pages/properties/[id]-b4c808a8a0287d11.js"],"/reporting/datamap":[s,e,a,c,n,"static/chunks/3967-845c902667e47c4f.js",t,o,k,T,"static/chunks/pages/reporting/datamap-a3fa3ad77730a03b.js"],"/settings/about":["static/chunks/pages/settings/about-d073be113e9ca7b0.js"],"/settings/consent":["static/chunks/pages/settings/consent-4769f55b138073f7.js"],"/settings/custom-fields":[s,e,t,o,"static/chunks/pages/settings/custom-fields-744e7bbc200557e7.js"],"/settings/domain-records":[s,e,t,"static/chunks/pages/settings/domain-records-c5cd5fb578de9515.js"],"/settings/domains":["static/chunks/pages/settings/domains-775f55b3f80cd452.js"],"/settings/email-templates":["static/chunks/pages/settings/email-templates-39c7ae3602ac69b2.js"],"/settings/locations":[s,O,"static/chunks/pages/settings/locations-45e33ba111f8f8b0.js"],"/settings/organization":["static/chunks/pages/settings/organization-14def4ca3cc9cda5.js"],"/settings/regulations":[s,O,"static/chunks/pages/settings/regulations-94975aeab348528e.js"],"/systems":[s,e,t,"static/chunks/pages/systems-c320df35d51dc537.js"],"/systems/configure/[id]":[s,e,a,c,n,j,t,o,u,k,y,q,"static/chunks/pages/systems/configure/[id]-82d9af34546adaa2.js"],"/systems/configure/[id]/test-datasets":[b,"static/chunks/pages/systems/configure/[id]/test-datasets-21f26c0dc4d09e9f.js"],"/taxonomy":["static/chunks/3e38ba78-4487e45fd4ed2479.js",a,c,n,g,"static/chunks/5960-8895f51b30c35798.js",o,"static/css/34a7eb08b86ddb57.css","static/chunks/pages/taxonomy-181ea5b0ac975239.js"],"/user-management":[_,"static/chunks/pages/user-management-aa872b21bb835d34.js"],"/user-management/new":[_,Q,"static/chunks/pages/user-management/new-d6717378b42982d5.js"],"/user-management/profile/[id]":[_,Q,"static/chunks/pages/user-management/profile/[id]-622e16a17a11c096.js"],sortedPages:["/","/404","/_app","/_error","/add-systems","/add-systems/manual","/add-systems/multiple","/ant-poc","/consent","/consent/configure","/consent/configure/add-vendors","/consent/privacy-experience","/consent/privacy-experience/new","/consent/privacy-experience/[id]","/consent/privacy-notices","/consent/privacy-notices/new","/consent/privacy-notices/[id]","/consent/properties","/consent/reporting","/data-catalog","/data-catalog/[systemId]/projects","/data-catalog/[systemId]/projects/[projectUrn]","/data-catalog/[systemId]/projects/[projectUrn]/[resourceUrn]","/data-catalog/[systemId]/resources","/data-catalog/[systemId]/resources/[resourceUrn]","/data-discovery/action-center","/data-discovery/action-center/[monitorId]","/data-discovery/action-center/[monitorId]/[systemId]","/data-discovery/activity","/data-discovery/detection","/data-discovery/detection/[resourceUrn]","/data-discovery/discovery","/data-discovery/discovery/[resourceUrn]","/datamap","/dataset","/dataset/new","/dataset/[datasetId]","/dataset/[datasetId]/[collectionName]","/dataset/[datasetId]/[collectionName]/[...subfieldNames]","/datastore-connection","/datastore-connection/new","/datastore-connection/[id]","/integrations","/integrations/[id]","/login","/login/[provider]","/messaging","/messaging/add-template","/messaging/[id]","/privacy-requests","/privacy-requests/configure","/privacy-requests/configure/messaging","/privacy-requests/configure/storage","/privacy-requests/[id]","/properties","/properties/add-property","/properties/[id]","/reporting/datamap","/settings/about","/settings/consent","/settings/custom-fields","/settings/domain-records","/settings/domains","/settings/email-templates","/settings/locations","/settings/organization","/settings/regulations","/systems","/systems/configure/[id]","/systems/configure/[id]/test-datasets","/taxonomy","/user-management","/user-management/new","/user-management/profile/[id]"]}}("static/chunks/c78d26b1-88a3e1bacb2a03c2.js","static/chunks/2780-8328de94968d05e4.js","static/chunks/4481-ca8d2c75d634b6bc.js","static/chunks/2858-0b44609b6be7850b.js","static/chunks/2866-a73888c17a195cbe.js","static/chunks/9278-9b1b5970f0702668.js","static/chunks/9282-1a5a2f6f4d9ed586.js","static/css/d2d4e9a6923e6730.css","static/chunks/7980-2597c279c30fbcda.js","static/chunks/9999-f2e40d5b13343220.js","static/chunks/3949-9888699e2ac564c4.js","static/chunks/4294-5b3aa9d605217915.js","static/chunks/5834-bd9ed01c4ab2ef5c.js","static/chunks/6372-f1b54f3cb4888660.js","static/chunks/3005-373de16453ed7eea.js","static/chunks/4833-a85bd5d25ebc40c4.js","static/chunks/8499-07507004e8275df2.js","static/chunks/6277-515c922445b8edc5.js","static/chunks/5574-a4047e826a8cd4c3.js","static/chunks/3627-fb83adac32c128e6.js","static/chunks/4723-81d28e5be5c7b6d7.js","static/chunks/7751-25e0c1307988ffd7.js","static/chunks/6315-dee79f6861c94d2d.js","static/chunks/5487-d96e1abc93f92631.js","static/chunks/5480-f5bec5e881f72f8d.js","static/css/972dc7eef106ee7c.css","static/chunks/7044-9dc90893067f38ae.js","static/chunks/5826-16e497af363a0cbc.js","static/chunks/6853-cacea421af3bfc26.js","static/chunks/5908-532dfbc9d930f635.js","static/chunks/3320-87c75df57a47487e.js","static/chunks/8837-cf26e5ca1ae5aaf5.js","static/chunks/6954-6eb480eb132239c3.js","static/chunks/79-ba88d0cf4c65aaa2.js","static/chunks/3872-f3d5054bdc584eaa.js","static/chunks/3855-5c7b11871f59e0e0.js","static/chunks/2397-7177ecf4ebe68feb.js","static/chunks/9046-80f1ea44f89fe32c.js","static/chunks/5258-3a650be9142cf914.js","static/chunks/1995-0e4fc4f7b44ed72b.js","static/chunks/9767-4c591bd478c72650.js","static/chunks/5973-67c7562997f7d5cb.js","static/chunks/5246-9fc6af1a6499e0a4.js","static/chunks/8433-969280d321d1c3a2.js","static/chunks/3662-420d9807c30008ab.js","static/chunks/3086-be6b52546c3efc90.js","static/chunks/1150-73440d7b319558e8.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5574],{77213:function(e,i,t){t.d(i,{Z:function(){return h}});var r=t(24246),n=t(56351),s=t(88038),o=t.n(s),l=t(86677);t(27378);var d=t(25980),a=t(90867),c=t(77830),x=()=>{let e=(0,l.useRouter)();return(0,r.jsx)(n.xuv,{bg:"gray.50",border:"1px solid",borderColor:"blue.400",borderRadius:"md",justifyContent:"space-between",p:5,mb:5,mt:5,children:(0,r.jsxs)(n.xuv,{children:[(0,r.jsxs)(n.Kqy,{direction:{base:"column",sm:"row"},justifyContent:"space-between",children:[(0,r.jsx)(n.xvT,{fontWeight:"semibold",children:"Configure your storage and messaging provider"}),(0,r.jsx)(n.wpx,{onClick:()=>{e.push(c.fz)},children:"Configure"})]}),(0,r.jsxs)(n.xvT,{children:["Before Fides can process your privacy requests we need two simple steps to configure your storage and email client."," "]})]})})},h=e=>{let{children:i,title:t,padded:s=!0,mainProps:c}=e,h=(0,d.hz)(),u=(0,l.useRouter)(),p="/privacy-requests"===u.pathname||"/datastore-connection"===u.pathname,m=!(h.flags.privacyRequestsConfiguration&&p),{data:g}=(0,a.JE)(void 0,{skip:m}),{data:j}=(0,a.PW)(void 0,{skip:m}),f=h.flags.privacyRequestsConfiguration&&(!g||!j)&&p;return(0,r.jsxs)(n.kCb,{"data-testid":t,direction:"column",h:"100vh",children:[(0,r.jsxs)(o(),{children:[(0,r.jsxs)("title",{children:["Fides Admin UI - ",t]}),(0,r.jsx)("meta",{name:"description",content:"Privacy Engineering Platform"}),(0,r.jsx)("link",{rel:"icon",href:"/favicon.ico"})]}),(0,r.jsxs)(n.kCb,{as:"main",direction:"column",py:s?6:0,px:s?10:0,h:s?"calc(100% - 48px)":"full",flex:1,minWidth:0,overflow:"auto",...c,children:[f?(0,r.jsx)(x,{}):null,i]})]})}},58754:function(e,i,t){var r=t(24246),n=t(56351),s=t(70788);i.Z=e=>{let{heading:i,breadcrumbItems:t,isSticky:o=!0,children:l,rightContent:d,style:a,...c}=e;return(0,r.jsxs)("div",{...c,style:o?{position:"sticky",top:"-24px",paddingTop:"24px",paddingBottom:"24px",paddingLeft:"40px",marginLeft:"-40px",paddingRight:"40px",marginRight:"-40px",marginTop:"-24px",left:0,zIndex:20,backgroundColor:"white",...a}:{paddingBottom:"24px",...a},children:[(0,r.jsxs)(n.jqI,{justify:"space-between",children:["string"==typeof i?(0,r.jsx)(n.X6q,{className:t||l?"pb-4":void 0,fontSize:"2xl","data-testid":"page-heading",children:i}):i,d&&(0,r.jsx)("div",{"data-testid":"page-header-right-content",children:d})]}),!!t&&(0,r.jsx)(s.m,{className:l?"pb-4":void 0,items:t,"data-testid":"page-breadcrumb"}),l]})}},84306:function(e,i,t){t.d(i,{V:function(){return s}});var r=t(24246),n=t(56351);let s=()=>{let e=(0,n.pmc)();return{errorAlert:(i,t,s)=>{let o={...s,position:(null==s?void 0:s.position)||"top",render:e=>{let{onClose:s}=e;return(0,r.jsxs)(n.bZj,{alignItems:"normal",status:"error","data-testid":"error-alert",children:[(0,r.jsx)(n.zMQ,{}),(0,r.jsxs)(n.xuv,{children:[t&&(0,r.jsx)(n.CdC,{children:t}),(0,r.jsx)(n.XaZ,{children:i})]}),(0,r.jsx)(n.PZ7,{onClick:s,position:"relative",right:0,size:"sm",top:-1})]})}};(null==s?void 0:s.id)&&e.isActive(s.id)?e.update(s.id,o):e(o)},successAlert:(i,t,s)=>{let o={...s,position:(null==s?void 0:s.position)||"top",render:e=>{let{onClose:s}=e;return(0,r.jsxs)(n.bZj,{alignItems:"normal",status:"success",variant:"subtle","data-testid":"success-alert",children:[(0,r.jsx)(n.zMQ,{}),(0,r.jsxs)(n.xuv,{children:[t&&(0,r.jsx)(n.CdC,{children:t}),(0,r.jsx)(n.XaZ,{children:i})]}),(0,r.jsx)(n.PZ7,{onClick:s,position:"relative",right:0,size:"sm",top:-1})]})}};(null==s?void 0:s.id)&&e.isActive(s.id)?e.update(s.id,o):e(o)}}}},70788:function(e,i,t){t.d(i,{m:function(){return a}});var r=t(24246),n=t(56351),s=t(79894),o=t.n(s),l=t(27378);let{Text:d}=n.AntTypography,a=e=>{let{items:i,...t}=e,s=(0,l.useMemo)(()=>null==i?void 0:i.map((e,t)=>{let s=t===i.length-1,l={...e},a=l.onClick&&!l.href;return("string"==typeof l.title&&(l.title=(0,r.jsx)(d,{style:{color:"inherit",maxWidth:s?void 0:400},ellipsis:!s,children:l.title})),a)?l.title=(0,r.jsx)(n.wpx,{type:"text",size:"small",icon:l.icon,onClick:l.onClick,className:"ant-breadcrumb-link -mt-px px-1 text-inherit",children:l.title}):(l.icon&&(l.title=(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("span",{className:"anticon align-text-bottom",children:l.icon}),l.title]})),l.href&&l.title&&(l.title=(0,r.jsx)(o(),{href:l.href,className:"ant-breadcrumb-link",children:l.title}),delete l.href)),l}),[i]);return(0,r.jsx)(n.zrq,{items:s,...t})}},39715:function(e,i,t){var r=t(24246),n=t(56351);t(27378),i.Z=e=>{let{isEmptyState:i,yamlError:t}=e;return(0,r.jsx)(n.Rg9,{in:!0,children:(0,r.jsxs)(n.xuv,{w:"fit-content",bg:"white",p:3,borderRadius:3,children:[(0,r.jsxs)(n.Ugi,{children:[(0,r.jsx)(n.X6q,{as:"h5",color:"gray.700",size:"xs",children:"YAML"}),(0,r.jsx)(n.Vp9,{colorScheme:"red",size:"sm",variant:"solid",children:"Error"})]}),(0,r.jsx)(n.xuv,{bg:"red.50",border:"1px solid",borderColor:"red.300",color:"red.300",mt:"16px",borderRadius:"6px",children:(0,r.jsxs)(n.Ugi,{alignItems:"flex-start",margin:["14px","17px","14px","17px"],children:[(0,r.jsx)(n.f9v,{}),i&&(0,r.jsxs)(n.xuv,{children:[(0,r.jsx)(n.X6q,{as:"h5",color:"red.500",fontWeight:"semibold",size:"xs",children:"Error message:"}),(0,r.jsx)(n.xvT,{color:"gray.700",fontSize:"sm",fontWeight:"400",children:"Yaml system is required"})]}),t&&(0,r.jsxs)(n.xuv,{children:[(0,r.jsx)(n.X6q,{as:"h5",color:"red.500",fontWeight:"semibold",size:"xs",children:"Error message:"}),(0,r.jsx)(n.xvT,{color:"gray.700",fontSize:"sm",fontWeight:"400",children:t.message}),(0,r.jsx)(n.xvT,{color:"gray.700",fontSize:"sm",fontWeight:"400",children:t.reason}),(0,r.jsxs)(n.xvT,{color:"gray.700",fontSize:"sm",fontWeight:"400",children:["Ln ",(0,r.jsx)("b",{children:t.mark.line}),", Col"," ",(0,r.jsx)("b",{children:t.mark.column}),", Pos"," ",(0,r.jsx)("b",{children:t.mark.position})]})]})]})})]})})}},41207:function(e,i,t){t.d(i,{F:function(){return o},M:function(){return s}});var r=t(76649),n=t(65218);let s=t.n(n)()(()=>t.e(7088).then(t.bind(t,57088)).then(e=>e.default),{loadableGenerated:{webpack:()=>[57088]},ssr:!1}),o=e=>(0,r.Ln)({name:"string"},e)&&"YAMLException"===e.name}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5834],{97181:function(e,a,_){_.d(a,{d:function(){return t}});var n=_(24246),i=_(56351),l=_(34090),r=_(27378),d=_(91613),o=_(40324);let t=e=>{let{name:a,label:_,labelProps:t,tooltip:F,isRequired:u,layout:c="inline",...s}=e,[S,b,{setValue:p}]=(0,l.U$)(a),C=!!(b.touched&&b.error),[v,A]=(0,r.useState)("");S.value||"tags"!==s.mode&&"multiple"!==s.mode||(S.value=[]),"tags"===s.mode&&"string"==typeof S.value&&(S.value=[S.value]);let M="tags"===s.mode?(e,a)=>e?e.value!==v||S.value.includes(v)?s.optionRender?s.optionRender(e,a):e.label:'Create "'.concat(v,'"'):void 0:s.optionRender||void 0,N=e=>{A(e),s.onSearch&&s.onSearch(e)},m=(e,a)=>{p(e),s.onChange&&s.onChange(e,a)};return"inline"===c?(0,n.jsx)(i.NIc,{isInvalid:C,isRequired:u,children:(0,n.jsxs)(i.rjZ,{templateColumns:_?"1fr 3fr":"1fr",children:[_?(0,n.jsx)(o.__,{htmlFor:s.id||a,...t,children:_}):null,(0,n.jsxs)(i.jqI,{align:"center",children:[(0,n.jsxs)(i.jqI,{vertical:!0,flex:1,className:"mr-2",children:[(0,n.jsx)(i.WPr,{...S,id:s.id||a,"data-testid":"controlled-select-".concat(S.name),...s,optionRender:M,onSearch:"tags"===s.mode?N:void 0,onChange:m,value:S.value||void 0}),(0,n.jsx)(o.Bc,{isInvalid:C,message:b.error,fieldName:S.name})]}),F?(0,n.jsx)(d.Z,{label:F}):null]})]})}):(0,n.jsx)(i.NIc,{isInvalid:C,isRequired:u,children:(0,n.jsxs)(i.gCW,{alignItems:"start",children:[(0,n.jsxs)(i.jqI,{align:"center",children:[_?(0,n.jsx)(o.__,{htmlFor:s.id||a,fontSize:"xs",my:0,mr:1,...t,children:_}):null,F?(0,n.jsx)(d.Z,{label:F}):null]}),(0,n.jsx)(i.WPr,{...S,id:s.id||a,"data-testid":"controlled-select-".concat(S.name),...s,optionRender:M,onSearch:"tags"===s.mode?N:void 0,onChange:m,value:S.value||void 0}),(0,n.jsx)(o.Bc,{isInvalid:C,message:b.error,fieldName:S.name})]})})}},8411:function(e,a,_){_.d(a,{NA:function(){return l},Z8:function(){return i}});var n=_(21702);let i={[n._F.ER]:"Eritrea",[n._F.DJ]:"Djibouti",[n._F.MR]:"Mauritania",[n._F.NA]:"Namibia",[n._F.GH]:"Ghana",[n._F.SS]:"South Sudan",[n._F.SC]:"Seychelles",[n._F.IO]:"British Indian Ocean Territory",[n._F.GQ]:"Equatorial Guinea",[n._F.AO]:"Angola",[n._F.CG]:"Republic of the Congo",[n._F.BW]:"Botswana",[n._F.BI]:"Burundi",[n._F.DZ]:"Algeria",[n._F.TD]:"Chad",[n._F.NG]:"Nigeria",[n._F.TZ]:"Tanzania",[n._F.EH]:"Western Sahara",[n._F.SN]:"Senegal",[n._F.LR]:"Liberia",[n._F.ZA]:"South Africa",[n._F.CV]:"Cape Verde",[n._F.GM]:"Gambia",[n._F.SD]:"Sudan",[n._F.KM]:"Comoros",[n._F.SZ]:"Eswatini",[n._F.UG]:"Uganda",[n._F.MG]:"Madagascar",[n._F.RW]:"Rwanda",[n._F.CD]:"DR Congo",[n._F.CM]:"Cameroon",[n._F.SH]:"Saint Helena, Ascension and Tristan da Cunha",[n._F.TG]:"Togo",[n._F.MU]:"Mauritius",[n._F.NE]:"Niger",[n._F.BJ]:"Benin",[n._F.EG]:"Egypt",[n._F.LS]:"Lesotho",[n._F.ET]:"Ethiopia",[n._F.MA]:"Morocco",[n._F.YT]:"Mayotte",[n._F.BF]:"Burkina Faso",[n._F.RE]:"R\xe9union",[n._F.ST]:"S\xe3o Tom\xe9 and Pr\xedncipe",[n._F.CF]:"Central African Republic",[n._F.MZ]:"Mozambique",[n._F.MW]:"Malawi",[n._F.ML]:"Mali",[n._F.ZM]:"Zambia",[n._F.LY]:"Libya",[n._F.GW]:"Guinea-Bissau",[n._F.SO]:"Somalia",[n._F.KE]:"Kenya",[n._F.GN]:"Guinea",[n._F.ZW]:"Zimbabwe",[n._F.TN]:"Tunisia",[n._F.SL]:"Sierra Leone",[n._F.GA]:"Gabon",[n._F.CI]:"Ivory Coast",[n._F.JO]:"Jordan",[n._F.PK]:"Pakistan",[n._F.KP]:"North Korea",[n._F.MO]:"Macau",[n._F.AM]:"Armenia",[n._F.SY]:"Syria",[n._F.TJ]:"Tajikistan",[n._F.SA]:"Saudi Arabia",[n._F.KR]:"South Korea",[n._F.NP]:"Nepal",[n._F.PH]:"Philippines",[n._F.IQ]:"Iraq",[n._F.LB]:"Lebanon",[n._F.MN]:"Mongolia",[n._F.PS]:"Palestine",[n._F.YE]:"Yemen",[n._F.JP]:"Japan",[n._F.KZ]:"Kazakhstan",[n._F.LK]:"Sri Lanka",[n._F.MM]:"Myanmar",[n._F.KG]:"Kyrgyzstan",[n._F.CN]:"China",[n._F.AF]:"Afghanistan",[n._F.OM]:"Oman",[n._F.IN]:"India",[n._F.LA]:"Laos",[n._F.UZ]:"Uzbekistan",[n._F.MV]:"Maldives",[n._F.ID]:"Indonesia",[n._F.VN]:"Vietnam",[n._F.MY]:"Malaysia",[n._F.TW]:"Taiwan",[n._F.KH]:"Cambodia",[n._F.AE]:"United Arab Emirates",[n._F.HK]:"Hong Kong",[n._F.GE]:"Georgia",[n._F.BD]:"Bangladesh",[n._F.KW]:"Kuwait",[n._F.TM]:"Turkmenistan",[n._F.QA]:"Qatar",[n._F.BH]:"Bahrain",[n._F.BN]:"Brunei",[n._F.TH]:"Thailand",[n._F.BT]:"Bhutan",[n._F.SG]:"Singapore",[n._F.IL]:"Israel",[n._F.AZ]:"Azerbaijan",[n._F.TL]:"Timor-Leste",[n._F.IR]:"Iran",[n._F.TR]:"Turkey",[n._F.MK]:"North Macedonia",[n._F.IE]:"Ireland",[n._F.DK]:"Denmark",[n._F.SK]:"Slovakia",[n._F.MD]:"Moldova",[n._F.AX]:"\xc5land Islands",[n._F.PL]:"Poland",[n._F.BA]:"Bosnia and Herzegovina",[n._F.SM]:"San Marino",[n._F.CZ]:"Czechia",[n._F.EE]:"Estonia",[n._F.XK]:"Kosovo",[n._F.FO]:"Faroe Islands",[n._F.SJ]:"Svalbard and Jan Mayen",[n._F.GG]:"Guernsey",[n._F.FR]:"France",[n._F.NL]:"Netherlands",[n._F.FI]:"Finland",[n._F.PT]:"Portugal",[n._F.DE]:"Germany",[n._F.MT]:"Malta",[n._F.JE]:"Jersey",[n._F.IS]:"Iceland",[n._F.ES]:"Spain",[n._F.GI]:"Gibraltar",[n._F.NO]:"Norway",[n._F.CY]:"Cyprus",[n._F.RS]:"Serbia",[n._F.LT]:"Lithuania",[n._F.MC]:"Monaco",[n._F.LU]:"Luxembourg",[n._F.UA]:"Ukraine",[n._F.IM]:"Isle of Man",[n._F.RO]:"Romania",[n._F.BE]:"Belgium",[n._F.SE]:"Sweden",[n._F.ME]:"Montenegro",[n._F.LV]:"Latvia",[n._F.VA]:"Vatican City",[n._F.AT]:"Austria",[n._F.AL]:"Albania",[n._F.LI]:"Liechtenstein",[n._F.GR]:"Greece",[n._F.IT]:"Italy",[n._F.AD]:"Andorra",[n._F.GB]:"United Kingdom",[n._F.RU]:"Russia",[n._F.SI]:"Slovenia",[n._F.BY]:"Belarus",[n._F.CH]:"Switzerland",[n._F.HU]:"Hungary",[n._F.BG]:"Bulgaria",[n._F.HR]:"Croatia",[n._F.TC]:"Turks and Caicos Islands",[n._F.CW]:"Cura\xe7ao",[n._F.GP]:"Guadeloupe",[n._F.UM]:"United States Minor Outlying Islands",[n._F.GT]:"Guatemala",[n._F.PM]:"Saint Pierre and Miquelon",[n._F.BQ]:"Caribbean Netherlands",[n._F.GL]:"Greenland",[n._F.SX]:"Sint Maarten",[n._F.PA]:"Panama",[n._F.AW]:"Aruba",[n._F.MQ]:"Martinique",[n._F.AG]:"Antigua and Barbuda",[n._F.BM]:"Bermuda",[n._F.CU]:"Cuba",[n._F.GD]:"Grenada",[n._F.NI]:"Nicaragua",[n._F.LC]:"Saint Lucia",[n._F.KN]:"Saint Kitts and Nevis",[n._F.DO]:"Dominican Republic",[n._F.VC]:"Saint Vincent and the Grenadines",[n._F.BZ]:"Belize",[n._F.HT]:"Haiti",[n._F.JM]:"Jamaica",[n._F.BS]:"Bahamas",[n._F.MX]:"Mexico",[n._F.MF]:"Saint Martin",[n._F.SV]:"El Salvador",[n._F.BL]:"Saint Barth\xe9lemy",[n._F.AI]:"Anguilla",[n._F.MS]:"Montserrat",[n._F.VG]:"British Virgin Islands",[n._F.BB]:"Barbados",[n._F.HN]:"Honduras",[n._F.KY]:"Cayman Islands",[n._F.DM]:"Dominica",[n._F.TT]:"Trinidad and Tobago",[n._F.CR]:"Costa Rica",[n._F.SR]:"Suriname",[n._F.CX]:"Christmas Island",[n._F.WS]:"Samoa",[n._F.PF]:"French Polynesia",[n._F.AS]:"American Samoa",[n._F.NC]:"New Caledonia",[n._F.TK]:"Tokelau",[n._F.PW]:"Palau",[n._F.KI]:"Kiribati",[n._F.VU]:"Vanuatu",[n._F.PN]:"Pitcairn Islands",[n._F.CK]:"Cook Islands",[n._F.FJ]:"Fiji",[n._F.PG]:"Papua New Guinea",[n._F.MP]:"Northern Mariana Islands",[n._F.NU]:"Niue",[n._F.TV]:"Tuvalu",[n._F.NF]:"Norfolk Island",[n._F.TO]:"Tonga",[n._F.FM]:"Micronesia",[n._F.SB]:"Solomon Islands",[n._F.NR]:"Nauru",[n._F.WF]:"Wallis and Futuna",[n._F.GU]:"Guam",[n._F.AU]:"Australia",[n._F.NZ]:"New Zealand",[n._F.MH]:"Marshall Islands",[n._F.CC]:"Cocos (Keeling) Islands",[n._F.VE]:"Venezuela",[n._F.PY]:"Paraguay",[n._F.BR]:"Brazil",[n._F.CO]:"Colombia",[n._F.PE]:"Peru",[n._F.CL]:"Chile",[n._F.UY]:"Uruguay",[n._F.AR]:"Argentina",[n._F.GY]:"Guyana",[n._F.BO]:"Bolivia",[n._F.GF]:"French Guiana",[n._F.EC]:"Ecuador",[n._F.FK]:"Falkland Islands",[n._F.US_AL]:"Alabama",[n._F.US_AK]:"Alaska",[n._F.US_AZ]:"Arizona",[n._F.US_AR]:"Arkansas",[n._F.US_CA]:"California",[n._F.US_CO]:"Colorado",[n._F.US_CT]:"Connecticut",[n._F.US_DE]:"Delaware",[n._F.US_DC]:"District of Columbia (DC)",[n._F.US_FL]:"Florida",[n._F.US_GA]:"Georgia",[n._F.US_HI]:"Hawaii",[n._F.US_ID]:"Idaho",[n._F.US_IL]:"Illinois",[n._F.US_IN]:"Indiana",[n._F.US_IA]:"Iowa",[n._F.US_KS]:"Kansas",[n._F.US_KY]:"Kentucky",[n._F.US_LA]:"Louisiana",[n._F.US_ME]:"Maine",[n._F.US_MD]:"Maryland",[n._F.US_MA]:"Massachusetts",[n._F.US_MI]:"Michigan",[n._F.US_MN]:"Minnesota",[n._F.US_MS]:"Mississippi",[n._F.US_MO]:"Missouri",[n._F.US_MT]:"Montana",[n._F.US_NE]:"Nebraska",[n._F.US_NV]:"Nevada",[n._F.US_NH]:"New Hampshire",[n._F.US_NJ]:"New Jersey",[n._F.US_NM]:"New Mexico",[n._F.US_NY]:"New York",[n._F.US_NC]:"North Carolina",[n._F.US_ND]:"North Dakota",[n._F.US_OH]:"Ohio",[n._F.US_OK]:"Oklahoma",[n._F.US_OR]:"Oregon",[n._F.US_PA]:"Pennsylvania",[n._F.US_PR]:"Puerto Rico",[n._F.US_RI]:"Rhode Island",[n._F.US_SC]:"South Carolina",[n._F.US_SD]:"San Diego",[n._F.US_TN]:"Tennessee",[n._F.US_TX]:"Texas",[n._F.US_UT]:"Utah",[n._F.US_VA]:"Virginia",[n._F.US_VI]:"United States Virgin Islands",[n._F.US_VT]:"Vermon",[n._F.US_WA]:"Washington",[n._F.US_WV]:"West Virginia",[n._F.US_WI]:"Wisconsin",[n._F.US_WY]:"Wyoming",[n._F.CA_AB]:"Alberta",[n._F.CA_BC]:"British Columbia",[n._F.CA_MB]:"Manitoba",[n._F.CA_NB]:"New Brunswick",[n._F.CA_NL]:"Newfoundland and Labrador",[n._F.CA_NS]:"Nova Scotia",[n._F.CA_ON]:"Ontario",[n._F.CA_PE]:"Prince Edward Island",[n._F.CA_QC]:"Quebec",[n._F.CA_SK]:"Saskatchewan",[n._F.CA_NT]:"Northwest Territories",[n._F.CA_NU]:"Nunavut",[n._F.CA_YT]:"Yukon",[n._F.CA]:"Canada",[n._F.US]:"United States",[n._F.MEXICO_CENTRAL_AMERICA]:"Mexico and Central America",[n._F.CARIBBEAN]:"Caribbean",[n._F.EEA]:"European Economic Area (EEA)",[n._F.NON_EEA]:"Non European Economic Area"},l=new Map(Object.entries(i));Object.entries(i).map(e=>({value:e[0],label:e[1]}))},48515:function(e,a,_){var n,i;_.d(a,{O:function(){return n}}),(i=n||(n={})).ACKNOWLEDGE="acknowledge",i.OPT_IN_OPT_OUT="opt_in_opt_out"},60325:function(e,a,_){_.d(a,{DD:function(){return d},Go:function(){return o},TK:function(){return l},Uv:function(){return F},y3:function(){return u}});var n=_(21702),i=_(48515);let l=e=>{var a;return null!==(a=null==e?void 0:e.filter(e=>e.selected).map(e=>e.id))&&void 0!==a?a:[]},r=[{language:n.eU.EN,is_default:!0,title:"Title",description:"Description",accept_button_label:"Accept",reject_button_label:"Reject",save_button_label:"Save",acknowledge_button_label:"OK",privacy_preferences_link_label:"Privacy Preferences"}],d={name:"",disabled:!1,dismissable:!0,allow_language_selection:!1,show_layer1_notices:!1,layer1_button_options:i.O.OPT_IN_OPT_OUT,regions:[],translations:r,auto_detect_language:!0,auto_subdomain_cookie_deletion:!0},o=(e,a)=>{let _=a.find(a=>a.id===e.language);return _?_.name:e.language},t=e=>{var a,_,n,i,l,r,d,o,t;let{language:F,is_default:u,accept_button_label:c,reject_button_label:s}=e;return{language:F,is_default:u,accept_button_label:c,reject_button_label:s,title:e.title,description:e.description,acknowledge_button_label:null!==(a=e.acknowledge_button_label)&&void 0!==a?a:void 0,banner_title:null!==(_=e.banner_title)&&void 0!==_?_:void 0,banner_description:null!==(n=e.banner_description)&&void 0!==n?n:void 0,purpose_header:null!==(i=e.purpose_header)&&void 0!==i?i:void 0,privacy_policy_link_label:null!==(l=e.privacy_policy_link_label)&&void 0!==l?l:void 0,privacy_policy_url:null!==(r=e.privacy_policy_url)&&void 0!==r?r:void 0,privacy_preferences_link_label:null!==(d=e.privacy_preferences_link_label)&&void 0!==d?d:void 0,save_button_label:null!==(o=e.save_button_label)&&void 0!==o?o:void 0,modal_link_label:null!==(t=e.modal_link_label)&&void 0!==t?t:void 0}},F=e=>{let{created_at:a,updated_at:_,privacy_notices:n,origin:i,id:l,...r}=e;return{...r,privacy_notice_ids:n?n.map(e=>e.id):[],translations:e.translations?e.translations.map(e=>t(e)):[]}},u=e=>e===n.re.PRIVACY_CENTER?{title:{included:!0,required:!0},description:{included:!0,required:!0},save_button_label:{included:!0,required:!0},accept_button_label:{included:!0,required:!0},reject_button_label:{included:!0,required:!0},privacy_policy_link_label:{included:!0},privacy_policy_url:{included:!0},modal_link_label:{included:!0}}:e===n.re.MODAL?{title:{included:!0,required:!0},description:{included:!0,required:!0},accept_button_label:{included:!0,required:!0},reject_button_label:{included:!0,required:!0},save_button_label:{included:!0,required:!0},acknowledge_button_label:{included:!0,required:!0},privacy_policy_link_label:{included:!0},privacy_policy_url:{included:!0},privacy_preferences_link_label:{included:!0},modal_link_label:{included:!0}}:e===n.re.BANNER_AND_MODAL?{title:{included:!0,required:!0},banner_title:{included:!0},description:{included:!0,required:!0},banner_description:{included:!0},accept_button_label:{included:!0,required:!0},reject_button_label:{included:!0,required:!0},save_button_label:{included:!0,required:!0},acknowledge_button_label:{included:!0,required:!0},privacy_policy_link_label:{included:!0},privacy_policy_url:{included:!0},privacy_preferences_link_label:{included:!0,required:!0},modal_link_label:{included:!0}}:e===n.re.TCF_OVERLAY?{title:{included:!0,required:!0},banner_title:{included:!0},description:{included:!0,required:!0},banner_description:{included:!0},purpose_header:{included:!0},accept_button_label:{included:!0,required:!0},reject_button_label:{included:!0,required:!0},save_button_label:{included:!0,required:!0},acknowledge_button_label:{included:!0,required:!0},privacy_policy_link_label:{included:!0},privacy_policy_url:{included:!0},privacy_preferences_link_label:{included:!0,required:!0},modal_link_label:{included:!0}}:{title:{included:!0,required:!0},description:{included:!0,required:!0},accept_button_label:{included:!0,required:!0},reject_button_label:{included:!0,required:!0},save_button_label:{included:!0,required:!0},acknowledge_button_label:{included:!0,required:!0},privacy_policy_link_label:{included:!0},privacy_policy_url:{included:!0},privacy_preferences_link_label:{included:!0,required:!0},modal_link_label:{included:!0}}}}]);