@transcend-io/sdk 1.3.1 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -3,7 +3,7 @@ import { GraphQLClient, gql } from "graphql-request";
3
3
  import got from "got";
4
4
  import { parse } from "graphql";
5
5
  import { chunk, difference, flatten, groupBy, keyBy, sortBy, uniq, uniqBy } from "lodash-es";
6
- import { AssessmentsDisplayLogicAction, AttributeKeyType, ComparisonOperator, ConsentTrackerStatus, EnricherType, IdentifierType, IsoCountryCode, IsoCountrySubdivisionCode, LogicOperator, OrderDirection, PreferenceQueryResponseItem, PreferenceStoreAuthLevel, PreferenceStoreIdentifier, PreferenceTopicType, PreferenceUpdateItem, RequestAction } from "@transcend-io/privacy-types";
6
+ import { AssessmentsDisplayLogicAction, AttributeKeyType, ComparisonOperator, ConsentTrackerStatus, EnricherType, IdentifierType, IsoCountryCode, IsoCountrySubdivisionCode, LogicOperator, OrderDirection, PreferenceQueryResponseItem, PreferenceStoreAuthLevel, PreferenceStoreIdentifier, PreferenceTopicType, PreferenceUpdateItem, RequestAction, WorkflowConfigType, WorkflowConfigVisibility } from "@transcend-io/privacy-types";
7
7
  import * as t from "io-ts";
8
8
  import { InitialViewState, KnownDefaultPurpose, OnConsentExpiry, UserPrivacySignalEnum } from "@transcend-io/airgap.js-types";
9
9
  import { apply, decodeCodec, valuesOf } from "@transcend-io/type-utils";
@@ -284,7 +284,7 @@ const UPDATE_BUSINESS_ENTITIES = gql`
284
284
  `;
285
285
  //#endregion
286
286
  //#region src/data-inventory/fetchAllBusinessEntities.ts
287
- const PAGE_SIZE$42 = 20;
287
+ const PAGE_SIZE$43 = 20;
288
288
  /**
289
289
  * Fetch all businessEntities in the organization
290
290
  *
@@ -299,14 +299,14 @@ async function fetchAllBusinessEntities(client, options = {}) {
299
299
  do {
300
300
  const { businessEntities: { nodes } } = await makeGraphQLRequest(client, BUSINESS_ENTITIES, {
301
301
  variables: {
302
- first: PAGE_SIZE$42,
302
+ first: PAGE_SIZE$43,
303
303
  offset
304
304
  },
305
305
  logger
306
306
  });
307
307
  businessEntities.push(...nodes);
308
- offset += PAGE_SIZE$42;
309
- shouldContinue = nodes.length === PAGE_SIZE$42;
308
+ offset += PAGE_SIZE$43;
309
+ shouldContinue = nodes.length === PAGE_SIZE$43;
310
310
  } while (shouldContinue);
311
311
  return businessEntities.sort((a, b) => a.title.localeCompare(b.title));
312
312
  }
@@ -357,7 +357,7 @@ const UPDATE_DATA_SUB_CATEGORIES = gql`
357
357
  `;
358
358
  //#endregion
359
359
  //#region src/data-inventory/fetchAllDataCategories.ts
360
- const PAGE_SIZE$41 = 20;
360
+ const PAGE_SIZE$42 = 20;
361
361
  /**
362
362
  * Fetch all dataSubCategories in the organization
363
363
  *
@@ -373,14 +373,14 @@ async function fetchAllDataCategories(client, options = {}) {
373
373
  do {
374
374
  const { dataSubCategories: { nodes } } = await makeGraphQLRequest(client, DATA_SUB_CATEGORIES, {
375
375
  variables: {
376
- first: PAGE_SIZE$41,
376
+ first: PAGE_SIZE$42,
377
377
  offset
378
378
  },
379
379
  logger
380
380
  });
381
381
  dataSubCategories.push(...nodes);
382
- offset += PAGE_SIZE$41;
383
- shouldContinue = nodes.length === PAGE_SIZE$41;
382
+ offset += PAGE_SIZE$42;
383
+ shouldContinue = nodes.length === PAGE_SIZE$42;
384
384
  } while (shouldContinue);
385
385
  return dataSubCategories.sort((a, b) => a.name.localeCompare(b.name));
386
386
  }
@@ -768,6 +768,20 @@ const DATA_SILOS_ENRICHED = gql`
768
768
  }
769
769
  }
770
770
  `;
771
+ /**
772
+ * Singular data silo fetch — `sombra` is available on `DataSilo` but not on
773
+ * the `DataSiloBulkPreview` nodes returned by the paginated `dataSilos` query.
774
+ */
775
+ const DATA_SILO_SOMBRA = gql`
776
+ query TranscendCliDataSiloSombra($id: String!) {
777
+ dataSilo(id: $id) {
778
+ id
779
+ sombra {
780
+ id
781
+ }
782
+ }
783
+ }
784
+ `;
771
785
  const UPDATE_DATA_SILOS = gql`
772
786
  mutation TranscendCliUpdateDataSilo($input: UpdateDataSilosInput!) {
773
787
  updateDataSilos(input: $input) {
@@ -860,7 +874,7 @@ const IDENTIFIERS = parse(gql`
860
874
  `);
861
875
  //#endregion
862
876
  //#region src/data-inventory/fetchAllIdentifiers.ts
863
- const PAGE_SIZE$40 = 20;
877
+ const PAGE_SIZE$41 = 20;
864
878
  /**
865
879
  * Fetch all identifiers in the organization
866
880
  *
@@ -877,13 +891,13 @@ async function fetchAllIdentifiers(client, options = {}) {
877
891
  const { identifiers: { nodes } } = await makeGraphQLRequest(client, IDENTIFIERS, {
878
892
  logger,
879
893
  variables: {
880
- first: PAGE_SIZE$40,
894
+ first: PAGE_SIZE$41,
881
895
  offset
882
896
  }
883
897
  });
884
898
  identifiers.push(...nodes);
885
- offset += PAGE_SIZE$40;
886
- shouldContinue = nodes.length === PAGE_SIZE$40;
899
+ offset += PAGE_SIZE$41;
900
+ shouldContinue = nodes.length === PAGE_SIZE$41;
887
901
  } while (shouldContinue);
888
902
  return identifiers.sort((a, b) => a.name.localeCompare(b.name));
889
903
  }
@@ -962,7 +976,7 @@ const UPDATE_PROCESSING_ACTIVITIES = gql`
962
976
  `;
963
977
  //#endregion
964
978
  //#region src/data-inventory/fetchAllProcessingActivities.ts
965
- const PAGE_SIZE$39 = 20;
979
+ const PAGE_SIZE$40 = 20;
966
980
  /**
967
981
  * Fetch all processingActivities in the organization
968
982
  *
@@ -978,14 +992,14 @@ async function fetchAllProcessingActivities(client, options = {}) {
978
992
  do {
979
993
  const { processingActivities: { nodes } } = await makeGraphQLRequest(client, PROCESSING_ACTIVITIES, {
980
994
  variables: {
981
- first: PAGE_SIZE$39,
995
+ first: PAGE_SIZE$40,
982
996
  offset
983
997
  },
984
998
  logger
985
999
  });
986
1000
  processingActivities.push(...nodes);
987
- offset += PAGE_SIZE$39;
988
- shouldContinue = nodes.length === PAGE_SIZE$39;
1001
+ offset += PAGE_SIZE$40;
1002
+ shouldContinue = nodes.length === PAGE_SIZE$40;
989
1003
  } while (shouldContinue);
990
1004
  return processingActivities.sort((a, b) => a.title.localeCompare(b.title));
991
1005
  }
@@ -1050,7 +1064,7 @@ const UPDATE_VENDORS = gql`
1050
1064
  `;
1051
1065
  //#endregion
1052
1066
  //#region src/data-inventory/fetchAllVendors.ts
1053
- const PAGE_SIZE$38 = 20;
1067
+ const PAGE_SIZE$39 = 20;
1054
1068
  /**
1055
1069
  * Fetch all vendors in the organization
1056
1070
  *
@@ -1065,14 +1079,14 @@ async function fetchAllVendors(client, options = {}) {
1065
1079
  do {
1066
1080
  const { vendors: { nodes } } = await makeGraphQLRequest(client, VENDORS, {
1067
1081
  variables: {
1068
- first: PAGE_SIZE$38,
1082
+ first: PAGE_SIZE$39,
1069
1083
  offset
1070
1084
  },
1071
1085
  logger
1072
1086
  });
1073
1087
  vendors.push(...nodes);
1074
- offset += PAGE_SIZE$38;
1075
- shouldContinue = nodes.length === PAGE_SIZE$38;
1088
+ offset += PAGE_SIZE$39;
1089
+ shouldContinue = nodes.length === PAGE_SIZE$39;
1076
1090
  } while (shouldContinue);
1077
1091
  return vendors.sort((a, b) => a.title.localeCompare(b.title));
1078
1092
  }
@@ -1096,6 +1110,13 @@ async function fetchEnrichedDataSilos(client, options) {
1096
1110
  gql: DATA_SILOS_ENRICHED,
1097
1111
  logger
1098
1112
  });
1113
+ await mapSeries(silos, async (silo) => {
1114
+ const { dataSilo: { sombra } } = await makeGraphQLRequest(client, DATA_SILO_SOMBRA, {
1115
+ variables: { id: silo.id },
1116
+ logger
1117
+ });
1118
+ silo.sombra = sombra;
1119
+ });
1099
1120
  if (!skipDatapoints) await mapSeries(silos, async (silo, index) => {
1100
1121
  logger.info(`[${index + 1}/${silos.length}] Fetching data silo - ${silo.title}`);
1101
1122
  const dataPoints = await fetchAllDataPoints(client, {
@@ -1109,6 +1130,9 @@ async function fetchEnrichedDataSilos(client, options) {
1109
1130
  if (debug) logger.info(`[${index + 1}/${silos.length}] Successfully fetched datapoint for - ${silo.title}`);
1110
1131
  dataSilos.push([silo, dataPoints]);
1111
1132
  });
1133
+ else silos.forEach((silo) => {
1134
+ dataSilos.push([silo, []]);
1135
+ });
1112
1136
  logger.info(`Successfully fetched all ${silos.length} data silo configurations`);
1113
1137
  return dataSilos;
1114
1138
  }
@@ -1541,7 +1565,7 @@ const UPDATE_PURPOSE = parse(gql`
1541
1565
  `);
1542
1566
  //#endregion
1543
1567
  //#region src/preference-management/fetchAllPurposes.ts
1544
- const PAGE_SIZE$37 = 20;
1568
+ const PAGE_SIZE$38 = 20;
1545
1569
  /**
1546
1570
  * Fetch all purposes in the organization
1547
1571
  *
@@ -1558,14 +1582,14 @@ async function fetchAllPurposes(client, options = {}) {
1558
1582
  const { purposes: { nodes } } = await makeGraphQLRequest(client, PURPOSES$1, {
1559
1583
  logger,
1560
1584
  variables: {
1561
- first: PAGE_SIZE$37,
1585
+ first: PAGE_SIZE$38,
1562
1586
  offset,
1563
1587
  input: { includeDeleted }
1564
1588
  }
1565
1589
  });
1566
1590
  purposes.push(...nodes);
1567
- offset += PAGE_SIZE$37;
1568
- shouldContinue = nodes.length === PAGE_SIZE$37;
1591
+ offset += PAGE_SIZE$38;
1592
+ shouldContinue = nodes.length === PAGE_SIZE$38;
1569
1593
  } while (shouldContinue);
1570
1594
  return purposes.sort((a, b) => a.trackingType.localeCompare(b.trackingType));
1571
1595
  }
@@ -1619,7 +1643,7 @@ const CREATE_OR_UPDATE_PREFERENCE_TOPIC = parse(gql`
1619
1643
  `);
1620
1644
  //#endregion
1621
1645
  //#region src/preference-management/fetchAllPreferenceTopics.ts
1622
- const PAGE_SIZE$36 = 20;
1646
+ const PAGE_SIZE$37 = 20;
1623
1647
  /**
1624
1648
  * Fetch all preference topics in the organization
1625
1649
  *
@@ -1636,13 +1660,13 @@ async function fetchAllPreferenceTopics(client, options = {}) {
1636
1660
  const { preferenceTopics: { nodes } } = await makeGraphQLRequest(client, PREFERENCE_TOPICS, {
1637
1661
  logger,
1638
1662
  variables: {
1639
- first: PAGE_SIZE$36,
1663
+ first: PAGE_SIZE$37,
1640
1664
  offset
1641
1665
  }
1642
1666
  });
1643
1667
  preferenceTopics.push(...nodes);
1644
- offset += PAGE_SIZE$36;
1645
- shouldContinue = nodes.length === PAGE_SIZE$36;
1668
+ offset += PAGE_SIZE$37;
1669
+ shouldContinue = nodes.length === PAGE_SIZE$37;
1646
1670
  } while (shouldContinue);
1647
1671
  return preferenceTopics.sort((a, b) => `${a.slug}:${a.purpose.trackingType}`.localeCompare(`${b.slug}:${b.purpose.trackingType}`));
1648
1672
  }
@@ -2816,7 +2840,7 @@ const CREATE_OR_UPDATE_PREFERENCE_OPTION_VALUES = parse(gql`
2816
2840
  `);
2817
2841
  //#endregion
2818
2842
  //#region src/preference-management/fetchAllPreferenceOptionValues.ts
2819
- const PAGE_SIZE$35 = 50;
2843
+ const PAGE_SIZE$36 = 50;
2820
2844
  /**
2821
2845
  * Fetch all preference option values in the organization
2822
2846
  *
@@ -2832,14 +2856,14 @@ async function fetchAllPreferenceOptionValues(client, options = {}) {
2832
2856
  do {
2833
2857
  const { preferenceOptionValues: { nodes } } = await makeGraphQLRequest(client, PREFERENCE_OPTION_VALUES, {
2834
2858
  variables: {
2835
- first: PAGE_SIZE$35,
2859
+ first: PAGE_SIZE$36,
2836
2860
  offset
2837
2861
  },
2838
2862
  logger
2839
2863
  });
2840
2864
  preferenceOptionValues.push(...nodes);
2841
- offset += PAGE_SIZE$35;
2842
- shouldContinue = nodes.length === PAGE_SIZE$35;
2865
+ offset += PAGE_SIZE$36;
2866
+ shouldContinue = nodes.length === PAGE_SIZE$36;
2843
2867
  } while (shouldContinue);
2844
2868
  return preferenceOptionValues.sort((a, b) => a.slug.localeCompare(b.slug));
2845
2869
  }
@@ -3230,7 +3254,7 @@ const SET_RESOURCE_ATTRIBUTES = gql`
3230
3254
  `;
3231
3255
  //#endregion
3232
3256
  //#region src/administration/fetchAllAttributes.ts
3233
- const PAGE_SIZE$34 = 100;
3257
+ const PAGE_SIZE$35 = 100;
3234
3258
  /**
3235
3259
  * Fetch all attribute values for an attribute key
3236
3260
  *
@@ -3246,15 +3270,15 @@ async function fetchAllAttributeValues(client, options) {
3246
3270
  do {
3247
3271
  const { attributeValues: { nodes } } = await makeGraphQLRequest(client, ATTRIBUTE_VALUES, {
3248
3272
  variables: {
3249
- first: PAGE_SIZE$34,
3273
+ first: PAGE_SIZE$35,
3250
3274
  offset,
3251
3275
  attributeKeyId
3252
3276
  },
3253
3277
  logger
3254
3278
  });
3255
3279
  attributeValues.push(...nodes);
3256
- offset += PAGE_SIZE$34;
3257
- shouldContinue = nodes.length === PAGE_SIZE$34;
3280
+ offset += PAGE_SIZE$35;
3281
+ shouldContinue = nodes.length === PAGE_SIZE$35;
3258
3282
  } while (shouldContinue);
3259
3283
  return attributeValues.sort((a, b) => a.name.localeCompare(b.name));
3260
3284
  }
@@ -3273,7 +3297,7 @@ async function fetchAllAttributes(client, options = {}) {
3273
3297
  do {
3274
3298
  const { attributeKeys: { nodes } } = await makeGraphQLRequest(client, ATTRIBUTES, {
3275
3299
  variables: {
3276
- first: PAGE_SIZE$34,
3300
+ first: PAGE_SIZE$35,
3277
3301
  offset
3278
3302
  },
3279
3303
  logger
@@ -3285,8 +3309,8 @@ async function fetchAllAttributes(client, options = {}) {
3285
3309
  filterBy: { attributeKeyId: node.id }
3286
3310
  }) : []
3287
3311
  }))));
3288
- offset += PAGE_SIZE$34;
3289
- shouldContinue = nodes.length === PAGE_SIZE$34;
3312
+ offset += PAGE_SIZE$35;
3313
+ shouldContinue = nodes.length === PAGE_SIZE$35;
3290
3314
  } while (shouldContinue);
3291
3315
  return attributes.sort((a, b) => a.name.localeCompare(b.name));
3292
3316
  }
@@ -3403,7 +3427,7 @@ const UPDATE_TEAM = gql`
3403
3427
  `;
3404
3428
  //#endregion
3405
3429
  //#region src/administration/fetchAllTeams.ts
3406
- const PAGE_SIZE$33 = 20;
3430
+ const PAGE_SIZE$34 = 20;
3407
3431
  /**
3408
3432
  * Fetch all teams in the organization
3409
3433
  *
@@ -3419,20 +3443,20 @@ async function fetchAllTeams(client, options = {}) {
3419
3443
  do {
3420
3444
  const { teams: { nodes } } = await makeGraphQLRequest(client, TEAMS, {
3421
3445
  variables: {
3422
- first: PAGE_SIZE$33,
3446
+ first: PAGE_SIZE$34,
3423
3447
  offset
3424
3448
  },
3425
3449
  logger
3426
3450
  });
3427
3451
  teams.push(...nodes);
3428
- offset += PAGE_SIZE$33;
3429
- shouldContinue = nodes.length === PAGE_SIZE$33;
3452
+ offset += PAGE_SIZE$34;
3453
+ shouldContinue = nodes.length === PAGE_SIZE$34;
3430
3454
  } while (shouldContinue);
3431
3455
  return teams.sort((a, b) => a.name.localeCompare(b.name));
3432
3456
  }
3433
3457
  //#endregion
3434
3458
  //#region src/administration/fetchParentOrganizationTeams.ts
3435
- const PAGE_SIZE$32 = 20;
3459
+ const PAGE_SIZE$33 = 20;
3436
3460
  /**
3437
3461
  * Fetch teams from the parent organization that can be linked to child-org teams
3438
3462
  *
@@ -3448,15 +3472,15 @@ async function fetchParentOrganizationTeams(client, options = {}) {
3448
3472
  do {
3449
3473
  const { parentOrganizationTeams: { nodes } } = await makeGraphQLRequest(client, PARENT_ORGANIZATION_TEAMS, {
3450
3474
  variables: {
3451
- first: PAGE_SIZE$32,
3475
+ first: PAGE_SIZE$33,
3452
3476
  offset,
3453
3477
  filterBy
3454
3478
  },
3455
3479
  logger
3456
3480
  });
3457
3481
  teams.push(...nodes);
3458
- offset += PAGE_SIZE$32;
3459
- shouldContinue = nodes.length === PAGE_SIZE$32;
3482
+ offset += PAGE_SIZE$33;
3483
+ shouldContinue = nodes.length === PAGE_SIZE$33;
3460
3484
  } while (shouldContinue);
3461
3485
  return teams.sort((a, b) => a.name.localeCompare(b.name));
3462
3486
  }
@@ -3502,7 +3526,7 @@ const USERS = gql`
3502
3526
  `;
3503
3527
  //#endregion
3504
3528
  //#region src/administration/fetchAllUsers.ts
3505
- const PAGE_SIZE$31 = 20;
3529
+ const PAGE_SIZE$32 = 20;
3506
3530
  /**
3507
3531
  * Fetch all users in the organization
3508
3532
  *
@@ -3518,14 +3542,14 @@ async function fetchAllUsers(client, options = {}) {
3518
3542
  do {
3519
3543
  const { users: { nodes } } = await makeGraphQLRequest(client, USERS, {
3520
3544
  variables: {
3521
- first: PAGE_SIZE$31,
3545
+ first: PAGE_SIZE$32,
3522
3546
  offset
3523
3547
  },
3524
3548
  logger
3525
3549
  });
3526
3550
  users.push(...nodes);
3527
- offset += PAGE_SIZE$31;
3528
- shouldContinue = nodes.length === PAGE_SIZE$31;
3551
+ offset += PAGE_SIZE$32;
3552
+ shouldContinue = nodes.length === PAGE_SIZE$32;
3529
3553
  } while (shouldContinue);
3530
3554
  return users.sort((a, b) => a.email.localeCompare(b.email));
3531
3555
  }
@@ -3567,7 +3591,7 @@ const DELETE_API_KEY = gql`
3567
3591
  `;
3568
3592
  //#endregion
3569
3593
  //#region src/administration/fetchApiKeys.ts
3570
- const PAGE_SIZE$30 = 20;
3594
+ const PAGE_SIZE$31 = 20;
3571
3595
  const ADMIN_LINK = "https://app.transcend.io/infrastructure/api-keys";
3572
3596
  /**
3573
3597
  * Fetch all API keys in an organization
@@ -3584,15 +3608,15 @@ async function fetchAllApiKeys(client, options = {}) {
3584
3608
  do {
3585
3609
  const { apiKeys: { nodes } } = await makeGraphQLRequest(client, API_KEYS, {
3586
3610
  variables: {
3587
- first: PAGE_SIZE$30,
3611
+ first: PAGE_SIZE$31,
3588
3612
  offset,
3589
3613
  titles
3590
3614
  },
3591
3615
  logger
3592
3616
  });
3593
3617
  apiKeys.push(...nodes);
3594
- offset += PAGE_SIZE$30;
3595
- shouldContinue = nodes.length === PAGE_SIZE$30;
3618
+ offset += PAGE_SIZE$31;
3619
+ shouldContinue = nodes.length === PAGE_SIZE$31;
3596
3620
  } while (shouldContinue);
3597
3621
  return apiKeys.sort((a, b) => a.title.localeCompare(b.title));
3598
3622
  }
@@ -4567,7 +4591,7 @@ const DELETE_COOKIES = gql`
4567
4591
  `;
4568
4592
  //#endregion
4569
4593
  //#region src/consent/fetchAllCookies.ts
4570
- const PAGE_SIZE$29 = 20;
4594
+ const PAGE_SIZE$30 = 20;
4571
4595
  const DEFAULT_COOKIE_ORDER = [{
4572
4596
  field: "createdAt",
4573
4597
  direction: OrderDirection.Asc
@@ -4592,7 +4616,7 @@ async function fetchAllCookies(client, options = {}) {
4592
4616
  const { cookies: { nodes } } = await makeGraphQLRequest(client, COOKIES, {
4593
4617
  variables: {
4594
4618
  input: { airgapBundleId },
4595
- first: PAGE_SIZE$29,
4619
+ first: PAGE_SIZE$30,
4596
4620
  offset,
4597
4621
  filterBy: { status },
4598
4622
  orderBy
@@ -4600,8 +4624,8 @@ async function fetchAllCookies(client, options = {}) {
4600
4624
  logger
4601
4625
  });
4602
4626
  cookies.push(...nodes);
4603
- offset += PAGE_SIZE$29;
4604
- shouldContinue = nodes.length === PAGE_SIZE$29;
4627
+ offset += PAGE_SIZE$30;
4628
+ shouldContinue = nodes.length === PAGE_SIZE$30;
4605
4629
  } while (shouldContinue);
4606
4630
  return cookies.sort((a, b) => a.name.localeCompare(b.name));
4607
4631
  }
@@ -4713,7 +4737,7 @@ const DELETE_DATA_FLOWS = gql`
4713
4737
  `;
4714
4738
  //#endregion
4715
4739
  //#region src/consent/fetchAllDataFlows.ts
4716
- const PAGE_SIZE$28 = 20;
4740
+ const PAGE_SIZE$29 = 20;
4717
4741
  const DEFAULT_DATA_FLOW_ORDER = [{
4718
4742
  field: "createdAt",
4719
4743
  direction: OrderDirection.Asc
@@ -4738,7 +4762,7 @@ async function fetchAllDataFlows(client, options = {}) {
4738
4762
  const { dataFlows: { nodes } } = await makeGraphQLRequest(client, DATA_FLOWS, {
4739
4763
  variables: {
4740
4764
  input: { airgapBundleId },
4741
- first: PAGE_SIZE$28,
4765
+ first: PAGE_SIZE$29,
4742
4766
  offset,
4743
4767
  filterBy: {
4744
4768
  status,
@@ -4749,8 +4773,8 @@ async function fetchAllDataFlows(client, options = {}) {
4749
4773
  logger
4750
4774
  });
4751
4775
  dataFlows.push(...nodes);
4752
- offset += PAGE_SIZE$28;
4753
- shouldContinue = nodes.length === PAGE_SIZE$28;
4776
+ offset += PAGE_SIZE$29;
4777
+ shouldContinue = nodes.length === PAGE_SIZE$29;
4754
4778
  } while (shouldContinue);
4755
4779
  return dataFlows.sort((a, b) => a.value.localeCompare(b.value));
4756
4780
  }
@@ -4792,7 +4816,36 @@ const PRIVACY_CENTER = gql`
4792
4816
  useNoReplyEmailAddress
4793
4817
  useCustomEmailDomain
4794
4818
  transformAccessReportJsonToCsv
4819
+ home {
4820
+ defaultMessage
4821
+ }
4822
+ expandSideMenuByDefault
4823
+ workflowsCustomFieldsRequired
4824
+ footerLayout
4795
4825
  themeStr
4826
+ childOrganizations {
4827
+ id
4828
+ uri
4829
+ name
4830
+ }
4831
+ footerLinks {
4832
+ id
4833
+ displayOrder
4834
+ title {
4835
+ defaultMessage
4836
+ }
4837
+ url {
4838
+ defaultMessage
4839
+ }
4840
+ icon {
4841
+ id
4842
+ src
4843
+ key
4844
+ size
4845
+ mimetype
4846
+ }
4847
+ iconOnly
4848
+ }
4796
4849
  }
4797
4850
  }
4798
4851
  `;
@@ -4803,6 +4856,25 @@ const UPDATE_PRIVACY_CENTER = gql`
4803
4856
  }
4804
4857
  }
4805
4858
  `;
4859
+ const UPDATE_PRIVACY_CENTER_FOOTER_LINKS = gql`
4860
+ mutation TranscendCliUpdatePrivacyCenterFooterLinks(
4861
+ $input: UpdatePrivacyCenterFooterLinksInput!
4862
+ ) {
4863
+ updatePrivacyCenterFooterLinks(input: $input) {
4864
+ clientMutationId
4865
+ }
4866
+ }
4867
+ `;
4868
+ const DELETE_PRIVACY_CENTER_FOOTER_LINKS = gql`
4869
+ mutation TranscendCliDeletePrivacyCenterFooterLinks(
4870
+ $input: DeletePrivacyCenterFooterLinksInput!
4871
+ ) {
4872
+ deletePrivacyCenterFooterLinks(input: $input) {
4873
+ clientMutationId
4874
+ success
4875
+ }
4876
+ }
4877
+ `;
4806
4878
  //#endregion
4807
4879
  //#region src/consent/fetchPrivacyCenterId.ts
4808
4880
  /**
@@ -4890,12 +4962,21 @@ async function fetchAllPolicies(client, options = {}) {
4890
4962
  */
4891
4963
  async function fetchAllPrivacyCenters(client, options = {}) {
4892
4964
  const { logger } = options;
4893
- const { privacyCenter: { themeStr, ...rest } } = await makeGraphQLRequest(client, PRIVACY_CENTER, {
4965
+ const { privacyCenter: { themeStr, footerLinks, home, ...rest } } = await makeGraphQLRequest(client, PRIVACY_CENTER, {
4894
4966
  variables: { url: await fetchPrivacyCenterUrl(client, { logger }) },
4895
4967
  logger
4896
4968
  });
4897
4969
  return [{
4898
4970
  ...rest,
4971
+ home: home.defaultMessage,
4972
+ footerLinks: footerLinks.map((link) => ({
4973
+ id: link.id,
4974
+ displayOrder: link.displayOrder,
4975
+ title: link.title,
4976
+ url: link.url.defaultMessage,
4977
+ ...link.icon ? { icon: link.icon } : {},
4978
+ iconOnly: link.iconOnly
4979
+ })),
4899
4980
  theme: JSON.parse(themeStr)
4900
4981
  }];
4901
4982
  }
@@ -4954,7 +5035,7 @@ const UPDATE_PROCESSING_PURPOSE_SUB_CATEGORIES = gql`
4954
5035
  `;
4955
5036
  //#endregion
4956
5037
  //#region src/consent/fetchAllProcessingPurposes.ts
4957
- const PAGE_SIZE$27 = 20;
5038
+ const PAGE_SIZE$28 = 20;
4958
5039
  /**
4959
5040
  * Fetch all processingPurposeSubCategories in the organization
4960
5041
  *
@@ -4969,14 +5050,14 @@ async function fetchAllProcessingPurposes(client, options = {}) {
4969
5050
  do {
4970
5051
  const { processingPurposeSubCategories: { nodes } } = await makeGraphQLRequest(client, PROCESSING_PURPOSE_SUB_CATEGORIES, {
4971
5052
  variables: {
4972
- first: PAGE_SIZE$27,
5053
+ first: PAGE_SIZE$28,
4973
5054
  offset
4974
5055
  },
4975
5056
  logger: options.logger
4976
5057
  });
4977
5058
  processingPurposeSubCategories.push(...nodes);
4978
- offset += PAGE_SIZE$27;
4979
- shouldContinue = nodes.length === PAGE_SIZE$27;
5059
+ offset += PAGE_SIZE$28;
5060
+ shouldContinue = nodes.length === PAGE_SIZE$28;
4980
5061
  } while (shouldContinue);
4981
5062
  return processingPurposeSubCategories.sort((a, b) => a.name.localeCompare(b.name));
4982
5063
  }
@@ -5078,7 +5159,7 @@ const CREATE_CONSENT_EXPERIENCE = gql`
5078
5159
  `;
5079
5160
  //#endregion
5080
5161
  //#region src/consent/fetchConsentManagerExperiences.ts
5081
- const PAGE_SIZE$26 = 50;
5162
+ const PAGE_SIZE$27 = 50;
5082
5163
  /**
5083
5164
  * Fetch consent manager experiences
5084
5165
  *
@@ -5093,14 +5174,14 @@ async function fetchConsentManagerExperiences(client, options = {}) {
5093
5174
  do {
5094
5175
  const { experiences: { nodes } } = await makeGraphQLRequest(client, EXPERIENCES, {
5095
5176
  variables: {
5096
- first: PAGE_SIZE$26,
5177
+ first: PAGE_SIZE$27,
5097
5178
  offset
5098
5179
  },
5099
5180
  logger: options.logger
5100
5181
  });
5101
5182
  experiences.push(...nodes);
5102
- offset += PAGE_SIZE$26;
5103
- shouldContinue = nodes.length === PAGE_SIZE$26;
5183
+ offset += PAGE_SIZE$27;
5184
+ shouldContinue = nodes.length === PAGE_SIZE$27;
5104
5185
  } while (shouldContinue);
5105
5186
  return experiences.sort((a, b) => a.name.localeCompare(b.name));
5106
5187
  }
@@ -5122,7 +5203,7 @@ async function fetchConsentManagerTheme(client, options) {
5122
5203
  }
5123
5204
  //#endregion
5124
5205
  //#region src/consent/fetchConsentThemes.ts
5125
- const PAGE_SIZE$25 = 50;
5206
+ const PAGE_SIZE$26 = 50;
5126
5207
  /**
5127
5208
  * Fetch consent themes
5128
5209
  *
@@ -5139,20 +5220,20 @@ async function fetchConsentThemes(client, options = {}) {
5139
5220
  const { consentUiThemes: { nodes } } = await makeGraphQLRequest(client, FETCH_CONSENT_UI_THEMES, {
5140
5221
  variables: {
5141
5222
  airgapBundleId,
5142
- first: PAGE_SIZE$25,
5223
+ first: PAGE_SIZE$26,
5143
5224
  offset
5144
5225
  },
5145
5226
  logger: options.logger
5146
5227
  });
5147
5228
  themes.push(...nodes);
5148
- offset += PAGE_SIZE$25;
5149
- shouldContinue = nodes.length === PAGE_SIZE$25;
5229
+ offset += PAGE_SIZE$26;
5230
+ shouldContinue = nodes.length === PAGE_SIZE$26;
5150
5231
  } while (shouldContinue);
5151
5232
  return themes;
5152
5233
  }
5153
5234
  //#endregion
5154
5235
  //#region src/consent/fetchConsentVariants.ts
5155
- const PAGE_SIZE$24 = 50;
5236
+ const PAGE_SIZE$25 = 50;
5156
5237
  /**
5157
5238
  * Fetch consent variants
5158
5239
  *
@@ -5169,14 +5250,14 @@ async function fetchConsentVariants(client, options = {}) {
5169
5250
  const { consentUiVariants: { nodes } } = await makeGraphQLRequest(client, FETCH_CONSENT_UI_VARIANTS, {
5170
5251
  variables: {
5171
5252
  airgapBundleId,
5172
- first: PAGE_SIZE$24,
5253
+ first: PAGE_SIZE$25,
5173
5254
  offset
5174
5255
  },
5175
5256
  logger: options.logger
5176
5257
  });
5177
5258
  variants.push(...nodes);
5178
- offset += PAGE_SIZE$24;
5179
- shouldContinue = nodes.length === PAGE_SIZE$24;
5259
+ offset += PAGE_SIZE$25;
5260
+ shouldContinue = nodes.length === PAGE_SIZE$25;
5180
5261
  } while (shouldContinue);
5181
5262
  return variants;
5182
5263
  }
@@ -5337,6 +5418,28 @@ const DATA_FLOW_STATS = gql`
5337
5418
  }
5338
5419
  `;
5339
5420
  //#endregion
5421
+ //#region src/consent/resolveDisplayedChildOrganizationIds.ts
5422
+ /**
5423
+ * Resolve displayed child organization URIs or IDs to organization IDs.
5424
+ *
5425
+ * Each value may be either an organization ID or URI. IDs are matched first,
5426
+ * then URIs. Throws if any value cannot be resolved.
5427
+ *
5428
+ * @param childOrganizations - Child organizations available on the privacy center
5429
+ * @param urisOrIds - URIs and/or IDs from transcend.yml
5430
+ * @returns Resolved organization IDs (same order as input)
5431
+ */
5432
+ function resolveDisplayedChildOrganizationIds(childOrganizations, urisOrIds) {
5433
+ return urisOrIds.map((value) => {
5434
+ const byId = childOrganizations.find((child) => child.id === value);
5435
+ if (byId) return byId.id;
5436
+ const byUri = childOrganizations.find((child) => child.uri === value);
5437
+ if (byUri) return byUri.id;
5438
+ const available = childOrganizations.length > 0 ? childOrganizations.map((child) => `${child.uri} (${child.id})`).join(", ") : "(none)";
5439
+ throw new Error(`Failed to resolve displayed child organization URI or ID: "${value}". Available: ${available}`);
5440
+ });
5441
+ }
5442
+ //#endregion
5340
5443
  //#region src/consent/syncConsentUi.ts
5341
5444
  /**
5342
5445
  * Parse a JSON configuration string from transcend.yml
@@ -5467,7 +5570,7 @@ async function syncConsentUiVariants(client, airgapBundleId, yamlVariants, synce
5467
5570
  }
5468
5571
  //#endregion
5469
5572
  //#region src/consent/syncPartitions.ts
5470
- const PAGE_SIZE$23 = 50;
5573
+ const PAGE_SIZE$24 = 50;
5471
5574
  /**
5472
5575
  * Fetch the list of partitions
5473
5576
  *
@@ -5483,14 +5586,14 @@ async function fetchPartitions(client, options = {}) {
5483
5586
  do {
5484
5587
  const { consentPartitions: { nodes } } = await makeGraphQLRequest(client, CONSENT_PARTITIONS, {
5485
5588
  variables: {
5486
- first: PAGE_SIZE$23,
5589
+ first: PAGE_SIZE$24,
5487
5590
  offset
5488
5591
  },
5489
5592
  logger
5490
5593
  });
5491
5594
  partitions.push(...nodes);
5492
- offset += PAGE_SIZE$23;
5493
- shouldContinue = nodes.length === PAGE_SIZE$23;
5595
+ offset += PAGE_SIZE$24;
5596
+ shouldContinue = nodes.length === PAGE_SIZE$24;
5494
5597
  } while (shouldContinue);
5495
5598
  return partitions.sort((a, b) => a.name.localeCompare(b.name));
5496
5599
  }
@@ -5924,6 +6027,54 @@ async function syncPolicies(client, policies, options = {}) {
5924
6027
  return !encounteredError;
5925
6028
  }
5926
6029
  //#endregion
6030
+ //#region src/consent/syncPrivacyCenterFooterLinks.ts
6031
+ /**
6032
+ * Sync privacy center footer links. Matches existing links by title, upserts
6033
+ * the provided list, and deletes any existing links omitted from the YAML.
6034
+ *
6035
+ * @param client - GraphQL client
6036
+ * @param privacyCenterId - Privacy center ID
6037
+ * @param footerLinks - Desired footer links
6038
+ * @param existingFooterLinks - Existing footer links from the privacy center
6039
+ * @param options - Options
6040
+ */
6041
+ async function syncPrivacyCenterFooterLinks(client, privacyCenterId, footerLinks, existingFooterLinks, options = {}) {
6042
+ const { logger = NOOP_LOGGER } = options;
6043
+ const notUnique = footerLinks.filter((link) => footerLinks.filter((other) => other.title === link.title).length > 1);
6044
+ if (notUnique.length > 0) throw new Error(`Failed to sync privacy center footer links as there were non-unique titles: ${[...new Set(notUnique.map(({ title }) => title))].join(", ")}`);
6045
+ const existingByTitle = keyBy(existingFooterLinks, ({ title }) => title.defaultMessage);
6046
+ const resolved = footerLinks.map((link) => {
6047
+ return {
6048
+ id: existingByTitle[link.title]?.id,
6049
+ title: link.title,
6050
+ ...link.url !== void 0 ? { url: link.url } : {},
6051
+ ...link.iconOnly !== void 0 ? { iconOnly: link.iconOnly } : {}
6052
+ };
6053
+ });
6054
+ const keptIds = new Set(resolved.map((link) => link.id).filter((id) => !!id));
6055
+ const idsToDelete = existingFooterLinks.map(({ id }) => id).filter((id) => !keptIds.has(id));
6056
+ if (idsToDelete.length > 0) {
6057
+ logger.info(`Deleting "${idsToDelete.length}" privacy center footer links...`);
6058
+ await makeGraphQLRequest(client, DELETE_PRIVACY_CENTER_FOOTER_LINKS, {
6059
+ variables: { input: {
6060
+ privacyCenterId,
6061
+ ids: idsToDelete
6062
+ } },
6063
+ logger
6064
+ });
6065
+ }
6066
+ if (resolved.length > 0) {
6067
+ logger.info(`Upserting "${resolved.length}" privacy center footer links...`);
6068
+ await makeGraphQLRequest(client, UPDATE_PRIVACY_CENTER_FOOTER_LINKS, {
6069
+ variables: { input: {
6070
+ privacyCenterId,
6071
+ footerLinks: resolved
6072
+ } },
6073
+ logger
6074
+ });
6075
+ }
6076
+ }
6077
+ //#endregion
5927
6078
  //#region src/consent/syncPrivacyCenter.ts
5928
6079
  /**
5929
6080
  * Sync the privacy center
@@ -5934,10 +6085,14 @@ async function syncPolicies(client, policies, options = {}) {
5934
6085
  * @returns Whether the privacy center was synced successfully
5935
6086
  */
5936
6087
  async function syncPrivacyCenter(client, privacyCenter, options = {}) {
5937
- const { logger = NOOP_LOGGER } = options;
6088
+ const { logger = NOOP_LOGGER, skipPublish } = options;
5938
6089
  let encounteredError = false;
5939
6090
  logger.info("Syncing privacy center...");
5940
6091
  const privacyCenterId = await fetchPrivacyCenterId(client, { logger });
6092
+ const { displayedChildOrganizationUris, footerLinks } = privacyCenter;
6093
+ const [existing] = !!displayedChildOrganizationUris || footerLinks !== void 0 ? await fetchAllPrivacyCenters(client, { logger }) : [];
6094
+ let displayedChildOrganizationIds;
6095
+ if (displayedChildOrganizationUris) displayedChildOrganizationIds = resolveDisplayedChildOrganizationIds(existing?.childOrganizations ?? [], displayedChildOrganizationUris);
5941
6096
  try {
5942
6097
  await makeGraphQLRequest(client, UPDATE_PRIVACY_CENTER, {
5943
6098
  variables: { input: {
@@ -5959,6 +6114,12 @@ async function syncPrivacyCenter(client, privacyCenter, options = {}) {
5959
6114
  showTrackingTechnologies: privacyCenter.showTrackingTechnologies,
5960
6115
  showPrivacyRequestButton: privacyCenter.showPrivacyRequestButton,
5961
6116
  isDisabled: privacyCenter.isDisabled,
6117
+ home: privacyCenter.home,
6118
+ expandSideMenuByDefault: privacyCenter.expandSideMenuByDefault,
6119
+ workflowsCustomFieldsRequired: privacyCenter.workflowsCustomFieldsRequired,
6120
+ footerLayout: privacyCenter.footerLayout,
6121
+ ...displayedChildOrganizationIds ? { displayedChildOrganizationIds } : {},
6122
+ ...skipPublish !== void 0 ? { skipPublish } : {},
5962
6123
  ...privacyCenter.theme ? {
5963
6124
  colorPalette: privacyCenter.theme.colors,
5964
6125
  componentStyles: privacyCenter.theme.componentStyles,
@@ -5967,10 +6128,11 @@ async function syncPrivacyCenter(client, privacyCenter, options = {}) {
5967
6128
  } },
5968
6129
  logger
5969
6130
  });
6131
+ if (footerLinks !== void 0) await syncPrivacyCenterFooterLinks(client, privacyCenterId, footerLinks, existing?.footerLinks ?? [], { logger });
5970
6132
  logger.info("Successfully synced privacy center!");
5971
6133
  } catch (err) {
5972
6134
  encounteredError = true;
5973
- logger.error(`Failed to create privacy center! - ${err.message}`);
6135
+ logger.error(`Failed to sync privacy center! - ${err.message}`);
5974
6136
  }
5975
6137
  return !encounteredError;
5976
6138
  }
@@ -6099,7 +6261,7 @@ const SKIP_REQUEST_ENRICHER = gql`
6099
6261
  `;
6100
6262
  //#endregion
6101
6263
  //#region src/dsr-automation/fetchAllRequestEnrichers.ts
6102
- const PAGE_SIZE$22 = 50;
6264
+ const PAGE_SIZE$23 = 50;
6103
6265
  /**
6104
6266
  * Fetch all request enrichers for a particular request
6105
6267
  *
@@ -6115,15 +6277,15 @@ async function fetchAllRequestEnrichers(client, options) {
6115
6277
  do {
6116
6278
  const { requestEnrichers: { nodes } } = await makeGraphQLRequest(client, REQUEST_ENRICHERS, {
6117
6279
  variables: {
6118
- first: PAGE_SIZE$22,
6280
+ first: PAGE_SIZE$23,
6119
6281
  offset,
6120
6282
  requestId
6121
6283
  },
6122
6284
  logger
6123
6285
  });
6124
6286
  requestEnrichers.push(...nodes);
6125
- offset += PAGE_SIZE$22;
6126
- shouldContinue = nodes.length === PAGE_SIZE$22;
6287
+ offset += PAGE_SIZE$23;
6288
+ shouldContinue = nodes.length === PAGE_SIZE$23;
6127
6289
  } while (shouldContinue);
6128
6290
  return requestEnrichers;
6129
6291
  }
@@ -6151,7 +6313,7 @@ const RequestIdentifier = t.type({
6151
6313
  /** Type of identifier */
6152
6314
  type: valuesOf(IdentifierType)
6153
6315
  });
6154
- const PAGE_SIZE$21 = 50;
6316
+ const PAGE_SIZE$22 = 50;
6155
6317
  const RequestIdentifiersResponse = t.type({ identifiers: t.array(RequestIdentifier) });
6156
6318
  /**
6157
6319
  * Validate that the Sombra version meets the minimum requirement for
@@ -6182,7 +6344,7 @@ async function fetchAllRequestIdentifiers(client, sombra, options) {
6182
6344
  if (!skipSombraCheck) await validateSombraVersion(client, { logger });
6183
6345
  do {
6184
6346
  const { identifiers: nodes } = decodeCodec(RequestIdentifiersResponse, await withTransientRetry("Failed to fetch request identifiers", () => sombra.post("v1/request-identifiers", { json: {
6185
- first: PAGE_SIZE$21,
6347
+ first: PAGE_SIZE$22,
6186
6348
  offset,
6187
6349
  requestId
6188
6350
  } }).json(), {
@@ -6191,8 +6353,8 @@ async function fetchAllRequestIdentifiers(client, sombra, options) {
6191
6353
  baseDelayMs: 500
6192
6354
  }));
6193
6355
  requestIdentifiers.push(...nodes);
6194
- offset += PAGE_SIZE$21;
6195
- shouldContinue = nodes.length === PAGE_SIZE$21;
6356
+ offset += PAGE_SIZE$22;
6357
+ shouldContinue = nodes.length === PAGE_SIZE$22;
6196
6358
  } while (shouldContinue);
6197
6359
  return requestIdentifiers;
6198
6360
  }
@@ -6235,7 +6397,7 @@ const REQUEST_IDENTIFIERS = parse(gql`
6235
6397
  `);
6236
6398
  //#endregion
6237
6399
  //#region src/dsr-automation/fetchAllRequestIdentifierMetadata.ts
6238
- const PAGE_SIZE$20 = 50;
6400
+ const PAGE_SIZE$21 = 50;
6239
6401
  /**
6240
6402
  * Fetch all request identifier metadata for a particular request
6241
6403
  *
@@ -6253,7 +6415,7 @@ async function fetchAllRequestIdentifierMetadata(client, options = {}) {
6253
6415
  do {
6254
6416
  const { requestIdentifiers: { nodes } } = await makeGraphQLRequest(client, REQUEST_IDENTIFIERS, {
6255
6417
  variables: {
6256
- first: PAGE_SIZE$20,
6418
+ first: PAGE_SIZE$21,
6257
6419
  offset,
6258
6420
  requestIds: resolvedRequestIds,
6259
6421
  updatedAtBefore: updatedAtBefore ? updatedAtBefore.toISOString() : void 0,
@@ -6262,8 +6424,8 @@ async function fetchAllRequestIdentifierMetadata(client, options = {}) {
6262
6424
  logger
6263
6425
  });
6264
6426
  requestIdentifiers.push(...nodes);
6265
- offset += PAGE_SIZE$20;
6266
- shouldContinue = nodes.length === PAGE_SIZE$20;
6427
+ offset += PAGE_SIZE$21;
6428
+ shouldContinue = nodes.length === PAGE_SIZE$21;
6267
6429
  } while (shouldContinue);
6268
6430
  return requestIdentifiers;
6269
6431
  }
@@ -6543,7 +6705,7 @@ const UPDATE_ENRICHER = gql`
6543
6705
  `;
6544
6706
  //#endregion
6545
6707
  //#region src/dsr-automation/syncEnrichers.ts
6546
- const PAGE_SIZE$19 = 20;
6708
+ const PAGE_SIZE$20 = 20;
6547
6709
  /**
6548
6710
  * Fetch all enrichers in the organization
6549
6711
  *
@@ -6560,15 +6722,15 @@ async function fetchAllEnrichers(client, options = {}) {
6560
6722
  do {
6561
6723
  const { enrichers: { nodes } } = await makeGraphQLRequest(client, ENRICHERS, {
6562
6724
  variables: {
6563
- first: PAGE_SIZE$19,
6725
+ first: PAGE_SIZE$20,
6564
6726
  offset,
6565
6727
  title
6566
6728
  },
6567
6729
  logger
6568
6730
  });
6569
6731
  enrichers.push(...nodes);
6570
- offset += PAGE_SIZE$19;
6571
- shouldContinue = nodes.length === PAGE_SIZE$19;
6732
+ offset += PAGE_SIZE$20;
6733
+ shouldContinue = nodes.length === PAGE_SIZE$20;
6572
6734
  } while (shouldContinue);
6573
6735
  return enrichers.sort((a, b) => a.title.localeCompare(b.title));
6574
6736
  }
@@ -6738,7 +6900,7 @@ const UPDATE_ACTION = gql`
6738
6900
  `;
6739
6901
  //#endregion
6740
6902
  //#region src/dsr-automation/fetchAllActions.ts
6741
- const PAGE_SIZE$18 = 20;
6903
+ const PAGE_SIZE$19 = 20;
6742
6904
  /**
6743
6905
  * Fetch all actions in the organization
6744
6906
  *
@@ -6754,20 +6916,20 @@ async function fetchAllActions(client, options = {}) {
6754
6916
  do {
6755
6917
  const { actions: { nodes } } = await makeGraphQLRequest(client, ACTIONS, {
6756
6918
  variables: {
6757
- first: PAGE_SIZE$18,
6919
+ first: PAGE_SIZE$19,
6758
6920
  offset
6759
6921
  },
6760
6922
  logger
6761
6923
  });
6762
6924
  actions.push(...nodes);
6763
- offset += PAGE_SIZE$18;
6764
- shouldContinue = nodes.length === PAGE_SIZE$18;
6925
+ offset += PAGE_SIZE$19;
6926
+ shouldContinue = nodes.length === PAGE_SIZE$19;
6765
6927
  } while (shouldContinue);
6766
6928
  return actions.sort((a, b) => a.type.localeCompare(b.type));
6767
6929
  }
6768
6930
  //#endregion
6769
6931
  //#region src/dsr-automation/fetchAllAttributeKeys.ts
6770
- const PAGE_SIZE$17 = 20;
6932
+ const PAGE_SIZE$18 = 20;
6771
6933
  /**
6772
6934
  * Fetch all attribute keys enabled for privacy requests
6773
6935
  *
@@ -6783,14 +6945,14 @@ async function fetchAllRequestAttributeKeys(client, options = {}) {
6783
6945
  do {
6784
6946
  const { attributeKeys: { nodes } } = await makeGraphQLRequest(client, ATTRIBUTE_KEYS_REQUESTS, {
6785
6947
  variables: {
6786
- first: PAGE_SIZE$17,
6948
+ first: PAGE_SIZE$18,
6787
6949
  offset
6788
6950
  },
6789
6951
  logger
6790
6952
  });
6791
6953
  attributeKeys.push(...nodes);
6792
- offset += PAGE_SIZE$17;
6793
- shouldContinue = nodes.length === PAGE_SIZE$17;
6954
+ offset += PAGE_SIZE$18;
6955
+ shouldContinue = nodes.length === PAGE_SIZE$18;
6794
6956
  } while (shouldContinue);
6795
6957
  return attributeKeys.sort((a, b) => a.name.localeCompare(b.name));
6796
6958
  }
@@ -6821,7 +6983,7 @@ const SILO_DISCOVERY_RESULTS = gql`
6821
6983
  `;
6822
6984
  //#endregion
6823
6985
  //#region src/dsr-automation/fetchAllSiloDiscoveryResults.ts
6824
- const PAGE_SIZE$16 = 30;
6986
+ const PAGE_SIZE$17 = 30;
6825
6987
  /**
6826
6988
  * Fetch all silo discovery results in the organization
6827
6989
  *
@@ -6837,7 +6999,7 @@ async function fetchAllSiloDiscoveryResults(client, options = {}) {
6837
6999
  do {
6838
7000
  const { siloDiscoveryResults: { nodes } } = await makeGraphQLRequest(client, SILO_DISCOVERY_RESULTS, {
6839
7001
  variables: {
6840
- first: PAGE_SIZE$16,
7002
+ first: PAGE_SIZE$17,
6841
7003
  offset,
6842
7004
  input: {},
6843
7005
  filterBy: {}
@@ -6849,8 +7011,8 @@ async function fetchAllSiloDiscoveryResults(client, options = {}) {
6849
7011
  title: node.suggestedCatalog.title
6850
7012
  } : node);
6851
7013
  siloDiscoveryResults.push(...titledNodes);
6852
- offset += PAGE_SIZE$16;
6853
- shouldContinue = nodes.length === PAGE_SIZE$16;
7014
+ offset += PAGE_SIZE$17;
7015
+ shouldContinue = nodes.length === PAGE_SIZE$17;
6854
7016
  } while (shouldContinue);
6855
7017
  return siloDiscoveryResults;
6856
7018
  }
@@ -6869,7 +7031,7 @@ const CATALOGS = gql`
6869
7031
  `;
6870
7032
  //#endregion
6871
7033
  //#region src/dsr-automation/fetchCatalogs.ts
6872
- const PAGE_SIZE$15 = 100;
7034
+ const PAGE_SIZE$16 = 100;
6873
7035
  /**
6874
7036
  * Fetch all integration catalogs in an organization
6875
7037
  *
@@ -6885,14 +7047,14 @@ async function fetchAllCatalogs(client, options = {}) {
6885
7047
  do {
6886
7048
  const { catalogs: { nodes } } = await makeGraphQLRequest(client, CATALOGS, {
6887
7049
  variables: {
6888
- first: PAGE_SIZE$15,
7050
+ first: PAGE_SIZE$16,
6889
7051
  offset
6890
7052
  },
6891
7053
  logger
6892
7054
  });
6893
7055
  catalogs.push(...nodes);
6894
- offset += PAGE_SIZE$15;
6895
- shouldContinue = nodes.length === PAGE_SIZE$15;
7056
+ offset += PAGE_SIZE$16;
7057
+ shouldContinue = nodes.length === PAGE_SIZE$16;
6896
7058
  } while (shouldContinue);
6897
7059
  return catalogs.sort((a, b) => a.integrationName.localeCompare(b.integrationName));
6898
7060
  }
@@ -6995,7 +7157,7 @@ async function fetchRequestDataSilosCount(client, options = {}) {
6995
7157
  });
6996
7158
  return totalCount;
6997
7159
  }
6998
- const PAGE_SIZE$14 = 100;
7160
+ const PAGE_SIZE$15 = 100;
6999
7161
  /**
7000
7162
  * Fetch all request data silos by some filter criteria
7001
7163
  *
@@ -7011,7 +7173,7 @@ async function fetchRequestDataSilos(client, options = {}) {
7011
7173
  do {
7012
7174
  const { requestDataSilos: { nodes } } = await makeGraphQLRequest(client, REQUEST_DATA_SILOS, {
7013
7175
  variables: {
7014
- first: PAGE_SIZE$14,
7176
+ first: PAGE_SIZE$15,
7015
7177
  offset,
7016
7178
  filterBy: {
7017
7179
  dataSiloId,
@@ -7023,8 +7185,8 @@ async function fetchRequestDataSilos(client, options = {}) {
7023
7185
  logger
7024
7186
  });
7025
7187
  requestDataSilos.push(...nodes);
7026
- offset += PAGE_SIZE$14;
7027
- shouldContinue = nodes.length === PAGE_SIZE$14;
7188
+ offset += PAGE_SIZE$15;
7189
+ shouldContinue = nodes.length === PAGE_SIZE$15;
7028
7190
  onProgress?.(nodes.length);
7029
7191
  } while (shouldContinue && (!limit || offset < limit));
7030
7192
  return requestDataSilos;
@@ -7189,7 +7351,7 @@ const CREATE_TEMPLATE = gql`
7189
7351
  `;
7190
7352
  //#endregion
7191
7353
  //#region src/dsr-automation/syncTemplates.ts
7192
- const PAGE_SIZE$13 = 20;
7354
+ const PAGE_SIZE$14 = 20;
7193
7355
  /**
7194
7356
  * Fetch all Templates in the organization
7195
7357
  *
@@ -7205,15 +7367,15 @@ async function fetchAllTemplates(client, options = {}) {
7205
7367
  do {
7206
7368
  const { templates: { nodes } } = await makeGraphQLRequest(client, TEMPLATES, {
7207
7369
  variables: {
7208
- first: PAGE_SIZE$13,
7370
+ first: PAGE_SIZE$14,
7209
7371
  offset,
7210
7372
  title
7211
7373
  },
7212
7374
  logger
7213
7375
  });
7214
7376
  templates.push(...nodes);
7215
- offset += PAGE_SIZE$13;
7216
- shouldContinue = nodes.length === PAGE_SIZE$13;
7377
+ offset += PAGE_SIZE$14;
7378
+ shouldContinue = nodes.length === PAGE_SIZE$14;
7217
7379
  } while (shouldContinue);
7218
7380
  return templates.sort((a, b) => a.title.localeCompare(b.title));
7219
7381
  }
@@ -7235,6 +7397,321 @@ async function syncTemplate(client, template, options = {}) {
7235
7397
  });
7236
7398
  }
7237
7399
  //#endregion
7400
+ //#region src/dsr-automation/gqls/workflowConfig.ts
7401
+ const WORKFLOW_CONFIGS = parse(gql`
7402
+ query TranscendCliWorkflowConfigs($first: Int!, $offset: Int!, $filterBy: WorkflowFilterInput) {
7403
+ workflows(first: $first, offset: $offset, filterBy: $filterBy) {
7404
+ nodes {
7405
+ id
7406
+ title {
7407
+ defaultMessage
7408
+ }
7409
+ subtitle {
7410
+ defaultMessage
7411
+ }
7412
+ description {
7413
+ defaultMessage
7414
+ }
7415
+ internalName
7416
+ workflowConfigVisibility
7417
+ workflowConfigType
7418
+ collectDataSubjectRegions
7419
+ regionList
7420
+ expiryTime {
7421
+ region
7422
+ value
7423
+ }
7424
+ action {
7425
+ type
7426
+ }
7427
+ subject {
7428
+ id
7429
+ type
7430
+ }
7431
+ WorkflowConfigAttributeKeys {
7432
+ attributeKey {
7433
+ id
7434
+ name
7435
+ }
7436
+ }
7437
+ }
7438
+ totalCount
7439
+ }
7440
+ }
7441
+ `);
7442
+ const CREATE_WORKFLOW = parse(gql`
7443
+ mutation TranscendCliCreateWorkflow($input: CreateWorkflowInput!) {
7444
+ createWorkflow(input: $input) {
7445
+ workflowConfig {
7446
+ id
7447
+ internalName
7448
+ }
7449
+ }
7450
+ }
7451
+ `);
7452
+ const UPDATE_WORKFLOW_CONFIG = parse(gql`
7453
+ mutation TranscendCliUpdateWorkflowConfig($input: UpdateWorkflowConfigInput!) {
7454
+ updateWorkflowConfig(input: $input) {
7455
+ success
7456
+ }
7457
+ }
7458
+ `);
7459
+ //#endregion
7460
+ //#region src/dsr-automation/fetchAllWorkflowConfigs.ts
7461
+ const PAGE_SIZE$13 = 50;
7462
+ /**
7463
+ * Fetch all workflow configs in the organization
7464
+ *
7465
+ * @param client - GraphQL client
7466
+ * @param options - Options
7467
+ * @returns All workflow configs
7468
+ */
7469
+ async function fetchAllWorkflowConfigs(client, options = {}) {
7470
+ const { logger, workflowConfigType } = options;
7471
+ const configs = [];
7472
+ let offset = 0;
7473
+ let shouldContinue = false;
7474
+ do {
7475
+ const { workflows: { nodes } } = await makeGraphQLRequest(client, WORKFLOW_CONFIGS, {
7476
+ variables: {
7477
+ first: PAGE_SIZE$13,
7478
+ offset,
7479
+ filterBy: workflowConfigType ? { workflowConfigType } : void 0
7480
+ },
7481
+ logger
7482
+ });
7483
+ configs.push(...nodes);
7484
+ offset += PAGE_SIZE$13;
7485
+ shouldContinue = nodes.length === PAGE_SIZE$13;
7486
+ } while (shouldContinue);
7487
+ return configs.sort((a, b) => a.title.defaultMessage.localeCompare(b.title.defaultMessage));
7488
+ }
7489
+ //#endregion
7490
+ //#region src/dsr-automation/resolveWorkflowConfigMatch.ts
7491
+ /**
7492
+ * Stable key for title + action + data subject + region-list identity.
7493
+ *
7494
+ * @param config - Workflow config node
7495
+ * @returns Match key string
7496
+ */
7497
+ function workflowConfigMatchKey(config) {
7498
+ return [
7499
+ config.title.defaultMessage,
7500
+ config.action.type,
7501
+ config.subject?.type ?? "",
7502
+ workflowRegionListKey(config.regionList)
7503
+ ].join("\0");
7504
+ }
7505
+ /**
7506
+ * Order-independent region list key for workflow matching.
7507
+ *
7508
+ * @param regions - Region list
7509
+ * @returns Sorted comma-separated region codes
7510
+ */
7511
+ function workflowRegionListKey(regions) {
7512
+ return [...regions ?? []].sort().join(",");
7513
+ }
7514
+ /**
7515
+ * Human-readable label for logging and errors.
7516
+ *
7517
+ * @param input - Workflow config sync input
7518
+ * @returns Label string
7519
+ */
7520
+ function workflowConfigInputLabel(input) {
7521
+ return input["internal-name"] ?? input.title;
7522
+ }
7523
+ function sameRegionList(inputRegions, configRegions) {
7524
+ return workflowRegionListKey(inputRegions) === workflowRegionListKey(configRegions);
7525
+ }
7526
+ function narrowToOneOrContinue(candidates, next) {
7527
+ const [only] = candidates;
7528
+ if (candidates.length === 1 && only !== void 0) return {
7529
+ kind: "match",
7530
+ config: only
7531
+ };
7532
+ if (candidates.length === 0) return { kind: "create" };
7533
+ return next(candidates);
7534
+ }
7535
+ function continueCascade(candidates, input) {
7536
+ return narrowToOneOrContinue(candidates.filter((config) => config.title.defaultMessage === input.title), (byTitle) => narrowToOneOrContinue(byTitle.filter((config) => config.action.type === input["action-type"]), (byAction) => {
7537
+ const dataSubjectType = input["data-subject-type"];
7538
+ if (dataSubjectType) return narrowToOneOrContinue(byAction.filter((config) => config.subject?.type === dataSubjectType), (bySubject) => filterByRegions(bySubject, input));
7539
+ return filterByRegions(byAction, input);
7540
+ }));
7541
+ }
7542
+ function filterByRegions(candidates, input) {
7543
+ const matches = candidates.filter((config) => sameRegionList(input["region-list"], config.regionList));
7544
+ const [only] = matches;
7545
+ if (matches.length === 1 && only !== void 0) return {
7546
+ kind: "match",
7547
+ config: only
7548
+ };
7549
+ if (matches.length === 0) return { kind: "create" };
7550
+ if (!input["internal-name"]) {
7551
+ const [firstUnnamed] = matches.filter((config) => config.internalName == null);
7552
+ if (firstUnnamed !== void 0) return {
7553
+ kind: "match",
7554
+ config: firstUnnamed
7555
+ };
7556
+ }
7557
+ return {
7558
+ kind: "ambiguous",
7559
+ candidates: matches
7560
+ };
7561
+ }
7562
+ /**
7563
+ * Resolve which existing workflow config a YAML entry should update, if any.
7564
+ *
7565
+ * Cascade order: internal-name → title → action-type → data-subject-type (when
7566
+ * provided) → region-list. A provided internal-name with zero matches creates a
7567
+ * new workflow instead of falling through to title. When internal-name is
7568
+ * omitted and the cascade still matches multiple configs, prefer the candidate
7569
+ * with a null internal name.
7570
+ *
7571
+ * @param input - Workflow config sync input
7572
+ * @param existingConfigs - Existing workflow configs in the org
7573
+ * @returns Match resolution
7574
+ */
7575
+ function resolveWorkflowConfigMatch(input, existingConfigs) {
7576
+ const internalName = input["internal-name"];
7577
+ if (internalName) {
7578
+ const byName = existingConfigs.filter((config) => config.internalName === internalName);
7579
+ const [onlyByName] = byName;
7580
+ if (byName.length === 1 && onlyByName !== void 0) return {
7581
+ kind: "match",
7582
+ config: onlyByName
7583
+ };
7584
+ if (byName.length === 0) return { kind: "create" };
7585
+ return continueCascade(byName, input);
7586
+ }
7587
+ return continueCascade(existingConfigs, input);
7588
+ }
7589
+ //#endregion
7590
+ //#region src/dsr-automation/syncWorkflowConfigs.ts
7591
+ /**
7592
+ * Sync workflow configs to Transcend.
7593
+ *
7594
+ * Matches each input using a cascading key: internal-name → title → action-type
7595
+ * → data-subject-type (when provided) → region-list. Missing configs are
7596
+ * created via `createWorkflow` (DSR only; starts as Draft with default
7597
+ * associations), then updated with the remaining YAML fields. Successfully
7598
+ * matched configs are claimed (removed from the match pool) so later YAML
7599
+ * entries can resolve remaining duplicates.
7600
+ *
7601
+ * @param client - GraphQL client
7602
+ * @param inputs - Workflow config inputs from YAML
7603
+ * @param options - Options
7604
+ * @returns True if run without error
7605
+ */
7606
+ async function syncWorkflowConfigs(client, inputs, options = {}) {
7607
+ const { logger } = options;
7608
+ logger?.info(`Syncing "${inputs.length}" workflow configs...`);
7609
+ let encounteredError = false;
7610
+ const needsSubjects = inputs.some((config) => config["data-subject-type"]);
7611
+ const needsAttributeKeys = inputs.some((config) => config["attribute-keys"]?.length);
7612
+ const [fetchedConfigs, actions] = await Promise.all([fetchAllWorkflowConfigs(client, {
7613
+ logger,
7614
+ workflowConfigType: WorkflowConfigType.DSR
7615
+ }), fetchAllActions(client, { logger })]);
7616
+ const existingConfigs = [...fetchedConfigs];
7617
+ let dataSubjects = [];
7618
+ if (needsSubjects) dataSubjects = await fetchAllDataSubjects(client, { logger });
7619
+ let attributeKeys = [];
7620
+ if (needsAttributeKeys) attributeKeys = await fetchAllRequestAttributeKeys(client, { logger });
7621
+ const actionByType = keyBy(actions, "type");
7622
+ const dataSubjectByType = keyBy(dataSubjects, "type");
7623
+ const attributeKeyByName = keyBy(attributeKeys, "name");
7624
+ await mapSeries(inputs, async (config) => {
7625
+ const label = workflowConfigInputLabel(config);
7626
+ try {
7627
+ if (config.type && config.type !== WorkflowConfigType.DSR) throw new Error(`Workflow config "${label}" has type "${config.type}". Only DSR workflow configs can be synced — preference management workflows have purpose-based semantics and must be managed in the Admin Dashboard.`);
7628
+ const resolution = resolveWorkflowConfigMatch(config, existingConfigs);
7629
+ if (resolution.kind === "ambiguous") throw new Error(`Found "${resolution.candidates.length}" workflow configs matching "${label}" after applying title, action-type, data-subject-type, and region-list. Add a unique internal-name or disambiguating region-list to sync this workflow.`);
7630
+ const existingConfig = resolution.kind === "match" ? resolution.config : void 0;
7631
+ if (existingConfig && existingConfig.workflowConfigType !== WorkflowConfigType.DSR) throw new Error(`Workflow config "${label}" has type "${existingConfig.workflowConfigType}". Only DSR workflow configs can be synced — preference management workflows have purpose-based semantics and must be managed in the Admin Dashboard.`);
7632
+ const expiryTime = config["expiry-time"];
7633
+ if (expiryTime && expiryTime.length > 0) {
7634
+ if (!expiryTime.some(({ region }) => region === "default")) throw new Error(`Workflow config "${label}" has an expiry-time list without a "default" region entry. A \`region: default\` entry is required.`);
7635
+ const invalidEntries = expiryTime.filter(({ value }) => value <= 0);
7636
+ if (invalidEntries.length > 0) throw new Error(`Workflow config "${label}" has expiry-time values that are not positive: ${invalidEntries.map(({ region, value }) => `${region}=${value}`).join(", ")}. All expiry times must be greater than 0 days.`);
7637
+ }
7638
+ let subjectId;
7639
+ if (config["data-subject-type"]) {
7640
+ const subject = dataSubjectByType[config["data-subject-type"]];
7641
+ if (!subject) throw new Error(`Failed to find data subject with type: ${config["data-subject-type"]}`);
7642
+ subjectId = subject.id;
7643
+ }
7644
+ if (!actionByType[config["action-type"]]) throw new Error(`Failed to find action with type: ${config["action-type"]}`);
7645
+ let attributeKeyIds;
7646
+ if (config["attribute-keys"] !== void 0) attributeKeyIds = config["attribute-keys"].map((name) => {
7647
+ const attributeKey = attributeKeyByName[name];
7648
+ if (!attributeKey) throw new Error(`Failed to find attribute key with name: ${name}`);
7649
+ return attributeKey.id;
7650
+ });
7651
+ let workflowConfigId;
7652
+ if (!existingConfig) {
7653
+ const internalName = config["internal-name"];
7654
+ const { createWorkflow: { workflowConfig: created } } = await makeGraphQLRequest(client, CREATE_WORKFLOW, {
7655
+ variables: { input: {
7656
+ title: config.title,
7657
+ actionType: config["action-type"],
7658
+ ...internalName ? { internalName } : {},
7659
+ workflowConfigType: WorkflowConfigType.DSR
7660
+ } },
7661
+ logger
7662
+ });
7663
+ workflowConfigId = created.id;
7664
+ existingConfigs.push({
7665
+ id: created.id,
7666
+ title: { defaultMessage: config.title },
7667
+ subtitle: null,
7668
+ description: null,
7669
+ internalName: created.internalName ?? internalName ?? null,
7670
+ workflowConfigVisibility: WorkflowConfigVisibility.Draft,
7671
+ workflowConfigType: WorkflowConfigType.DSR,
7672
+ collectDataSubjectRegions: null,
7673
+ regionList: config["region-list"] ?? [],
7674
+ expiryTime: null,
7675
+ action: { type: config["action-type"] },
7676
+ subject: subjectId ? {
7677
+ id: subjectId,
7678
+ type: config["data-subject-type"]
7679
+ } : null,
7680
+ WorkflowConfigAttributeKeys: null
7681
+ });
7682
+ logger?.info(`Successfully created workflow config "${label}" (${created.id})!`);
7683
+ } else workflowConfigId = existingConfig.id;
7684
+ await makeGraphQLRequest(client, UPDATE_WORKFLOW_CONFIG, {
7685
+ variables: { input: {
7686
+ workflowConfigId,
7687
+ ...config.title !== void 0 ? { title: config.title } : {},
7688
+ ...config.subtitle !== void 0 ? { subtitle: config.subtitle } : {},
7689
+ ...config.description !== void 0 ? { description: config.description } : {},
7690
+ ...config.visibility !== void 0 ? { workflowConfigVisibility: config.visibility } : {},
7691
+ ...config["internal-name"] !== void 0 ? { internalName: config["internal-name"] } : {},
7692
+ actionType: config["action-type"],
7693
+ ...config["collect-data-subject-regions"] !== void 0 ? { collectDataSubjectRegions: config["collect-data-subject-regions"] } : {},
7694
+ ...subjectId ? { subjectId } : {},
7695
+ ...config["region-list"] !== void 0 ? { regionList: config["region-list"] } : {},
7696
+ ...config["expiry-time"] !== void 0 ? { expiryTime: config["expiry-time"] } : {},
7697
+ ...attributeKeyIds !== void 0 ? { attributeKeyIds } : {}
7698
+ } },
7699
+ logger
7700
+ });
7701
+ if (existingConfig) {
7702
+ const claimedIndex = existingConfigs.findIndex((config) => config.id === existingConfig.id);
7703
+ if (claimedIndex >= 0) existingConfigs.splice(claimedIndex, 1);
7704
+ }
7705
+ logger?.info(`Successfully synced workflow config "${label}" (${workflowConfigId})!`);
7706
+ } catch (err) {
7707
+ encounteredError = true;
7708
+ logger?.error(`Failed to sync workflow config "${label}"! - ${err.message}`);
7709
+ }
7710
+ });
7711
+ logger?.info(`Synced "${inputs.length}" workflow configs!`);
7712
+ return !encounteredError;
7713
+ }
7714
+ //#endregion
7238
7715
  //#region src/dsr-automation/uploadSiloDiscoveryResults.ts
7239
7716
  const CHUNK_SIZE$2 = 1e3;
7240
7717
  /**
@@ -9682,6 +10159,6 @@ function createMonorepoPackageDefinition(name, directory) {
9682
10159
  };
9683
10160
  }
9684
10161
  //#endregion
9685
- export { AIRGAP_BUNDLE_AGGREGATE_ANALYTICS, AIRGAP_BUNDLE_TIMESERIES_ANALYTICS, ASSESSMENTS, ASSESSMENT_SECTION_FIELDS, ATTRIBUTE_KEYS_REQUESTS, ATTRIBUTE_VALUE_FIELDS, AssessmentAction, AssessmentNestedRule, AssessmentRiskLogic, AssessmentRule, AssessmentRuleWithOperands, AssessmentRuleWithoutOperands, BULK_REQUEST_FILES, CHANGE_REQUEST_DATA_SILO_STATUS, CODE_PACKAGES, CONSENT_MANAGER_ANALYTICS_DATA, CONSENT_PARTITIONS, COOKIES, COOKIE_STATS, CREATE_CODE_PACKAGE, CREATE_CONSENT_EXPERIENCE, CREATE_CONSENT_MANAGER, CREATE_CONSENT_PARTITION, CREATE_CONSENT_UI_THEME, CREATE_CONSENT_UI_VARIANT, CREATE_DATA_FLOWS, CREATE_DATA_SILOS, CREATE_DATA_SUBJECT, CREATE_ENRICHER, CREATE_IDENTIFIER, CREATE_PROCESSING_PURPOSE_SUB_CATEGORY, ColumnIdentifierMap, ColumnMetadataMap, ColumnPurposeMap, ConsentPreferenceResponse, DATAPOINT_EXPORT, DATA_FLOWS, DATA_FLOW_STATS, DATA_POINTS, DATA_POINT_COUNT, DATA_SILOS, DATA_SILOS_ENRICHED, DATA_SILO_EXPORT, DATA_SUBJECTS, DELETE_COOKIES, DELETE_DATA_FLOWS, DEPLOYED_PRIVACY_CENTER_URL, DEPLOY_CONSENT_MANAGER, DeletePreferenceRecordCliCsvRow, DeletePreferenceRecordsInput, DeletePreferenceRecordsResponse, ENRICHERS, EXPERIENCES, FETCH_CONSENT_MANAGER, FETCH_CONSENT_MANAGER_ID, FETCH_CONSENT_MANAGER_THEME, FETCH_CONSENT_UI_THEMES, FETCH_CONSENT_UI_VARIANTS, FETCH_PRIVACY_CENTER_ID, FailingPreferenceUpdates, FileFormatState, FileMetadataState, IMPORT_ONE_TRUST_ASSESSMENT_FORMS, INITIALIZER, IdentifierMetadataForPreference, MetadataMapping, NEW_IDENTIFIER_TYPES, NOOP_LOGGER, OWNER_FIELDS, POLICIES, PRIVACY_CENTER, PROCESSING_PURPOSE_SUB_CATEGORIES, PURPOSES, PendingSafePreferenceUpdates, PendingWithConflictPreferenceUpdates, PreferenceOptionValueInput, PreferenceState, PreferenceTopicSyncInput, PreferenceUpdateMap, PurposeInput, PurposeRowMapping, REDUCED_REQUESTS_FOR_DATA_SILO_COUNT, REMOVE_REQUEST_IDENTIFIERS, REQUEST_DATA_SILOS, REQUEST_ENRICHERS, REQUEST_FILES, REQUEST_IDENTIFIERS, RETRY_REQUEST_DATA_SILO, RETRY_REQUEST_ENRICHER, RETRY_TRANSIENT_MSGS, RequestIdentifiersResponse, RequestUploadReceipts, SERVICE_FIELDS, SKIP_REQUEST_ENRICHER, SOMBRA_VERSION, SUB_DATA_POINTS, SUB_DATA_POINTS_COUNT, SUB_DATA_POINTS_WITH_GUESSES, SYNC_ATTRIBUTE_TYPES, SkippedPreferenceUpdates, TEAM_FIELDS, TOGGLE_CONSENT_PRECEDENCE, TOGGLE_DATA_SUBJECT, TOGGLE_TELEMETRY_PARTITION_STRATEGY, TOGGLE_UNKNOWN_COOKIE_POLICY, TOGGLE_UNKNOWN_REQUEST_POLICY, TRACKING_PURPOSE_FIELDS, UPDATE_CODE_PACKAGES, UPDATE_CONSENT_EXPERIENCE, UPDATE_CONSENT_MANAGER_DOMAINS, UPDATE_CONSENT_MANAGER_PARTITION, UPDATE_CONSENT_MANAGER_THEME, UPDATE_CONSENT_MANAGER_TO_LATEST, UPDATE_CONSENT_MANAGER_VERSION, UPDATE_CONSENT_UI_THEME, UPDATE_CONSENT_UI_VARIANT, UPDATE_DATA_FLOWS, UPDATE_DATA_SILOS, UPDATE_DATA_SUBJECT, UPDATE_ENRICHER, UPDATE_IDENTIFIER, UPDATE_LOAD_OPTIONS, UPDATE_OR_CREATE_COOKIES, UPDATE_OR_CREATE_DATA_POINT, UPDATE_POLICIES, UPDATE_PRIVACY_CENTER, UPDATE_PROCESSING_PURPOSE_SUB_CATEGORIES, addMessagesToPromptRun, assumeRole, buildConsentChunks, buildTranscendGraphQLClient, buildTranscendGraphQLClientGeneric, checkIfPendingPreferenceUpdatesAreNoOp, checkIfPendingPreferenceUpdatesCauseConflict, consentWindowHasAny, convertToDataSubjectAllowlist, convertToDataSubjectBlockList, createActionItemCollection, createActionItems, createAgent, createAgentFile, createAgentFunction, createApiKey, createBusinessEntity, createDataCategory, createDataFlows, createDataSubject, createMonorepoPackageDefinition, createOrUpdatePreferenceOptionValues, createPreferenceAccessTokens, createProcessingPurpose, createPrompt, createPromptGroup, createPromptPartial, createRepository, createSoftwareDevelopmentKit, createSombraGotInstance, createTeam, createTranscendConsentGotInstance, createVendor, deleteApiKey, deployConsentManager, fetchActiveSiloDiscoPlugin, fetchAirgapBundleAggregateAnalytics, fetchAirgapBundleTimeseriesAnalytics, fetchAllActionItemCollections, fetchAllActionItems, fetchAllActions, fetchAllAgentFiles, fetchAllAgentFunctions, fetchAllAgents, fetchAllApiKeys, fetchAllAssessments, fetchAllAttributeValues, fetchAllAttributes, fetchAllBusinessEntities, fetchAllCatalogs, fetchAllCodePackages, fetchAllCookies, fetchAllDataCategories, fetchAllDataFlows, fetchAllDataPoints, fetchAllDataSilos, fetchAllDataSubjects, fetchAllEnrichers, fetchAllIdentifiers, fetchAllLargeLanguageModels, fetchAllMessages, fetchAllPolicies, fetchAllPreferenceOptionValues, fetchAllPreferenceTopics, fetchAllPrivacyCenters, fetchAllProcessingActivities, fetchAllProcessingPurposes, fetchAllPromptGroups, fetchAllPromptPartials, fetchAllPromptThreads, fetchAllPrompts, fetchAllPurposes, fetchAllPurposesAndPreferences, fetchAllRepositories, fetchAllRequestAttributeKeys, fetchAllRequestEnrichers, fetchAllRequestIdentifierMetadata, fetchAllRequestIdentifiers, fetchAllSiloDiscoveryResults, fetchAllSoftwareDevelopmentKits, fetchAllSubDataPoints, fetchAllTeams, fetchAllTemplates, fetchAllUsers, fetchAllVendors, fetchAndIndexCatalogs, fetchApiKeys, fetchConsentManager, fetchConsentManagerAnalyticsData, fetchConsentManagerExperiences, fetchConsentManagerId, fetchConsentManagerTheme, fetchConsentPreferences, fetchConsentPreferencesChunked, fetchConsentThemes, fetchConsentVariants, fetchEnrichedDataSilos, fetchIdentifiersAndCreateMissing, fetchParentOrganizationTeams, fetchPartitions, fetchPrivacyCenterId, fetchPrivacyCenterUrl, fetchPromptsWithVariables, fetchRequestDataSilo, fetchRequestDataSilos, fetchRequestDataSilosCount, fetchRequestFilesForRequest, findEarliestDayWithData, findLatestDayWithData, formatAttributeValues, formatRegions, getBoundsFromConsentFilter, getComparisonTimeForRecord, getPreferenceIdentifiersFromRow, getPreferenceMetadataFromRow, getPreferenceUpdatesFromRow, getPreferencesForIdentifiers, getUniquePreferenceIdentifierNamesFromRow, isTransientError, iterateConsentPages, loadReferenceData, loginUser, makeGraphQLRequest, parseAssessmentDisplayLogic, parseAssessmentRiskLogic, pickConsentChunkMode, reportPromptRun, resolveParentTeamIdsByName, retryRequestEnricher, setResourceAttributes, syncAction, syncActionItemCollections, syncActionItems, syncAgentFiles, syncAgentFunctions, syncAgents, syncAttribute, syncBusinessEntities, syncConsentManager, syncConsentManagerExperiences, syncConsentUiThemes, syncConsentUiVariants, syncCookies, syncDataCategories, syncDataFlows, syncDataSiloDependencies, syncDataSubject, syncEnricher, syncIdentifier, syncIntlMessages, syncPartitions, syncPolicies, syncPreferenceOptionValues, syncPreferenceTopics, syncPrivacyCenter, syncProcessingActivities, syncProcessingPurposes, syncPromptGroups, syncPromptPartials, syncPrompts, syncPurposes, syncRepositories, syncSoftwareDevelopmentKits, syncTeams, syncTemplate, syncVendors, transformPreferenceRecordToCsv, updateActionItem, updateActionItemCollection, updateAgentFiles, updateAgentFunctions, updateAgents, updateBusinessEntities, updateConsentManagerToLatest, updateDataCategories, updateDataFlows, updateIntlMessages, updateOrCreateCookies, updatePolicies, updateProcessingPurposes, updatePromptGroups, updatePromptPartials, updatePrompts, updateRepositories, updateSoftwareDevelopmentKits, updateTeam, updateVendors, uploadSiloDiscoveryResults, validateSombraVersion, withTransientRetry };
10162
+ export { AIRGAP_BUNDLE_AGGREGATE_ANALYTICS, AIRGAP_BUNDLE_TIMESERIES_ANALYTICS, ASSESSMENTS, ASSESSMENT_SECTION_FIELDS, ATTRIBUTE_KEYS_REQUESTS, ATTRIBUTE_VALUE_FIELDS, AssessmentAction, AssessmentNestedRule, AssessmentRiskLogic, AssessmentRule, AssessmentRuleWithOperands, AssessmentRuleWithoutOperands, BULK_REQUEST_FILES, CHANGE_REQUEST_DATA_SILO_STATUS, CODE_PACKAGES, CONSENT_MANAGER_ANALYTICS_DATA, CONSENT_PARTITIONS, COOKIES, COOKIE_STATS, CREATE_CODE_PACKAGE, CREATE_CONSENT_EXPERIENCE, CREATE_CONSENT_MANAGER, CREATE_CONSENT_PARTITION, CREATE_CONSENT_UI_THEME, CREATE_CONSENT_UI_VARIANT, CREATE_DATA_FLOWS, CREATE_DATA_SILOS, CREATE_DATA_SUBJECT, CREATE_ENRICHER, CREATE_IDENTIFIER, CREATE_PROCESSING_PURPOSE_SUB_CATEGORY, ColumnIdentifierMap, ColumnMetadataMap, ColumnPurposeMap, ConsentPreferenceResponse, DATAPOINT_EXPORT, DATA_FLOWS, DATA_FLOW_STATS, DATA_POINTS, DATA_POINT_COUNT, DATA_SILOS, DATA_SILOS_ENRICHED, DATA_SILO_EXPORT, DATA_SILO_SOMBRA, DATA_SUBJECTS, DELETE_COOKIES, DELETE_DATA_FLOWS, DELETE_PRIVACY_CENTER_FOOTER_LINKS, DEPLOYED_PRIVACY_CENTER_URL, DEPLOY_CONSENT_MANAGER, DeletePreferenceRecordCliCsvRow, DeletePreferenceRecordsInput, DeletePreferenceRecordsResponse, ENRICHERS, EXPERIENCES, FETCH_CONSENT_MANAGER, FETCH_CONSENT_MANAGER_ID, FETCH_CONSENT_MANAGER_THEME, FETCH_CONSENT_UI_THEMES, FETCH_CONSENT_UI_VARIANTS, FETCH_PRIVACY_CENTER_ID, FailingPreferenceUpdates, FileFormatState, FileMetadataState, IMPORT_ONE_TRUST_ASSESSMENT_FORMS, INITIALIZER, IdentifierMetadataForPreference, MetadataMapping, NEW_IDENTIFIER_TYPES, NOOP_LOGGER, OWNER_FIELDS, POLICIES, PRIVACY_CENTER, PROCESSING_PURPOSE_SUB_CATEGORIES, PURPOSES, PendingSafePreferenceUpdates, PendingWithConflictPreferenceUpdates, PreferenceOptionValueInput, PreferenceState, PreferenceTopicSyncInput, PreferenceUpdateMap, PurposeInput, PurposeRowMapping, REDUCED_REQUESTS_FOR_DATA_SILO_COUNT, REMOVE_REQUEST_IDENTIFIERS, REQUEST_DATA_SILOS, REQUEST_ENRICHERS, REQUEST_FILES, REQUEST_IDENTIFIERS, RETRY_REQUEST_DATA_SILO, RETRY_REQUEST_ENRICHER, RETRY_TRANSIENT_MSGS, RequestIdentifiersResponse, RequestUploadReceipts, SERVICE_FIELDS, SKIP_REQUEST_ENRICHER, SOMBRA_VERSION, SUB_DATA_POINTS, SUB_DATA_POINTS_COUNT, SUB_DATA_POINTS_WITH_GUESSES, SYNC_ATTRIBUTE_TYPES, SkippedPreferenceUpdates, TEAM_FIELDS, TOGGLE_CONSENT_PRECEDENCE, TOGGLE_DATA_SUBJECT, TOGGLE_TELEMETRY_PARTITION_STRATEGY, TOGGLE_UNKNOWN_COOKIE_POLICY, TOGGLE_UNKNOWN_REQUEST_POLICY, TRACKING_PURPOSE_FIELDS, UPDATE_CODE_PACKAGES, UPDATE_CONSENT_EXPERIENCE, UPDATE_CONSENT_MANAGER_DOMAINS, UPDATE_CONSENT_MANAGER_PARTITION, UPDATE_CONSENT_MANAGER_THEME, UPDATE_CONSENT_MANAGER_TO_LATEST, UPDATE_CONSENT_MANAGER_VERSION, UPDATE_CONSENT_UI_THEME, UPDATE_CONSENT_UI_VARIANT, UPDATE_DATA_FLOWS, UPDATE_DATA_SILOS, UPDATE_DATA_SUBJECT, UPDATE_ENRICHER, UPDATE_IDENTIFIER, UPDATE_LOAD_OPTIONS, UPDATE_OR_CREATE_COOKIES, UPDATE_OR_CREATE_DATA_POINT, UPDATE_POLICIES, UPDATE_PRIVACY_CENTER, UPDATE_PRIVACY_CENTER_FOOTER_LINKS, UPDATE_PROCESSING_PURPOSE_SUB_CATEGORIES, addMessagesToPromptRun, assumeRole, buildConsentChunks, buildTranscendGraphQLClient, buildTranscendGraphQLClientGeneric, checkIfPendingPreferenceUpdatesAreNoOp, checkIfPendingPreferenceUpdatesCauseConflict, consentWindowHasAny, convertToDataSubjectAllowlist, convertToDataSubjectBlockList, createActionItemCollection, createActionItems, createAgent, createAgentFile, createAgentFunction, createApiKey, createBusinessEntity, createDataCategory, createDataFlows, createDataSubject, createMonorepoPackageDefinition, createOrUpdatePreferenceOptionValues, createPreferenceAccessTokens, createProcessingPurpose, createPrompt, createPromptGroup, createPromptPartial, createRepository, createSoftwareDevelopmentKit, createSombraGotInstance, createTeam, createTranscendConsentGotInstance, createVendor, deleteApiKey, deployConsentManager, fetchActiveSiloDiscoPlugin, fetchAirgapBundleAggregateAnalytics, fetchAirgapBundleTimeseriesAnalytics, fetchAllActionItemCollections, fetchAllActionItems, fetchAllActions, fetchAllAgentFiles, fetchAllAgentFunctions, fetchAllAgents, fetchAllApiKeys, fetchAllAssessments, fetchAllAttributeValues, fetchAllAttributes, fetchAllBusinessEntities, fetchAllCatalogs, fetchAllCodePackages, fetchAllCookies, fetchAllDataCategories, fetchAllDataFlows, fetchAllDataPoints, fetchAllDataSilos, fetchAllDataSubjects, fetchAllEnrichers, fetchAllIdentifiers, fetchAllLargeLanguageModels, fetchAllMessages, fetchAllPolicies, fetchAllPreferenceOptionValues, fetchAllPreferenceTopics, fetchAllPrivacyCenters, fetchAllProcessingActivities, fetchAllProcessingPurposes, fetchAllPromptGroups, fetchAllPromptPartials, fetchAllPromptThreads, fetchAllPrompts, fetchAllPurposes, fetchAllPurposesAndPreferences, fetchAllRepositories, fetchAllRequestAttributeKeys, fetchAllRequestEnrichers, fetchAllRequestIdentifierMetadata, fetchAllRequestIdentifiers, fetchAllSiloDiscoveryResults, fetchAllSoftwareDevelopmentKits, fetchAllSubDataPoints, fetchAllTeams, fetchAllTemplates, fetchAllUsers, fetchAllVendors, fetchAllWorkflowConfigs, fetchAndIndexCatalogs, fetchApiKeys, fetchConsentManager, fetchConsentManagerAnalyticsData, fetchConsentManagerExperiences, fetchConsentManagerId, fetchConsentManagerTheme, fetchConsentPreferences, fetchConsentPreferencesChunked, fetchConsentThemes, fetchConsentVariants, fetchEnrichedDataSilos, fetchIdentifiersAndCreateMissing, fetchParentOrganizationTeams, fetchPartitions, fetchPrivacyCenterId, fetchPrivacyCenterUrl, fetchPromptsWithVariables, fetchRequestDataSilo, fetchRequestDataSilos, fetchRequestDataSilosCount, fetchRequestFilesForRequest, findEarliestDayWithData, findLatestDayWithData, formatAttributeValues, formatRegions, getBoundsFromConsentFilter, getComparisonTimeForRecord, getPreferenceIdentifiersFromRow, getPreferenceMetadataFromRow, getPreferenceUpdatesFromRow, getPreferencesForIdentifiers, getUniquePreferenceIdentifierNamesFromRow, isTransientError, iterateConsentPages, loadReferenceData, loginUser, makeGraphQLRequest, parseAssessmentDisplayLogic, parseAssessmentRiskLogic, pickConsentChunkMode, reportPromptRun, resolveDisplayedChildOrganizationIds, resolveParentTeamIdsByName, resolveWorkflowConfigMatch, retryRequestEnricher, setResourceAttributes, syncAction, syncActionItemCollections, syncActionItems, syncAgentFiles, syncAgentFunctions, syncAgents, syncAttribute, syncBusinessEntities, syncConsentManager, syncConsentManagerExperiences, syncConsentUiThemes, syncConsentUiVariants, syncCookies, syncDataCategories, syncDataFlows, syncDataSiloDependencies, syncDataSubject, syncEnricher, syncIdentifier, syncIntlMessages, syncPartitions, syncPolicies, syncPreferenceOptionValues, syncPreferenceTopics, syncPrivacyCenter, syncPrivacyCenterFooterLinks, syncProcessingActivities, syncProcessingPurposes, syncPromptGroups, syncPromptPartials, syncPrompts, syncPurposes, syncRepositories, syncSoftwareDevelopmentKits, syncTeams, syncTemplate, syncVendors, syncWorkflowConfigs, transformPreferenceRecordToCsv, updateActionItem, updateActionItemCollection, updateAgentFiles, updateAgentFunctions, updateAgents, updateBusinessEntities, updateConsentManagerToLatest, updateDataCategories, updateDataFlows, updateIntlMessages, updateOrCreateCookies, updatePolicies, updateProcessingPurposes, updatePromptGroups, updatePromptPartials, updatePrompts, updateRepositories, updateSoftwareDevelopmentKits, updateTeam, updateVendors, uploadSiloDiscoveryResults, validateSombraVersion, withTransientRetry, workflowConfigInputLabel, workflowConfigMatchKey, workflowRegionListKey };
9686
10163
 
9687
10164
  //# sourceMappingURL=index.mjs.map